aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Novillo <dnovillo@redhat.com>2004-05-12 13:36:30 +0000
committerDiego Novillo <dnovillo@redhat.com>2004-05-12 13:36:30 +0000
commit43ed13395450d0e35600d698113efd803b8b58d0 (patch)
tree7f913faedc93dac9c4598005e52040e5b1d3bdba
parent65f66255bb56ba8329b35e58c4b51f3f289c3a25 (diff)
Mainline merge as of 2004-05-11.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/tree-ssa-20020619-branch@81743 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--ChangeLog17
-rw-r--r--MAINTAINERS3
-rw-r--r--config/acx.m431
-rwxr-xr-xconfigure183
-rw-r--r--gcc/ChangeLog1032
-rw-r--r--gcc/ChangeLog.tree-ssa21
-rw-r--r--gcc/Makefile.in3
-rw-r--r--gcc/ada/50system.ads163
-rw-r--r--gcc/ada/59system.ads164
-rw-r--r--gcc/ada/5qsystem.ads15
-rw-r--r--gcc/ada/5vinmaop.adb5
-rw-r--r--gcc/ada/5vsystem.ads2
-rw-r--r--gcc/ada/5xsystem.ads2
-rw-r--r--gcc/ada/ChangeLog479
-rw-r--r--gcc/ada/Make-lang.in715
-rw-r--r--gcc/ada/Makefile.in308
-rw-r--r--gcc/ada/a-exexpr.adb8
-rw-r--r--gcc/ada/a-tags.adb32
-rw-r--r--gcc/ada/a-tags.ads4
-rw-r--r--gcc/ada/a-textio.adb6
-rw-r--r--gcc/ada/adaint.c35
-rw-r--r--gcc/ada/adaint.h7
-rw-r--r--gcc/ada/checks.adb10
-rw-r--r--gcc/ada/clean.adb399
-rw-r--r--gcc/ada/cstand.adb5
-rw-r--r--gcc/ada/decl.c13
-rw-r--r--gcc/ada/einfo.ads15
-rw-r--r--gcc/ada/erroutc.adb8
-rw-r--r--gcc/ada/erroutc.ads10
-rw-r--r--gcc/ada/eval_fat.adb4
-rw-r--r--gcc/ada/exp_attr.adb26
-rw-r--r--gcc/ada/exp_ch2.adb9
-rw-r--r--gcc/ada/exp_ch5.adb10
-rw-r--r--gcc/ada/exp_ch7.adb20
-rw-r--r--gcc/ada/exp_ch9.adb15
-rw-r--r--gcc/ada/exp_disp.adb26
-rw-r--r--gcc/ada/exp_fixd.adb14
-rw-r--r--gcc/ada/frontend.adb7
-rw-r--r--gcc/ada/g-os_lib.ads15
-rw-r--r--gcc/ada/g-regpat.adb22
-rw-r--r--gcc/ada/g-regpat.ads208
-rw-r--r--gcc/ada/gnat-style.texi10
-rw-r--r--gcc/ada/gnat_rm.texi53
-rw-r--r--gcc/ada/gnat_ugn.texi15
-rw-r--r--gcc/ada/gnatbind.adb2
-rw-r--r--gcc/ada/gnatcmd.adb5
-rw-r--r--gcc/ada/gnatls.adb2
-rw-r--r--gcc/ada/init.c90
-rw-r--r--gcc/ada/lang-specs.h9
-rw-r--r--gcc/ada/lib-writ.adb9
-rw-r--r--gcc/ada/make.adb722
-rw-r--r--gcc/ada/make.ads7
-rw-r--r--gcc/ada/makeusg.adb11
-rw-r--r--gcc/ada/makeutl.adb154
-rw-r--r--gcc/ada/makeutl.ads43
-rw-r--r--gcc/ada/misc.c4
-rw-r--r--gcc/ada/mlib-prj.adb4
-rw-r--r--gcc/ada/mlib-utl.adb8
-rw-r--r--gcc/ada/opt.ads19
-rw-r--r--gcc/ada/osint.adb21
-rw-r--r--gcc/ada/osint.ads18
-rw-r--r--gcc/ada/prj-attr.adb58
-rw-r--r--gcc/ada/prj-attr.ads15
-rw-r--r--gcc/ada/prj-com.ads1
-rw-r--r--gcc/ada/prj-dect.adb51
-rw-r--r--gcc/ada/prj-env.adb24
-rw-r--r--gcc/ada/prj-makr.adb211
-rw-r--r--gcc/ada/prj-nmsc.adb436
-rw-r--r--gcc/ada/prj-pp.adb13
-rw-r--r--gcc/ada/prj-proc.adb24
-rw-r--r--gcc/ada/prj-strt.adb54
-rw-r--r--gcc/ada/prj-strt.ads5
-rw-r--r--gcc/ada/prj-tree.adb49
-rw-r--r--gcc/ada/prj-tree.ads13
-rw-r--r--gcc/ada/prj-util.adb23
-rw-r--r--gcc/ada/prj-util.ads7
-rw-r--r--gcc/ada/prj.adb14
-rw-r--r--gcc/ada/prj.ads3
-rw-r--r--gcc/ada/raise.c2
-rw-r--r--gcc/ada/restrict.adb6
-rw-r--r--gcc/ada/restrict.ads4
-rw-r--r--gcc/ada/rtsfind.adb43
-rw-r--r--gcc/ada/rtsfind.ads6
-rw-r--r--gcc/ada/s-addope.adb2
-rw-r--r--gcc/ada/s-auxdec.ads12
-rw-r--r--gcc/ada/s-inmaop.ads36
-rw-r--r--gcc/ada/s-rident.ads23
-rw-r--r--gcc/ada/s-thread.ads150
-rw-r--r--gcc/ada/scn.adb26
-rw-r--r--gcc/ada/scng.adb12
-rw-r--r--gcc/ada/sem_aggr.adb2
-rw-r--r--gcc/ada/sem_attr.adb45
-rw-r--r--gcc/ada/sem_ch10.adb5
-rw-r--r--gcc/ada/sem_ch13.adb33
-rw-r--r--gcc/ada/sem_ch3.adb9
-rw-r--r--gcc/ada/sem_ch4.adb137
-rw-r--r--gcc/ada/sem_ch6.adb16
-rw-r--r--gcc/ada/sem_disp.adb39
-rw-r--r--gcc/ada/sem_dist.adb17
-rw-r--r--gcc/ada/sem_elim.adb113
-rw-r--r--gcc/ada/sem_prag.adb117
-rw-r--r--gcc/ada/sem_prag.ads13
-rw-r--r--gcc/ada/sem_res.adb2
-rw-r--r--gcc/ada/sem_util.adb109
-rw-r--r--gcc/ada/sem_util.ads38
-rw-r--r--gcc/ada/sem_warn.adb3
-rw-r--r--gcc/ada/snames.adb3
-rw-r--r--gcc/ada/snames.ads729
-rw-r--r--gcc/ada/stand.ads5
-rw-r--r--gcc/ada/switch-c.adb2
-rw-r--r--gcc/ada/switch-m.adb12
-rw-r--r--gcc/ada/usage.adb6
-rw-r--r--gcc/ada/utils.c2
-rw-r--r--gcc/ada/vms_data.ads30
-rw-r--r--gcc/attribs.c21
-rw-r--r--gcc/basic-block.h2
-rw-r--r--gcc/bb-reorder.c2
-rw-r--r--gcc/builtins.c123
-rw-r--r--gcc/c-common.c10
-rw-r--r--gcc/c-common.h2
-rw-r--r--gcc/c-decl.c43
-rw-r--r--gcc/c-incpath.c8
-rw-r--r--gcc/c-opts.c8
-rw-r--r--gcc/c-pragma.c3
-rw-r--r--gcc/c-typeck.c15
-rw-r--r--gcc/c.opt6
-rw-r--r--gcc/cfglayout.c3
-rw-r--r--gcc/cgraph.c24
-rw-r--r--gcc/cgraphunit.c35
-rw-r--r--gcc/combine.c27
-rw-r--r--gcc/common.opt4
-rw-r--r--gcc/config.gcc48
-rw-r--r--gcc/config.in4
-rw-r--r--gcc/config/alpha/alpha.c2
-rw-r--r--gcc/config/alpha/alpha.md6
-rw-r--r--gcc/config/alpha/ev4.md2
-rw-r--r--gcc/config/alpha/ev5.md6
-rw-r--r--gcc/config/alpha/ev6.md2
-rw-r--r--gcc/config/alpha/freebsd.h1
-rw-r--r--gcc/config/alpha/osf.h8
-rw-r--r--gcc/config/alpha/xm-vms.h14
-rw-r--r--gcc/config/arm/arm-cores.def111
-rw-r--r--gcc/config/arm/arm-protos.h2
-rw-r--r--gcc/config/arm/arm.c421
-rw-r--r--gcc/config/arm/arm.h248
-rw-r--r--gcc/config/arm/arm.md22
-rw-r--r--gcc/config/arm/crti.asm4
-rw-r--r--gcc/config/arm/crtn.asm6
-rw-r--r--gcc/config/arm/freebsd.h1
-rw-r--r--gcc/config/arm/iwmmxt.md4
-rw-r--r--gcc/config/arm/vfp.md4
-rw-r--r--gcc/config/c4x/c4x.c2
-rw-r--r--gcc/config/c4x/c4x.md4
-rw-r--r--gcc/config/cris/cris.c2
-rw-r--r--gcc/config/darwin-c.c27
-rw-r--r--gcc/config/fr30/fr30.h2
-rw-r--r--gcc/config/frv/frv-protos.h4
-rw-r--r--gcc/config/frv/frv.c63
-rw-r--r--gcc/config/frv/frv.h14
-rw-r--r--gcc/config/frv/frv.md171
-rw-r--r--gcc/config/h8300/h8300.c2
-rw-r--r--gcc/config/i386/cygming.h21
-rw-r--r--gcc/config/i386/i386-protos.h3
-rw-r--r--gcc/config/i386/i386.c67
-rw-r--r--gcc/config/i386/i386.md725
-rw-r--r--gcc/config/i386/winnt.c5
-rw-r--r--gcc/config/ia64/freebsd.h1
-rw-r--r--gcc/config/ia64/itanium2.md4
-rw-r--r--gcc/config/ia64/t-ia642
-rw-r--r--gcc/config/ip2k/ip2k.c4
-rw-r--r--gcc/config/mips/5500.md60
-rw-r--r--gcc/config/mips/7000.md4
-rw-r--r--gcc/config/mips/mips.c605
-rw-r--r--gcc/config/mips/mips.h24
-rw-r--r--gcc/config/mips/mips.md1034
-rw-r--r--gcc/config/mips/sb1.md10
-rw-r--r--gcc/config/mips/sr71k.md2
-rw-r--r--gcc/config/pa/pa.c2
-rw-r--r--gcc/config/pa/pa.md56
-rw-r--r--gcc/config/rs6000/altivec-defs.h27
-rw-r--r--gcc/config/rs6000/altivec.h58
-rw-r--r--gcc/config/rs6000/altivec.md10
-rw-r--r--gcc/config/rs6000/rs6000-protos.h5
-rw-r--r--gcc/config/rs6000/rs6000.c456
-rw-r--r--gcc/config/rs6000/rs6000.h104
-rw-r--r--gcc/config/rs6000/rs6000.md43
-rw-r--r--gcc/config/rs6000/spe.md2
-rw-r--r--gcc/config/rs6000/sysv4.h9
-rw-r--r--gcc/config/s390/s390-protos.h5
-rw-r--r--gcc/config/s390/s390.c376
-rw-r--r--gcc/config/s390/s390.h28
-rw-r--r--gcc/config/s390/s390.md370
-rw-r--r--gcc/config/s390/t-tpf2
-rw-r--r--gcc/config/sh/elf.h2
-rw-r--r--gcc/config/sh/sh-protos.h3
-rw-r--r--gcc/config/sh/sh.c96
-rw-r--r--gcc/config/sh/sh.h1
-rw-r--r--gcc/config/sh/sh.md4
-rw-r--r--gcc/config/sparc/freebsd.h1
-rw-r--r--gcc/config/sparc/linux64.h4
-rw-r--r--gcc/config/sparc/sol2-bi.h7
-rw-r--r--gcc/config/sparc/sparc-protos.h1
-rw-r--r--gcc/config/sparc/sparc.c33
-rw-r--r--gcc/config/sparc/sparc.md26
-rw-r--r--gcc/config/t-linux2
-rwxr-xr-xgcc/configure65
-rw-r--r--gcc/configure.ac28
-rw-r--r--gcc/convert.c47
-rw-r--r--gcc/coverage.c4
-rw-r--r--gcc/cp/ChangeLog24
-rw-r--r--gcc/cp/call.c6
-rw-r--r--gcc/cp/class.c2
-rw-r--r--gcc/cp/cp-tree.h4
-rw-r--r--gcc/cp/decl.c32
-rw-r--r--gcc/cp/decl2.c34
-rw-r--r--gcc/cp/friend.c5
-rw-r--r--gcc/cp/pt.c6
-rw-r--r--gcc/cp/rtti.c2
-rw-r--r--gcc/cp/typeck.c8
-rw-r--r--gcc/cppfiles.c17
-rw-r--r--gcc/cpplib.h3
-rw-r--r--gcc/cse.c20
-rw-r--r--gcc/diagnostic.c6
-rw-r--r--gcc/doc/cpp.texi26
-rw-r--r--gcc/doc/cppopts.texi11
-rw-r--r--gcc/doc/hostconfig.texi9
-rw-r--r--gcc/doc/install.texi7
-rw-r--r--gcc/doc/invoke.texi148
-rw-r--r--gcc/doc/md.texi3
-rw-r--r--gcc/dojump.c88
-rw-r--r--gcc/dwarf2out.c4
-rw-r--r--gcc/emit-rtl.c6
-rw-r--r--gcc/expr.c20
-rw-r--r--gcc/final.c2
-rw-r--r--gcc/fixinc/fixincl.x15
-rw-r--r--gcc/fixinc/inclhack.def3
-rw-r--r--gcc/flags.h7
-rw-r--r--gcc/flow.c49
-rw-r--r--gcc/fold-const.c174
-rw-r--r--gcc/function.c99
-rw-r--r--gcc/function.h2
-rw-r--r--gcc/gcc.c16
-rw-r--r--gcc/gcc.h4
-rw-r--r--gcc/gcse.c25
-rw-r--r--gcc/genopinit.c4
-rw-r--r--gcc/ggc-zone.c31
-rw-r--r--gcc/ifcvt.c4
-rw-r--r--gcc/integrate.c20
-rw-r--r--gcc/java/ChangeLog63
-rw-r--r--gcc/java/ChangeLog.tree-ssa8
-rw-r--r--gcc/java/builtins.c12
-rw-r--r--gcc/java/class.c60
-rw-r--r--gcc/java/decl.c3
-rw-r--r--gcc/java/expr.c15
-rw-r--r--gcc/java/gjavah.c7
-rw-r--r--gcc/java/java-tree.h2
-rw-r--r--gcc/java/parse.y74
-rw-r--r--gcc/loop-doloop.c17
-rw-r--r--gcc/optabs.c6
-rw-r--r--gcc/optabs.h11
-rw-r--r--gcc/opts.c9
-rw-r--r--gcc/passes.c4
-rw-r--r--gcc/pretty-print.c2
-rw-r--r--gcc/read-rtl.c24
-rw-r--r--gcc/reg-stack.c184
-rw-r--r--gcc/reload1.c40
-rw-r--r--gcc/reorg.c8
-rw-r--r--gcc/rtl.h6
-rw-r--r--gcc/simplify-rtx.c226
-rw-r--r--gcc/testsuite/ChangeLog132
-rw-r--r--gcc/testsuite/g++.dg/ext/altivec-8.C8
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20010518-1.c2
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20040331-1.c8
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20040409-2.c12
-rw-r--r--gcc/testsuite/gcc.dg/altivec-13.c8
-rw-r--r--gcc/testsuite/gcc.dg/builtins-25.c188
-rw-r--r--gcc/testsuite/gcc.dg/builtins-29.c96
-rw-r--r--gcc/testsuite/gcc.dg/builtins-33.c17
-rw-r--r--gcc/testsuite/gcc.dg/builtins-34.c22
-rw-r--r--gcc/testsuite/gcc.dg/i386-387-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/i386-387-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/i386-387-5.c5
-rw-r--r--gcc/testsuite/gcc.dg/i386-387-6.c4
-rw-r--r--gcc/testsuite/gcc.dg/sibcall-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/sibcall-4.c2
-rw-r--r--gcc/testsuite/gcc.dg/sibcall-6.c2
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-integral-1.c53
-rw-r--r--gcc/testsuite/objc.dg/image-info.m2
-rw-r--r--gcc/toplev.c6
-rw-r--r--gcc/tree-cfg.c2
-rw-r--r--gcc/tree.c45
-rw-r--r--gcc/tree.h8
-rw-r--r--gcc/varasm.c2
-rw-r--r--gcc/version.c2
-rw-r--r--gcc/vmsdbgout.c42
-rw-r--r--include/ChangeLog41
-rw-r--r--include/demangle.h2
-rw-r--r--libiberty/ChangeLog5
-rw-r--r--libiberty/mkstemps.c6
-rw-r--r--libjava/ChangeLog417
-rw-r--r--libjava/Makefile.am9
-rw-r--r--libjava/Makefile.in22
-rw-r--r--libjava/defineclass.cc8
-rw-r--r--libjava/gnu/classpath/ServiceFactory.java8
-rw-r--r--libjava/gnu/java/awt/BitwiseXORComposite.java2
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java4
-rw-r--r--libjava/gnu/java/beans/BeanInfoEmbryo.java15
-rw-r--r--libjava/gnu/java/beans/info/ComponentBeanInfo.java5
-rw-r--r--libjava/gnu/java/io/Base64InputStream.java3
-rw-r--r--libjava/gnu/java/nio/FileLockImpl.java4
-rw-r--r--libjava/gnu/java/nio/SocketChannelImpl.java13
-rw-r--r--libjava/gnu/java/nio/channels/FileChannelImpl.java5
-rw-r--r--libjava/gnu/java/nio/charset/UTF_16Decoder.java18
-rw-r--r--libjava/gnu/java/security/der/DERReader.java8
-rw-r--r--libjava/gnu/java/security/der/DERWriter.java9
-rw-r--r--libjava/gnu/java/security/provider/DSAKeyPairGenerator.java10
-rw-r--r--libjava/gnu/java/security/provider/DSAParameters.java1
-rw-r--r--libjava/gnu/java/text/CharacterBreakIterator.java2
-rw-r--r--libjava/gnu/java/text/LineBreakIterator.java1
-rw-r--r--libjava/gnu/java/text/SentenceBreakIterator.java1
-rw-r--r--libjava/gnu/java/text/WordBreakIterator.java1
-rw-r--r--libjava/gnu/java/util/DoubleEnumeration.java1
-rw-r--r--libjava/gnu/java/util/prefs/NodeReader.java8
-rw-r--r--libjava/java/awt/Color.java13
-rw-r--r--libjava/java/awt/ColorPaintContext.java114
-rw-r--r--libjava/java/awt/FileDialog.java3
-rw-r--r--libjava/java/awt/SystemColor.java6
-rw-r--r--libjava/java/awt/TextComponent.java7
-rw-r--r--libjava/java/awt/image/ColorModel.java8
-rw-r--r--libjava/java/awt/image/ComponentSampleModel.java2
-rw-r--r--libjava/java/io/BufferedReader.java11
-rw-r--r--libjava/java/io/FilePermission.java1
-rw-r--r--libjava/java/lang/ClassLoader.java8
-rw-r--r--libjava/java/lang/Throwable.java8
-rw-r--r--libjava/java/math/BigDecimal.java1
-rw-r--r--libjava/java/net/NetworkInterface.java14
-rw-r--r--libjava/java/net/URL.java5
-rw-r--r--libjava/java/net/URLStreamHandler.java3
-rw-r--r--libjava/java/nio/ByteBuffer.java41
-rw-r--r--libjava/java/nio/CharBuffer.java43
-rw-r--r--libjava/java/nio/DoubleBuffer.java43
-rw-r--r--libjava/java/nio/FloatBuffer.java43
-rw-r--r--libjava/java/nio/IntBuffer.java43
-rw-r--r--libjava/java/nio/LongBuffer.java43
-rw-r--r--libjava/java/nio/ShortBuffer.java43
-rw-r--r--libjava/java/security/SecureRandom.java9
-rw-r--r--libjava/java/security/Security.java2
-rw-r--r--libjava/java/security/UnresolvedPermission.java1
-rw-r--r--libjava/java/security/interfaces/DSAKeyPairGenerator.java4
-rw-r--r--libjava/java/security/interfaces/DSAPrivateKey.java4
-rw-r--r--libjava/java/security/interfaces/DSAPublicKey.java4
-rw-r--r--libjava/java/security/interfaces/RSAPrivateKey.java4
-rw-r--r--libjava/java/security/interfaces/RSAPublicKey.java4
-rw-r--r--libjava/java/text/AttributedString.java3
-rw-r--r--libjava/java/text/AttributedStringIterator.java8
-rw-r--r--libjava/java/text/Collator.java4
-rw-r--r--libjava/java/text/DecimalFormat.java366
-rw-r--r--libjava/java/text/DecimalFormatSymbols.java6
-rw-r--r--libjava/java/text/Format.java5
-rw-r--r--libjava/java/text/FormatCharacterIterator.java469
-rw-r--r--libjava/java/text/MessageFormat.java195
-rw-r--r--libjava/java/text/NumberFormat.java2
-rw-r--r--libjava/java/text/RuleBasedCollator.java2
-rw-r--r--libjava/java/text/SimpleDateFormat.java258
-rw-r--r--libjava/java/util/Arrays.java4
-rw-r--r--libjava/java/util/Calendar.java33
-rw-r--r--libjava/java/util/Date.java1
-rw-r--r--libjava/java/util/HashMap.java13
-rw-r--r--libjava/java/util/ResourceBundle.java3
-rw-r--r--libjava/java/util/SimpleTimeZone.java233
-rw-r--r--libjava/java/util/logging/Level.java2
-rw-r--r--libjava/java/util/prefs/AbstractPreferences.java2
-rw-r--r--libjava/java/util/regex/Pattern.java6
-rw-r--r--libjava/java/util/zip/ZipEntry.java12
-rw-r--r--libjava/javax/imageio/spi/ImageReaderWriterSpi.java2
-rw-r--r--libjava/javax/imageio/stream/ImageInputStream.java1
-rw-r--r--libjava/javax/naming/CompoundName.java2
-rw-r--r--libjava/javax/swing/AbstractButton.java10
-rw-r--r--libjava/javax/swing/ActionMap.java1
-rw-r--r--libjava/javax/swing/DefaultBoundedRangeModel.java2
-rw-r--r--libjava/javax/swing/DefaultButtonModel.java6
-rw-r--r--libjava/javax/swing/DefaultListModel.java5
-rw-r--r--libjava/javax/swing/ImageIcon.java7
-rw-r--r--libjava/javax/swing/JComboBox.java5
-rw-r--r--libjava/javax/swing/JComponent.java9
-rw-r--r--libjava/javax/swing/JFrame.java2
-rw-r--r--libjava/javax/swing/JInternalFrame.java5
-rw-r--r--libjava/javax/swing/JList.java2
-rw-r--r--libjava/javax/swing/JMenuBar.java6
-rw-r--r--libjava/javax/swing/JMenuItem.java5
-rw-r--r--libjava/javax/swing/JOptionPane.java4
-rw-r--r--libjava/javax/swing/JProgressBar.java4
-rw-r--r--libjava/javax/swing/JRootPane.java6
-rw-r--r--libjava/javax/swing/JScrollBar.java4
-rw-r--r--libjava/javax/swing/JScrollPane.java5
-rw-r--r--libjava/javax/swing/JSeparator.java2
-rw-r--r--libjava/javax/swing/JSlider.java9
-rw-r--r--libjava/javax/swing/JTabbedPane.java4
-rw-r--r--libjava/javax/swing/JTable.java12
-rw-r--r--libjava/javax/swing/JTextField.java5
-rw-r--r--libjava/javax/swing/JToolBar.java4
-rw-r--r--libjava/javax/swing/JToolTip.java3
-rw-r--r--libjava/javax/swing/JTree.java17
-rw-r--r--libjava/javax/swing/JViewport.java7
-rw-r--r--libjava/javax/swing/JWindow.java4
-rw-r--r--libjava/javax/swing/KeyStroke.java3
-rw-r--r--libjava/javax/swing/ListModel.java2
-rw-r--r--libjava/javax/swing/LookAndFeel.java3
-rw-r--r--libjava/javax/swing/Popup.java4
-rw-r--r--libjava/javax/swing/SwingUtilities.java8
-rw-r--r--libjava/javax/swing/Timer.java4
-rw-r--r--libjava/javax/swing/ToolTipManager.java1
-rw-r--r--libjava/javax/swing/UIDefaults.java11
-rw-r--r--libjava/javax/swing/border/TitledBorder.java4
-rw-r--r--libjava/javax/swing/filechooser/FileSystemView.java3
-rw-r--r--libjava/javax/swing/plaf/basic/BasicArrowButton.java2
-rw-r--r--libjava/javax/swing/plaf/basic/BasicButtonListener.java5
-rw-r--r--libjava/javax/swing/plaf/basic/BasicButtonUI.java11
-rw-r--r--libjava/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java2
-rw-r--r--libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java2
-rw-r--r--libjava/javax/swing/plaf/basic/BasicLabelUI.java2
-rw-r--r--libjava/javax/swing/plaf/basic/BasicMenuItemUI.java15
-rw-r--r--libjava/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java8
-rw-r--r--libjava/javax/swing/plaf/basic/BasicRootPaneUI.java8
-rw-r--r--libjava/javax/swing/plaf/basic/BasicScrollBarUI.java3
-rw-r--r--libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java2
-rw-r--r--libjava/javax/swing/plaf/basic/BasicSliderUI.java7
-rw-r--r--libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java9
-rw-r--r--libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java4
-rw-r--r--libjava/javax/swing/table/DefaultTableCellRenderer.java3
-rw-r--r--libjava/javax/swing/table/JTableHeader.java21
-rw-r--r--libjava/javax/swing/table/TableColumn.java5
-rw-r--r--libjava/javax/swing/text/AbstractDocument.java2
-rw-r--r--libjava/javax/swing/text/DefaultCaret.java6
-rw-r--r--libjava/javax/swing/text/StyledEditorKit.java5
-rw-r--r--libjava/javax/swing/tree/DefaultTreeCellEditor.java4
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c2
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c34
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c43
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c4
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c2
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c22
-rw-r--r--libjava/jni/gtk-peer/gthread-jni.c4
-rw-r--r--libjava/libltdl/ChangeLog6
-rw-r--r--libjava/libltdl/acinclude.m42
-rw-r--r--libjava/libltdl/aclocal.m42
-rwxr-xr-xlibjava/libltdl/configure2
-rw-r--r--libjava/testsuite/ChangeLog2142
-rw-r--r--libjava/testsuite/lib/libjava.exp28
-rw-r--r--libjava/testsuite/libjava.jacks/jacks.xfail1305
-rw-r--r--libjava/testsuite/libjava.jar/jar.exp2
-rw-r--r--libjava/testsuite/libjava.jni/jni.exp45
-rw-r--r--libjava/testsuite/libjava.jni/pr11951.java4
-rw-r--r--libjava/testsuite/libjava.lang/MathBuiltin.java25
-rw-r--r--libobjc/ChangeLog4
-rw-r--r--libobjc/Makefile.in2
-rw-r--r--libstdc++-v3/ChangeLog47
-rw-r--r--libstdc++-v3/acinclude.m42
-rwxr-xr-xlibstdc++-v3/configure6
-rw-r--r--libstdc++-v3/include/backward/iterator.h29
-rw-r--r--libstdc++-v3/include/bits/boost_concept_check.h26
-rw-r--r--libstdc++-v3/include/bits/locale_classes.h27
-rw-r--r--libstdc++-v3/libsupc++/tinfo.h28
-rw-r--r--libstdc++-v3/po/string_literals.cc9
-rw-r--r--libstdc++-v3/src/locale.cc35
-rw-r--r--libstdc++-v3/src/locale_init.cc18
-rw-r--r--libstdc++-v3/src/localename.cc48
-rw-r--r--maintainer-scripts/ChangeLog11
-rw-r--r--maintainer-scripts/crontab10
469 files changed, 13431 insertions, 10144 deletions
diff --git a/ChangeLog b/ChangeLog
index 116abfe41ad..1e078155926 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2004-05-04 Vladimir Makarov <vmakarov@redhat.com>
+
+ * MAINTAINERS (Various Maintainers): Add myself.
+
+2004-04-30 Brian Ford <ford@vss.fsi.com>
+
+ * MAINTAINERS (Write After Approval): Add myself.
+
+2004-04-29 Uros Bizjak <uros@kss-loka.si>
+
+ * MAINTAINERS (Write After Approval): Add myself.
+
+2004-04-28 Paolo Bonzini <bonzini@gnu.org>
+
+ * config/acx.m4: Fix fastcompare support for new-bootstrap.
+ * configure: Regenerate.
+
2004-04-27 Paolo Bonzini <bonzini@gnu.org>
Revert:
diff --git a/MAINTAINERS b/MAINTAINERS
index 9ce8716eca8..e2b979f4cc8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -129,6 +129,7 @@ loop discovery Michael Hayes m.hayes@elec.canterbury.ac.nz
scheduler (+ haifa) Jim Wilson wilson@specifixinc.com
scheduler (+ haifa) Michael Meissner gnu@the-meissners.org
scheduler (+ haifa) Jeff Law law@redhat.com
+scheduler (+ haifa) Vladimir Makarov vmakarov@redhat.com
reorg Jeff Law law@redhat.com
caller-save.c Jeff Law law@redhat.com
callgraph Jan Hubicka jh@suse.cz
@@ -183,6 +184,7 @@ Wolfgang Bangerth bangerth@dealii.org
Daniel Berlin dan@dberlin.org
David Billinghurst David.Billinghurst@riotinto.com
Laurynas Biveinis laurynas.biveinis@mif.vu.lt
+Uros Bizjak uros@kss-loka.si
Eric Blake ericb@gcc.gnu.org
Jim Blandy jimb@redhat.com
Phil Blundell pb@futuretv.com
@@ -210,6 +212,7 @@ Mohan Embar gnustuff@thisiscool.com
Marc Espie espie@cvs.openbsd.org
Ansgar Esztermann ansgar@thphy.uni-duesseldorf.de
Doug Evans dje@transmeta.com
+Brian Ford ford@vss.fsi.com
Kaveh Ghazi ghazi@caip.rutgers.edu
Matthew Gingell gingell@gnat.com
Anthony Green green@redhat.com
diff --git a/config/acx.m4 b/config/acx.m4
index 9b40d4f0771..3652836bb8d 100644
--- a/config/acx.m4
+++ b/config/acx.m4
@@ -193,3 +193,34 @@ else
have_gnat=no
fi
])
+
+dnl 'make compare' can be significantly faster, if cmp itself can
+dnl skip bytes instead of using tail. The test being performed is
+dnl "if cmp --ignore-initial=2 t1 t2 && ! cmp --ignore-initial=1 t1 t2"
+dnl but we need to sink errors and handle broken shells. We also test
+dnl for the parameter format "cmp file1 file2 skip1 skip2" which is
+dnl accepted by cmp on some systems.
+AC_DEFUN([ACX_PROG_CMP_IGNORE_INITIAL],
+[AC_CACHE_CHECK([how to compare bootstrapped objects], gcc_cv_prog_cmp_skip,
+[ echo abfoo >t1
+ echo cdfoo >t2
+ gcc_cv_prog_cmp_skip='tail +16c $$f1 > tmp-foo1; tail +16c $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2'
+ if cmp t1 t2 2 2 > /dev/null 2>&1; then
+ if cmp t1 t2 1 1 > /dev/null 2>&1; then
+ :
+ else
+ gcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16'
+ fi
+ fi
+ if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then
+ if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then
+ :
+ else
+ gcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2'
+ fi
+ fi
+ rm t1 t2
+])
+do_compare="$gcc_cv_prog_cmp_skip"
+AC_SUBST(do_compare)
+])
diff --git a/configure b/configure
index 44888a1a0a7..fd4f900547f 100755
--- a/configure
+++ b/configure
@@ -541,7 +541,7 @@ fi
ac_aux_dir=
-for ac_dir in ${GNUSYSTEM_AUX_DIR} $srcdir $srcdir/.. $srcdir/../..; do
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
if test -f $ac_dir/install-sh; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install-sh -c"
@@ -786,6 +786,8 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
### we might need to use some other shell than /bin/sh for running subshells
### If we are on Windows, search for the shell. This will permit people
### to not have /bin/sh, but to be able to see /SOME/PATH/sh configure
@@ -1899,7 +1901,7 @@ fi
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1903: checking for $ac_word" >&5
+echo "configure:1905: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1929,7 +1931,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1933: checking for $ac_word" >&5
+echo "configure:1935: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1980,7 +1982,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1984: checking for $ac_word" >&5
+echo "configure:1986: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2012,7 +2014,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2016: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2018: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -2023,12 +2025,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 2027 "configure"
+#line 2029 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:2032: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -2054,12 +2056,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:2058: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2060: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:2063: checking whether we are using GNU C" >&5
+echo "configure:2065: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2068,7 +2070,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2072: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2074: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -2087,7 +2089,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:2091: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2093: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2123,7 +2125,7 @@ fi
# Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args.
set dummy ${ac_tool_prefix}gnatbind; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2127: checking for $ac_word" >&5
+echo "configure:2129: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2155,7 +2157,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "gnatbind", so it can be a program name with args.
set dummy gnatbind; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2159: checking for $ac_word" >&5
+echo "configure:2161: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2188,7 +2190,7 @@ fi
fi
echo $ac_n "checking whether compiler driver understands Ada""... $ac_c" 1>&6
-echo "configure:2192: checking whether compiler driver understands Ada" >&5
+echo "configure:2194: checking whether compiler driver understands Ada" >&5
if eval "test \"`echo '$''{'acx_cv_cc_gcc_supports_ada'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2220,7 +2222,36 @@ else
have_gnat=no
fi
-ACX_PROG_CMP_IGNORE_INITIAL
+echo $ac_n "checking how to compare bootstrapped objects""... $ac_c" 1>&6
+echo "configure:2227: checking how to compare bootstrapped objects" >&5
+if eval "test \"`echo '$''{'gcc_cv_prog_cmp_skip'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo abfoo >t1
+ echo cdfoo >t2
+ gcc_cv_prog_cmp_skip='tail +16c $$f1 > tmp-foo1; tail +16c $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2'
+ if cmp t1 t2 2 2 > /dev/null 2>&1; then
+ if cmp t1 t2 1 1 > /dev/null 2>&1; then
+ :
+ else
+ gcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16'
+ fi
+ fi
+ if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then
+ if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then
+ :
+ else
+ gcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2'
+ fi
+ fi
+ rm t1 t2
+
+fi
+
+echo "$ac_t""$gcc_cv_prog_cmp_skip" 1>&6
+do_compare="$gcc_cv_prog_cmp_skip"
+
+
# Check for GMP
gmplibs=
@@ -2265,9 +2296,9 @@ saved_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $gmpinc"
# Check GMP actually works
echo $ac_n "checking for correct version of gmp.h""... $ac_c" 1>&6
-echo "configure:2269: checking for correct version of gmp.h" >&5
+echo "configure:2300: checking for correct version of gmp.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 2271 "configure"
+#line 2302 "configure"
#include "confdefs.h"
#include "gmp.h"
int main() {
@@ -2278,7 +2309,7 @@ choke me
; return 0; }
EOF
-if { (eval echo configure:2282: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2313: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
else
@@ -2291,19 +2322,19 @@ rm -f conftest*
if test x"$have_gmp" = xyes; then
echo $ac_n "checking for mpf_init in -lgmp""... $ac_c" 1>&6
-echo "configure:2295: checking for mpf_init in -lgmp" >&5
+echo "configure:2326: checking for mpf_init in -lgmp" >&5
saved_LIBS="$LIBS"
LIBS="$LIBS $gmplibs"
cat > conftest.$ac_ext <<EOF
-#line 2300 "configure"
+#line 2331 "configure"
#include "confdefs.h"
#include <gmp.h>
int main() {
mpf_t n; mpf_init(n);
; return 0; }
EOF
-if { (eval echo configure:2307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
else
@@ -2765,7 +2796,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2769: checking for $ac_word" >&5
+echo "configure:2800: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_DEFAULT_YACC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2800,7 +2831,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2804: checking for $ac_word" >&5
+echo "configure:2835: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_DEFAULT_M4'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2835,7 +2866,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2839: checking for $ac_word" >&5
+echo "configure:2870: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_DEFAULT_LEX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3413,7 +3444,7 @@ test -n "$target_alias" && ncn_target_tool_prefix=$target_alias-
# Extract the first word of "${ncn_tool_prefix}ar", so it can be a program name with args.
set dummy ${ncn_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3417: checking for $ac_word" >&5
+echo "configure:3448: 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
@@ -3446,7 +3477,7 @@ if test -z "$ac_cv_prog_AR" ; then
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3450: checking for $ac_word" >&5
+echo "configure:3481: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3485,7 +3516,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}as", so it can be a program name with args.
set dummy ${ncn_tool_prefix}as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3489: checking for $ac_word" >&5
+echo "configure:3520: 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
@@ -3518,7 +3549,7 @@ if test -z "$ac_cv_prog_AS" ; then
# Extract the first word of "as", so it can be a program name with args.
set dummy as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3522: checking for $ac_word" >&5
+echo "configure:3553: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3557,7 +3588,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}dlltool", so it can be a program name with args.
set dummy ${ncn_tool_prefix}dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3561: checking for $ac_word" >&5
+echo "configure:3592: 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
@@ -3590,7 +3621,7 @@ if test -z "$ac_cv_prog_DLLTOOL" ; then
# Extract the first word of "dlltool", so it can be a program name with args.
set dummy dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3594: checking for $ac_word" >&5
+echo "configure:3625: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_DLLTOOL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3629,7 +3660,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}ld", so it can be a program name with args.
set dummy ${ncn_tool_prefix}ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3633: checking for $ac_word" >&5
+echo "configure:3664: 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
@@ -3662,7 +3693,7 @@ if test -z "$ac_cv_prog_LD" ; then
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3666: checking for $ac_word" >&5
+echo "configure:3697: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3701,7 +3732,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}nm", so it can be a program name with args.
set dummy ${ncn_tool_prefix}nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3705: checking for $ac_word" >&5
+echo "configure:3736: 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
@@ -3734,7 +3765,7 @@ if test -z "$ac_cv_prog_NM" ; then
# Extract the first word of "nm", so it can be a program name with args.
set dummy nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3738: checking for $ac_word" >&5
+echo "configure:3769: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3773,7 +3804,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ncn_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3777: checking for $ac_word" >&5
+echo "configure:3808: 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
@@ -3806,7 +3837,7 @@ if test -z "$ac_cv_prog_RANLIB" ; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3810: checking for $ac_word" >&5
+echo "configure:3841: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3845,7 +3876,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}windres", so it can be a program name with args.
set dummy ${ncn_tool_prefix}windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3849: checking for $ac_word" >&5
+echo "configure:3880: 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
@@ -3878,7 +3909,7 @@ if test -z "$ac_cv_prog_WINDRES" ; then
# Extract the first word of "windres", so it can be a program name with args.
set dummy windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3882: checking for $ac_word" >&5
+echo "configure:3913: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_WINDRES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3917,7 +3948,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}objcopy", so it can be a program name with args.
set dummy ${ncn_tool_prefix}objcopy; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3921: checking for $ac_word" >&5
+echo "configure:3952: 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
@@ -3950,7 +3981,7 @@ if test -z "$ac_cv_prog_OBJCOPY" ; then
# Extract the first word of "objcopy", so it can be a program name with args.
set dummy objcopy; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3954: checking for $ac_word" >&5
+echo "configure:3985: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJCOPY'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3989,7 +4020,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}objdump", so it can be a program name with args.
set dummy ${ncn_tool_prefix}objdump; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3993: checking for $ac_word" >&5
+echo "configure:4024: 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
@@ -4022,7 +4053,7 @@ if test -z "$ac_cv_prog_OBJDUMP" ; then
# Extract the first word of "objdump", so it can be a program name with args.
set dummy objdump; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4026: checking for $ac_word" >&5
+echo "configure:4057: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJDUMP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4071,7 +4102,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}ar", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4075: checking for $ac_word" >&5
+echo "configure:4106: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_AR_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4104,7 +4135,7 @@ if test -z "$ac_cv_prog_CONFIGURED_AR_FOR_TARGET" ; then
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4108: checking for $ac_word" >&5
+echo "configure:4139: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_AR_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4143,7 +4174,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}as", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4147: checking for $ac_word" >&5
+echo "configure:4178: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_AS_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4176,7 +4207,7 @@ if test -z "$ac_cv_prog_CONFIGURED_AS_FOR_TARGET" ; then
# Extract the first word of "as", so it can be a program name with args.
set dummy as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4180: checking for $ac_word" >&5
+echo "configure:4211: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_AS_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4215,7 +4246,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}dlltool", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4219: checking for $ac_word" >&5
+echo "configure:4250: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4248,7 +4279,7 @@ if test -z "$ac_cv_prog_CONFIGURED_DLLTOOL_FOR_TARGET" ; then
# Extract the first word of "dlltool", so it can be a program name with args.
set dummy dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4252: checking for $ac_word" >&5
+echo "configure:4283: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4287,7 +4318,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}ld", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4291: checking for $ac_word" >&5
+echo "configure:4322: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_LD_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4320,7 +4351,7 @@ if test -z "$ac_cv_prog_CONFIGURED_LD_FOR_TARGET" ; then
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4324: checking for $ac_word" >&5
+echo "configure:4355: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_LD_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4359,7 +4390,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}nm", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4363: checking for $ac_word" >&5
+echo "configure:4394: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_NM_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4392,7 +4423,7 @@ if test -z "$ac_cv_prog_CONFIGURED_NM_FOR_TARGET" ; then
# Extract the first word of "nm", so it can be a program name with args.
set dummy nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4396: checking for $ac_word" >&5
+echo "configure:4427: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_NM_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4431,7 +4462,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4435: checking for $ac_word" >&5
+echo "configure:4466: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_RANLIB_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4464,7 +4495,7 @@ if test -z "$ac_cv_prog_CONFIGURED_RANLIB_FOR_TARGET" ; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4468: checking for $ac_word" >&5
+echo "configure:4499: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_RANLIB_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4503,7 +4534,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}windres", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4507: checking for $ac_word" >&5
+echo "configure:4538: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_WINDRES_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4536,7 +4567,7 @@ if test -z "$ac_cv_prog_CONFIGURED_WINDRES_FOR_TARGET" ; then
# Extract the first word of "windres", so it can be a program name with args.
set dummy windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4540: checking for $ac_word" >&5
+echo "configure:4571: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_WINDRES_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4621,7 +4652,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:4625: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:4656: 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"
@@ -4746,15 +4777,34 @@ trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
-cat > conftest.defs <<\EOF
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
-s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
-s%\[%\\&%g
-s%\]%\\&%g
-s%\$%$$%g
-EOF
-DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
-rm -f conftest.defs
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then we branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+cat >confdef2opt.sed <<\_ACEOF
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
+t quote
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
+t quote
+d
+: quote
+s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
+s,\[,\\&,g
+s,\],\\&,g
+s,\$,$$,g
+p
+_ACEOF
+# We use echo to avoid assuming a particular line-breaking character.
+# The extra dot is to prevent the shell from consuming trailing
+# line-breaks from the sub-command output. A line-break within
+# single-quotes doesn't work because, if this script is created in a
+# platform that uses two characters for line-breaks (e.g., DOS), tr
+# would break.
+ac_LF_and_DOT=`echo; echo .`
+DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
+rm -f confdef2opt.sed
# Without the "./", some shells look in PATH for config.status.
@@ -4849,6 +4899,7 @@ s%@host_subdir@%$host_subdir%g
s%@target_subdir@%$target_subdir%g
s%@CC@%$CC%g
s%@GNATBIND@%$GNATBIND%g
+s%@do_compare@%$do_compare%g
s%@gmplibs@%$gmplibs%g
s%@gmpinc@%$gmpinc%g
s%@stage1_languages@%$stage1_languages%g
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a705dda551b..4b6f7e83891 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,19 +1,1015 @@
-2004-04-23 Per Bothner <per@bothner.com>
-
- * expr.c (expr_wfl_stack): Remove unused global.
-
- Pre-patches for future source_location / location_t merge.
- * tree.h (EXPR_LOCATION, EXPR_HAS_LOCATION): New macros.
- * expr.c (expand_expr_real, expand_expr_real_1): Use new macros.
- * gimple-low.c (lower_stmt): Likewise.
- * gimplify.c (annotate_all_with_locus): Likewise.
- * print-tree.c (print_node): Likewise.
- * tree-inline.c (expand_call_inline): Likewise.
- * tree-pretty-print.c (tree-pretty-print.c): Likewise.
- * tree-sra.c (scalarize_structure_assignment, emit_scalar_copies,
- scalarize_call_expr): Likewise.
- * tree-ssa-pre.c (code_motion): Likewise.
-
+2004-05-11 Paul Brook <paul@codesourcery.com>
+
+ * flags.h (flag_short_enums): Update comment.
+ * opts.c (decode_options): Set flag_short_enums to 2.
+ * toplev.c (flag_short_enums): Update comment.
+ (process_options): Call default_short_enums target hook.
+
+2004-05-11 Andrew Pinski <pinskia@gcc.gnu.org>
+
+ PR target/14063
+ * config/rs6000/altivec.md (altivec_dssall):
+ Change to unspec_volatile.
+ (altivec_dss): Likewise.
+
+2004-05-10 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/altivec.md ("one_cmplv16qi2"): Change vnot to
+ vnor.
+ ("one_cmplv8hi2"): Same.
+ ("one_cmplv4si2"): Same.
+
+2004-05-10 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ PR target/15130
+ * config/sh/sh-protos.h (sh_expand_epilogue): Change prototype.
+ * config/sh/sh.c (output_stack_adjust): Take the sibcall epilogue
+ into account. Compute the correct number of general registers
+ for the return value. Generate a special push/pop sequence when
+ failing to get a temporary register for non SHmedia epilogue.
+ (sh_expand_epilogue): Add an argument to show whether it's for
+ sibcall or not. Set the 3rd argument of output_stack_adjust to
+ -1 if needed.
+ (sh_need_epilogue): Call sh_expand_epilogue with 0.
+ * config/sh/sh.md (sibcall_epilogue): Call sh_expand_epilogue
+ with 1.
+ (epilogue): Call sh_expand_epilogue with 0.
+
+2004-05-10 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * gcse.c (eliminate_partially_redundant_loads): Instead of returning early,
+ goto a cleanup label. After the cleanup, free the allocated memory.
+
+2004-05-10 Ziemowit Laski <zlaski@apple.com>
+
+ * config/rs6000/altivec.h (vec_sld): Add overloads for
+ argument/return types of 'vector bool int', 'vector bool short'
+ and 'vector bool char'.
+
+2004-05-10 Zack Weinberg <zack@codesourcery.com>
+
+ * c-decl.c (store_parm_decls_newstyle): Correct test for a
+ nested function.
+
+2004-05-10 Richard Sandiford <rsandifo@redhat.com>
+
+ * read-rtl.c (read_rtx): Allow 's' and 'T' strings to be omitted,
+ treating missing ones as "".
+ * config/mips/mips.md: Remove constraints from match_operands and
+ match_scratches if they appear in define_expands (except reload*),
+ define_peephole2s, define_splits or attribute specifications.
+ * config/mips/7000.md, config/mips/sb1.md: Remove match_operand
+ constraint strings.
+
+2004-05-10 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/rs6000.c (function_arg_boundary): Always align
+ AltiVec vectors.
+ (function_arg_advance): Pass TARGET_32BIT -mabi=no-altivec AltiVec
+ vectors by refererence. Align the same for TARGET_64BIT to a 16
+ byte boundary. Remove useless code. Add function comment.
+ (function_arg): Similarly. Move gpr rs6000_mixed_function_arg
+ call to where it belongs.
+ (function_arg_partial_nregs): Return true for all TARGET_32BIT
+ -mabi=no-altivec AltiVec vectors. Fix debug output.
+ (rs6000_va_arg): Adjust for AltiVec change.
+
+2004-05-10 Paul Brook <paul@codesourcery.com>
+
+ * config/arm/arm.c (arm_promote_prototypes): Use TARGET_AAPCS_BASED.
+ * config/arm/arm.h (TARGET_AAPCS_BASED): Define.
+ (TARGET_DOUBLEWORD_ALIGN): Use it.
+ (WCHAR_TYPE): Define.
+ (WCHAR_SIZE_TYPE): Define.
+ (SIZE_TYPE): Define.
+
+2004-05-10 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/rs6000.c (function_arg_boundary): Align for ABI_V4
+ when size is 8 bytes.
+ (function_arg_advance): Account for stack space used by AltiVec
+ args when -mabi=altivec. Simplify alignment calculations. For
+ ABI_V4, pass AltiVec vectors by reference when -mabi=no-altivec.
+ (function_arg): Similarly.
+ (function_arg_pass_by_reference): True for ABI_V4 AltiVec when
+ not AltiVec ABI.
+ (rs6000_va_arg): Correct fp arg test. Adjust for AltiVec change.
+ Correct alignment, and align before testing reg count. Remove
+ TREE_THIS_VOLATILE from reg. Don't emit unused labels.
+ (rs6000_complex_function_value): Check TARGET_HARD_FLOAT and
+ TARGET_FPRS here..
+ (rs6000_function_value): .. not here before call.
+
+2004-05-09 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/spe.md ("tstsflt_gpr"): Fix typo in unspec.
+
+2004-05-09 Zack Weinberg <zack@codesourcery.com>
+
+ PR 15007
+ * c-decl.c (current_file_decl): Rename to all_translation_units,
+ adjust comment.
+ (pop_scope): If popping file_scope, construct a
+ TRANSLATION_UNIT_DECL and make it the context of all the
+ symbols in the scope.
+ (push_file_scope): Don't construct a TRANSLATION_UNIT_DECL here.
+ (pushdecl): Clarify comment. Do not set DECL_CONTEXT of
+ anything to current_file_decl.
+ (pushdecl_top_level): Likewise.
+ (store_parm_decls_newstyle): Adjust check for nested function.
+ (c_write_global_declarations): Update for renamed variable.
+
+2004-05-09 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/rs6000-protos.h
+ (rs6000_conditional_register_usage): Protoize.
+
+ * config/rs6000/rs6000.c (rs6000_conditional_register_usage): New.
+
+ * config/rs6000/rs6000.h (CONDITIONAL_REGISTER_USAGE): Call
+ function.
+
+2004-05-08 Roger Sayle <roger@eyesopen.com>
+
+ * fold-const.c (fold_div_compare): New function to optimize X/C1 op C2
+ where op is a comparison operator and C1 and C2 are integer constants
+ into a range check.
+ (fold): Call fold_div_compare.
+
+2004-05-08 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * doc/install.texi (sparc-sun-solaris2*): Document bootstrap
+ problems with earlier versions of the GNU compiler.
+
+2004-05-07 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/rs6000-protos.h (rs6000_hard_regno_mode_ok_p):
+ Declare.
+
+ * config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok_p): New.
+ (rs6000_hard_regno_mode_ok): New.
+ (rs6000_init_hard_regno_mode_ok): New.
+ (rs6000_override_options): Call rs6000_init_hard_regno_mode_ok.
+
+ * config/rs6000/rs6000.h (HARD_REGNO_NREGS): Use precomputed
+ result.
+
+2004-05-07 Ziemowit Laski <zlaski@apple.com>
+
+ * config/rs6000/altivec.h (vector, pixel, bool): Do not
+ define as macros #ifdef __APPLE_ALTIVEC__.
+
+2004-05-07 Fariborz Jahanian <fjahanian@apple.com>
+
+ * config/rs6000/rs6000.c (rs6000_mixed_function_arg):
+ Generate appropriate parallels for vector arguments
+ passed to vararg functions. (function_arg): make the call
+ to rs6000_mixed_function_arg for vector args as needed.
+
+2004-05-07 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/mips.c (mips_va_arg): Fix calculation of osize for
+ EABI_FLOAT_VARARGS_P.
+
+2004-05-07 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/mips.h (ISA_HAS_BRANCHLIKELY): Remove TARGET_MIPS5500.
+ * config/mips/mips.c (override_options): Disable branch likely
+ instructions if TUNE_MIPS5500.
+
+2004-05-07 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/mips.c (override_options): Allow the hi and lo registers
+ to store any integral mode, not just MODE_INTs.
+
+2004-05-07 Paul Brook <paul@codesourcery.com>
+
+ * config/arm/arm.c (arm_promote_prototypes): Use TARGET_AAPCS_BASED.
+ * config/arm/arm.h (TARGET_AAPCS_BASED): Define.
+ (TARGET_DOUBLEWORD_ALIGN): Use it.
+ (WCHAR_TYPE): Define.
+ (WCHAR_SIZE_TYPE): Define.
+ (SIZE_TYPE): Define.
+
+2004-05-07 Uros Bizjak <uros@kss-loka.si>
+
+ * config/i386/i386.c (ix86_emit_fp_unordered_jump): Use
+ testb $4, %ah insn instead of sahf insn if !TARGET_USE_SAHF.
+
+2004-05-07 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * loop-doloop.c (doloop_valid_p): Make sure that body
+ gets freed.
+
+2004-05-07 Eric Botcazou <ebotcazou@act-europe.fr>
+
+ * config/sparc/sparc-protos.h (sparc_skip_caller_unimp): New
+ declaration.
+ * config/sparc/sparc.c (SKIP_CALLERS_UNIMP_P): Delete.
+ (sparc_skip_caller_unimp): New global variable.
+ (sparc_function_epilogue): Set 'sparc_skip_caller_unimp'.
+ Use it instead of SKIP_CALLERS_UNIMP_P.
+ * config/sparc/sparc.md (call expander): Add sanity check.
+ (call_address_struct_value_sp32): Re-sync with expander.
+ (call_symbolic_struct_value_sp32): Likewise.
+ (return peepholes): Use 'sparc_skip_caller_unimp' instead
+ of custom predicate.
+
+2004-05-07 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR c++/14962
+ * c-pragma.c (handle_pragma_redefine_extname): Only change
+ the assembler name of FUNCTION_DECLs and VAR_DECLs.
+
+2004-05-07 Uros Bizjak <uros@kss-loka.si>
+
+ * optabs.h (enum optab_index): Add new OTI_log1p.
+ (log1p_optab): Define corresponding macro.
+ * optabs.c (init_optabs): Initialize log1p_optab.
+ * genopinit.c (optabs): Implement log1p_optab using log1p?f2
+ patterns.
+ * builtins.c (expand_builtin_mathfn): Handle BUILT_IN_LOG1P{,F,L}
+ using log1p_optab.
+ (expand_builtin): Expand BUILT_IN_LOG1P{,F,L} using
+ expand_builtin_mathfn if flag_unsafe_math_optimizations is set.
+
+ * reg-stack.c (subst_stack_regs_pat): Handle UNSPEC_FYL2XP1.
+
+ * config/i386/i386.c (ix86_emit_i387_log1p): New function.
+ * config/i386/i386-protos.h (ix86_emit_i387_log1p):
+ Prototype here.
+ * config/i386/i386.md (UNSPEC_FYL2XP1): New unspec to represent
+ x87's fyl2xp1 instruction.
+ (*fyl2x_xf3): Rename insn definition to fyl2x_xf3.
+ (fyl2xp1_xf3): New pattern to implement fyl2xp1 x87 instruction.
+ (log1psf2, log1pdf2, log1pxf2): New expanders to implement log1pf,
+ log1p and log1pl built-ins as inline x87 intrinsics.
+
+2004-05-07 Loren James Rittle <ljrittle@acm.org>
+
+ * config/alpha/freebsd.h (SUBTARGET_EXTRA_SPECS): Proper redefinition.
+ * config/arm/freebsd.h: Likewise.
+ * config/ia64/freebsd.h: Likewise.
+ * config/sparc/freebsd.h: Likewise.
+
+2004-05-07 Hans-Peter Nilsson <hp@axis.com>
+
+ PR optimization/15296
+ * reorg.c (fill_simple_delay_slots): Use next_real_insn when
+ getting last consecutive label at a branch.
+ (relax_delay_slots): Similar, near top of loop.
+
+2004-05-06 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ PR target/15202
+ * pa.md (movdi, movsi, movhi, movqi): Support move from shift amount
+ register to general register.
+
+2004-05-07 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/rs6000.h (STACK_BOUNDARY): Use 128 bit for either
+ TARGET_ALTIVEC or TARGET_ALTIVEC_ABI.
+ * config/rs6000/sysv4.h (ABI_STACK_BOUNDARY): Likewise.
+ (STACK_BOUNDARY): Delete.
+
+2004-05-06 Stuart Hastings <stuart@apple.com>
+
+ * gcc/doc/invoke.texi: Restore -fgcse-after-reload doc from 1.421,
+ mistakenly clobbered by 1.423.
+
+2004-05-06 Richard Sandiford <rsandifo@redhat.com>
+
+ * doc/invoke.texi: Document -mvr4130-align.
+ * config/mips/mips.h (MASK_VR4130_ALIGN, TARGET_VR4130_ALIGN)
+ (TUNE_MIPS4120, TUNE_MIPS4130): New macros.
+ (TUNE_MACC_CHAINS): Include TUNE_MIPS4120 and TUNE_MIPS4130.
+ (TARGET_SWITCHES): Add -mvr4130-align and -mno-vr4130-align.
+ * config/mips/mips.md: Include sched-int.h.
+ (USEFUL_INSN_P, SEQ_BEGIN, SEQ_END, FOR_EACH_SUBINSN): New macros.
+ (mips_rtx_costs): Set integer multiplication costs for TUNE_MIPS4130.
+ (override_options): Enable -mvr4130-align at -O3 and above.
+ (mips_sim_insn): New variable.
+ (mips_sim): New structure.
+ (mips_sim_reset, mips_sim_init, mips_sim_next_cycle, mips_sim_wait_reg)
+ (mips_sim_wait_regs_2, mips_sim_wait_regs_1, mips_sim_wait_regs)
+ (mips_sim_wait_units, mips_sim_wait_insn, mips_sim_record_set)
+ (mips_sim_issue_insn, mips_sim_issue_nop, mips_sim_finish_insn)
+ (vr4130_avoid_branch_rt_conflict, vr4130_align_insns): New functions.
+ (mips_reorg): Call vr4130_align_insns.
+ (vr4130_last_insn): New variable.
+ (vr4130_true_reg_dependence_p_1, vr4130_true_reg_dependence_p)
+ (vr4130_swap_insns_p, vr4130_reorder): New functions.
+ (mips_sched_reorder, mips_variable_issue): Hook in vr4130 code.
+ (mips_issue_rate): Return 2 for PROCESSOR_R4130.
+ (mips_use_dfa_pipeline_interface): Return true for the same.
+ * config/mips/4130.md: New file.
+ * config/mips/mips.md: Include it. Add a peephole2 to convert
+ "mult;mflo" into "mtlo;macc".
+ (*macc, *umul_acc_di, *smul_acc_di): Use $1 rather than $0 as the
+ target of maccs.
+ (*msac_using_macc): New pattern.
+
+2004-05-06 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/5500.md (ir_vr55_store): Set latency to 0.
+ (ir_vr55_hilo): Split into...
+ (ir_vr55_mfhilo, ir_vr55_mthilo): ...these new reservations.
+ (ir_vr55_imul_si, ir_vr55_imadd): Change latency to 5.
+ (ir_vr55_imul_di): Change latency to 9. Reserve vr55_mac for 4 cycles.
+ Add various multiplication bypasses.
+ * config/mips/mips.c (mips_rtx_costs): Adjust VR5500 costs for integer
+ multiplication.
+
+2004-05-06 Uros Bizjak <uros@kss-loka.si>
+
+ * config/i386/i386.md (*fscalexf4): Correct insn "mode"
+ attribute to "XF".
+
+2004-05-05 Uros Bizjak <uros@kss-loka.si>
+
+ * optabs.h (enum optab_index): Add new OTI_fmod and OTI_drem.
+ (fmod_optab, drem_optab): Define corresponding macros.
+ * optabs.c (init_optabs): Initialize fmod_optab and drem_optab.
+ * genopinit.c (optabs): Implement fmod_optab and drem_optab
+ using fmod?f3 and drem?f3 patterns.
+ * builtins.c (expand_builtin_mathfn_2): Handle BUILT_IN_FMOD{,F,L}
+ using fmod_optab and BUILT_IN_DREM{,F,L} using drem_optab.
+ (expand_builtin): Expand BUILT_IN_FMOD{,F,L} and
+ BUILT_IN_DREM{,F,L} using expand_builtin_mathfn_2 if
+ flag_unsafe_math_optimizations is set.
+
+ * reg-stack.c (subst_stack_regs_pat): Handle UNSPEC_FPREM_F,
+ UNSPEC_FPREM_U, UNSPEC_FPREM1_F and UNSPEC_FPREM1_U.
+
+ * config/i386/i386.c (ix86_emit_fp_unordered_jump): New function.
+ * config/i386/i386-protos.h (ix86_emit_fp_unordered_jump):
+ Prototype here.
+ * config/i386/i386.md (UNSPEC_FPREM_F, UNSPEC_FPREM_U,
+ UNSPEC_FPREM1_F, UNSPEC_FPREM1_U): New unspecs to represent x87's
+ fprem and fprem1 instructions.
+ (*x86_fnstsw_1): Change input parameter to (reg:CCFP 18).
+ Rename insn definition to x86_fnstsw_1.
+ (fpremxf4, fprem1xf4): New patterns to implement fprem and fprem1
+ x87 instructions.
+ (fmodsf3, fmoddf3, fmodxf3): New expanders to implement fmodf, fmod
+ and fmodl built-ins as inline x87 intrinsics.
+ (dremsf3, dremdf3, dremxf3): New expanders to implement dremf, drem
+ and dreml built-ins as inline x87 intrinsics.
+
+2004-05-05 Roger Sayle <roger@eyesopen.com>
+
+ * reload1.c (inherit_piecemeal_p): Mark parameters potentially unused.
+
+2004-05-05 Ian Lance Taylor <ian@wasabisystems.com>
+
+ PR driver/9822
+ * doc/invoke.texi (Spec Files): Remove documentation of %c.
+
+2004-05-05 Chris Demetriou <cgd@broadcom.com>
+
+ * config/mips/mips.md: Update the msub define_split for new mflo/mfhi
+ representation.
+
+2004-05-06 Paul Brook <paul@codesourcery.com>
+
+ * config/arm/arm-protots.h (vfp_mem_operand): Rename ...
+ (arm_coproc_mem_operand): ... To this.
+ * config/arm/arm.c (arm_legitimate_address_p): Allow ldrd modes.
+ (arm_legitimate_index_p): Ditto.
+ (vfp_mem_operand): Rename ...
+ (arm_coproc_mem_operand): ... To this. Handle writeback modes.
+ (vfp_secondary_reload_class): Use it.
+ (output_move_double): Use doubleword load/store instructions.
+ (arm_hard_regno_mode_ok): Only allow even reg pairs for ldrd.
+ * config/arm/arm.h (TARGET_LDRD): Define.
+ (EXTRA_CONSTRAINT_STR_ARM): Add 'Uy'.
+ * config/gcc/arm/arm.md (arm_movdi): Allow all valid memory operands.
+ New splitter for invalid doubleword loads.
+ * config/arm/iwmmxt.md (iwmmxt_arm_movdi): Use Uy constraint.
+ * config/arm/vfp.md (arm_movdi_vfp): Allow all valid memory operands.
+ * doc/md.texi: Document Uy constraint.
+
+2004-05-05 Jan Hubicka <jh@suse.cz>
+
+ PR opt/14980
+ * cgraphunit.c (cgraph_remove_unreachable_nodes): Deal properly with
+ inline clones.
+
+2004-05-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/15290
+ * config/i386/i386.c (ix86_split_to_parts): Use real_to_target
+ instead of REAL_VALUE_TO_TARGET_LONG_DOUBLE.
+
+2004-05-05 Mike Stump <mrs@apple.com>
+
+ * config/darwin-c.c (add_framework): Copy the directory name as it
+ can be freed later. Also, ensure we always allocate enough room
+ for the cached framework information.
+ (find_subframework_header): Keep track of the directory where the
+ subframework header was found.
+ (framework_construct_pathname): Speed up by not trying to re-add a
+ framework.
+ * cppfiles.c (search_path_exhausted): Arrange for the missing
+ header callback to be able to set the directory where the header
+ was found.
+ (cpp_get_dir): Add.
+ * cpplib.h (missing_header_cb): Add a parameter.
+ (cpp_get_dir): Add.
+
+2004-05-03 Mike Stump <mrs@apple.com>
+
+ * doc/invoke.texi (Directory Options): Document -iquote.
+ * doc/cpp.texi: Likewise.
+ * doc/cppopts.texi: Likewise.
+ * c-opts.c (c_common_missing_argument): Add -iquote processing.
+ (c_common_handle_option): Likewise.
+ * c.opt (iquote): Add.
+ * gcc.h (DEFAULT_WORD_SWITCH_TAKES_ARG): Add -iquote.
+ * c-incpath.c (merge_include_chains): Update comment to use -iquote.
+
+ * c-opts.c (case OPT_I): Deprecate -I- support.
+ * doc/invoke.texi: Likewise.
+ * doc/cpp.texi: Likewise.
+ * doc/cppopts.texi: Likewise.
+
+2004-05-05 Steven Bosscher <stevenb@suse.de>
+
+ * basic-block.h (free_basic_block_vars): Update prototype.
+ * flow.c (free_basic_block_vars): Remove the keep_head_end_p
+ argument.
+ (life_analysis): Update call.
+ * ifcvt.c (if_convert): Likewise.
+ * sibcall.c (optimize_sibling_and_tail_recursive_call): Likewise.
+ * passes.c (rest_of_handle_final): Likewise.
+ (rest_of_compilation): Likewise.
+ * config/sh/sh.c (sh_output_mi_thunk): Likewise.
+
+ * emit-rtl.c (next_real_insn): Use INSN_P.
+ (prev_real_insn): Likewise.
+
+2004-05-05 Eric Christopher <echristo@redhat.com>
+
+ * config/mips/mips.md: Update the madd define_split for new mflo/mfhi
+ representation.
+
+2004-05-05 Paolo Bonzini <bonzini@gnu.org>
+
+ * config/rs6000/rs6000.c (build_opaque_vector_type):
+ New function.
+ (rs6000_init_builtins): Use it.
+
+2004-05-04 Bernard Giroud <bgiroud2@free.fr>
+
+ * gcc/gcc/vmsdbgout.c (vms_func_node, vms_func_ref): New.
+ (func_table): Change type from char ** to vms_func_ref.
+ (write_rtnbeg): Update to reflect func_table change. Use
+ fde->funcdef_number instead of rtnnum in output.
+ (write_rtnend, vmxdbgout_begin_function, vmsdbgout_init): Likewise.
+
+2004-05-04 Paolo Bonzini <bonzini@gnu.org>
+ Richard Henderson <rth@redhat.com>
+
+ PR target/14899
+
+ * c-common.c (vector_types_convertible_p): New function.
+ * c-typeck.c (comptypes): Recurse on vector types.
+ (convert_for_assignment): Use vector_types_convertible_p.
+ (digest_init): Use vector_types_convertible_p to check
+ validness of constant vector initializers; otherwise treat
+ them as scalars.
+ * tree.c (make_or_reuse_type): New.
+ (build_common_tree_nodes): Use it.
+ * cp/call.c (standard_conversion): Likewise.
+ * cp/typeck.c (comptypes): Recurse on vector types.
+ (convert_for_assignment): Use vector_types_convertible_p.
+
+2004-05-04 Chris Demetriou <cgd@broadcom.com>
+
+ * config/mips/mips.c (override_options): Default to no
+ generation of branch-likely operations when tuning for
+ CPUs where they tend to have a negative performance impact
+ (e.g., SB-1).
+
+2004-05-04 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (store_constructor_field): Don't call store_constructor
+ if bitsize is not a multiple of a byte.
+
+2004-05-04 Richard Sandiford <rsandifo@redhat.com>
+
+ * reload1.c (inherit_piecemeal_p): New function.
+ (emit_reload_insns): When reloading a group of hard registers, use
+ inherit_piecemeal_p to decide whether the values of individual hard
+ registers can be inherited.
+
+2004-05-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/ia64/t-ia64 (LIB2ADDEH): Remove gthr-gnat.c.
+ * config/s390/t-tpf (LIB2ADDEHDEP): Likewise.
+ * config/t-linux (LIB2ADDEHDEP): Likewise.
+
+2004-05-04 Paul Brook <paul@codesourcery.com>
+
+ * config/arm/crti.asm: Push an even number of registers.
+ * config/arm/crtn.asm: And restore them. Load via sp.
+
+2004-05-04 Paolo Bonzini <bonzini@gnu.org>
+
+ * ggc-zone.c (ggc_alloc_zone_1): Add MEM_STAT_DECL parameter.
+ Collect overhead information.
+ (ggc_alloc_stat): New name of ggc_alloc. Add MEM_STAT_DECL
+ parameter and pass it through.
+ (ggc_alloc_typed_stat): New name of ggc_alloc_typed. Add
+ MEM_STAT_DECL parameter and pass it through.
+ (ggc_alloc_zone_stat): New name of ggc_alloc_zone. Add
+ MEM_STAT_DECL parameter and pass it through.
+
+2004-05-03 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/rs6000-protos.h: Protoize rs6000_hard_regno_nregs.
+
+ * config/rs6000/rs6000.c (rs6000_hard_regno_nregs): New.
+
+ * config/rs6000/rs6000.h (HARD_REGNO_NREGS): Call
+ rs6000_hard_regno_nregs.
+
+2004-05-03 Eric Christopher <echristo@redhat.com>
+
+ * config/s390/s390.c (s390_emit_prologue): Call unspec tpf
+ prologue insn instead of setting up call.
+ (s390_emit_epilogue): Ditto.
+ * config/s390/s390.md (prologue_tpf, epilogue_tpf): New patterns.
+ (define_constants): Add numbers for above patterns.
+
+2004-05-03 Eric Christopher <echristo@redhat.com>
+
+ * config/s390/s390.h (CONDITIONAL_REGISTER_USAGE): Move body...
+ * config/s390/s390.c (s390_conditional_register_usage): ...here.
+ * config/s390/s390-protos.h: Prototype.
+
+2004-05-03 Joe Buck <jbuck@welsh-buck.org>
+
+ * cppfiles.c (pchf_adder): Eliminate use of |= in d->have_once_only
+ assignment.
+
+2004-05-03 Eric Christopher <echristo@redhat.com>
+
+ * config/mips/mips.md: Fix branch length attribute definition.
+
+2004-05-03 Aldy Hernandez <aldyh@redhat.com>
+
+ * config.gcc: Remove --enable-altivec support.
+
+ * config/rs6000/altivec-defs.h: Remove.
+
+2004-05-03 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * fixinc/inclhack.def (svr4_profil): Don't apply on IRIX 5/6.
+ * fixinc/fixincl.x: Regenerate.
+
+2004-05-03 Uros Bizjak <uros@kss-loka.si>
+
+ * config/i386/i386.md (*fyl2x_sfxf3, *fyl2x_dfxf3): Remove insn
+ definition.
+ (log?f2, log10?f2, log2?f2): Reimplement expanders with
+ float_truncate insn.
+ (*fxtractsf3, *fxtractdf3): Remove insn definition.
+ (logb?f2): Reimplement expanders with float_truncate insn.
+
+2004-05-03 Graham Stott <graham.stott@btinternet.com>
+
+ PR 14718
+ * dwarf2out.c (dwarf2out_imported_module_or_decl): Use
+ force_type_die for CONST_DECL.
+
+2004-05-03 Eric Botcazou <ebotcazou@libertysurf.fr>
+ Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * config.gcc (sparc64-*-solaris2*, sparcv9-*-solaris2*): Add
+ tm-dwarf2.h to tm_file.
+ (sparc-*-solaris2*): Add tm-dwarf2.h to tm_file for Solaris 7+.
+ * config/sparc/sol2-bi.h (PREFERRED_DEBUGGING_TYPE): Delete.
+ (ASM_DEBUG_SPEC): Delete.
+
+2004-05-03 Uros Bizjak <uros@kss-loka.si>
+
+ * optabs.h (enum optab_index): Add new OTI_expm1.
+ (expm1_optab): Define corresponding macro.
+ * optabs.c (init_optabs): Initialize expm1_optab.
+ * genopinit.c (optabs): Implement expm1_optab using expm1?f2
+ patterns.
+ * builtins.c (expand_builtin_mathfn): Handle BUILT_IN_EXPM1{,F,L}
+ using expm1_optab.
+ (expand_builtin): Expand BUILT_IN_EXPM1{,F,L} using
+ expand_builtin_mathfn if flag_unsafe_math_optimizations is set.
+
+ * config/i386/i386.md (expm1df2, expm1sf2, expm1xf2): New expanders
+ to implement expm1, expm1f and expm1l built-ins as inline x87
+ intrinsics.
+
+2004-05-02 Alexandre Oliva <aoliva@redhat.com>
+
+ 2003-11-19 Richard Sandiford <rsandifo@redhat.com>
+ * config/frv/frv.md (*return_true, *return_false): New patterns.
+
+2004-05-02 Kazu Hirata <kazu@cs.umass.edu>
+
+ * rtl.h (PHI_NODE_P): Remove.
+
+2004-05-02 Eric Botcazou <ebotcazou@act-europe.fr>
+
+ PR middle-end/14988
+ * function.c (assign_stack_local_1): Use BITS_PER_UNIT alignment
+ when passed -2 as 'align'.
+ (put_var_into_stack): Use 'bool' as the type for the three local
+ predicates. Adjust calls to put_reg_into_stack.
+ When passed a CONCAT, instruct put_reg_into_stack to use
+ a consecutive stack slot for the second part.
+ (put_reg_into_stack): Remove 'promoted_mode' parameter, add
+ 'consecutive_p' parameter. Turn the three predicates into 'bool'
+ parameters. Retrieve the register mode from 'reg'.
+ When consecutive_p is true, instruct assign_stack_local_1 to use
+ BITS_PER_UNIT alignment.
+ (put_addressof_into_stack): Use 'bool' as the type for the two
+ local predicates. Adjust call to put_reg_into_stack.
+
+2004-05-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * fold-const.c (fold_convert_const, fold): Add missing
+ FIX_ROUND_EXPR case.
+
+2004-05-02 Alexandre Oliva <aoliva@redhat.com>
+
+ * configure.ac (FLEX, BISON): Only use tools from the build tree
+ if build equals host.
+ * configure: Rebuilt.
+
+ * config/frv/frv-protos.h (frv_expand_epilogue,
+ frv_expand_fdpic_call): Add bool argument.
+ * config/frv/frv.c (frv_function_ok_for_sibcall): New.
+ (TARGET_FUNCTION_OK_FOR_SIBCALL): Define to it.
+ (frv_expand_epilogue): Use new argument to decide whether to emit
+ return instruction or copy the return address to LR.
+ (frv_expand_fdpic_call): Inline PLT entry when emitting direct
+ sibcalls.
+ (sibcall_operand): New.
+ * config/frv/frv.h (PREDICATE_CODES): call_operand doesn't match
+ PLUS nor LABEL_REF. Add sibcall_operand.
+ * config/frv/frv.md (call, call_value): Pass false to
+ frv_expand_fdpic_call.
+ (call_fdpicdi, call_value_fdpicdi): Insert %i0 in calll.
+ (sibcall, sibcall_internal, sibcall_fdpicdi, sibcall_value,
+ sibcall_value_internal, sibcall_value_fdpicdi): New.
+ (return_unsigned_true, return_unsigned_false): New.
+ (epilogue): Adjust call to frv_expand_epilogue.
+ (sibcall_epilogue): New.
+
+ * config/frv/frv.h (ASM_SPEC): Pass -mno-fdpic as -mnopic.
+ (CPP_SPEC, CPP_SIMPLE_SPEC): Undefine __FRV_ACC__ and __FRV_FPR__
+ before redefining them.
+
+2004-05-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * builtins.c (fold_fixed_mathfn): New function.
+ (fold_builtin_lround, fold_builtin): Use it.
+
+2004-05-01 Jakub Jelinek <jakub@redhat.com>
+
+ * config/sparc/linux64.h (TARGET_DEFAULT): Make 64-bit by default
+ also for TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc3.
+
+2004-05-01 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/cris/cris.h: Revert my "fix comment typos" patch.
+
+2004-05-01 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/mips.h (TUNE_MACC_CHAINS): Fix comment.
+
+2004-05-01 Falk Hueffner <falk@debian.org>
+
+ * config/alpha/alpha.md (builtin_insbl, builtin_inswl,
+ builtin_insll): Disallow 0 as first input operand.
+
+2004-05-01 Falk Hueffner <falk@debian.org>
+
+ * config/alpha/alpha.c (alpha_rtx_costs): Fix shiftadd costs.
+
+2004-05-01 Ulrich Weigand <uweigand@de.ibm.com>
+
+ PR middle-end/15054
+ * expr.c (expand_expr_real): Do not call preserve_temp_slots
+ on a TARGET_EXPR temp.
+ * function.c (assign_stack_temp_for_type): Set 'keep' flag for
+ TARGET_EXPR temp slots.
+
+2004-05-01 Paolo Bonzini <bonzini@gnu.org>
+
+ * simplify-rtx.c (simplify_ternary_operation): When
+ converting an IF_THEN_ELSE to a relational op, return
+ correct mode.
+
+2004-04-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * builtins.c (fold_builtin_round): Fix comment typo.
+ (fold_builtin_lround): New function.
+ (fold_builtin): Use it.
+
+2004-04-20 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR target/11608
+ * config/sh/elf.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Update and make it
+ more like the one in config/dbxelf.h.
+
+2004-04-30 Zack Weinberg <zack@codesourcery.com>
+
+ * tree.h (SET_ARRAY_OR_VECTOR_CHECK): Rename to SET_OR_ARRAY_CHECK
+ and adjust definition accordingly.
+ (TYPE_DOMAIN): Allow only SET_TYPE and ARRAY_TYPE.
+ (TYPE_DEBUG_REPRESENTATION_TYPE): Allow only VECTOR_TYPE.
+ * expr.c (store_constructor): Do not access TYPE_DOMAIN of a
+ VECTOR_TYPE.
+
+2004-04-30 Jason Merrill <jason@redhat.com>
+
+ PR c++/14587
+ * config/i386/winnt.c (associated_type): Look for attributes on
+ the TYPE_MAIN_VARIANT of *this.
+ * attribs.c (decl_attributes): If ATTR_FLAG_TYPE_IN_PLACE, also
+ apply the attributes to the variants.
+
+2004-04-30 Paul Brook <paul@codesourcery.com>
+
+ * config.gcc: Simplify arm --with-{cpu,tune} test.
+ * config/arm/arm-cores.def: Document whitespace restrictions.
+
+2004-04-30 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ PR other/1963
+ * config/alpha/osf.h (SWITCHES_NEED_SPACES): Define.
+
+2004-04-30 Brian Ford <ford@vss.fsi.com>
+ DJ Delorie <dj@redhat.com>
+
+ * config/i386/cygming.h [HAVE_GAS_PE_SECREL32_RELOC]
+ (DWARF2_DEBUGGING_INFO): Define to enable.
+ (DBX_REGISTER_NUMBER): Define to use the svr4 register map for
+ DWARF2.
+ * configure.ac (Target-specific assembler checks)
+ <i[34567]86-*-[cygwin*|pe|mingw32*]>: New test for .secrel32
+ relocs.
+ * configure: Regenerate.
+ * config.in: Likewise.
+
+ * config/i386/cygming.h [HAVE_GAS_PE_SECREL32_RELOC]
+ (ASM_OUPUT_DWARF_OFFSET): Define.
+
+2004-04-29 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ * config/s390/s390-protos.h (s390_emit_epilogue): Parameter added.
+ (s390_emit_call): New function prototype added.
+ (s390_tls_get_offset): Function removed.
+ * config/s390/s390.c (s390_function_ok_for_sibcall,
+ s390_call_saved_register_used_p): New functions.
+ (TARGET_FUNCTION_OK_FOR_SIBCALL): Definition of target macro added.
+ (s390_tls_get_offset): Function merged into s390_emit_tls_call_insn.
+ (s390_emit_tls_call_insn): New function.
+ (legitimize_tls_address): Call s390_emit_tls_call_insn instead of
+ emit_call_insn.
+ (s390_emit_prologue): Use s390_emit_call instead of emit_call_insn.
+ (s390_emit_epilogue): Like s390_emit_prologue. Parameter for sibcalls
+ added.
+ * config/s390/s390.h (SIBCALL_REGNUM): New macro representing the
+ register number used to hold the target address for sibcalls.
+ * config/s390/s390.md ("sibcall", "sibcall_value", "sibcall_epilogue"):
+ New expanders.
+ ("*sibcall_br", "*sibcall_brc", "*sibcall_brcl", "*sibcall_value_br",
+ "*sibcall_value_brc", "*sibcall_value_brcl"): New insns.
+ ("call_exp", "call_value_exp", "call_value_tls", "call_value_tls_exp"):
+ Expanders removed.
+ ("call", "call_value"): Call s390_emit_call to emit the call patterns.
+ ("*bras", "*brasl", "*bras_r", "*brasl_r", "*bras_tls", "*brasl_tls",
+ "*basr", "*basr_r", "*basr_tls"): Added constraint: !SIBLING_CALL_P.
+ ("epilogue"): Changed the call to s390_emit_epilogue to use the
+ new parameter.
+
+2004-04-30 Kazu Hirata <kazu@cs.umass.edu>
+
+ * bb-reorder.c, c-opts.c, cfglayout.c, cgraph.c, cgraphunit.c,
+ cppfiles.c, fold-const.c, ggc-zone.c, loop-doloop.c, optabs.c,
+ reg-stack.c, varasm.c, config/alpha/ev4.md,
+ config/alpha/ev5.md, config/alpha/ev6.md, config/arm/arm.c,
+ config/c4x/c4x.c, config/c4x/c4x.md, config/cris/cris.c,
+ config/cris/cris.h, config/fr30/fr30.h, config/frv/frv.c,
+ config/frv/frv.h, config/frv/frv.md, config/h8300/h8300.c,
+ config/i386/i386.c, config/i386/i386.md, config/i386/winnt.c,
+ config/ia64/itanium2.md, config/ip2k/ip2k.c,
+ config/mips/mips.c, config/mips/mips.h, config/mips/sr71k.md,
+ config/pa/pa.c, config/s390/s390.c, config/sh/sh.c: Fix
+ comment typos.
+
+2004-04-30 Paul Brook <paul@codesourcery.com>
+
+ * config.gcc: Default ep9312 to hard-float.
+ * config/arm/arm-cores.def: Add ARCH field.
+ * config/arm/arm.c (FL_FOR_ARCH*): Define.
+ (arm_arch_cirrus): New variable.
+ (all_cores): Set and use arch.
+ (all_architectures): Ditto.
+ (arm_arch_name): New variable.
+ (arm_override_options): Set it. Use [SUB]TARGET_CPU_DEFAULT.
+ Set and use arm_arch_cirrus.
+ * config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Set arch defines.
+ (enum processor_type): Update ARM_CORE define.
+ (enum target_cpus): Add. Replaces TARGET_CPU_* defines.
+ (CPP_SPEC): Remove %(cpp_cpu_arch).
+ (CPP_ARCH_DEFAULT_SPEC): Remove.
+ (CPP_CPU_ARCH_SPEC): Remove.
+ (EXTRA_SPECS): Don't use CPP_*ARCH*_SPEC.
+ (FPUTYPE_DEFAULT): Don't define here.
+
+2004-04-30 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * flow.c (propagate_one_insn): Call mark_set_regs for stack pointer
+ updates too.
+
+2004-04-30 Paul Brook <paul@codesourcery.com>
+
+ * arm.c (arm_needs_doubleword_align): Use mode alignment.
+
+2004-04-30 Paolo Bonzini <bonzini@gnu.org>
+
+ * config/altivec/altivec.h [__cplusplus] (vec_subsubs): Rename to
+ vec_sububs.
+ [__cplusplus] (vec_subsuhs): Rename to vec_subuhs, without
+ duplicates.
+
+2004-04-30 Uros Bizjak <uros@kss-loka.si>
+
+ * config/i386/i386.md (atansf2, atandf2, atanxf2): Move near
+ atan2?f3 expanders.
+
+2004-04-29 Nick Clifton <nickc@redhat.com>
+
+ Bug 14093
+ * config/sh/sh-protos.h (sh_promote_prototypes): Declare.
+ * config/sh/sh.c (sh_promote_prototypes): Remove declaration.
+ Delete static from definition.
+ * config/sh/sh.h (FUNCTION_VALUE): Add sh_promote_prototypes call.
+
+2004-04-30 Uros Bizjak <uros@kss-loka.si>
+
+ * reg-stack.c (subst_stack_regs_pat): <UNSPEC_SIN, UNSPEC_COS,
+ UNSPEC_FRNDINT, UNSPEC_F2XM1>: abort() if src1 dies.
+ <UNSPEC_SINCOS_COS, UNSPEC_TAN_ONE, UNSPEC_XTRACT_FRACT>: Same.
+ <UNSPEC_SINCOS_SIN, UNSPEC_TAN_TAN, UNSPEC_XTRACT_EXP>: Same.
+
+2004-04-29 Richard Guenther <richard.guenther@uni-tuebingen.de>
+
+ * commom.opt (Wfatal-errors): Add it.
+ * diagnostic.c (flag_fatal_errors): Define it.
+ (diagnostic_action_after_output): Check for flag_fatal_errors.
+ * flags.h (flag_fatal_errors): Declare it.
+ * opts.c (common_handle_option): Add OPT_Wfatal_errors.
+ * doc/invoke.texi (Warning Options): Document -Wfatal-errors.
+
+2004-04-30 Josef Zlomek <zlomekj@suse.cz>
+
+ * gcse.c (remove_reachable_equiv_notes): Delete notes also in
+ blocks which have kill flag set.
+
+2004-04-29 Ben Elliston <bje@au.ibm.com>
+
+ * configure.ac (--with-as): Abort if user-supplied assembler
+ cannot be executed.
+ (--with-ld): Likewise for the linker.
+ * configure: Regenerate.
+
+2004-04-29 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * convert.c (convert_to_integer): Ensure `long_integer_type_node'
+ isn't NULL before using it.
+
+2004-04-29 Richard Sandiford <rsandifo@redhat.com>
+
+ PR target/15189
+ * config/mips/mips.md (load_df_low): Use default length.
+ (load_df_high, store_df_high): Likewise.
+
+2004-04-29 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/mips/mips.md, config/mips/sb1.md,
+ config/rs6000/rs6000.c: Fix comment typos.
+
+2004-04-29 Kazu Hirata <kazu@cs.umass.edu>
+
+ * builtins.c, cgraph.c, cgraphunit.c, final.c, fold-const.c:
+ Fix comment typos.
+
+2004-04-29 Douglas B Rupp <rupp@gnat.com>
+
+ * gcc.c (DELETE_IF_ORDINARY): New macro default definition.
+ (delete_if_ordinary): Use above macro.
+ * config/alpha/xm-vms.h (DELETE_IF_ORDINARY): New macro VMS definition.
+ Update copyright.
+ * doc/hostconfig.texi (DELETE_IF_ORDINARY): Document new macro.
+
+2004-04-29 Richard Earnshaw <rearnsha@arm.com>
+
+ * c-decl.c (get_parm_info): Use the correct tag keywords when
+ warning about type declarations in prototypes.
+
+2004-04-29 Paul Brook <paul@codesourcery.com>
+
+ * config.gcc: Pull list of cores from arm-cores.def.
+
+2004-04-29 Paolo Bonzini <bonzini@gnu.org>
+
+ * combine.c (combine_simplify_rtx): Adjust call to use
+ simplify_relational_operation. Do not use SELECT_CC_MODE
+ when a comparison already has a MODE_CC mode.
+
+2004-04-29 Paolo Bonzini <bonzini@gnu.org>
+
+ (simplify_set): simplify_relational_operation may now
+ return another relational expression.
+ * cse.c (fold_rtx): simplify_relational_operation now
+ takes of computing the comparison mode.
+ * dojump.c (compare_from_rtx): Use simplify_relational_operation,
+ remove dead code.
+ (do_compare_rtx_and_jump): Likewise.
+ * integrate.c (subst_constants): simplify_relational_operation
+ may now return another relational expression.
+ * simplify-rtx.c (simplify_gen_relational): Move most code to
+ the new simplify_relational_operation and
+ simplify_relational_operation_1 functions.
+ (simplify_relational_operation): Rewritten.
+ (simplify_relational_operation_1): New function.
+ (simplify_ternary_operation): simplify_relational_operation
+ may now return another relational expression.
+ (simplify_rtx): Remove unnecessary temp variable.
+
+2004-04-29 Uros Bizjak <uros@kss-loka.si>
+
+ * reg-stack.c (swap_to_top): New function.
+ (subst_stack_regs_pat): UNSPEC_FPATAN, UNSPEC_FYL2X: Use
+ swap_to_top().
+ (subst_stack_regs_pat): UNSPEC_FSCALE: Remove.
+ (subst_stack_regs_pat): Handle UNSPEC_FSCALE_FRACT and
+ UNSPEC_FSCALE_EXP.
+
+ * config/i386/i386.md (UNSPEC_FSCALE): Remove.
+ (*fscale_sfxf3, *fscale_dfxf3, *fscale_xf3): Remove insn pattern.
+ (UNSPEC_FSCALE_FRACT, UNSPEC_FSCALE_EXP): New unspecs to represent
+ x87's fscale insn.
+ (*fscalexf4: Define new insn pattern to implement x87 fscale insn.
+ (exp?f2, exp10?f2, exp2?f2): Use *fscalexf4 and float_truncate
+ patterns.
+
+2004-04-28 Serge Belyshev <1319@bot.ru>
+
+ PR 14944
+ * coverage.c (read_counts_file): Fix usage of warning () call.
+ * pretty-print.c (pp_base_format_text): Fix typo in the comment.
+
+2004-04-28 Ben Elliston <bje@au.ibm.com>
+
+ * doc/invoke.texi (Objective-C Dialect Options): Don't prefix
+ options with "-" in the option index.
+ (SPARC Options): Likewise.
+ (M32R/D Options): Likewise.
+
+2004-04-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * convert.c (convert_to_integer): Convert (long)round -> lround,
+ etc.
+
+2004-04-28 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * config/rs6000/rs6000.c (registers_ok_for_quad_peep):
+ Return false if we do not have fp register.
+ (addrs_ok_for_quad_peep): Rename to ...
+ (mems_ok_for_quad_peep): this.
+ Add check for volatile memory.
+ * config/rs6000/rs6000-protos.h (addrs_ok_for_quad_peep):
+ Rename to ...
+ (mems_ok_for_quad_peep): this.
+ * config/rs6000/rs6000.md: Change peephole's for lfq/stq
+ to peephole2's.
+ (lfq_power2): New instruction.
+ (stfq_power2): Likewise.
+
+2004-04-28 Jan Hubicka <jh@suse.cz>
+
+ PR c/15004
+ * function.c (do_warn_unused_parameter): Break out form ...
+ (expand_function_end): ... here; warn only when not using cgraphunit.
+ * function.h (do_warn_unused_parameter): Declare.
+ * cgraphunit.c: Include function.h.
+ (cgraph_finalize_function): Do unused parameter warning.
+ * Makefile.in (cgraphunit.o): Depend on function.h
+
2004-04-28 Joseph S. Myers <jsm@polyomino.org.uk>
* Makefile.in ($(DESTDIR)$(infodir)/%.info): Don't condition
@@ -26,7 +1022,7 @@
2004-04-28 Ulrich Weigand <uweigand@de.ibm.com>
- * gcse.c (find_moveable_store): Do not accept store insns with
+ * gcse.c (find_moveable_store): Do not accept store insns with
REG_EH_REGION note.
2004-04-28 Paul Brook <paul@codesourcery.com>
@@ -60,7 +1056,7 @@
callers.
(multiple_reg_loc_descriptor, reg_loc_descriptor): Use gcc register
number for indexing hard_regno_nregs array.
-
+
2004-04-27 Geoffrey Keating <geoffk@apple.com>
* config/darwin.h (STARTFILE_SPEC): Use %s to find crt2.o.
diff --git a/gcc/ChangeLog.tree-ssa b/gcc/ChangeLog.tree-ssa
index 2788d524e72..cf077aa1e36 100644
--- a/gcc/ChangeLog.tree-ssa
+++ b/gcc/ChangeLog.tree-ssa
@@ -1,3 +1,8 @@
+2004-05-11 Diego Novillo <dnovillo@redhat.com>
+
+ * tree-cfg.c (delete_tree_cfg): Update call to
+ free_basic_block_vars.
+
2004-05-10 Diego Novillo <dnovillo@redhat.com>
* tree-ssa-live.h: Fix typo in #include guard.
@@ -138,6 +143,22 @@
(disband_implicit_edges): Unfactor computed gotos without
using them.
+2004-04-23 Per Bothner <per@bothner.com>
+
+ * expr.c (expr_wfl_stack): Remove unused global.
+
+ Pre-patches for future source_location / location_t merge.
+ * tree.h (EXPR_LOCATION, EXPR_HAS_LOCATION): New macros.
+ * expr.c (expand_expr_real, expand_expr_real_1): Use new macros.
+ * gimple-low.c (lower_stmt): Likewise.
+ * gimplify.c (annotate_all_with_locus): Likewise.
+ * print-tree.c (print_node): Likewise.
+ * tree-inline.c (expand_call_inline): Likewise.
+ * tree-pretty-print.c (tree-pretty-print.c): Likewise.
+ * tree-sra.c (scalarize_structure_assignment, emit_scalar_copies,
+ scalarize_call_expr): Likewise.
+ * tree-ssa-pre.c (code_motion): Likewise.
+
2004-04-23 Andrew Pinski <pinskia@physics.uc.edu>
* c-simplify.c (gimplify_decl_stmt) [TYPE_DECL]:
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index f7de037a358..bfeaa0c37ca 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1819,7 +1819,8 @@ cgraph.o : cgraph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
langhooks.h toplev.h flags.h $(GGC_H) $(TARGET_H) cgraph.h gt-cgraph.h \
output.h intl.h
cgraphunit.o : cgraphunit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
- langhooks.h tree-inline.h toplev.h flags.h $(GGC_H) $(TARGET_H) cgraph.h intl.h
+ langhooks.h tree-inline.h toplev.h flags.h $(GGC_H) $(TARGET_H) cgraph.h intl.h \
+ function.h
coverage.o : coverage.c gcov-io.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(RTL_H) $(TREE_H) flags.h output.h $(REGS_H) $(EXPR_H) function.h \
toplev.h $(GGC_H) $(TARGET_H) langhooks.h $(COVERAGE_H) libfuncs.h \
diff --git a/gcc/ada/50system.ads b/gcc/ada/50system.ads
deleted file mode 100644
index e3277e56789..00000000000
--- a/gcc/ada/50system.ads
+++ /dev/null
@@ -1,163 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks/HIE Version PPC) --
--- --
--- Copyright (C) 1992-2003 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 --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is 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, 59 Temple Place - Suite 330, Boston, --
--- MA 02111-1307, 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. --
--- --
-------------------------------------------------------------------------------
-
-pragma Restrictions (No_Exception_Handlers);
-pragma Restrictions (No_Implicit_Dynamic_Code);
-pragma Restrictions (No_Finalization);
-pragma Discard_Names;
-
-package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to
--- make this unit Pure instead of Preelaborable, see RM 13.7(36)
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := Long_Long_Integer'First;
- Max_Int : constant := Long_Long_Integer'Last;
-
- Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size;
- Max_Nonbinary_Modulus : constant := Integer'Last;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := 63;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := High_Order_First;
-
- -- Priority-related Declarations (RM D.1)
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- AAMP : constant Boolean := False;
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := False;
- Command_Line_Args : constant Boolean := False;
- Configurable_Run_Time : constant Boolean := True;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := True;
- Exit_Status_Supported : constant Boolean := True;
- Fractional_Fixed_Ops : constant Boolean := False;
- Frontend_Layout : constant Boolean := False;
- Functions_Return_By_DSP : constant Boolean := False;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- OpenVMS : constant Boolean := False;
- Signed_Zeros : constant Boolean := True;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := False;
- Support_64_Bit_Divides : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Suppress_Standard_Library : constant Boolean := True;
- Use_Ada_Main_Program_Name : constant Boolean := True;
- ZCX_By_Default : constant Boolean := False;
- GCC_ZCX_Support : constant Boolean := False;
- Front_End_ZCX_Support : constant Boolean := False;
-
- -- Obsolete entries, to be removed eventually (bootstrap issues!)
-
- High_Integrity_Mode : constant Boolean := True;
- Long_Shifts_Inlined : constant Boolean := False;
-
-end System;
diff --git a/gcc/ada/59system.ads b/gcc/ada/59system.ads
deleted file mode 100644
index f155af878b0..00000000000
--- a/gcc/ada/59system.ads
+++ /dev/null
@@ -1,164 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (PPC ELF Version) --
--- --
--- Copyright (C) 1992-2003 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 --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is 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, 59 Temple Place - Suite 330, Boston, --
--- MA 02111-1307, 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. --
--- --
-------------------------------------------------------------------------------
-
-pragma Restrictions (No_Exception_Handlers);
-pragma Restrictions (No_Implicit_Dynamic_Code);
-pragma Restrictions (No_Finalization);
-pragma Discard_Names;
--- Above pragmas need commenting ???
-
-package System is
-pragma Pure (System);
--- Note that we take advantage of the implementation permission to
--- make this unit Pure instead of Preelaborable, see RM 13.7(36)
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := Long_Long_Integer'First;
- Max_Int : constant := Long_Long_Integer'Last;
-
- Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size;
- Max_Nonbinary_Modulus : constant := Integer'Last;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := 63;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := High_Order_First;
-
- -- Priority-related Declarations (RM D.1)
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- AAMP : constant Boolean := False;
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := False;
- Command_Line_Args : constant Boolean := False;
- Configurable_Run_Time : constant Boolean := True;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := True;
- Exit_Status_Supported : constant Boolean := False;
- Fractional_Fixed_Ops : constant Boolean := False;
- Frontend_Layout : constant Boolean := False;
- Functions_Return_By_DSP : constant Boolean := False;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- OpenVMS : constant Boolean := False;
- Signed_Zeros : constant Boolean := True;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := False;
- Support_64_Bit_Divides : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Suppress_Standard_Library : constant Boolean := True;
- Use_Ada_Main_Program_Name : constant Boolean := False;
- ZCX_By_Default : constant Boolean := False;
- GCC_ZCX_Support : constant Boolean := False;
- Front_End_ZCX_Support : constant Boolean := False;
-
- -- Obsolete entries, to be removed eventually (bootstrap issues!)
-
- High_Integrity_Mode : constant Boolean := True;
- Long_Shifts_Inlined : constant Boolean := False;
-
-end System;
diff --git a/gcc/ada/5qsystem.ads b/gcc/ada/5qsystem.ads
index 4d17cdacde5..c8b94936ded 100644
--- a/gcc/ada/5qsystem.ads
+++ b/gcc/ada/5qsystem.ads
@@ -62,7 +62,7 @@ pragma Pure (System);
-- Storage-related Declarations
- type Address is private;
+ type Address is new Long_Integer;
Null_Address : constant Address;
Storage_Unit : constant := 8;
@@ -83,6 +83,18 @@ pragma Pure (System);
pragma Import (Intrinsic, ">=");
pragma Import (Intrinsic, "=");
+ -- Abstract declarations for arithmetic operations on type address.
+ -- These declarations are needed when Address is non-private. They
+ -- avoid excessive visibility of arithmetic operations on address
+ -- which are typically available elsewhere (e.g. Storage_Elements)
+ -- and which would cause excessive ambiguities in application code.
+
+ function "+" (Left, Right : Address) return Address is abstract;
+ function "-" (Left, Right : Address) return Address is abstract;
+ function "/" (Left, Right : Address) return Address is abstract;
+ function "*" (Left, Right : Address) return Address is abstract;
+ function "mod" (Left, Right : Address) return Address is abstract;
+
-- Other System-Dependent Declarations
type Bit_Order is (High_Order_First, Low_Order_First);
@@ -101,7 +113,6 @@ pragma Pure (System);
private
- type Address is mod Memory_Size;
Null_Address : constant Address := 0;
--------------------------------------
diff --git a/gcc/ada/5vinmaop.adb b/gcc/ada/5vinmaop.adb
index 3d770f2bed9..2cbfd0eb715 100644
--- a/gcc/ada/5vinmaop.adb
+++ b/gcc/ada/5vinmaop.adb
@@ -37,6 +37,9 @@
with System.OS_Interface;
-- used for various type, constant, and operations
+with System.Aux_DEC;
+-- used for Short_Address
+
with System.Parameters;
with System.Tasking;
@@ -114,7 +117,7 @@ package body System.Interrupt_Management.Operations is
--------------------
function To_unsigned_long is new
- Unchecked_Conversion (System.Address, unsigned_long);
+ Unchecked_Conversion (System.Aux_DEC.Short_Address, unsigned_long);
function Interrupt_Wait (Mask : access Interrupt_Mask)
return Interrupt_ID
diff --git a/gcc/ada/5vsystem.ads b/gcc/ada/5vsystem.ads
index 3a66df33bfe..fc4fb2e6d6f 100644
--- a/gcc/ada/5vsystem.ads
+++ b/gcc/ada/5vsystem.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (OpenVMS DEC Threads Version) --
-- --
--- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2004 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/5xsystem.ads b/gcc/ada/5xsystem.ads
index c7fa20898df..3ba5e692195 100644
--- a/gcc/ada/5xsystem.ads
+++ b/gcc/ada/5xsystem.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (OpenVMS GCC_ZCX DEC Threads Version) --
-- --
--- Copyright (C) 2002-2003 Free Software Foundation, Inc. --
+-- Copyright (C) 2002-2004 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/ChangeLog b/gcc/ada/ChangeLog
index cec1af4bc24..6c3ddc3eef9 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,482 @@
+2004-05-10 Doug Rupp <rupp@gnat.com>
+
+ * 5qsystem.ads: Remove Short_Address subtype declaration. Moved to
+ system.aux_dec.
+
+ * s-auxdec.ads: Add Short_Address subtype (moved here from System).
+
+ * Makefile.in: [VMS]: Add translation for 5qauxdec.ads.
+
+ * init.c: [VMS] Macroize LIB$ calls for IA64 and Alpha.
+ Fixes undefined symbols in IA64 gnatlib.
+
+ * 5vinmaop.adb: Reference s-auxdec for Short_Address.
+
+ * 5xsystem.ads, 5vsystem.ads: Back out last change (addition of subtype
+ Short_Address). This will be moved to system.auxdec.
+
+2004-05-10 Thomas Quinot <quinot@act-europe.fr>
+
+ * sem_util.adb: Replace test for presence of a node that is always
+ present with a call to Discard_Node.
+
+ * sem_ch10.adb (Analyze_Compilation_Unit): Remove superfluous call to
+ Analyze on the library unit node after generation of distribution stub
+ constructs. The call was a no-op because Unit_Node has already been
+ Analyzed, and the tree fragments for the distribution stubs are
+ analyzed as they are inserted in Exp_Dist.
+ Update comment regarding to distribution stubs to reflect that we
+ do not generate stub in separate files anymore.
+
+ * einfo.ads: Clarify the fact that a tagged private type has the
+ E_Record_Type_With_Private Ekind.
+
+ * erroutc.adb: Minor reformatting
+
+ * erroutc.ads (Max_Msg_Length): Increase to cover possible larger
+ values if line length is increased using -gnatyM (noticed during code
+ reading).
+
+ * eval_fat.adb: Minor reformatting
+ Put spaces around exponentiation operator
+
+2004-05-10 Ed Schonberg <schonberg@gnat.com>
+
+ PR ada/15005
+ * sem_util.adb (Is_Dependent_Component_Of_Mutable_Object): If prefix
+ has been rewritten as an explicit dereference, retrieve type of
+ original node to check for possibly unconstrained record type.
+
+2004-05-10 Ed Schonberg <schonberg@gnat.com>
+
+ * exp_ch7.adb (Check_Visibly_Controlled): If given operation is not
+ overriding, use the operation of the parent unconditionally.
+
+ * sem_ch4.adb (Remove_Address_Interpretations): Remove address
+ operation when either operand is a literal, to avoid further
+ ambiguities.
+
+ * sem_ch6.adb (New_Overloaded_Entity): If new entity is inherited and
+ overridden by a previous explicit declaration, mark the previous entity
+ as overriding.
+
+ * sem_disp.adb (Check_Dispatching_Operation): New predicate
+ Is_Visibly_Controlled, to determine whether a declaration of a
+ primitive control operation for a derived type overrides an inherited
+ one. Add warning if the explicit declaration does not override.
+
+2004-05-10 Vincent Celier <celier@gnat.com>
+
+ * gnatls.adb (Gnatls): Initialize Snames, to avoid assertion error in
+ some cases when the sources are no longer present.
+
+ * make.adb (Collect_Arguments): Fail if an external source, not part
+ of any project need to be compiled, when switch -x has not been
+ specified.
+
+ * makeusg.adb: Document new switch -x
+
+ * opt.ads (External_Unit_Compilation_Allowed): New Boolean flag,
+ defaulted to False.
+
+ * switch-m.adb (Scan_Make_Switches): New switch -x
+
+ * vms_data.ads: Add VMS qualifier /NON_PROJECT_UNIT_COMPILATION for
+ gnatmake switch -x.
+
+ * gnat_ugn.texi: Document new gnatmake switch -x
+
+2004-05-10 Eric Botcazou <ebotcazou@act-europe.fr>
+
+ * misc.c (gnat_init_options): Set flag_zero_initialized_in_bss to 0.
+
+ * utils.c (create_var_decl): Do not modify the DECL_COMMON flag.
+ (process_attributes): Likewise.
+
+2004-05-10 Joel Brobecker <brobecker@gnat.com>
+
+ * s-inmaop.ads: Fix spelling mistake in one of the comments.
+
+2004-05-10 Robert Dewar <dewar@gnat.com>
+
+ * gnat_ugn.texi: Document that for config pragma files, the maximum
+ line length is always 32767.
+
+ * gnat_rm.texi: For pragma Eliminate, note that concatenation of string
+ literals is now allowed.
+
+ * gnat-style.texi: Remove statement about splitting long lines before
+ an operator rather than after, since we do not follow this rule at all.
+ Clarify rule (really lack of rule) for spaces around exponentiation
+
+ * sem_elim.adb: Allow concatenation of string literals as well as a
+ single string literal for pragma arguments.
+
+ * sem_prag.ads, sem_prag.adb: (Is_Config_Static_String): New function
+
+ * a-textio.adb (Terminate_Line): Do not add line feed if nothing
+ written for append case.
+
+ * frontend.adb: Changes to avoid checking max line length in config
+ pragma files.
+
+ * g-os_lib.ads: Minor reformatting
+
+ * mlib-utl.adb: Do not define Max_Line_Length locally (definition was
+ wrong in any case. Instead use standard value. Noticed during code
+ reading.
+
+ * opt.ads (Max_Line_Length): New field, used to implement removal of
+ limitation on length of lines when scanning config pragma files.
+
+ * osint.ads, prj-dect.adb, prj-strt.adb, prj-tree.adb,
+ makeutl.ads, makeutl.adb: Minor reformatting
+
+ * scn.adb: Do not check line length while scanning config pragma files
+ Do not check line length while scanning out license information
+
+ * scng.adb: Changes to avoid line length checks while parsing config
+ pragma files.
+
+2004-05-10 GNAT Script <nobody@gnat.com>
+
+ * Make-lang.in: Makefile automatically updated
+
+2004-05-05 Arnaud Charlet <charlet@act-europe.fr>
+
+ * osint.adb (Find_Program_Name): Fix handling of VMS version
+ number.
+
+2004-05-05 Emmanuel Briot <briot@act-europe.fr>
+
+ * g-os_lib.ads (Invalid_Time): New constant
+
+ * adaint.h, adaint.c (__gnat_file_time_name, __gnat_file_time_fd): Now
+ return OS_Time instead of time_t to match what is imported by Ada.
+ Now return -1 if the file doesn't exist, instead of a random value
+
+2004-05-05 Robert Dewar <dewar@gnat.com>
+
+ * usage.adb: Add line for -gnatR?s switch
+
+ * sem_ch13.adb, exp_ch2.adb: Minor reformatting
+
+ * g-regpat.ads, g-regpat.adb: Add documentation on handling of Size
+ and for Match (Data_First, Data_last)
+
+ * lib-writ.adb (Write_With_Lines): Ensure that correct index number is
+ written when we are dealing with multi-unit files.
+
+2004-05-05 Jerome Guitton <guitton@act-europe.fr>
+
+ * Makefile.in: Remove unused targets and variables.
+
+2004-05-05 Vincent Celier <celier@gnat.com>
+
+ * switch-m.adb: New gnatmake switch -eI
+
+ * vms_data.ads: Add VMS equivalents of new gnatclean swith -innn and
+ of new gnatmake switch -eInnn.
+
+ * makegpr.adb: Take into account new parameters Index and Src_Index in
+ Prj.Util.
+
+ * clean.adb: Implement support for multi-unit sources, including new
+ switch -i.
+
+ * gnatcmd.adb (GNATCmd): Call Prj.Util.Value_Of with new parameter
+ Src_Index.
+
+ * make.ads, make.adb (Insert_Q): New parameter Index, defaulted to 0
+ (Extract_From_Q): New out parameter Index
+ (Mark, Is_Marked): Subprograms moved to Makeutl
+ (Switches_Of): New parameter Source_Index
+ (Add_Switch): New parameter Index
+ (Check): New parameter Source_Index
+ (Collect_Arguments): New parameter Source_Index
+ (Collect_Arguments_And_Compile): New parameter Source_Index
+ (Compile): New parameter Source_Index
+ Put subprograms in alphabetical order
+ Add support for multi-source sources, including in project files.
+
+ * makeutl.ads, makeutl.adb (Unit_Index_Of): New function
+ (Mark, Is_Marked, Delete_All_Marks): New subprograms, moved from
+ Make.
+
+ * makeusg.adb: New gnatmake switch -eInnn
+
+ * mlib-prj.adb (Build_Library): Add new parameter Src_Index to call to
+ Prj.Util.Value_Of.
+
+ * opt.ads (Main_Index): New variable, defaulted to 0.
+
+ * osint.ads, osinte.adb (Add_File): New parameter Index
+ (Current_Source_Index): New function
+
+ * prj.adb: Take into account new components Index and Src_Index
+
+ * prj.ads (String_Element): New component Index
+ (Variable_Value): New component Index
+ (Array_Element): New component Src_Index
+
+ * prj-attr.adb: Indicate that optional index may be specified for
+ attributes Main, Executable, Spec, Body and some of Switches.
+
+ * prj-attr.ads (Attribute_Kind): New values for optional indexes
+ (Attribute_Record): New component Optional_Index
+
+ * prj-com.ads (File_Name_Data): New component Index
+
+ * prj-dect.adb (Parse_Attribute_Declaration): Process optional index
+
+ * prj-env.adb (Put): Output optional index
+
+ * prj-makr.adb: Put indexes for multi-unit sources in SFN pragmas and
+ attributes Spec and Body.
+
+ * prj-nmsc.adb: Process optional indexes
+
+ * prj-pp.adb: Ouput "at" for optional indexes
+
+ * prj-proc.adb: Take into account optional indexes
+
+ * prj-strt.ads, prj-strt.adb (Terms): New Boolean parameter
+ Optional_Index. For string literal,
+ process optional index when Optional_Index is True.
+ (Parse_Expresion): New Boolean parameter Optional_Index
+
+ * prj-tree.ads, prj-tree.adb (Source_Index_Of): New function
+ (Set_Source_Index_Of): New procedure
+
+ * prj-util.adb (Executable_Of, Value_Of): Take into account optional
+ index.
+
+ * prj-util.ads (Executable_Of): New parameter Index
+ (Value_Of (Name_Id, Array_Element_Id) returning Variable_Value):
+ New parameter Src_Index, defaulted to 0.
+
+2004-05-05 Ed Schonberg <schonberg@gnat.com>
+
+ PR ada/15257
+ * sem_ch3.adb (Access_Definition): If this is an access parameter
+ whose designated type is imported through a limited_with clause, do
+ not add the enclosing subprogram to the list of private dependents of
+ the type.
+
+2004-05-05 Ed Schonberg <schonberg@gnat.com>
+
+ PR ada/15258
+ * sem_ch6.adb (Base_Types_Match): True if one type is imported through
+ a limited_with clause, and the other is its non-limited view.
+
+2004-05-05 Thomas Quinot <quinot@act-europe.fr>
+
+ * cstand.adb (Create_Standard): Initialize Stand.Boolean_Literals.
+
+ * exp_attr.adb, exp_ch5.adb, exp_ch9.adb, exp_disp.adb,
+ exp_fixd.adb, sem_attr.adb, sem_dist.adb, sem_util.adb: Use
+ Stand.Boolean_Literals to produce references to entities
+ Standard_False and Standard_True from compile-time computed boolean
+ values.
+
+ * stand.ads (Boolean_Literals): New variable, provides the entity
+ values for False and True, for use by the expander.
+
+2004-05-05 Doug Rupp <rupp@gnat.com>
+
+ * 5vinmaop.adb, 5[vx]system.ads: Add Short_Address subtype
+ 5vinmaop.adb: Unchecked convert Short_Address vice Address
+
+ * adaint.c, raise.c: Caste CRTL function return value
+ to avoid gcc error on 32/64 bit IVMS.
+
+ * Makefile.in [VMS]: Use iar archiver if host = Alpha/VMS and
+ target = IA64/VMS.
+
+ * init.c[VMS]: Only call Alpha specific __gnat_error_prehandler IN_RTS.
+
+ * 5qsystem.ads (Address): Declare as Long_Integer
+ (Short_Address): Declare as 32 bit subtype of Address
+ Declare abstract address operations to avoid gratuitous ambiguities.
+
+2004-05-05 Jose Ruiz <ruiz@act-europe.fr>
+
+ * gnat_rm.texi: Use the new restriction Simple_Barriers (AI-249)
+ instead of the old Boolean_Entry_Barriers.
+ Ditto for No_Task_Attributes_Package instead of No_Task_Attributes.
+
+2004-05-05 GNAT Script <nobody@gnat.com>
+
+ * Make-lang.in: Makefile automatically updated
+
+2004-05-03 Arnaud Charlet <charlet@act-europe.fr>
+
+ * 50system.ads, 59system.ads, s-thread.ads: Removed, no longer used.
+
+2004-05-03 Olivier Hainque <hainque@act-europe.fr>
+
+ PR ada/15152
+
+ * exp_ch2.adb (Expand_Current_Value): Leave Machine_Code Asm arguments
+ alone. Replacing object references by literals is inappropriate in a
+ so low level context.
+
+2004-05-03 Arnaud Charlet <charlet@act-europe.fr>
+
+ * a-exexpr.adb: Add comments
+
+2004-05-03 Joel Brobecker <brobecker@gnat.com>
+
+ * a-tags.adb (Tag_Table): Add Index_Check pragma Suppress. Allows us to
+ declare the Ancestor_Tags array in Type_Specific_Data with a small size
+ without risking a bounds check error when accessing one of its
+ components.
+ (Type_Specific_Data): Define Ancestor_Tags as a small array.
+ This prevents us from hitting a limitation during the debug info
+ generation when using stabs.
+
+ * a-tags.adb (Dispatch_Table): Define the Prims_Ptr component as a
+ small array.
+ This prevents us from hitting a limitation during the debug info
+ generation when using stabs.
+
+2004-05-03 Eric Botcazou <ebotcazou@act-europe.fr>
+
+ lang-specs.h: Remove -gnatz* from specs.
+
+2004-05-03 Vincent Celier <celier@gnat.com>
+
+ * gprmake.adb, makegpr.ads, makegpr.adb: New files.
+
+ * Make-lang.in, Makefile.in: Add gprmake
+
+2004-05-03 Thomas Quinot <quinot@act-europe.fr>
+
+ * sem_aggr.adb: Fix typo in comment.
+
+2004-05-03 Robert Dewar <dewar@gnat.com>
+
+ * make.adb: Minor reformatting
+
+ * rtsfind.ads, rtsfind.adb: (RTU_Loaded): New function
+
+ * sem_attr.adb (Eval_Attribute, case Type_Class): Fix check for address
+ so that it works when address is not a private type.
+
+ * sem_ch13.adb (Check_Expr_Constants, case N_Integer_Literal): Deal
+ properly with rewritten unchecked conversions. This prevents
+ order-of-elaboration issues that can otherwise arise.
+ (Minimum_Size): Don't check size of access types under VMS
+
+ * sem_ch4.adb (Remove_Address_Interpretation): New circuit to remove
+ interpretations of integer literals as type System.Address.
+
+ * sem_util.ads, sem_util.adb (Is_Descendent_Of_Address): New function
+ (Is_Descendent_Of): New function
+
+2004-05-03 Jose Ruiz <ruiz@act-europe.fr>
+
+ * sem_prag.adb: Boolean_Entry_Barriers is a synonym of Simple_Barriers.
+ Max_Entry_Queue_Depth is a synonym of Max_Entry_Queue_Length.
+ No_Dynamic_Interrupts is a synonym of No_Dynamic_Attachment.
+
+ * sem_res.adb: Use the new restriction Max_Entry_Queue_Length instead
+ of the old Max_Entry_Queue_Depth.
+
+ * snames.adb: Boolean_Entry_Barriers is a synonym of Simple_Barriers.
+ Max_Entry_Queue_Depth is a synonym of Max_Entry_Queue_Length
+ No_Dynamic_Interrupts is a synonym of No_Dynamic_Attachment
+
+ * snames.ads: New entry for proper handling of Boolean_Entry_Barriers.
+ New entry for proper handling of Max_Entry_Queue_Depth.
+ New entry for proper handling of No_Dynamic_Interrupts.
+
+ * s-rident.ads: Adding restriction Simple_Barriers (AI-00249) that
+ supersedes the GNAT specific restriction Boolean_Entry_Barriers.
+ Adding restriction Max_Entry_Queue_Length (AI-00249) that supersedes
+ the GNAT specific restriction Max_Entry_Queue_Depth.
+ Adding restriction No_Dynamic_Attachment (AI-00249) that supersedes
+ the GNAT specific restriction No_Dynamic_Interrupts.
+
+ * restrict.ads, restrict.adb: Use the new restriction Simple_Barriers
+ instead of the old Boolean_Entry_Barriers.
+ Use the new restriction No_Dynamic_Attachment instead of the old
+ No_Dynamic_Interrupts.
+
+ * exp_ch9.adb: Check restriction Simple_Barriers (AI-00249) that
+ supersedes the GNAT specific restriction Boolean_Entry_Barriers.
+
+ * gnatbind.adb: Use the new restriction Max_Entry_Queue_Length instead
+ of the old Max_Entry_Queue_Depth.
+
+2004-05-03 GNAT Script <nobody@gnat.com>
+
+ * Make-lang.in: Makefile automatically updated
+
+2004-04-29 Ed Schonberg <schonberg@gnat.com>
+
+ * checks.adb (Enable_Range_Check): If the prefix of an index component
+ is an access to an unconstrained array, perform check unconditionally.
+
+2004-04-29 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * decl.c (gnat_to_gnu_field): Also call make_packable_type if
+ Component_Clause.
+
+2004-04-29 Olivier Hainque <hainque@act-europe.fr>
+
+ * init.c (__gnat_install_handler, __gnat_error_handler): Remove
+ alternate stack setting. There was no support for the tasking cases
+ and the changes eventually caused a number of side-effect failures in
+ the non-tasking case too.
+
+2004-04-29 Eric Botcazou <ebotcazou@act-europe.fr>
+
+ lang-specs.h: Redirect output to /dev/null if -gnatc or -gnatz or
+ -gnats is passed.
+
+2004-04-29 Vincent Celier <celier@gnat.com>
+
+ * make.adb (Gnatmake): Increase max size of argument array for
+ gnatbind for the potential addition of -F.
+ If there are Stand-Alone Library projects, invoke gnatbind with -F to
+ be sure that elaboration flags will be checked.
+
+ * switch-c.adb: Correct call to Scan_Pos for -gnateI
+
+2004-04-29 Thomas Quinot <quinot@act-europe.fr>
+
+ * sem_warn.adb (Check_References): Move '<access-variable> may be
+ null' warning out of under Warn_On_No_Value_Assigned.
+
+2004-04-29 Ed Falis <falis@gnat.com>
+
+ * gnat_ugn.texi: Fixed texi error
+
+2004-04-29 Robert Dewar <dewar@gnat.com>
+
+ * sem_ch4.adb (Remove_Abstract_Operations): Unconditionally remove
+ abstract operations if they come from predefined files.
+
+ * gnat_rm.texi: Fix bad doc for pragma Elaboration_Checks (should be
+ Dynamic, not RM).
+
+ * s-addope.adb: Correct obvious error in mod function
+
+2004-04-28 Andrew W. Reynolds <awreynolds@mac.com>
+
+ * Makefile.in: Add target pairs for powerpc darwin*
+ tasking support.
+
+ * a-intnam-darwin.ads, s-osinte-darwin.adb,
+ s-osinte-darwin.ads, system-darwin-ppc.ads: New files.
+
+2004-04-28 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * Makefile.in: Add target macro definitions for s390*-linux*.
+ * system-linux-s390.ads: New file.
+ * system-linux-s390x.ads: New file.
+
2004-04-28 Joseph S. Myers <jsm@polyomino.org.uk>
* gnat_ugn.texi: Correct argument to @setfilename.
diff --git a/gcc/ada/Make-lang.in b/gcc/ada/Make-lang.in
index 755ba55ed2a..0a6775a438f 100644
--- a/gcc/ada/Make-lang.in
+++ b/gcc/ada/Make-lang.in
@@ -355,6 +355,10 @@ ada.all.cross:
then \
$(MV) gnatsym$(exeext) gnatsym-cross$(exeext); \
fi
+ -if [ -f gprmake$(exeext) ] ; \
+ then \
+ $(MV) gprmake$(exeext) gprmake-cross$(exeext); \
+ fi
-if [ -f gpr2make$(exeext) ] ; \
then \
$(MV) gpr2make$(exeext) gpr2make-cross$(exeext); \
@@ -445,7 +449,7 @@ ada.install-normal:
# and also as either gnatbind (if native) or $(tooldir)/bin/gnatbind
# likewise for gnatf, gnatchop, and gnatlink, gnatkr, gnatmake, gnat,
# gnatprep, gnatbl, gnatls, gnatxref, gnatfind, gnatname, gnatclean,
-# gnatsym
+# gnatsym, gprmake, gpr2make, gprcmd
ada.install-common:
$(MKDIR) $(DESTDIR)$(bindir)
-if [ -f gnat1$(exeext) ] ; \
@@ -640,6 +644,17 @@ ada.install-common:
fi
-if [ -f gnat1$(exeext) ] ; \
then \
+ if [ -f gprmake-cross$(exeext) ] ; \
+ then \
+ $(RM) $(DESTDIR)$(bindir)/$(target_noncanonical)-gprmake$(exeext); \
+ $(INSTALL_PROGRAM) gprmake-cross$(exeext) $(DESTDIR)$(bindir)/$(target_noncanonical)-gprmake$(exeext); \
+ else \
+ $(RM) $(bindir)/gprmake$(exeext); \
+ $(INSTALL_PROGRAM) gprmake$(exeext) $(DESTDIR)$(bindir)/gprmake$(exeext); \
+ fi ; \
+ fi
+ -if [ -f gnat1$(exeext) ] ; \
+ then \
if [ -f gpr2make$(exeext) ] ; \
then \
$(RM) $(DESTDIR)$(bindir)/gpr2make$(exeext); \
@@ -795,6 +810,8 @@ ada.distclean:
-$(RM) gnatxref$(exeext)
-$(RM) gnatclean$(exeext)
-$(RM) gnatsym$(exeext)
+ -$(RM) gpr2make$(exeext)
+ -$(RM) gprmake$(exeext)
# Gnatlbr is only used on VMS
-$(RM) gnatlbr$(exeext)
-$(RM) ada/rts/*
@@ -1095,15 +1112,15 @@ ada/utils2.o : ada/utils2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
#
# GNAT DEPENDENCIES
# regular dependencies
-ada/a-charac.o : ada/ada.ads ada/a-charac.ads ada/system.ads
+ada/a-charac.o : ada/ada.ads ada/a-charac.ads ada/system.ads
ada/a-chlat1.o : ada/ada.ads ada/a-charac.ads ada/a-chlat1.ads \
- ada/system.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/s-traent.ads ada/unchconv.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 \
@@ -1112,14 +1129,14 @@ ada/a-except.o : ada/ada.ads ada/a-except.ads ada/a-except.adb \
ada/s-except.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/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-stoele.adb ada/s-traent.ads ada/unchconv.ads
-ada/ada.o : ada/ada.ads ada/system.ads
+ada/ada.o : ada/ada.ads ada/system.ads
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 \
@@ -1137,7 +1154,7 @@ ada/ali-util.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/ali.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/widechar.ads
ada/ali.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/ali.ads \
ada/ali.adb ada/alloc.ads ada/butil.ads ada/casing.ads ada/debug.ads \
@@ -1149,9 +1166,9 @@ ada/ali.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/ali.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/unchconv.ads ada/unchdeal.ads ada/widechar.ads
-ada/alloc.o : ada/alloc.ads ada/system.ads
+ada/alloc.o : ada/alloc.ads ada/system.ads
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 \
@@ -1165,7 +1182,7 @@ ada/atree.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/alloc.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/unchdeal.ads ada/urealp.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 \
@@ -1182,7 +1199,7 @@ ada/back_end.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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.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 \
@@ -1199,7 +1216,7 @@ ada/bcheck.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/ali-util.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/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 \
@@ -1211,7 +1228,7 @@ ada/binde.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/alloc.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/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 \
@@ -1219,7 +1236,7 @@ ada/binderr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/binderr.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/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 \
@@ -1233,12 +1250,12 @@ ada/bindgen.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/alloc.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/unchdeal.ads
ada/bindusg.o : ada/bindusg.ads ada/bindusg.adb ada/gnat.ads \
ada/g-os_lib.ads ada/g-string.ads ada/osint.ads ada/output.ads \
ada/system.ads ada/s-exctab.ads ada/s-stalib.ads ada/s-unstyp.ads \
- ada/types.ads ada/unchconv.ads ada/unchdeal.ads
+ ada/types.ads ada/unchconv.ads ada/unchdeal.ads
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 \
@@ -1246,7 +1263,7 @@ ada/butil.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/butil.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/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 \
@@ -1255,7 +1272,7 @@ ada/casing.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.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/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 \
@@ -1281,7 +1298,8 @@ ada/checks.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
+ ada/validsw.ads
ada/comperr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
ada/atree.adb ada/casing.ads ada/comperr.ads ada/comperr.adb \
@@ -1299,12 +1317,12 @@ ada/comperr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/unchconv.ads ada/unchdeal.ads ada/urealp.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 \
ada/s-exctab.ads ada/s-stalib.ads ada/s-unstyp.ads ada/s-wchcon.ads \
- ada/types.ads ada/unchconv.ads ada/unchdeal.ads
+ ada/types.ads ada/unchconv.ads ada/unchdeal.ads
ada/cstand.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 \
@@ -1329,9 +1347,9 @@ ada/cstand.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/urealp.ads ada/urealp.adb ada/widechar.ads
-ada/debug.o : ada/debug.ads ada/debug.adb ada/system.ads
+ada/debug.o : ada/debug.ads ada/debug.adb ada/system.ads
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 \
@@ -1344,7 +1362,7 @@ ada/debug_a.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1357,7 +1375,7 @@ ada/einfo.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1365,7 +1383,7 @@ ada/elists.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
@@ -1374,7 +1392,7 @@ ada/err_vars.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
@@ -1392,7 +1410,7 @@ ada/errout.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/unchconv.ads ada/unchdeal.ads ada/urealp.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 \
@@ -1403,7 +1421,7 @@ ada/erroutc.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.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/unchdeal.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 \
@@ -1419,7 +1437,7 @@ ada/eval_fat.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1446,7 +1464,7 @@ ada/exp_aggr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1475,7 +1493,7 @@ ada/exp_attr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/validsw.ads \
- ada/widechar.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 \
@@ -1502,7 +1520,7 @@ ada/exp_ch11.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1519,7 +1537,7 @@ ada/exp_ch12.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1537,7 +1555,7 @@ ada/exp_ch13.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1559,70 +1577,71 @@ ada/exp_ch2.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
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_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/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_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/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/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_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/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/urealp.adb \
- ada/validsw.ads
+ ada/sem_ch13.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/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/urealp.adb ada/validsw.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/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/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 \
@@ -1639,39 +1658,39 @@ ada/exp_ch5.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/widechar.ads
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/exp_ch11.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/eval_fat.ads ada/exp_ch11.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/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 \
@@ -1679,10 +1698,9 @@ ada/exp_ch7.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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-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-sort.adb ada/namet.ads ada/nlists.ads ada/nlists.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/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 \
@@ -1695,7 +1713,7 @@ ada/exp_ch7.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1716,7 +1734,7 @@ ada/exp_ch8.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1744,7 +1762,7 @@ ada/exp_ch9.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1771,7 +1789,7 @@ ada/exp_code.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/widechar.ads
+ ada/widechar.ads
ada/exp_dbug.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 \
@@ -1787,7 +1805,7 @@ ada/exp_dbug.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1815,7 +1833,7 @@ ada/exp_disp.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/widechar.ads
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 \
@@ -1836,7 +1854,7 @@ ada/exp_dist.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.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/unchdeal.ads ada/urealp.ads
ada/exp_fixd.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 \
@@ -1855,7 +1873,7 @@ ada/exp_fixd.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1873,7 +1891,7 @@ ada/exp_imgv.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1901,30 +1919,31 @@ ada/exp_intr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/widechar.ads
+ ada/widechar.ads
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/exp_ch11.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/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_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/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 \
@@ -1944,7 +1963,7 @@ ada/exp_prag.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1961,7 +1980,7 @@ ada/exp_smem.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1978,7 +1997,7 @@ ada/exp_strm.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -1995,7 +2014,7 @@ ada/exp_tss.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2019,7 +2038,7 @@ ada/exp_util.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2034,7 +2053,7 @@ ada/exp_vfpt.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2053,7 +2072,7 @@ ada/expander.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2063,7 +2082,7 @@ ada/fmap.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/alloc.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/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 \
@@ -2074,7 +2093,7 @@ ada/fname-uf.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.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/uname.ads \
- ada/unchconv.ads ada/unchdeal.ads ada/widechar.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 \
@@ -2082,7 +2101,7 @@ ada/fname.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
@@ -2111,7 +2130,7 @@ ada/freeze.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
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/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 \
@@ -2137,32 +2156,32 @@ ada/frontend.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
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/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
+ ada/system.ads
ada/g-htable.o : ada/gnat.ads ada/g-htable.ads ada/g-htable.adb \
- ada/system.ads ada/s-htable.ads
+ ada/system.ads ada/s-htable.ads
ada/g-os_lib.o : ada/ada.ads ada/a-except.ads ada/gnat.ads \
ada/g-os_lib.ads ada/g-os_lib.adb ada/g-string.ads ada/system.ads \
ada/s-casuti.ads ada/s-crtl.ads ada/s-exctab.ads ada/s-exctab.adb \
ada/s-htable.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/unchconv.ads ada/unchdeal.ads
+ ada/s-traent.ads ada/unchconv.ads ada/unchdeal.ads
ada/g-speche.o : ada/gnat.ads ada/g-speche.ads ada/g-speche.adb \
- ada/system.ads
+ ada/system.ads
ada/g-string.o : ada/gnat.ads ada/g-string.ads ada/g-string.adb \
- ada/system.ads ada/unchdeal.ads
+ ada/system.ads ada/unchdeal.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 \
- ada/unchconv.ads ada/unchdeal.ads
+ ada/unchconv.ads ada/unchdeal.ads
-ada/gnat.o : ada/gnat.ads ada/system.ads
+ada/gnat.o : ada/gnat.ads ada/system.ads
ada/gnat1drv.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
ada/atree.adb ada/back_end.ads ada/casing.ads ada/comperr.ads \
@@ -2186,7 +2205,7 @@ ada/gnat1drv.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/usage.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 \
@@ -2202,16 +2221,16 @@ ada/gnatbind.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/ali-util.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/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
+ ada/s-secsta.ads ada/s-stoele.ads ada/s-stoele.adb ada/unchconv.ads
ada/hlo.o : ada/hlo.ads ada/hlo.adb ada/output.ads ada/system.ads \
ada/s-exctab.ads ada/s-stalib.ads ada/s-unstyp.ads ada/types.ads \
- ada/unchconv.ads ada/unchdeal.ads
+ ada/unchconv.ads ada/unchdeal.ads
-ada/hostparm.o : ada/hostparm.ads ada/system.ads
+ada/hostparm.o : ada/hostparm.ads ada/system.ads
ada/impunit.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 \
@@ -2227,7 +2246,7 @@ ada/impunit.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \
- ada/widechar.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 \
@@ -2246,9 +2265,9 @@ ada/inline.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads
-ada/interfac.o : ada/interfac.ads ada/system.ads
+ada/interfac.o : ada/interfac.ads ada/system.ads
ada/itypes.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 \
@@ -2262,10 +2281,10 @@ ada/itypes.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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
+ ada/system.ads ada/s-stoele.ads ada/s-stoele.adb ada/unchconv.ads
ada/layout.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 \
@@ -2290,7 +2309,7 @@ ada/layout.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2312,7 +2331,7 @@ ada/lib-load.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2321,7 +2340,7 @@ ada/lib-util.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
@@ -2344,7 +2363,7 @@ ada/lib-writ.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/alloc.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/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 \
@@ -2361,7 +2380,7 @@ ada/lib-xref.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2377,7 +2396,7 @@ ada/lib.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \
- ada/widechar.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 \
@@ -2392,12 +2411,12 @@ ada/live.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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/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 \
@@ -2406,7 +2425,7 @@ ada/namet.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
@@ -2418,7 +2437,7 @@ ada/nlists.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2431,14 +2450,14 @@ ada/nmake.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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/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 \
@@ -2448,7 +2467,7 @@ ada/osint-b.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
@@ -2458,7 +2477,7 @@ ada/osint-c.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
@@ -2470,12 +2489,12 @@ ada/osint.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/alloc.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/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 \
ada/s-stalib.ads ada/s-unstyp.ads ada/types.ads ada/unchconv.ads \
- ada/unchdeal.ads
+ ada/unchdeal.ads
ada/par.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 \
@@ -2505,7 +2524,7 @@ ada/par.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2518,7 +2537,7 @@ ada/prep.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.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/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 \
@@ -2535,7 +2554,7 @@ ada/prepcomp.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.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/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
ada/repinfo.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 \
@@ -2551,7 +2570,7 @@ ada/repinfo.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/unchconv.ads ada/unchdeal.ads ada/urealp.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 \
@@ -2568,9 +2587,9 @@ ada/restrict.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads
-ada/rident.o : ada/rident.ads ada/system.ads ada/s-rident.ads
+ada/rident.o : ada/rident.ads ada/system.ads ada/s-rident.ads
ada/rtsfind.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 \
@@ -2589,101 +2608,105 @@ ada/rtsfind.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/unchconv.ads
-ada/s-carun8.o : ada/system.ads ada/s-carun8.ads ada/s-carun8.adb \
- 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 \
+ ada/unchconv.ads
-ada/s-casuti.o : ada/system.ads ada/s-casuti.ads ada/s-casuti.adb
+ada/s-casuti.o : ada/system.ads ada/s-casuti.ads ada/s-casuti.adb
ada/s-crc32.o : ada/interfac.ads ada/system.ads ada/s-crc32.ads \
- ada/s-crc32.adb
+ ada/s-crc32.adb
-ada/s-crtl.o : ada/system.ads ada/s-crtl.ads ada/s-parame.ads
+ada/s-crtl.o : ada/system.ads ada/s-crtl.ads ada/s-parame.ads
ada/s-except.o : ada/ada.ads ada/a-except.ads ada/system.ads \
- ada/s-except.ads ada/s-stalib.ads ada/s-traent.ads ada/unchconv.ads
+ ada/s-except.ads ada/s-stalib.ads ada/s-traent.ads ada/unchconv.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-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
+ ada/s-htable.ads ada/s-htable.adb
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-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-except.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-stoele.ads ada/s-stoele.adb ada/s-traent.ads 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 \
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-stoele.adb ada/s-traent.ads ada/unchconv.ads
-ada/s-parame.o : ada/system.ads ada/s-parame.ads ada/s-parame.adb
+ada/s-parame.o : ada/system.ads ada/s-parame.ads ada/s-parame.adb
-ada/s-purexc.o : ada/system.ads ada/s-purexc.ads
+ada/s-purexc.o : ada/system.ads ada/s-purexc.ads
ada/s-secsta.o : ada/ada.ads ada/a-except.ads ada/system.ads \
ada/s-parame.ads ada/s-secsta.ads ada/s-secsta.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/unchdeal.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-except.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-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 \
- ada/s-sopco4.ads ada/s-sopco5.ads ada/unchconv.ads
+ ada/s-sopco4.ads ada/s-sopco5.ads ada/unchconv.ads
ada/s-sopco4.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-sopco4.ads \
- ada/s-sopco4.adb ada/s-sopco5.ads ada/unchconv.ads
+ ada/s-sopco4.adb ada/s-sopco5.ads ada/unchconv.ads
ada/s-sopco5.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-sopco4.ads \
- ada/s-sopco5.ads ada/s-sopco5.adb ada/unchconv.ads
+ ada/s-sopco5.ads ada/s-sopco5.adb ada/unchconv.ads
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-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/unchconv.ads
ada/s-stoele.o : ada/system.ads ada/s-stoele.ads ada/s-stoele.adb \
- ada/unchconv.ads
+ ada/unchconv.ads
ada/s-strcom.o : ada/system.ads ada/s-strcom.ads ada/s-strcom.adb \
- ada/unchconv.ads
+ ada/unchconv.ads
ada/s-strops.o : ada/system.ads ada/s-secsta.ads ada/s-stoele.ads \
- ada/s-stoele.adb ada/s-strops.ads ada/s-strops.adb ada/unchconv.ads
+ ada/s-stoele.adb ada/s-strops.ads ada/s-strops.adb ada/unchconv.ads
-ada/s-traceb.o : ada/system.ads ada/s-traceb.ads ada/s-traceb.adb
+ada/s-traceb.o : ada/system.ads ada/s-traceb.ads ada/s-traceb.adb
-ada/s-traent.o : ada/system.ads ada/s-traent.ads ada/s-traent.adb
+ada/s-traent.o : ada/system.ads ada/s-traent.ads ada/s-traent.adb
-ada/s-unstyp.o : ada/system.ads ada/s-unstyp.ads
+ada/s-unstyp.o : ada/system.ads ada/s-unstyp.ads
ada/s-wchcnv.o : ada/interfac.ads ada/system.ads ada/s-wchcnv.ads \
- ada/s-wchcnv.adb ada/s-wchcon.ads ada/s-wchjis.ads
+ ada/s-wchcnv.adb ada/s-wchcon.ads ada/s-wchjis.ads
-ada/s-wchcon.o : ada/system.ads ada/s-wchcon.ads
+ada/s-wchcon.o : ada/system.ads ada/s-wchcon.ads
-ada/s-wchjis.o : ada/system.ads ada/s-wchjis.ads ada/s-wchjis.adb
+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 \
@@ -2691,7 +2714,7 @@ ada/scans.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
@@ -2710,7 +2733,7 @@ ada/scn.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2721,7 +2744,7 @@ ada/scng.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.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/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 \
@@ -2744,7 +2767,7 @@ ada/sem.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2772,7 +2795,7 @@ ada/sem_aggr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2802,7 +2825,7 @@ ada/sem_attr.o : ada/ada.ads ada/a-charac.ads ada/a-chlat1.ads \
ada/tree_io.ads ada/ttypef.ads ada/ttypes.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/validsw.ads \
- ada/widechar.ads
+ ada/widechar.ads
ada/sem_case.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 \
@@ -2818,7 +2841,7 @@ ada/sem_case.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2835,7 +2858,7 @@ ada/sem_cat.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2863,7 +2886,7 @@ ada/sem_ch10.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2881,7 +2904,7 @@ ada/sem_ch11.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2911,7 +2934,7 @@ ada/sem_ch12.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.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/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 \
@@ -2929,10 +2952,10 @@ ada/sem_ch13.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/uname.ads ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.ads ada/urealp.adb
+ 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 \
@@ -2947,7 +2970,7 @@ ada/sem_ch2.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -2982,16 +3005,17 @@ ada/sem_ch3.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/widechar.ads
+ ada/validsw.ads ada/widechar.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-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/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 \
@@ -3009,8 +3033,8 @@ ada/sem_ch4.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
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 \
@@ -3038,7 +3062,7 @@ ada/sem_ch5.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/widechar.ads
+ ada/widechar.ads
ada/sem_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/csets.ads ada/debug.ads \
@@ -3068,7 +3092,7 @@ ada/sem_ch6.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads
ada/sem_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/csets.ads ada/debug.ads \
@@ -3096,7 +3120,7 @@ ada/sem_ch7.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3126,37 +3150,38 @@ ada/sem_ch8.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
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/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 \
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/err_vars.ads ada/errout.ads ada/erroutc.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/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
+ 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/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
ada/sem_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 \
@@ -3181,7 +3206,7 @@ ada/sem_disp.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3200,7 +3225,7 @@ ada/sem_dist.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3227,7 +3252,7 @@ ada/sem_elab.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3235,14 +3260,15 @@ ada/sem_elim.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.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/namet.ads ada/nlists.ads ada/nlists.adb ada/opt.ads ada/output.ads \
- ada/sem_elim.ads ada/sem_elim.adb 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-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/sem_elim.ads ada/sem_elim.adb ada/sem_prag.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-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/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 \
@@ -3270,7 +3296,7 @@ ada/sem_eval.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/urealp.adb ada/widechar.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 \
ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \
@@ -3287,7 +3313,7 @@ ada/sem_intr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3301,7 +3327,7 @@ ada/sem_maps.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3317,7 +3343,7 @@ ada/sem_mech.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/uintp.adb ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.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 \
@@ -3352,7 +3378,7 @@ ada/sem_prag.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3385,7 +3411,7 @@ ada/sem_res.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/validsw.ads ada/widechar.ads
ada/sem_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 \
@@ -3399,7 +3425,7 @@ ada/sem_smem.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3424,21 +3450,22 @@ ada/sem_type.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
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_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/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 \
@@ -3452,7 +3479,7 @@ ada/sem_util.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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
+ ada/widechar.ads
ada/sem_vfpt.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
ada/atree.adb ada/casing.ads ada/cstand.ads ada/debug.ads ada/einfo.ads \
@@ -3467,7 +3494,7 @@ ada/sem_vfpt.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/ttypef.ads \
ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \
- ada/unchdeal.ads ada/urealp.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 \
@@ -3492,7 +3519,7 @@ ada/sem_warn.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3505,7 +3532,7 @@ ada/sinfo-cn.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3517,7 +3544,7 @@ ada/sinfo.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3527,7 +3554,7 @@ ada/sinput-c.o : ada/ada.ads ada/a-except.ads ada/a-unccon.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/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 \
@@ -3536,7 +3563,7 @@ ada/sinput-d.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.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/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 \
@@ -3554,7 +3581,7 @@ ada/sinput-l.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3563,7 +3590,7 @@ ada/sinput.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.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/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 \
@@ -3571,7 +3598,7 @@ ada/snames.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
@@ -3588,7 +3615,7 @@ ada/sprint.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3596,7 +3623,7 @@ ada/stand.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
@@ -3605,7 +3632,7 @@ ada/stringt.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
@@ -3621,7 +3648,7 @@ ada/style.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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 \
@@ -3632,7 +3659,7 @@ ada/styleg-c.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
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/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 \
@@ -3642,12 +3669,12 @@ ada/styleg.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.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/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 \
ada/system.ads ada/s-exctab.ads ada/s-stalib.ads ada/s-unstyp.ads \
- ada/s-wchcon.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads
+ ada/s-wchcon.ads ada/types.ads ada/unchconv.ads ada/unchdeal.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 \
@@ -3655,7 +3682,7 @@ ada/switch-b.o : ada/ada.ads ada/a-except.ads ada/debug.ads ada/gnat.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/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 \
@@ -3665,21 +3692,21 @@ ada/switch-c.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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/unchconv.ads ada/unchdeal.ads
-ada/system.o : ada/system.ads
+ada/system.o : ada/system.ads
ada/table.o : 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/system.ads ada/s-exctab.ads ada/s-memory.ads ada/s-stalib.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/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads
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 \
@@ -3690,7 +3717,7 @@ ada/targparm.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/csets.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/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 \
@@ -3707,7 +3734,7 @@ ada/tbuild.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
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/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 \
@@ -3719,14 +3746,14 @@ ada/tree_gen.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/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/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 \
@@ -3743,7 +3770,7 @@ ada/treepr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/unchconv.ads ada/unchdeal.ads ada/urealp.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 \
@@ -3751,19 +3778,19 @@ ada/treeprs.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/uintp.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads
-ada/ttypef.o : ada/system.ads ada/ttypef.ads
+ada/ttypef.o : ada/system.ads ada/ttypef.ads
ada/ttypes.o : ada/get_targ.ads ada/system.ads ada/s-exctab.ads \
ada/s-stalib.ads ada/s-unstyp.ads ada/ttypes.ads ada/types.ads \
- ada/unchconv.ads ada/unchdeal.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/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 \
@@ -3772,7 +3799,7 @@ ada/uintp.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/alloc.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/unchconv.ads ada/unchdeal.ads
+ ada/unchconv.ads ada/unchdeal.ads
ada/uname.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 \
@@ -3787,7 +3814,7 @@ ada/uname.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.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/uname.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.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 \
@@ -3796,7 +3823,7 @@ ada/urealp.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
@@ -3804,12 +3831,12 @@ ada/usage.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.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/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 \
ada/s-stalib.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/types.ads \
- ada/unchconv.ads ada/unchdeal.ads ada/validsw.ads ada/validsw.adb
+ ada/unchconv.ads ada/unchdeal.ads ada/validsw.ads ada/validsw.adb
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 \
@@ -3817,6 +3844,6 @@ ada/widechar.o : ada/ada.ads ada/a-except.ads ada/gnat.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/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 df5399ad72c..6b075b8a3d3 100644
--- a/gcc/ada/Makefile.in
+++ b/gcc/ada/Makefile.in
@@ -549,40 +549,6 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks,$(targ))),)
TOOLS_TARGET_PAIRS=mlib-tgt.adb<5zml-tgt.adb
- EXTRA_HIE_NONE_TARGET_PAIRS= \
- system.ads<50system.ads
-
- EXTRA_RAVEN_SOURCES=i-vxwork.ads s-vxwork.ads
- EXTRA_RAVEN_OBJS=i-vxwork.o s-vxwork.o
- EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
- EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
- HIE_RAVEN_TARGET_PAIRS=\
- $(HIE_NONE_TARGET_PAIRS) \
- a-reatim.ads<1areatim.ads \
- a-reatim.adb<1areatim.adb \
- a-retide.adb<1aretide.adb \
- a-interr.adb<1ainterr.adb \
- s-interr.ads<1sinterr.ads \
- s-interr.adb<1sinterr.adb \
- s-taskin.ads<1staskin.ads \
- s-taskin.adb<1staskin.adb \
- s-taspri.ads<1staspri.ads \
- s-tarest.adb<1starest.adb \
- s-tposen.ads<1stposen.ads \
- s-tposen.adb<1stposen.adb \
- s-osinte.adb<1sosinte.adb \
- s-taprop.ads<1staprop.ads \
- s-taprop.adb<1staprop.adb \
- s-taprob.ads<1staprob.ads \
- s-taprob.adb<1staprob.adb \
- a-sytaco.ads<1asytaco.ads \
- a-sytaco.adb<1asytaco.adb \
- a-intnam.ads<4zintnam.ads \
- s-osinte.ads<5zosinte.ads \
- s-parame.ads<5zparame.ads \
- s-vxwork.ads<5pvxwork.ads \
- a-taside.adb<1ataside.adb \
-
ifeq ($(strip $(filter-out yes,$(TRACE))),)
LIBGNAT_TARGET_PAIRS += \
s-traces.adb<7straces.adb \
@@ -593,22 +559,6 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks,$(targ))),)
endif
endif
-ifeq ($(strip $(filter-out powerpc% unknown elf,$(targ))),)
- EXTRA_HIE_NONE_TARGET_PAIRS= \
- system.ads<59system.ads
-
- LIBGNAT_TARGET_PAIRS = \
- $(HIE_NONE_TARGET_PAIRS)
-endif
-
-ifeq ($(strip $(filter-out sparc% unknown elf,$(targ))),)
- EXTRA_HIE_NONE_TARGET_PAIRS= \
- system.ads<5rsystem.ads
-
- LIBGNAT_TARGET_PAIRS = \
- $(HIE_NONE_TARGET_PAIRS)
-endif
-
ifeq ($(strip $(filter-out sparc% wrs vx%,$(targ))),)
LIBGNAT_TARGET_PAIRS = \
a-sytaco.ads<4zsytaco.ads \
@@ -888,6 +838,44 @@ ifeq ($(strip $(filter-out %86 freebsd%,$(arch) $(osys))),)
LIBRARY_VERSION := $(LIB_VERSION)
endif
+ifeq ($(strip $(filter-out s390% linux%,$(arch) $(osys))),)
+ ifeq ($(strip $(filter-out s390x,$(arch))),)
+ LIBGNAT_TARGET_PAIRS = \
+ a-intnam.ads<4lintnam.ads \
+ s-inmaop.adb<7sinmaop.adb \
+ s-intman.adb<7sintman.adb \
+ s-osinte.adb<5iosinte.adb \
+ s-osinte.ads<5iosinte.ads \
+ s-osprim.adb<7sosprim.adb \
+ s-taprop.adb<5itaprop.adb \
+ s-taspri.ads<5itaspri.ads \
+ s-tpopsp.adb<5atpopsp.adb \
+ s-parame.adb<5lparame.adb \
+ system.ads<system-linux-s390x.ads
+ else
+ LIBGNAT_TARGET_PAIRS = \
+ a-intnam.ads<4lintnam.ads \
+ s-inmaop.adb<7sinmaop.adb \
+ s-intman.adb<7sintman.adb \
+ s-osinte.adb<5iosinte.adb \
+ s-osinte.ads<5iosinte.ads \
+ s-osprim.adb<7sosprim.adb \
+ s-taprop.adb<5itaprop.adb \
+ s-taspri.ads<5itaspri.ads \
+ s-tpopsp.adb<5atpopsp.adb \
+ s-parame.adb<5lparame.adb \
+ system.ads<system-linux-s390.ads
+ endif
+
+ TOOLS_TARGET_PAIRS = \
+ mlib-tgt.adb<5lml-tgt.adb
+
+ THREADSLIB = -lpthread
+ GNATLIB_SHARED = gnatlib-shared-dual
+ PREFIX_OBJS = $(PREFIX_REAL_OBJS)
+ LIBRARY_VERSION := $(LIB_VERSION)
+endif
+
ifeq ($(strip $(filter-out mips sgi irix%,$(targ))),)
ifeq ($(strip $(filter-out mips sgi irix6%,$(targ))),)
LIBGNAT_TARGET_PAIRS = \
@@ -1144,6 +1132,10 @@ ifeq ($(strip $(filter-out alpha% ia64 dec hp vms% openvms% alphavms%,$(host))),
soext = .exe
hyphen = _
+ifeq ($(strip $(filter-out ia64 hp vms% openvms%,$(targ))),)
+AR = iar
+endif
+
.SUFFIXES: .sym
.o.sym:
@@ -1153,6 +1145,7 @@ endif
ifeq ($(strip $(filter-out alpha% ia64 dec hp vms% openvms% alphavms%,$(targ))),)
ifeq ($(strip $(filter-out ia64 hp vms% openvms%,$(targ))),)
LIBGNAT_TARGET_PAIRS_AUX1 = \
+ s-auxdec.ads<5qauxdec.ads \
s-crtl.ads<5xcrtl.ads \
s-osinte.adb<5xosinte.adb \
s-osinte.ads<5xosinte.ads \
@@ -1356,131 +1349,6 @@ include $(fsrcdir)/Makefile.rtl
GNATRTL_OBJS = $(GNATRTL_NONTASKING_OBJS) $(GNATRTL_TASKING_OBJS) \
g-trasym.o memtrack.o
-# Files which are suitable in no run time/hi integrity mode
-
-COMPILABLE_HIE_SOURCES= \
- system.ads \
- ada.ads \
- gnat.ads \
- g-souinf.ads \
- interfac.ads \
- i-c.ads \
- s-stoele.ads \
- s-stoele.adb \
- s-maccod.ads \
- s-unstyp.ads \
- s-fatflt.ads \
- s-fatlfl.ads \
- s-fatllf.ads \
- s-fatsfl.ads \
- s-secsta.ads \
- s-secsta.adb \
- a-tags.ads \
- a-tags.adb \
- a-except.ads \
- a-except.adb $(EXTRA_HIE_SOURCES)
-
-NON_COMPILABLE_HIE_SOURCES= \
- a-unccon.ads \
- a-uncdea.ads \
- s-fatgen.adb \
- s-fatgen.ads \
- unchconv.ads \
- s-atacco.ads \
- s-atacco.adb \
- unchdeal.ads
-
-
-HIE_SOURCES = $(NON_COMPILABLE_HIE_SOURCES) $(COMPILABLE_HIE_SOURCES)
-
-# Object to generate for the HI run time
-
-HIE_OBJS = \
- system.o \
- ada.o \
- a-except.o \
- gnat.o \
- g-souinf.o \
- interfac.o \
- i-c.o \
- s-stoele.o \
- s-maccod.o \
- s-unstyp.o \
- s-fatflt.o \
- s-fatlfl.o \
- s-fatllf.o \
- s-fatsfl.o \
- s-secsta.o \
- a-tags.o $(EXTRA_HIE_OBJS)
-
-# Files which are needed in ravenscar mode
-
-COMPILABLE_RAVEN_SOURCES = \
-$(COMPILABLE_HIE_SOURCES) \
- s-parame.ads \
- s-parame.adb \
- s-purexc.ads \
- s-osinte.ads \
- s-osinte.adb \
- s-tasinf.ads \
- s-tasinf.adb \
- s-taspri.ads \
- s-taprop.ads \
- s-taprop.adb \
- s-taskin.ads \
- s-taskin.adb \
- s-interr.ads \
- s-interr.adb \
- a-interr.ads \
- a-interr.adb \
- a-intnam.ads \
- a-reatim.ads \
- a-reatim.adb \
- a-retide.ads \
- a-retide.adb \
- s-taprob.ads \
- s-taprob.adb \
- s-tposen.ads \
- s-tposen.adb \
- s-tasres.ads \
- s-tarest.ads \
- s-tarest.adb \
- a-sytaco.ads \
- a-sytaco.adb \
- a-taside.ads \
- a-taside.adb $(EXTRA_RAVEN_SOURCES)
-
-NON_COMPILABLE_RAVEN_SOURCES= $(NON_COMPILABLE_HIE_SOURCES)
-
-RAVEN_SOURCES = $(NON_COMPILABLE_RAVEN_SOURCES) $(COMPILABLE_RAVEN_SOURCES)
-
-# Objects to generate for the ravenscar run time
-
-RAVEN_LIBGNARL_OBJS = \
- s-parame.o \
- s-purexc.o \
- s-osinte.o \
- s-tasinf.o \
- s-taspri.o \
- s-taprop.o \
- s-taskin.o \
- s-interr.o \
- a-interr.o \
- a-intnam.o \
- a-reatim.o \
- a-retide.o \
- s-osinte.o \
- s-taprob.o \
- s-tposen.o \
- s-tasres.o \
- s-tarest.o \
- a-sytaco.o \
- a-taside.o $(EXTRA_RAVEN_OBJS)
-
-RAVEN_OBJS = \
- $(HIE_OBJS) \
- $(RAVEN_LIBGNARL_OBJS)
-
# Default run time files
ADA_INCLUDE_SRCS =\
@@ -1568,7 +1436,7 @@ gnattools2: ../stamp-tools
../../gnatls$(exeext) ../../gnatprep$(exeext) \
../../gnatxref$(exeext) \
../../gnatfind$(exeext) ../../gnatname$(exeext) \
- ../../gnatclean$(exeext) \
+ ../../gnatclean$(exeext) ../../gprmake$(exeext) \
../../gprcmd$(exeext) ../../gpr2make$(exeext)
# These tools are only built for the native version.
@@ -1610,6 +1478,12 @@ gnattools4: ../stamp-tools
$(GNATLINK) -v gnatname -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
$(TOOLS_LIBS)
+../../gprmake$(exeext): ../stamp-tools
+ $(GNATMAKE) -c $(ADA_INCLUDES) gprmake --GCC="$(CC) $(ALL_ADAFLAGS)"
+ $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gprmake
+ $(GNATLINK) -v gprmake -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
+ $(TOOLS_LIBS)
+
../../gpr2make$(exeext): ../stamp-tools
$(GNATMAKE) -c $(ADA_INCLUDES) gpr2make --GCC="$(CC) $(ALL_ADAFLAGS)"
$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gpr2make
@@ -1834,88 +1708,6 @@ gnatlib: ../stamp-gnatlib1 ../stamp-gnatlib2
$(CHMOD) a-wx rts/*.ali
touch ../stamp-gnatlib
-HIE_NONE_TARGET_PAIRS=\
- a-except.ads<1aexcept.ads \
- a-except.adb<1aexcept.adb \
- a-tags.ads<1atags.ads \
- a-tags.adb<1atags.adb \
- s-secsta.ads<1ssecsta.ads \
- s-secsta.adb<1ssecsta.adb \
- i-c.ads<1ic.ads $(EXTRA_HIE_NONE_TARGET_PAIRS)
-
-# This target needs RTS_NAME, RTS_SRCS, RTS_TARGET_PAIRS to be set properly
-# it creates a rts with the proper structure and the right target
-# dependant srcs
-prepare-rts:
- $(RMDIR) rts-$(RTS_NAME)
- $(MKDIR) rts-$(RTS_NAME)
- $(CHMOD) u+w rts-$(RTS_NAME)
- $(MKDIR) rts-$(RTS_NAME)/adalib
- $(MKDIR) rts-$(RTS_NAME)/adainclude
- $(CHMOD) u+w rts-$(RTS_NAME)/*
-# Generate the project file
- $(ECHO) "project $(RTS_NAME) is" > rts-$(RTS_NAME)/$(RTS_NAME).gpr
- $(ECHO) " for Source_Dirs use (\"adainclude\");" \
- >> rts-$(RTS_NAME)/$(RTS_NAME).gpr
- $(ECHO) " for Object_Dir use \"adalib\";" \
- >> rts-$(RTS_NAME)/$(RTS_NAME).gpr
- $(ECHO) " for Source_List_File use " \
- >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- $(ECHO) " \"rts-$(RTS_NAME)_source_list.txt\";" \
- >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- $(ECHO) " package Builder is" >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- $(ECHO) " for Default_Switches (\"Ada\") use (\"-a\");" \
- >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- $(ECHO) " end Builder;" >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- $(ECHO) " package Compiler is" >> rts-$(RTS_NAME)/$(RTS_NAME).gpr
- $(ECHO) " for Default_Switches (\"Ada\") use (\"-nostdinc\");" \
- >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- $(ECHO) " end Compiler;" >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- $(ECHO) "end $(RTS_NAME);" >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
-
- $(foreach f, $(COMPILABLE_SOURCES), \
- $(ECHO) $(f) >> \
- rts-$(RTS_NAME)/rts-$(RTS_NAME)_source_list.txt ;) true
-# Copy target independent sources
- $(foreach f,$(RTS_SRCS), \
- $(CP) $(fsrcpfx)$(f) rts-$(RTS_NAME)/adainclude/ ;) true
-# Remove files to be replaced by target dependent sources
- $(RM) $(foreach PAIR,$(RTS_TARGET_PAIRS), \
- rts-$(RTS_NAME)/adainclude/$(word 1,$(subst <, ,$(PAIR))))
-# Copy new target dependent sources
- $(foreach PAIR,$(RTS_TARGET_PAIRS), \
- $(CP) $(fsrcpfx)$(word 2,$(subst <, ,$(PAIR))) \
- rts-$(RTS_NAME)/adainclude/$(word 1,$(subst <, ,$(PAIR)));)
-
-install-rts: force
- $(CP) -r rts-$(RTS_NAME) $(DESTDIR)$(libsubdir)/
-
-rts-zfp: force
- $(MAKE) $(FLAGS_TO_PASS) prepare-rts \
- RTS_NAME=zfp RTS_SRCS="$(HIE_SOURCES)" \
- RTS_TARGET_PAIRS="$(HIE_NONE_TARGET_PAIRS)" \
- COMPILABLE_SOURCES="$(COMPILABLE_HIE_SOURCES)"
- $(GNATMAKE) -Prts-zfp/zfp.gpr --GCC="../../../xgcc -B../../../"
- cd rts-zfp/adalib/ ; $(AR) r libgnat.a *.o
- $(RM) rts-zfp/adalib/*.o
- $(CHMOD) a-wx rts-zfp/adalib/*.ali
- $(CHMOD) a-wx rts-zfp/adalib/libgnat.a
-
-rts-ravenscar: force
- $(MAKE) $(FLAGS_TO_PASS) prepare-rts \
- RTS_NAME=ravenscar RTS_SRCS="$(RAVEN_SOURCES)" \
- RTS_TARGET_PAIRS="$(HIE_RAVEN_TARGET_PAIRS)" \
- COMPILABLE_SOURCES="$(COMPILABLE_RAVEN_SOURCES)"
- $(GNATMAKE) -Prts-ravenscar/ravenscar.gpr \
- --GCC="../../../xgcc -B../../../"
- cd rts-ravenscar/adalib ; \
- $(foreach FILE,$(RAVEN_LIBGNARL_OBJS), $(AR) r libgnarl.a $(FILE);) \
- $(foreach FILE,$(HIE_OBJS), $(AR) r libgnat.a $(FILE);)
- $(RM) rts-ravenscar/adalib/*.o
- $(CHMOD) a-wx rts-ravenscar/adalib/*.ali
- $(CHMOD) a-wx rts-ravenscar/adalib/libgnat.a
- $(CHMOD) a-wx rts-ravenscar/adalib/libgnarl.a
-
# Warning: this target assumes that LIBRARY_VERSION has been set correctly.
gnatlib-shared-default:
$(MAKE) $(FLAGS_TO_PASS) \
diff --git a/gcc/ada/a-exexpr.adb b/gcc/ada/a-exexpr.adb
index ba554f9bc2d..b42b3fc7fd7 100644
--- a/gcc/ada/a-exexpr.adb
+++ b/gcc/ada/a-exexpr.adb
@@ -2,7 +2,7 @@
-- --
-- GNAT COMPILER COMPONENTS --
-- --
--- ADA.EXCEPTIONS.EXCEPTION_PROPAGATION --
+-- 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 --
-- --
@@ -104,6 +104,7 @@ package body Exception_Propagation is
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;
@@ -111,8 +112,7 @@ package body Exception_Propagation is
Private1 : Unwind_Word;
Private2 : Unwind_Word;
end record;
-
- pragma Convention (C, Unwind_Exception);
+ -- 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
@@ -122,7 +122,7 @@ package body Exception_Propagation is
-- 1/ We pass pointers to such headers down to the underlying
-- libGCC unwinder,
- -- and
+ -- and
-- 2/ The GNAT_GCC_Exception record below starts with this common
-- common header and has a C counterpart which needs to be laid
diff --git a/gcc/ada/a-tags.adb b/gcc/ada/a-tags.adb
index a2e40f8d4ef..c232695ce75 100644
--- a/gcc/ada/a-tags.adb
+++ b/gcc/ada/a-tags.adb
@@ -65,8 +65,12 @@ package body Ada.Tags is
subtype Cstring is String (Positive);
type Cstring_Ptr is access all Cstring;
+
type Tag_Table is array (Natural range <>) of Tag;
pragma Suppress_Initialization (Tag_Table);
+ pragma Suppress (Index_Check, On => Tag_Table);
+ -- We suppress index checks because the declared size in the record
+ -- below is a dummy size of one (see below).
type Wide_Boolean is new Boolean;
-- This name should probably be changed sometime ??? and indeed
@@ -79,13 +83,33 @@ package body Ada.Tags is
HT_Link : Tag;
Remotely_Callable : Wide_Boolean;
RC_Offset : SSE.Storage_Offset;
- Ancestor_Tags : Tag_Table (Natural);
+ Ancestor_Tags : Tag_Table (0 .. 1);
end record;
+ -- The size of the Ancestor_Tags array actually depends on the tagged
+ -- type to which it applies. We are using the same mechanism as for
+ -- the Prims_Ptr array in the Dispatch_Table record. See comments
+ -- below for more details.
type Dispatch_Table is record
TSD : Type_Specific_Data_Ptr;
- Prims_Ptr : Address_Array (Positive);
+ Prims_Ptr : Address_Array (1 .. 1);
end record;
+ -- 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 actual array size, and allocates the Dispatch_Table
+ -- record accordingly.
+ --
+ -- To avoid the use of discriminants to define the actual size
+ -- of the dispatch table, we used to declare the tag as a pointer
+ -- to a record that contains an arbitrary array of addresses, using
+ -- Positive as its index. This ensures that there are never range
+ -- checks when accessing the dispatch table, but it prevents GDB
+ -- from displaying tagged types properly. A better approach is
+ -- to declare this record type as holding a small number of addresses,
+ -- and to explicitly suppress checks on it.
+ --
+ -- Note that in both cases, this type is never allocated, and serves
+ -- only to declare the corresponding access type.
---------------------------------------------
-- Unchecked Conversions for String Fields --
@@ -182,7 +206,6 @@ package body Ada.Tags is
function H is new System.HTable.Hash (HTable_Headers);
Str : constant Cstring_Ptr := To_Cstring_Ptr (F);
Res : constant HTable_Headers := H (Str (1 .. Length (Str)));
-
begin
return Res;
end Hash;
@@ -219,7 +242,6 @@ package body Ada.Tags is
function CW_Membership (Obj_Tag : Tag; Typ_Tag : Tag) return Boolean is
Pos : constant Integer := Obj_Tag.TSD.Idepth - Typ_Tag.TSD.Idepth;
-
begin
return Pos >= 0 and then Obj_Tag.TSD.Ancestor_Tags (Pos) = Typ_Tag;
end CW_Membership;
@@ -230,7 +252,6 @@ package body Ada.Tags is
function Expanded_Name (T : Tag) return String is
Result : constant Cstring_Ptr := T.TSD.Expanded_Name;
-
begin
return Result (1 .. Length (Result));
end Expanded_Name;
@@ -241,7 +262,6 @@ package body Ada.Tags is
function External_Tag (T : Tag) return String is
Result : constant Cstring_Ptr := T.TSD.External_Tag;
-
begin
return Result (1 .. Length (Result));
end External_Tag;
diff --git a/gcc/ada/a-tags.ads b/gcc/ada/a-tags.ads
index 6dd97ff6642..6e6adbfa4e1 100644
--- a/gcc/ada/a-tags.ads
+++ b/gcc/ada/a-tags.ads
@@ -210,6 +210,10 @@ private
-- Size of each ancestor tag entry in the TSD
type Address_Array is array (Natural range <>) of System.Address;
+ pragma Suppress (Index_Check, On => Address_Array);
+ -- The reason we suppress index checks is that in the body, objects
+ -- of this type are declared with a dummy size of 1, the actual size
+ -- depending on the number of primitive operations.
type Dispatch_Table;
type Tag is access all Dispatch_Table;
diff --git a/gcc/ada/a-textio.adb b/gcc/ada/a-textio.adb
index 98766ce9bf3..7afb804ff9c 100644
--- a/gcc/ada/a-textio.adb
+++ b/gcc/ada/a-textio.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
+-- 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- --
@@ -1678,8 +1678,12 @@ package body Ada.Text_IO is
-- because it is too much of a nuisance to have these odd line
-- feeds when nothing has been written to the file.
+ -- We also avoid this for files opened in append mode, in
+ -- accordance with (RM A.8.2(10))
+
elsif (File /= Standard_Err and then File /= Standard_Out)
and then (File.Line = 1 and then File.Page = 1)
+ and then Mode (File) = Out_File
then
New_Line (File);
end if;
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index 9ff14f2d847..7b8813ab6ee 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -862,7 +862,7 @@ win32_filetime (HANDLE h)
/* Return a GNAT time stamp given a file name. */
-time_t
+OS_Time
__gnat_file_time_name (char *name)
{
@@ -870,7 +870,7 @@ __gnat_file_time_name (char *name)
int fd = open (name, O_RDONLY | O_BINARY);
time_t ret = __gnat_file_time_fd (fd);
close (fd);
- return ret;
+ return (OS_Time)ret;
#elif defined (_WIN32)
time_t ret = 0;
@@ -882,22 +882,25 @@ __gnat_file_time_name (char *name)
ret = win32_filetime (h);
CloseHandle (h);
}
- return ret;
+ return (OS_Time) ret;
#else
struct stat statbuf;
- (void) __gnat_stat (name, &statbuf);
+ if (__gnat_stat (name, &statbuf) != 0) {
+ return (OS_Time)-1;
+ } else {
#ifdef VMS
- /* VMS has file versioning. */
- return statbuf.st_ctime;
+ /* VMS has file versioning. */
+ return (OS_Time)statbuf.st_ctime;
#else
- return statbuf.st_mtime;
+ return (OS_Time)statbuf.st_mtime;
#endif
+ }
#endif
}
/* Return a GNAT time stamp given a file descriptor. */
-time_t
+OS_Time
__gnat_file_time_fd (int fd)
{
/* The following workaround code is due to the fact that under EMX and
@@ -965,24 +968,26 @@ __gnat_file_time_fd (int fd)
tot_secs += file_hour * 3600;
tot_secs += file_min * 60;
tot_secs += file_tsec * 2;
- return tot_secs;
+ return (OS_Time) tot_secs;
#elif defined (_WIN32)
HANDLE h = (HANDLE) _get_osfhandle (fd);
time_t ret = win32_filetime (h);
- return ret;
+ return (OS_Time) ret;
#else
struct stat statbuf;
- (void) fstat (fd, &statbuf);
-
+ if (fstat (fd, &statbuf) != 0) {
+ return (OS_Time) -1;
+ } else {
#ifdef VMS
- /* VMS has file versioning. */
- return statbuf.st_ctime;
+ /* VMS has file versioning. */
+ return (OS_Time) statbuf.st_ctime;
#else
- return statbuf.st_mtime;
+ return (OS_Time) statbuf.st_mtime;
#endif
+ }
#endif
}
diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h
index b52191c356d..c45a5332309 100644
--- a/gcc/ada/adaint.h
+++ b/gcc/ada/adaint.h
@@ -70,8 +70,11 @@ extern long __gnat_named_file_length (char *);
extern void __gnat_tmp_name (char *);
extern char *__gnat_readdir (DIR *, char *);
extern int __gnat_readdir_is_thread_safe (void);
-extern time_t __gnat_file_time_name (char *);
-extern time_t __gnat_file_time_fd (int);
+
+extern OS_Time __gnat_file_time_name (char *);
+extern OS_Time __gnat_file_time_fd (int);
+/* return -1 in case of error */
+
extern void __gnat_set_file_time_name (char *, time_t);
extern void __gnat_get_env_value_ptr (char *, int *,
char **);
diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb
index aaad1a488c3..059730067e0 100644
--- a/gcc/ada/checks.adb
+++ b/gcc/ada/checks.adb
@@ -3379,6 +3379,16 @@ package body Checks is
if Is_Access_Type (Atyp) then
Atyp := Designated_Type (Atyp);
+
+ -- If the prefix is an access to an unconstrained array,
+ -- perform check unconditionally: it depends on the bounds
+ -- of an object and we cannot currently recognize whether
+ -- the test may be redundant.
+
+ if not Is_Constrained (Atyp) then
+ Set_Do_Range_Check (N, True);
+ return;
+ end if;
end if;
Indx := First_Index (Atyp);
diff --git a/gcc/ada/clean.adb b/gcc/ada/clean.adb
index 7759bbb82e2..53f82d0d416 100644
--- a/gcc/ada/clean.adb
+++ b/gcc/ada/clean.adb
@@ -24,10 +24,13 @@
-- --
------------------------------------------------------------------------------
+with Ada.Command_Line; use Ada.Command_Line;
+
with ALI; use ALI;
with Csets;
with Gnatvsn;
with Hostparm;
+with Makeutl; use Makeutl;
with Namet; use Namet;
with Opt; use Opt;
with Osint; use Osint;
@@ -43,12 +46,10 @@ with System;
with Table;
with Types; use Types;
-with GNAT.Command_Line; use GNAT.Command_Line;
with GNAT.Directory_Operations; use GNAT.Directory_Operations;
with GNAT.IO; use GNAT.IO;
with GNAT.OS_Lib; use GNAT.OS_Lib;
-
package body Clean is
Initialized : Boolean := False;
@@ -136,15 +137,13 @@ package body Clean is
procedure Init_Q;
-- Must be called to initialize the Q
- procedure Insert_Q
- (Source_File : File_Name_Type);
- -- If Source_File is not marked, inserts it at the end of Q and mark it
+ procedure Insert_Q (Lib_File : File_Name_Type);
+ -- If Lib_File is not marked, inserts it at the end of Q and mark it
function Empty_Q return Boolean;
-- Returns True if Q is empty.
- procedure Extract_From_Q
- (Source_File : out File_Name_Type);
+ procedure Extract_From_Q (Lib_File : out File_Name_Type);
-- Extracts the first element from the Q.
Q_Front : Natural;
@@ -367,14 +366,14 @@ package body Clean is
Main_Source_File : File_Name_Type;
-- Current main source
- Source_File : File_Name_Type;
- -- Current source file
+ Main_Lib_File : File_Name_Type;
+ -- ALI file of the current main
Lib_File : File_Name_Type;
- -- Current library file
+ -- Current ALI file
Full_Lib_File : File_Name_Type;
- -- Full name of the current library file
+ -- Full name of the current ALI file
Text : Text_Buffer_Ptr;
The_ALI : ALI_Id;
@@ -393,12 +392,13 @@ package body Clean is
for N_File in 1 .. Osint.Number_Of_Files loop
Main_Source_File := Next_Main_Source;
- Insert_Q (Main_Source_File);
+ Main_Lib_File := Osint.Lib_File_Name
+ (Main_Source_File, Current_File_Index);
+ Insert_Q (Main_Lib_File);
while not Empty_Q loop
Sources.Set_Last (0);
- Extract_From_Q (Source_File);
- Lib_File := Osint.Lib_File_Name (Source_File);
+ Extract_From_Q (Lib_File);
Full_Lib_File := Osint.Full_Lib_File_Name (Lib_File);
-- If we have an existing ALI file that is not read-only,
@@ -428,7 +428,7 @@ package body Clean is
for K in ALI.Units.Table (J).First_With ..
ALI.Units.Table (J).Last_With
loop
- Insert_Q (Withs.Table (K).Sfile);
+ Insert_Q (Withs.Table (K).Afile);
end loop;
end loop;
@@ -499,7 +499,7 @@ package body Clean is
if not Compile_Only then
declare
- Source : constant Name_Id := Strip_Suffix (Main_Source_File);
+ Source : constant Name_Id := Strip_Suffix (Main_Lib_File);
Executable : constant String := Get_Name_String
(Executable_Name (Source));
begin
@@ -529,7 +529,10 @@ package body Clean is
Data : constant Project_Data := Projects.Table (Project);
U_Data : Prj.Com.Unit_Data;
File_Name1 : Name_Id;
+ Index1 : Int;
File_Name2 : Name_Id;
+ Index2 : Int;
+ Lib_File : File_Name_Type;
use Prj.Com;
@@ -583,14 +586,18 @@ package body Clean is
(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;
@@ -598,11 +605,13 @@ package body Clean is
-- object directory.
if File_Name1 /= No_Name then
+ Lib_File := Osint.Lib_File_Name (File_Name1, Index1);
+
declare
- Asm : constant String := Assembly_File_Name (File_Name1);
- ALI : constant String := ALI_File_Name (File_Name1);
- Obj : constant String := Object_File_Name (File_Name1);
- Adt : constant String := Tree_File_Name (File_Name1);
+ 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;
@@ -776,7 +785,11 @@ package body Clean is
Main_Source_File := Next_Main_Source;
if not Compile_Only then
- Executable := Executable_Of (Main_Project, Main_Source_File);
+ Executable :=
+ Executable_Of
+ (Main_Project,
+ Main_Source_File,
+ Current_File_Index);
if Is_Regular_File (Get_Name_String (Executable)) then
Delete (Exec_Dir, Get_Name_String (Executable));
@@ -938,12 +951,12 @@ package body Clean is
-- Extract_From_Q --
--------------------
- procedure Extract_From_Q (Source_File : out File_Name_Type) is
- File : constant File_Name_Type := Q.Table (Q_Front);
+ procedure Extract_From_Q (Lib_File : out File_Name_Type) is
+ Lib : constant File_Name_Type := Q.Table (Q_Front);
begin
- Q_Front := Q_Front + 1;
- Source_File := File;
+ Q_Front := Q_Front + 1;
+ Lib_File := Lib;
end Extract_From_Q;
---------------
@@ -1019,12 +1032,14 @@ package body Clean is
if Main_Project /= No_Project and then Osint.Number_Of_Files = 0 then
declare
Value : String_List_Id := Projects.Table (Main_Project).Mains;
-
+ Main : String_Element;
begin
while Value /= Prj.Nil_String loop
- Get_Name_String (String_Elements.Table (Value).Value);
- Osint.Add_File (Name_Buffer (1 .. Name_Len));
- Value := String_Elements.Table (Value).Next;
+ Main := String_Elements.Table (Value);
+ Osint.Add_File
+ (File_Name => Get_Name_String (Main.Value),
+ Index => Main.Index);
+ Value := Main.Next;
end loop;
end;
end if;
@@ -1152,19 +1167,17 @@ package body Clean is
-- Insert_Q --
--------------
- procedure Insert_Q (Source_File : File_Name_Type) is
+ procedure Insert_Q (Lib_File : File_Name_Type) is
begin
-- Do not insert an empty name or an already marked source
- if Source_File /= No_Name
- and then Get_Name_Table_Byte (Source_File) = 0
- then
- Q.Table (Q.Last) := Source_File;
+ if Lib_File /= No_Name and then not Is_Marked (Lib_File) then
+ Q.Table (Q.Last) := Lib_File;
Q.Increment_Last;
-- Mark the source that has been just added to the Q
- Set_Name_Table_Byte (Source_File, 1);
+ Mark (Lib_File);
end if;
end Insert_Q;
@@ -1196,165 +1209,236 @@ package body Clean is
--------------------
procedure Parse_Cmd_Line is
+ Source_Index : Int := 0;
+ Index : Positive := 1;
+ Last : constant Natural := Argument_Count;
begin
- loop
- case
- GNAT.Command_Line.Getopt
- ("aO: c D: F h I: I- n P: q r v vP0 vP1 vP2 X:")
- is
- when ASCII.NUL =>
- exit;
+ while Index <= Last loop
+ declare
+ Arg : constant String := Argument (Index);
- when 'a' =>
- Add_Lib_Search_Dir (GNAT.Command_Line.Parameter);
+ procedure Bad_Argument;
+ -- Signal bad argument
- when 'c' =>
- Compile_Only := True;
+ ------------------
+ -- Bad_Argument --
+ ------------------
- when 'D' =>
- declare
- Dir : constant String := GNAT.Command_Line.Parameter;
+ procedure Bad_Argument is
+ begin
+ Fail ("invalid argument """, Arg, """");
+ end Bad_Argument;
- begin
- if Object_Directory_Path /= null then
- Fail ("duplicate -D switch");
+ begin
+ if Arg'Length /= 0 then
+ if Arg (1) = '-' then
+ if Arg'Length = 1 then
+ Bad_Argument;
+ end if;
- elsif Project_File_Name /= null then
- Fail ("-P and -D cannot be used simultaneously");
+ case Arg (2) is
+ when 'a' =>
+ if Arg'Length < 4 or else Arg (3) /= 'O' then
+ Bad_Argument;
+ end if;
- elsif not Is_Directory (Dir) then
- Fail (Dir, " is not a directory");
+ Add_Lib_Search_Dir (Arg (3 .. Arg'Last));
- else
- Add_Lib_Search_Dir (Dir);
- end if;
- end;
+ when 'c' =>
+ Compile_Only := True;
- when 'F' =>
- Full_Path_Name_For_Brief_Errors := True;
+ when 'D' =>
+ if Object_Directory_Path /= null then
+ Fail ("duplicate -D switch");
- when 'h' =>
- Usage;
+ elsif Project_File_Name /= null then
+ Fail ("-P and -D cannot be used simultaneously");
+ end if;
- when 'I' =>
- if Full_Switch = "I-" then
- Opt.Look_In_Primary_Dir := False;
+ if Arg'Length > 2 then
+ declare
+ Dir : constant String := Arg (3 .. Arg'Last);
+ begin
+ if not Is_Directory (Dir) then
+ Fail (Dir, " is not a directory");
+ else
+ Add_Lib_Search_Dir (Dir);
+ end if;
+ end;
- else
- Add_Lib_Search_Dir (GNAT.Command_Line.Parameter);
- end if;
+ else
+ if Index = Last then
+ Fail ("no directory specified after -D");
+ end if;
- when 'n' =>
- Do_Nothing := True;
+ Index := Index + 1;
- when 'P' =>
- if Project_File_Name /= null then
- Fail ("multiple -P switches");
+ declare
+ Dir : constant String := Argument (Index);
+ begin
+ if not Is_Directory (Dir) then
+ Fail (Dir, " is not a directory");
+ else
+ Add_Lib_Search_Dir (Dir);
+ end if;
+ end;
+ end if;
- elsif Object_Directory_Path /= null then
- Fail ("-D and -P cannot be used simultaneously");
+ when 'F' =>
+ Full_Path_Name_For_Brief_Errors := True;
- else
- declare
- Prj : constant String := GNAT.Command_Line.Parameter;
- begin
- if Prj'Length > 1 and then Prj (Prj'First) = '=' then
- Project_File_Name :=
- new String'(Prj (Prj'First + 1 .. Prj'Last));
+ when 'h' =>
+ Usage;
- else
- Project_File_Name := new String'(Prj);
- end if;
- end;
- end if;
+ when 'i' =>
+ if Arg'Length = 2 then
+ Bad_Argument;
+ end if;
- when 'q' =>
- Quiet_Output := True;
+ Source_Index := 0;
- when 'r' =>
- All_Projects := True;
+ for J in 3 .. Arg'Last loop
+ if Arg (J) not in '0' .. '9' then
+ Bad_Argument;
+ end if;
- when 'v' =>
- if Full_Switch = "v" then
- Verbose_Mode := True;
+ Source_Index :=
+ (20 * Source_Index) +
+ (Character'Pos (Arg (J)) - Character'Pos ('0'));
+ end loop;
- elsif Full_Switch = "vP0" then
- Prj.Com.Current_Verbosity := Prj.Default;
+ when 'I' =>
+ if Arg = "-I-" then
+ Opt.Look_In_Primary_Dir := False;
- elsif Full_Switch = "vP1" then
- Prj.Com.Current_Verbosity := Prj.Medium;
+ else
+ if Arg'Length = 2 then
+ Bad_Argument;
+ end if;
- else
- Prj.Com.Current_Verbosity := Prj.High;
- end if;
+ Add_Lib_Search_Dir (Arg (3 .. Arg'Last));
+ end if;
- when 'X' =>
- declare
- Ext_Asgn : constant String := GNAT.Command_Line.Parameter;
- Start : Positive := Ext_Asgn'First;
- Stop : Natural := Ext_Asgn'Last;
- Equal_Pos : Natural;
- OK : Boolean := True;
+ when 'n' =>
+ Do_Nothing := True;
- begin
- if Ext_Asgn (Start) = '"' then
- if Ext_Asgn (Stop) = '"' then
- Start := Start + 1;
- Stop := Stop - 1;
+ when 'P' =>
+ if Project_File_Name /= null then
+ Fail ("multiple -P switches");
- else
- OK := False;
- end if;
- end if;
+ elsif Object_Directory_Path /= null then
+ Fail ("-D and -P cannot be used simultaneously");
- Equal_Pos := Start;
+ end if;
- while Equal_Pos <= Stop and then
- Ext_Asgn (Equal_Pos) /= '='
- loop
- Equal_Pos := Equal_Pos + 1;
- end loop;
+ if Arg'Length > 2 then
+ declare
+ Prj : constant String := Arg (3 .. Arg'Last);
+ begin
+ if Prj'Length > 1 and then
+ Prj (Prj'First) = '='
+ then
+ Project_File_Name :=
+ new String'
+ (Prj (Prj'First + 1 .. Prj'Last));
+ else
+ Project_File_Name := new String'(Prj);
+ end if;
+ end;
- if Equal_Pos = Start or else Equal_Pos > Stop then
- OK := False;
- end if;
+ else
+ if Index = Last then
+ Fail ("no project specified after -P");
+ end if;
- if OK then
- Prj.Ext.Add
- (External_Name => Ext_Asgn (Start .. Equal_Pos - 1),
- Value => Ext_Asgn (Equal_Pos + 1 .. Stop));
+ Index := Index + 1;
+ Project_File_Name := new String'(Argument (Index));
+ end if;
- else
- Fail ("illegal external assignment '", Ext_Asgn, "'");
- end if;
- end;
+ when 'q' =>
+ Quiet_Output := True;
- when others =>
- Fail ("INTERNAL ERROR, please report");
- end case;
- end loop;
+ when 'r' =>
+ All_Projects := True;
- -- Get the file names
+ when 'v' =>
+ if Arg = "-v" then
+ Verbose_Mode := True;
- loop
- declare
- S : constant String := GNAT.Command_Line.Get_Argument;
+ elsif Arg = "-vP0" then
+ Prj.Com.Current_Verbosity := Prj.Default;
- begin
- exit when S'Length = 0;
+ elsif Arg = "-vP1" then
+ Prj.Com.Current_Verbosity := Prj.Medium;
- Add_File (S);
- end;
- end loop;
+ elsif Arg = "-vP2" then
+ Prj.Com.Current_Verbosity := Prj.High;
- exception
- when GNAT.Command_Line.Invalid_Switch =>
- Usage;
- Fail ("invalid switch : "& GNAT.Command_Line.Full_Switch);
+ else
+ Bad_Argument;
+ end if;
- when GNAT.Command_Line.Invalid_Parameter =>
- Usage;
- Fail ("parameter missing for : " & GNAT.Command_Line.Full_Switch);
+ when 'X' =>
+ if Arg'Length = 2 then
+ Bad_Argument;
+ end if;
+
+ declare
+ Ext_Asgn : constant String := Arg (3 .. Arg'Last);
+ Start : Positive := Ext_Asgn'First;
+ Stop : Natural := Ext_Asgn'Last;
+ Equal_Pos : Natural;
+ OK : Boolean := True;
+
+ begin
+ if Ext_Asgn (Start) = '"' then
+ if Ext_Asgn (Stop) = '"' then
+ Start := Start + 1;
+ Stop := Stop - 1;
+
+ else
+ OK := False;
+ end if;
+ end if;
+
+ Equal_Pos := Start;
+
+ while Equal_Pos <= Stop
+ and then Ext_Asgn (Equal_Pos) /= '='
+ loop
+ Equal_Pos := Equal_Pos + 1;
+ end loop;
+
+ if Equal_Pos = Start or else Equal_Pos > Stop then
+ OK := False;
+ end if;
+
+ if OK then
+ Prj.Ext.Add
+ (External_Name =>
+ Ext_Asgn (Start .. Equal_Pos - 1),
+ Value =>
+ Ext_Asgn (Equal_Pos + 1 .. Stop));
+
+ else
+ Fail
+ ("illegal external assignment '",
+ Ext_Asgn, "'");
+ end if;
+ end;
+
+ when others =>
+ Bad_Argument;
+ end case;
+
+ else
+ Add_File (Arg, Source_Index);
+ end if;
+ end if;
+ end;
+
+ Index := Index + 1;
+ end loop;
end Parse_Cmd_Line;
-----------------------
@@ -1398,7 +1482,7 @@ package body Clean is
if not Usage_Displayed then
Usage_Displayed := True;
Display_Copyright;
- Put_Line ("Usage: gnatclean [switches] names");
+ Put_Line ("Usage: gnatclean [switches] {[-innn] name}");
New_Line;
Put_Line (" names is one or more file names from which " &
@@ -1411,6 +1495,7 @@ package body Clean is
Put_Line (" -F Full project path name " &
"in brief error messages");
Put_Line (" -h Display this message");
+ Put_Line (" -innn Index of unit in source for following names");
Put_Line (" -n Nothing to do: only list files to delete");
Put_Line (" -Pproj Use GNAT Project File proj");
Put_Line (" -q Be quiet/terse");
diff --git a/gcc/ada/cstand.adb b/gcc/ada/cstand.adb
index 7c133248c07..b7d1c90eb5c 100644
--- a/gcc/ada/cstand.adb
+++ b/gcc/ada/cstand.adb
@@ -402,6 +402,11 @@ package body CStand is
Set_Etype (R_Node, Standard_Boolean);
Set_Parent (R_Node, Standard_Boolean);
+ -- Record entity identifiers for boolean literals in the
+ -- Boolean_Literals array, for easy reference during expansion.
+
+ Boolean_Literals := (False => Standard_False, True => Standard_True);
+
-- Create type definition nodes for predefined integer types
Build_Signed_Integer_Type
diff --git a/gcc/ada/decl.c b/gcc/ada/decl.c
index 73c35c511dc..92e1342feb9 100644
--- a/gcc/ada/decl.c
+++ b/gcc/ada/decl.c
@@ -4998,11 +4998,11 @@ gnat_to_gnu_field (Entity_Id gnat_field,
&& TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_field_type))
gnu_field_type = TREE_TYPE (TYPE_FIELDS (gnu_field_type));
- /* If we are packing this record or we have a specified size that's
- smaller than that of the field type and the field type is also a record
- that's BLKmode and with a small constant size, see if we can get a
- better form of the type that allows more packing. If we can, show
- a size was specified for it if there wasn't one so we know to
+ /* If we are packing this record, have a specified size that's smaller than
+ that of the field type, or a position is specified, and the field type
+ is also a record that's BLKmode and with a small constant size, see if
+ we can get a better form of the type that allows more packing. If we
+ can, show a size was specified for it if there wasn't one so we know to
make this a bitfield and avoid making things wider. */
if (TREE_CODE (gnu_field_type) == RECORD_TYPE
&& TYPE_MODE (gnu_field_type) == BLKmode
@@ -5010,7 +5010,8 @@ gnat_to_gnu_field (Entity_Id gnat_field,
&& compare_tree_int (TYPE_SIZE (gnu_field_type), BIGGEST_ALIGNMENT) <= 0
&& (packed
|| (gnu_size != 0 && tree_int_cst_lt (gnu_size,
- TYPE_SIZE (gnu_field_type)))))
+ TYPE_SIZE (gnu_field_type)))
+ || Present (Component_Clause (gnat_field))))
{
gnu_field_type = make_packable_type (gnu_field_type);
diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads
index 9548da438ff..6487a22012e 100644
--- a/gcc/ada/einfo.ads
+++ b/gcc/ada/einfo.ads
@@ -3383,18 +3383,19 @@ package Einfo is
-- A record subtype, created by a record subtype declaration.
E_Record_Type_With_Private,
- -- Used for types defined by a private extension declaration. Includes
- -- the fields for both private types and for record types (with the
- -- sole exception of Corresponding_Concurrent_Type which is obviously
- -- not needed). This entity is considered to be both a record type and
+ -- Used for types defined by a private extension declaration, and
+ -- for tagged private types. Includes the fields for both private
+ -- types and for record types (with the sole exception of
+ -- Corresponding_Concurrent_Type which is obviously not needed).
+ -- This entity is considered to be both a record type and
-- a private type.
E_Record_Subtype_With_Private,
-- A subtype of a type defined by a private extension declaration.
E_Private_Type,
- -- A private type, created by a private type declaration that does
- -- not have the keyword limited.
+ -- A private type, created by a private type declaration
+ -- that has neither the keyword limited nor the keyword tagged.
E_Private_Subtype,
-- A subtype of a private type, created by a subtype declaration used
@@ -3402,7 +3403,7 @@ package Einfo is
E_Limited_Private_Type,
-- A limited private type, created by a private type declaration that
- -- has the keyword limited.
+ -- has the keyword limited, but not the keyword tagged.
E_Limited_Private_Subtype,
-- A subtype of a limited private type, created by a subtype declaration
diff --git a/gcc/ada/erroutc.adb b/gcc/ada/erroutc.adb
index e46c7cd6314..31c97d5bc55 100644
--- a/gcc/ada/erroutc.adb
+++ b/gcc/ada/erroutc.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
+-- 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- --
@@ -33,7 +33,6 @@
with Casing; use Casing;
with Debug; use Debug;
with Err_Vars; use Err_Vars;
-with Hostparm;
with Namet; use Namet;
with Opt; use Opt;
with Output; use Output;
@@ -71,7 +70,6 @@ package body Erroutc is
function Buffer_Ends_With (S : String) return Boolean is
Len : constant Natural := S'Length;
-
begin
return
Msglen > Len
@@ -466,6 +464,10 @@ package body Erroutc is
-- Returns True for a message that is to be purged. Also adjusts
-- error counts appropriately.
+ ------------------
+ -- To_Be_Purged --
+ ------------------
+
function To_Be_Purged (E : Error_Msg_Id) return Boolean is
begin
if E /= No_Error_Msg
diff --git a/gcc/ada/erroutc.ads b/gcc/ada/erroutc.ads
index b0af72df446..cde38932df3 100644
--- a/gcc/ada/erroutc.ads
+++ b/gcc/ada/erroutc.ads
@@ -27,7 +27,6 @@
-- This packages contains global variables and routines common to error
-- reporting packages, including Errout and Prj.Err.
-with Hostparm;
with Table;
with Types; use Types;
@@ -77,11 +76,12 @@ package Erroutc is
Manual_Quote_Mode : Boolean := False;
-- Set True in manual quotation mode
- Max_Msg_Length : constant := 256 + 2 * Hostparm.Max_Line_Length;
- -- Maximum length of error message. The addition of Max_Line_Length
+ Max_Msg_Length : constant := 1024 + 2 * Int (Column_Number'Last);
+ -- Maximum length of error message. The addition of 2 * Column_Number'Last
-- ensures that two insertion tokens of maximum length can be accomodated.
- -- The value of 256 is an arbitrary value that should be more than long
- -- enough to accomodate any reasonable message.
+ -- The value of 1024 is an arbitrary value that should be more than long
+ -- enough to accomodate any reasonable message (and for that matter, some
+ -- pretty unreasonable messages!)
Msg_Buffer : String (1 .. Max_Msg_Length);
-- Buffer used to prepare error messages
diff --git a/gcc/ada/eval_fat.adb b/gcc/ada/eval_fat.adb
index d083c32ba5c..2d439930301 100644
--- a/gcc/ada/eval_fat.adb
+++ b/gcc/ada/eval_fat.adb
@@ -40,8 +40,8 @@ package body Eval_Fat is
type Radix_Power_Table is array (Int range 1 .. 4) of Int;
- Radix_Powers : constant Radix_Power_Table
- := (Radix**1, Radix**2, Radix**3, Radix**4);
+ Radix_Powers : constant Radix_Power_Table :=
+ (Radix ** 1, Radix ** 2, Radix ** 3, Radix ** 4);
function Float_Radix return T renames Ureal_2;
-- Radix expressed in real form
diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb
index 040377e2f6d..edf358ef1b2 100644
--- a/gcc/ada/exp_attr.adb
+++ b/gcc/ada/exp_attr.adb
@@ -1182,13 +1182,8 @@ package body Exp_Attr is
Res := Is_Constrained (Etype (Ent));
end if;
- if Res then
- Rewrite (N,
- New_Reference_To (Standard_True, Loc));
- else
- Rewrite (N,
- New_Reference_To (Standard_False, Loc));
- end if;
+ Rewrite (N,
+ New_Reference_To (Boolean_Literals (Res), Loc));
end;
-- Prefix is not an entity name. These are also cases where
@@ -1196,16 +1191,13 @@ package body Exp_Attr is
-- and type of the prefix.
else
- if not Is_Variable (Pref)
- or else Nkind (Pref) = N_Explicit_Dereference
- or else Is_Constrained (Etype (Pref))
- then
- Rewrite (N,
- New_Reference_To (Standard_True, Loc));
- else
- Rewrite (N,
- New_Reference_To (Standard_False, Loc));
- end if;
+ Rewrite (N,
+ New_Reference_To (
+ Boolean_Literals (
+ not Is_Variable (Pref)
+ or else Nkind (Pref) = N_Explicit_Dereference
+ or else Is_Constrained (Etype (Pref))),
+ Loc));
end if;
Analyze_And_Resolve (N, Standard_Boolean);
diff --git a/gcc/ada/exp_ch2.adb b/gcc/ada/exp_ch2.adb
index bc8c2ff0d4f..7192cb9a333 100644
--- a/gcc/ada/exp_ch2.adb
+++ b/gcc/ada/exp_ch2.adb
@@ -41,6 +41,7 @@ with Sem_Res; use Sem_Res;
with Sem_Util; use Sem_Util;
with Sem_Warn; use Sem_Warn;
with Sinfo; use Sinfo;
+with Snames; use Snames;
with Stand; use Stand;
with Tbuild; use Tbuild;
with Uintp; use Uintp;
@@ -216,6 +217,14 @@ package body Exp_Ch2 is
-- issue that they do not get replaced when they could be).
and then Nkind (Parent (N)) /= N_Pragma_Argument_Association
+
+ -- Same for Asm_Input and Asm_Output attribute references
+
+ and then not (Nkind (Parent (N)) = N_Attribute_Reference
+ and then
+ (Attribute_Name (Parent (N)) = Name_Asm_Input
+ or else
+ Attribute_Name (Parent (N)) = Name_Asm_Output))
then
-- Case of Current_Value is a compile time known value
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb
index 08ec7d507b5..4a08a28477b 100644
--- a/gcc/ada/exp_ch5.adb
+++ b/gcc/ada/exp_ch5.adb
@@ -702,13 +702,9 @@ package body Exp_Ch5 is
Duplicate_Subexpr (Right_Lo, Name_Req => True),
Duplicate_Subexpr (Right_Hi, Name_Req => True));
- if Forwards_OK (N) then
- Append_To (Actuals,
- New_Occurrence_Of (Standard_False, Loc));
- else
- Append_To (Actuals,
- New_Occurrence_Of (Standard_True, Loc));
- end if;
+ Append_To (Actuals,
+ New_Occurrence_Of (
+ Boolean_Literals (not Forwards_OK (N)), Loc));
Rewrite (N,
Make_Procedure_Call_Statement (Loc,
diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb
index e78d9954082..287b4efc792 100644
--- a/gcc/ada/exp_ch7.adb
+++ b/gcc/ada/exp_ch7.adb
@@ -37,10 +37,8 @@ with Exp_Ch11; use Exp_Ch11;
with Exp_Dbug; use Exp_Dbug;
with Exp_Tss; use Exp_Tss;
with Exp_Util; use Exp_Util;
-with Fname; use Fname;
with Freeze; use Freeze;
with Hostparm; use Hostparm;
-with Lib; use Lib;
with Nlists; use Nlists;
with Nmake; use Nmake;
with Opt; use Opt;
@@ -818,28 +816,16 @@ package body Exp_Ch7 is
begin
if Is_Derived_Type (Typ)
and then Comes_From_Source (E)
- and then Is_Overriding_Operation (E)
- and then
- (not Is_Predefined_File_Name
- (Unit_File_Name (Get_Source_Unit (Root_Type (Typ)))))
+ and then not Is_Overriding_Operation (E)
then
- -- We know that the explicit operation on the type overrode
+ -- We know that the explicit operation on the type does not override
-- the inherited operation of the parent, and that the derivation
-- is from a private type that is not visibly controlled.
Parent_Type := Etype (Typ);
Op := Find_Prim_Op (Parent_Type, Name_Of (Prim));
- if Present (Op)
- and then Is_Hidden (Op)
- and then Scope (Scope (Typ)) /= Scope (Op)
- and then not In_Open_Scopes (Scope (Typ))
- then
- -- If the parent operation is not visible, and the derived
- -- type is not declared in a child unit, then the explicit
- -- operation does not override, and we must use the operation
- -- of the parent.
-
+ if Present (Op) then
E := Op;
-- Wrap the object to be initialized into the proper
diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb
index c712eacc108..d8c43df42ad 100644
--- a/gcc/ada/exp_ch9.adb
+++ b/gcc/ada/exp_ch9.adb
@@ -3413,7 +3413,7 @@ package body Exp_Ch9 is
-- It is not a boolean variable or literal, so check the restriction
- Check_Restriction (Boolean_Entry_Barriers, Cond);
+ Check_Restriction (Simple_Barriers, Cond);
end Expand_Entry_Barrier;
------------------------------------
@@ -5735,19 +5735,16 @@ package body Exp_Ch9 is
RTS_Call : Entity_Id;
begin
- if Abort_Present (N) then
- Abortable := New_Occurrence_Of (Standard_True, Loc);
- else
- Abortable := New_Occurrence_Of (Standard_False, Loc);
- end if;
+ Abortable :=
+ New_Occurrence_Of (Boolean_Literals (Abort_Present (N)), Loc);
- -- Set up the target object.
+ -- Set up the target object
Extract_Entry (N, Concval, Ename, Index);
Conctyp := Etype (Concval);
New_Param := Concurrent_Ref (Concval);
- -- The target entry index and abortable flag are the same for all cases.
+ -- The target entry index and abortable flag are the same for all cases
Params := New_List (
Entry_Index_Expression (Loc, Entity (Ename), Index, Conctyp),
@@ -5804,7 +5801,7 @@ package body Exp_Ch9 is
end if;
end loop;
- -- Create the GNARLI call.
+ -- Create the GNARLI call
Rcall := Make_Procedure_Call_Statement (Loc,
Name =>
diff --git a/gcc/ada/exp_disp.adb b/gcc/ada/exp_disp.adb
index 0d203b6d289..fb8f6be31e0 100644
--- a/gcc/ada/exp_disp.adb
+++ b/gcc/ada/exp_disp.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
+-- 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- --
@@ -876,24 +876,22 @@ package body Exp_Disp is
Node2 => Position)));
end;
- -- Generate: Set_Remotely_Callable (DT_Ptr, status);
- -- where status is described in E.4 (18)
+ -- Generate: Set_Remotely_Callable (DT_Ptr, Status);
+ -- where Status is described in E.4 (18)
declare
Status : Entity_Id;
begin
- if 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)
- then
- Status := Standard_True;
- else
- Status := Standard_False;
- end if;
+ 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));
Append_To (Elab_Code,
Make_DT_Access_Action (Typ,
diff --git a/gcc/ada/exp_fixd.adb b/gcc/ada/exp_fixd.adb
index 41158104beb..75357a2f3ab 100644
--- a/gcc/ada/exp_fixd.adb
+++ b/gcc/ada/exp_fixd.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2002 Free Software Foundation, Inc. --
+-- 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- --
@@ -561,11 +561,7 @@ package body Exp_Fixd is
-- call the runtime routine to compute the quotient and remainder
else
- if Rounded_Result_Set (N) then
- Rnd := Standard_True;
- else
- Rnd := Standard_False;
- end if;
+ Rnd := Boolean_Literals (Rounded_Result_Set (N));
Code := New_List (
Make_Object_Declaration (Loc,
@@ -947,11 +943,7 @@ package body Exp_Fixd is
-- call the runtime routine to compute the quotient and remainder
else
- if Rounded_Result_Set (N) then
- Rnd := Standard_True;
- else
- Rnd := Standard_False;
- end if;
+ Rnd := Boolean_Literals (Rounded_Result_Set (N));
Code := New_List (
Make_Object_Declaration (Loc,
diff --git a/gcc/ada/frontend.adb b/gcc/ada/frontend.adb
index f4f36f56aaf..35645bd0812 100644
--- a/gcc/ada/frontend.adb
+++ b/gcc/ada/frontend.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
+-- 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- --
@@ -124,10 +124,12 @@ begin
begin
-- We always analyze config files with style checks off, since
-- we don't want a miscellaneous gnat.adc that is around to
- -- discombobulate intended -gnatg or -gnaty compilations.
+ -- discombobulate intended -gnatg or -gnaty compilations. We
+ -- also disconnect checking for maximum line length.
Opt.Style_Check := False;
Style_Check := False;
+ Opt.Max_Line_Length := Int (Column_Number'Last);
-- Capture current suppress options, which may get modified
@@ -191,6 +193,7 @@ begin
-- Restore style check, but if config file turned on checks, leave on!
Opt.Style_Check := Save_Style_Check or Style_Check;
+ Opt.Max_Line_Length := Hostparm.Max_Line_Length;
-- Capture any modifications to suppress options from config pragmas
diff --git a/gcc/ada/g-os_lib.ads b/gcc/ada/g-os_lib.ads
index 6cd6b82f787..bd4201fc5f7 100644
--- a/gcc/ada/g-os_lib.ads
+++ b/gcc/ada/g-os_lib.ads
@@ -93,6 +93,7 @@ pragma Elaborate_Body (OS_Lib);
-- Time/Date Stuff --
---------------------
+ type OS_Time is private;
-- The OS's notion of time is represented by the private type OS_Time.
-- This is the type returned by the File_Time_Stamp functions to obtain
-- the time stamp of a specified file. Functions and a procedure (modeled
@@ -102,7 +103,8 @@ pragma Elaborate_Body (OS_Lib);
-- cases but rather the actual (time-zone independent) time stamp of the
-- file (of course in Unix systems, this *is* in GMT form).
- type OS_Time is private;
+ Invalid_Time : constant OS_Time;
+ -- A special unique value used to flag an invalid time stamp value
subtype Year_Type is Integer range 1900 .. 2099;
subtype Month_Type is Integer range 1 .. 12;
@@ -110,6 +112,8 @@ pragma Elaborate_Body (OS_Lib);
subtype Hour_Type is Integer range 0 .. 23;
subtype Minute_Type is Integer range 0 .. 59;
subtype Second_Type is Integer range 0 .. 59;
+ -- Declarations similar to those in Calendar, breaking down the time
+
function GM_Year (Date : OS_Time) return Year_Type;
function GM_Month (Date : OS_Time) return Month_Type;
@@ -117,6 +121,7 @@ pragma Elaborate_Body (OS_Lib);
function GM_Hour (Date : OS_Time) return Hour_Type;
function GM_Minute (Date : OS_Time) return Minute_Type;
function GM_Second (Date : OS_Time) return Second_Type;
+ -- Functions to extract information from OS_Time value
function "<" (X, Y : OS_Time) return Boolean;
function ">" (X, Y : OS_Time) return Boolean;
@@ -134,6 +139,8 @@ pragma Elaborate_Body (OS_Lib);
Hour : out Hour_Type;
Minute : out Minute_Type;
Second : out Second_Type);
+ -- Analogous to the routine of similar name in Calendar, takes an OS_Time
+ -- and splits it into its component parts with obvious meanings.
----------------
-- File Stuff --
@@ -368,9 +375,11 @@ pragma Elaborate_Body (OS_Lib);
function File_Time_Stamp (Name : String) return OS_Time;
-- Given the name of a file or directory, Name, obtains and returns the
-- time stamp. This function can be used for an unopened file.
+ -- Returns Invalid_Time is Name doesn't correspond to an existing file.
function File_Time_Stamp (FD : File_Descriptor) return OS_Time;
-- Get time stamp of file from file descriptor FD
+ -- Returns Invalid_Time is FD doesn't correspond to an existing file.
function Normalize_Pathname
(Name : String;
@@ -542,6 +551,7 @@ pragma Elaborate_Body (OS_Lib);
Success : out Boolean);
function File_Time_Stamp (Name : C_File_Name) return OS_Time;
+ -- Returns Invalid_Time is Name doesn't correspond to an existing file.
function Is_Regular_File (Name : C_File_Name) return Boolean;
@@ -735,6 +745,9 @@ private
-- but this was not properly supported till GNAT 3.15a, so that would
-- cause bootstrap path problems. To be changed later ???
+ Invalid_Time : constant OS_Time := -1;
+ -- This value should match the return valud by __gnat_file_time_*
+
pragma Inline ("<");
pragma Inline (">");
pragma Inline ("<=");
diff --git a/gcc/ada/g-regpat.adb b/gcc/ada/g-regpat.adb
index 8857edccbfc..76fd6abd46d 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-2003 Ada Core Technologies, Inc. --
+-- Copyright (C) 1996-2004 Ada Core Technologies, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -3406,9 +3406,9 @@ package body GNAT.Regpat is
(Expression : String;
Data : String;
Matches : out Match_Array;
- Size : Program_Size := 0;
- Data_First : Integer := -1;
- Data_Last : Positive := Positive'Last)
+ Size : Program_Size := Auto_Size;
+ Data_First : Integer := -1;
+ Data_Last : Positive := Positive'Last)
is
PM : Pattern_Matcher (Size);
Finalize_Size : Program_Size;
@@ -3426,12 +3426,12 @@ package body GNAT.Regpat is
-- Match --
-----------
- function Match
+ function Match
(Expression : String;
Data : String;
- Size : Program_Size := 0;
- Data_First : Integer := -1;
- Data_Last : Positive := Positive'Last) return Natural
+ Size : Program_Size := Auto_Size;
+ Data_First : Integer := -1;
+ Data_Last : Positive := Positive'Last) return Natural
is
PM : Pattern_Matcher (Size);
Final_Size : Program_Size; -- unused
@@ -3452,9 +3452,9 @@ package body GNAT.Regpat is
function Match
(Expression : String;
Data : String;
- Size : Program_Size := 0;
- Data_First : Integer := -1;
- Data_Last : Positive := Positive'Last) return Boolean
+ Size : Program_Size := Auto_Size;
+ Data_First : Integer := -1;
+ Data_Last : Positive := Positive'Last) return Boolean
is
Matches : Match_Array (0 .. 0);
PM : Pattern_Matcher (Size);
diff --git a/gcc/ada/g-regpat.ads b/gcc/ada/g-regpat.ads
index 57bc076717a..82bab7f5bda 100644
--- a/gcc/ada/g-regpat.ads
+++ b/gcc/ada/g-regpat.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- --
-- Copyright (C) 1986 by University of Toronto. --
--- Copyright (C) 1996-2003 Ada Core Technologies, Inc. --
+-- Copyright (C) 1996-2004 Ada Core Technologies, Inc. --
-- --
-- GNAT is 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,19 +300,32 @@ pragma Preelaborate (Regpat);
-- This is limited by the size of a Character, as found in the
-- byte-compiled version of regular expressions.
- Max_Program_Size : constant := 2**15 - 1;
- -- Maximum size that can be allocated for a program
-
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.
+ Max_Program_Size : constant := 2**15 - 1;
+ -- Maximum size that can be allocated for a program
+
type Program_Size is range 0 .. Max_Program_Size;
for Program_Size'Size use 16;
-- Number of bytes allocated for the byte-compiled version of a regular
- -- expression.
+ -- expression. The size required depends on the complexity of the regular
+ -- expression in a complex manner that is undocumented (other than in the
+ -- body of the Compile procedure). Normally the size is automatically set
+ -- 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.
+
+ Auto_Size : constant := 0;
+ -- Used in calls to Match to indicate that the Size should be set to
+ -- a value appropriate to the expression being used automatically.
type Regexp_Flags is mod 256;
for Regexp_Flags'Size use 8;
@@ -368,9 +381,14 @@ pragma Preelaborate (Regpat);
-- matching a null string at position 1, which uses (1, 0)
-- and no match at all.
- ------------------------------
- -- Pattern_Matcher Creation --
- ------------------------------
+ ---------------------------------
+ -- 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.
type Pattern_Matcher (Size : Program_Size) is private;
-- Type used to represent a regular expression compiled into byte code
@@ -381,14 +399,18 @@ pragma Preelaborate (Regpat);
function Compile
(Expression : String;
Flags : Regexp_Flags := No_Flags) return Pattern_Matcher;
- -- Compile a regular expression into internal code.
- -- Raises Expression_Error if Expression is not a legal regular expression.
- -- The appropriate size is calculated automatically, but this means that
- -- the regular expression has to be compiled twice (the first time to
- -- calculate the size, the second time to actually generate the byte code).
+ -- Compile a regular expression into internal code
--
- -- Flags is the default value to use to set properties for Expression (case
- -- sensitivity,...).
+ -- Raises Expression_Error if Expression is not a legal regular expression
+ --
+ -- The appropriate size is calculated automatically to correspond to the
+ -- provided expression. This is the normal default method of compilation.
+ -- Note that it is generally not possible to assign the result of two
+ -- different calls to this Compile function to the same Pattern_Matcher
+ -- variable, since the sizes will differ.
+ --
+ -- Flags is the default value to use to set properties for Expression
+ -- (e.g. case sensitivity,...).
procedure Compile
(Matcher : out Pattern_Matcher;
@@ -396,11 +418,28 @@ pragma Preelaborate (Regpat);
Final_Code_Size : out Program_Size;
Flags : Regexp_Flags := No_Flags);
-- Compile a regular expression into into internal code
- -- This procedure is significantly faster than the function
- -- Compile, as there is a known maximum size for the matcher.
- -- This function raises Storage_Error if Matcher is too small
- -- to hold the resulting code, or Expression_Error is Expression
- -- is not a legal regular expression.
+
+ -- 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.
+ --
+ -- 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).
+ --
+ -- Expression_Error is raised if the string Expression does not contain
+ -- a valid regular expression.
--
-- Flags is the default value to use to set properties for Expression (case
-- sensitivity,...).
@@ -410,7 +449,7 @@ pragma Preelaborate (Regpat);
Expression : String;
Flags : Regexp_Flags := No_Flags);
-- Same procedure as above, expect it does not return the final
- -- program size.
+ -- program size, and Matcher.Size cannot be Auto_Size.
function Paren_Count (Regexp : Pattern_Matcher) return Match_Count;
pragma Inline (Paren_Count);
@@ -442,83 +481,96 @@ pragma Preelaborate (Regpat);
-- Matching --
--------------
- procedure Match
- (Expression : String;
- Data : String;
- Matches : out Match_Array;
- Size : Program_Size := 0;
- Data_First : Integer := -1;
- Data_Last : Positive := Positive'Last);
- -- Match Expression against Data (Data_First .. Data_Last) and store
- -- result in Matches.
- --
- -- Data_First defaults to Data'First if unspecified (that is the
- -- dummy value of -1 is interpreted to mean Data'First).
- --
- -- Data_Last defaults to Data'Last if unspecified (that is the
- -- dummy value of Positive'Last is interpreted to mean Data'Last)
- --
- -- It is important that Data contains the whole string (or file) you
- -- want to matched against, even if you start in the middle, since
- -- otherwise regular expressions starting with "^" or ending with "$" will
- -- be improperly processed.
+ -- The Match subprograms are given a regular expression in string
+ -- form, and perform the corresponding match. The following parameters
+ -- are present in all forms of the Match call.
+
+ -- Expression contains the regular expression to be matched as a string
+
+ -- Data contains the string to be matched
+
+ -- Data_First is the lower bound for the match, i.e. Data (Data_First)
+ -- will be the first character to be examined. If Data_First is set to
+ -- the special value of -1 (the default), then the first character to
+ -- be examined is Data (Data_First). However, the regular expression
+ -- character ^ (start of string) still refers to the first character
+ -- of the full string (Data (Data'First)), which is why there is a
+ -- separate mechanism for specifying Data_First.
+
+ -- Data_Last is the upper bound for the match, i.e. Data (Data_Last)
+ -- will be the last character to be examined. If Data_Last is set to
+ -- the special value of Positive'Last (the default), then the last
+ -- character to be examined is Data (Data_Last). However, the regular
+ -- expression character $ (end of string) still refers to the last
+ -- character of the full string (Data (Data'Last)), which is why there
+ -- is a separate mechanism for specifying Data_Last.
+
+ -- Note: the use of Data_First and Data_Last is not equivalent to
+ -- simply passing a slice as Expression because of the handling of
+ -- regular expression characters ^ and $.
+
+ -- Size is the size allocated for the compiled byte code. Normally
+ -- this is defaulted to Auto_Size which means that the appropriate
+ -- size is allocated automatically. It is possible to specify an
+ -- explicit size, which must be sufficiently large. This slightly
+ -- increases the efficiency by avoiding the extra step of computing
+ -- the appropriate size.
+
+ -- The following exceptions can be raised in calls to Match
--
- -- Function raises Storage_Error if Size is too small for Expression,
- -- or Expression_Error if Expression is not a legal regular expression.
- -- If Size is 0, then the appropriate size is automatically calculated
- -- by this package, but this is slightly slower.
+ -- Storage_Error is raised if a non-zero value is given for Size
+ -- and it is too small to hold the compiled byte code.
--
+ -- Expression_Error is raised if the given expression is not a legal
+ -- regular expression.
+
+
+ procedure Match
+ (Expression : String;
+ Data : String;
+ Matches : out Match_Array;
+ Size : Program_Size := Auto_Size;
+ Data_First : Integer := -1;
+ Data_Last : Positive := Positive'Last);
+ -- This version returns the result of the match stored in Match_Array.
-- At most Matches'Length parenthesis are returned.
- function Match
+ function Match
(Expression : String;
Data : String;
- Size : Program_Size := 0;
- Data_First : Integer := -1;
- Data_Last : Positive := Positive'Last) return Natural;
- -- Return the position where Data matches, or (Data'First - 1) if
- -- there is no match.
- --
- -- Function raises Storage_Error if Size is too small for Expression
- -- or Expression_Error if Expression is not a legal regular expression
- --
- -- If Size is 0, then the appropriate size is automatically calculated
- -- by this package, but this is slightly slower.
- -- See description of Data_First and Data_Last above.
+ Size : Program_Size := Auto_Size;
+ Data_First : Integer := -1;
+ Data_Last : Positive := Positive'Last) return Natural;
+ -- This version returns the position where Data matches, or if there is
+ -- no match, then the value Data'First - 1.
function Match
(Expression : String;
Data : String;
- Size : Program_Size := 0;
- Data_First : Integer := -1;
- Data_Last : Positive := Positive'Last) return Boolean;
- -- Return True if Data matches Expression. Match raises Storage_Error
- -- if Size is too small for Expression, or Expression_Error if Expression
- -- is not a legal regular expression.
- --
- -- If Size is 0, then the appropriate size is automatically calculated
- -- by this package, but this is slightly slower.
- --
- -- See description of Data_First and Data_Last above.
+ Size : Program_Size := Auto_Size;
+ Data_First : Integer := -1;
+ Data_Last : Positive := Positive'Last) return Boolean;
+ -- This version returns True if the match succeeds, False otherwise
------------------------------------------------
- -- Matching a pre-compiled regular expression --
+ -- Matching a Pre-Compiled Regular Expression --
------------------------------------------------
-- The following functions are significantly faster if you need to reuse
-- the same regular expression multiple times, since you only have to
- -- compile it once.
+ -- compile it once. For these functions you must first compile the
+ -- expression with a call to Compile as previously described.
+
+ -- The parameters Data, Data_First and Data_Last are as described
+ -- in the previous section.
function Match
(Self : Pattern_Matcher;
Data : String;
Data_First : Integer := -1;
Data_Last : Positive := Positive'Last) return Natural;
- -- Match Data using the given pattern matcher.
- -- Return the position where Data matches, or (Data'First - 1) if there is
- -- no match.
- --
- -- See description of Data_First and Data_Last above.
+ -- Match Data using the given pattern matcher. Returns the position
+ -- where Data matches, or (Data'First - 1) if there is no match.
function Match
(Self : Pattern_Matcher;
@@ -526,8 +578,6 @@ pragma Preelaborate (Regpat);
Data_First : Integer := -1;
Data_Last : Positive := Positive'Last) return Boolean;
-- Return True if Data matches using the given pattern matcher.
- --
- -- See description of Data_First and Data_Last above.
pragma Inline (Match);
-- All except the last one below
@@ -542,8 +592,6 @@ pragma Preelaborate (Regpat);
-- The expression matches if Matches (0) /= No_Match.
--
-- At most Matches'Length parenthesis are returned.
- --
- -- See description of Data_First and Data_Last above.
-----------
-- Debug --
diff --git a/gcc/ada/gnat-style.texi b/gcc/ada/gnat-style.texi
index 2fa09412589..ee425de5f29 100644
--- a/gcc/ada/gnat-style.texi
+++ b/gcc/ada/gnat-style.texi
@@ -382,8 +382,11 @@ one context, where comments explain their purpose.
@itemize @bullet
@item
-Every operator must be surrounded by spaces, except for the
-exponentiation operator.
+Every operator must be surrounded by spaces. An exception is that
+this rule does not apply to the exponentiation operator, for which
+there are no specific layout rules. The reason for this exception
+is that sometimes it makes clearer reading to leave out the spaces
+around exponentiation.
@cindex Operators
@smallexample @c adanocomment
@@ -391,9 +394,6 @@ exponentiation operator.
@end smallexample
@item
-When folding a long line, fold before an operator, not after.
-
-@item
Use parentheses where they clarify the intended association of operands
with operators:
@cindex Parenthesization of expressions
diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi
index 8dbc0d36c1a..614064ff313 100644
--- a/gcc/ada/gnat_rm.texi
+++ b/gcc/ada/gnat_rm.texi
@@ -1308,16 +1308,17 @@ debug procedures in the middle of declarations.
Syntax:
@smallexample @c ada
-pragma Elaboration_Checks (RM | Static);
+pragma Elaboration_Checks (Dynamic | Static);
@end smallexample
@noindent
This is a configuration pragma that provides control over the
elaboration model used by the compilation affected by the
-pragma. If the parameter is RM, then the dynamic elaboration
+pragma. If the parameter is @code{Dynamic},
+then the dynamic elaboration
model described in the Ada Reference Manual is used, as though
the @code{-gnatE} switch had been specified on the command
-line. If the parameter is Static, then the default GNAT static
+line. If the parameter is @code{Static}, then the default GNAT static
model is used. This configuration pragma overrides the setting
of the command line. For full details on the elaboration models
used by the GNAT compiler, see section ``Elaboration Order
@@ -1355,10 +1356,12 @@ FUNCTION_PROFILE ::= [Parameter_Types => PARAMETER_TYPES,]
Result_Type => result_SUBTYPE_NAME]
PARAMETER_TYPES ::= (SUBTYPE_NAME @{, SUBTYPE_NAME@})
-SUBTYPE_NAME ::= STRING_LITERAL
+SUBTYPE_NAME ::= STRING_VALUE
SOURCE_LOCATION ::= Source_Location => SOURCE_TRACE
-SOURCE_TRACE ::= STRING_LITERAL
+SOURCE_TRACE ::= STRING_VALUE
+
+STRING_VALUE ::= STRING_LITERAL @{& STRING_LITERAL@}
@end smallexample
@noindent
@@ -1387,7 +1390,7 @@ subprograms denoted by the first two parameters.
Use PARAMETER_AND_RESULT_TYPE_PROFILE to specify the profile of the subprogram
to be eliminated in a manner similar to that used for the extended
@code{Import} and @code{Export} pragmas, except that the subtype names are
-always given as string literals. At the moment, this form of distinguishing
+always given as strings. At the moment, this form of distinguishing
overloaded subprograms is implemented only partially, so we do not recommend
using it for practical subprogram elimination.
@@ -1397,8 +1400,8 @@ as @code{Parameter_Types => ("")}
Alternatively, the @code{Source_Location} parameter is used to specify
which overloaded alternative is to be eliminated by pointing to the
location of the DEFINING_PROGRAM_UNIT_NAME of this subprogram in the
-source text. The string literal submitted as SOURCE_TRACE should have
-the following format:
+source text. The string literal (or concatenation of string literals)
+given as SOURCE_TRACE must have the following format:
@smallexample @c ada
SOURCE_TRACE ::= SOURCE_LOCATION@{LBRACKET SOURCE_LOCATION RBRACKET@}
@@ -2969,14 +2972,13 @@ There are no semantic dependencies on the package Ada.Calendar.
@item No_Relative_Delay
There are no delay_relative_statements.
-@item No_Task_Attributes
-There are no semantic dependencies on the Ada.Task_Attributes package and
-there are no references to the attributes Callable and Terminated [RM 9.9].
+@item No_Task_Attributes_Package
+There are no semantic dependencies on the Ada.Task_Attributes package.
-@item Boolean_Entry_Barriers
-Entry barrier condition expressions shall be boolean
-objects which are declared in the protected type
-which contains the entry.
+@item Simple_Barriers
+Entry barrier condition expressions shall be either static
+boolean expressions or boolean objects which are declared in
+the protected type which contains the entry.
@item Max_Asynchronous_Select_Nesting = 0
[RM D.7] Specifies the maximum dynamic nesting level of asynchronous_selects.
@@ -3022,7 +3024,7 @@ and whose most recent description is available at
The above set is a superset of the restrictions provided by pragma
@code{Restricted_Run_Time}, it includes five additional restrictions
-(@code{Boolean_Entry_Barriers}, @code{No_Select_Statements},
+(@code{Simple_Barriers}, @code{No_Select_Statements},
@code{No_Calendar},
@code{No_Relative_Delay} and @code{No_Task_Termination}). This means
that pragma @code{Ravenscar}, like the pragma @code{Restricted_Run_Time},
@@ -3053,7 +3055,7 @@ A configuration pragma that establishes the following set of restrictions:
@item No_Protected_Type_Allocators
@item No_Local_Protected_Objects
@item No_Requeue_Statements
-@item No_Task_Attributes
+@item No_Task_Attributes_Package
@item Max_Asynchronous_Select_Nesting = 0
@item Max_Task_Entries = 0
@item Max_Protected_Entries = 1
@@ -6846,13 +6848,14 @@ then all compilation units in the partition must obey the restriction.
@table @code
-@item Boolean_Entry_Barriers
-@findex Boolean_Entry_Barriers
+@item Simple_Barriers
+@findex Simple_Barriers
This restriction ensures at compile time that barriers in entry declarations
-for protected types are restricted to references to simple boolean variables
-defined in the private part of the protected type. No other form of entry
-barriers is permitted. This is one of the restrictions of the Ravenscar
-profile for limited tasking (see also pragma @code{Ravenscar}).
+for protected types are restricted to either static boolean expressions or
+references to simple boolean variables defined in the private part of the
+protected type. No other form of entry barriers is permitted. This is one
+of the restrictions of the Ravenscar profile for limited tasking (see also
+pragma @code{Ravenscar}).
@item Max_Entry_Queue_Depth => Expr
@findex Max_Entry_Queue_Depth
@@ -6989,8 +6992,8 @@ user-defined storage pool.
This restriction ensures at compile time that there are no implicit or
explicit dependencies on the package @code{Ada.Streams}.
-@item No_Task_Attributes
-@findex No_Task_Attributes
+@item No_Task_Attributes_Package
+@findex No_Task_Attributes_Package
This restriction ensures at compile time that there are no implicit or
explicit dependencies on the package @code{Ada.Task_Attributes}.
diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi
index 06dd07a16ef..5ae1a892124 100644
--- a/gcc/ada/gnat_ugn.texi
+++ b/gcc/ada/gnat_ugn.texi
@@ -6935,7 +6935,7 @@ See also the packages @code{GNAT.Traceback} and
@ifclear vms
Note that on x86 ports, you must not use @option{-fomit-frame-pointer}
@code{gcc} option.
-@end ifclear vms
+@end ifclear
@item ^-F^/FORCE_ELABS_FLAGS^
@cindex @option{^-F^/FORCE_ELABS_FLAGS^} (@command{gnatbind})
@@ -8334,6 +8334,15 @@ decides are necessary.
Indicates the verbosity of the parsing of GNAT project files.
See @ref{Switches Related to Project Files}.
+@item ^-x^/NON_PROJECT_UNIT_COMPILATION^
+@cindex @option{^-x^/NON_PROJECT_UNIT_COMPILATION^} (@code{gnatmake})
+Indicates that sources that are not part of any Project File may be compiled.
+Normally, when using Project Files, only sources that are part of a Project
+File may be compile. When this switch is used, a source outside of all Project
+Files may be compiled. The ALI file and the object file will be put in the
+object directory of the main Project. The compilation switches used will only
+be those specified on the command line.
+
@item ^-X^/EXTERNAL_REFERENCE=^@var{name=value}
Indicates that external variable @var{name} has the value @var{value}.
The Project Manager will use this value for occurrences of
@@ -17566,7 +17575,9 @@ by @command{gnatstub} to compile an argument source file.
@cindex @option{^-gnatyM^/MAX_LINE_LENGTH^} (@command{gnatstub})
(@var{n} is a non-negative integer). Set the maximum line length in the
body stub to @var{n}; the default is 79. The maximum value that can be
-specified is 32767.
+specified is 32767. Note that in the special case of configuration
+pragma files, the maximum is always 32767 regardless of whether or
+not this switch appears.
@item ^-gnaty^/STYLE_CHECKS=^@var{n}
@cindex @option{^-gnaty^/STYLE_CHECKS=^} (@command{gnatstub})
diff --git a/gcc/ada/gnatbind.adb b/gcc/ada/gnatbind.adb
index 755a34efdee..3dc76ef0932 100644
--- a/gcc/ada/gnatbind.adb
+++ b/gcc/ada/gnatbind.adb
@@ -113,7 +113,7 @@ procedure Gnatbind is
No_Reentrancy => True,
-- Not checkable at compile time
- Max_Entry_Queue_Depth => True,
+ Max_Entry_Queue_Length => True,
-- Not checkable at compile time
Max_Storage_At_Blocking => True,
diff --git a/gcc/ada/gnatcmd.adb b/gcc/ada/gnatcmd.adb
index 3ef0e327b5b..1747d25d307 100644
--- a/gcc/ada/gnatcmd.adb
+++ b/gcc/ada/gnatcmd.adb
@@ -839,8 +839,9 @@ begin
(Name => Name_Default_Switches,
In_Arrays => Element.Decl.Arrays);
The_Switches := Prj.Util.Value_Of
- (Index => Name_Ada,
- In_Array => Default_Switches_Array);
+ (Index => Name_Ada,
+ Src_Index => 0,
+ In_Array => Default_Switches_Array);
end if;
end if;
diff --git a/gcc/ada/gnatls.adb b/gcc/ada/gnatls.adb
index 6b3d07e7065..1e491f2a7d3 100644
--- a/gcc/ada/gnatls.adb
+++ b/gcc/ada/gnatls.adb
@@ -38,6 +38,7 @@ with Osint; use Osint;
with Osint.L; use Osint.L;
with Output; use Output;
with Rident; use Rident;
+with Snames;
with Targparm; use Targparm;
with Types; use Types;
@@ -938,6 +939,7 @@ begin
Namet.Initialize;
Csets.Initialize;
+ Snames.Initialize;
-- Loop to scan out arguments
diff --git a/gcc/ada/init.c b/gcc/ada/init.c
index efc1a25fc2a..b27e059ed9d 100644
--- a/gcc/ada/init.c
+++ b/gcc/ada/init.c
@@ -386,7 +386,6 @@ __gnat_initialize (void)
exclude this case in the above test. */
#include <signal.h>
-#include <setjmp.h>
#include <sys/siginfo.h>
static void __gnat_error_handler (int, siginfo_t *, struct sigcontext *);
@@ -404,7 +403,6 @@ __gnat_error_handler (int sig, siginfo_t *sip, struct sigcontext *context)
static int recurse = 0;
struct sigcontext *mstate;
const char *msg;
- jmp_buf handler_jmpbuf;
/* If this was an explicit signal from a "kill", just resignal it. */
if (SI_FROMUSER (sip))
@@ -414,43 +412,6 @@ __gnat_error_handler (int sig, siginfo_t *sip, struct sigcontext *context)
}
/* Otherwise, treat it as something we handle. */
-
- /* We are now going to raise the exception corresponding to the signal we
- caught, which may eventually end up resuming the application code if the
- exception is handled.
-
- When the exception is handled, merely arranging for the *exception*
- handler's context (stack pointer, program counter, other registers, ...)
- to be installed is *not* enough to let the kernel think we've left the
- *signal* handler. This has annoying implications if an alternate stack
- has been setup for this *signal* handler, because the kernel thinks we
- are still running on that alternate stack even after the jump, which
- causes trouble at least as soon as another signal is raised.
-
- We deal with this by forcing a "local" longjmp within the signal handler
- below, forcing the "on alternate stack" indication to be reset (kernel
- wise) on the way. If no alternate stack has been setup, this should be a
- neutral operation. Otherwise, we will be in a delicate situation for a
- short while because we are going to run the exception propagation code
- within the alternate stack area (that is, with the stack pointer inside
- the alternate stack bounds), but with the corresponding flag off from the
- kernel's standpoint. We expect this to be ok as long as the propagation
- code does not trigger a signal itself, which is expected.
-
- ??? A better approach would be to at least delay this operation until the
- last second, that is, until just before we jump to the exception handler,
- if any. */
-
- if (setjmp (handler_jmpbuf) == 0)
- {
-#define JB_ONSIGSTK 0
-
- /* Arrange for the "on alternate stack" flag to be reset. See the
- comments around "jmp_buf offsets" in /usr/include/setjmp.h. */
- handler_jmpbuf [JB_ONSIGSTK] = 0;
- longjmp (handler_jmpbuf, 1);
- }
-
switch (sig)
{
case SIGSEGV:
@@ -510,36 +471,12 @@ __gnat_install_handler (void)
{
struct sigaction act;
- /* stack-checking on this platform is performed by the back-end and conforms
- to what the ABI *mandates* (DEC OSF/1 Calling standard for AXP systems,
- chapter 6: Stack Limits in Multihtreaded Execution Environments). This
- does not include a "stack reserve" region, so nothing guarantees that
- enough room remains on the current stack to propagate an exception when
- a stack-overflow is signaled. We deal with this by requesting the use of
- an alternate stack region for signal handlers.
-
- ??? The actual use of this alternate region depends on the act.sa_flags
- including SA_ONSTACK below. Care should be taken to update s-intman if
- we want this to happen for tasks also. */
-
- static char sig_stack [8*1024];
- /* 8K is a mininum to be able to propagate an exception using the GCC/ZCX
- scheme. */
-
- struct sigaltstack ss;
-
- ss.ss_sp = (void *) sig_stack;
- ss.ss_size = sizeof (sig_stack);
- ss.ss_flags = 0;
-
- sigaltstack (&ss, 0);
-
/* Setup signal handler to map synchronous signals to appropriate
exceptions. Make sure that the handler isn't interrupted by another
signal that might cause a scheduling event! */
act.sa_handler = (void (*) (int)) __gnat_error_handler;
- act.sa_flags = SA_ONSTACK | SA_RESTART | SA_NODEFER | SA_SIGINFO;
+ act.sa_flags = SA_RESTART | SA_NODEFER | SA_SIGINFO;
sigemptyset (&act.sa_mask);
/* Do not install handlers if interrupt state is "System" */
@@ -1344,11 +1281,24 @@ __gnat_initialize (void)
#elif defined (VMS)
+#ifdef __IA64
+#define lib_get_curr_invo_context LIB$I64_GET_CURR_INVO_CONTEXT
+#define lib_get_prev_invo_context LIB$I64_GET_PREV_INVO_CONTEXT
+#define lib_get_invo_handle LIB$I64_GET_INVO_HANDLE
+#else
+#define lib_get_curr_invo_context LIB$GET_CURR_INVO_CONTEXT
+#define lib_get_prev_invo_context LIB$GET_PREV_INVO_CONTEXT
+#define lib_get_invo_handle LIB$GET_INVO_HANDLE
+#endif
+
+#if defined (IN_RTS) && !defined (__IA64)
+
/* The prehandler actually gets control first on a condition. It swaps the
stack pointer and calls the handler (__gnat_error_handler). */
extern long __gnat_error_prehandler (void);
extern char *__gnat_error_prehandler_stack; /* Alternate signal stack */
+#endif
/* Conditions that don't have an Ada exception counterpart must raise
Non_Ada_Error. Since this is defined in s-auxdec, it should only be
@@ -1524,10 +1474,10 @@ __gnat_error_handler (int *sigargs, void *mechargs)
mstate = (long *) (*Get_Machine_State_Addr) ();
if (mstate != 0)
{
- LIB$GET_CURR_INVO_CONTEXT (&curr_icb);
- LIB$GET_PREV_INVO_CONTEXT (&curr_icb);
- LIB$GET_PREV_INVO_CONTEXT (&curr_icb);
- curr_invo_handle = LIB$GET_INVO_HANDLE (&curr_icb);
+ lib_get_curr_invo_context (&curr_icb);
+ lib_get_prev_invo_context (&curr_icb);
+ lib_get_prev_invo_context (&curr_icb);
+ curr_invo_handle = lib_get_invo_handle (&curr_icb);
*mstate = curr_invo_handle;
}
Raise_From_Signal_Handler (exception, msg);
@@ -1537,6 +1487,7 @@ void
__gnat_install_handler (void)
{
long prvhnd;
+#if defined (IN_RTS) && !defined (__IA64)
char *c;
c = (char *) xmalloc (2049);
@@ -1545,6 +1496,9 @@ __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);
+#endif
__gnat_handler_installed = 1;
}
diff --git a/gcc/ada/lang-specs.h b/gcc/ada/lang-specs.h
index c1ad1ae36f8..8cd85a81c60 100644
--- a/gcc/ada/lang-specs.h
+++ b/gcc/ada/lang-specs.h
@@ -6,7 +6,7 @@
* *
* C Header File *
* *
- * Copyright (C) 1992-2003 Free Software Foundation, Inc. *
+ * 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- *
@@ -32,12 +32,13 @@
{"@ada",
"\
%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{!gnatc*:%{!gnatz*:%{!gnats*:%{!S:%{!c:\
- %eone of -c, -S, -gnatc, -gnatz, or -gnats is required for Ada}}}}}\
+ %{!gnatc*:%{!gnats*:%{!S:%{!c:\
+ %eone of -c, -S, -gnatc or -gnats is required for Ada}}}}\
gnat1 %{I*} %{k8:-gnatk8} %{w:-gnatws} %1 %{!Q:-quiet} %{nostdinc*}\
%{nostdlib*}\
-dumpbase %{.adb:%b.adb}%{.ads:%b.ads}%{!.adb:%{!.ads:%b.ada}}\
%{g*} %{O*} %{W*} %{w} %{p} %{pg:-p} %{m*} %{a} %{f*} %{d*}\
%{!S:%{o*:%w%*-gnatO}} \
%i %{S:%W{o*}%{!o*:-o %b.s}} \
- %{!gnatc*:%{!gnatz*:%{!gnats*:%(invoke_as)}}}", 0, 0, 0},
+ %{!S:%{gnatc*|gnats*: -o %j}} \
+ %{!gnatc*:%{!gnats*:%(invoke_as)}}", 0, 0, 0},
diff --git a/gcc/ada/lib-writ.adb b/gcc/ada/lib-writ.adb
index bc6bfe54bf9..1259bc890b7 100644
--- a/gcc/ada/lib-writ.adb
+++ b/gcc/ada/lib-writ.adb
@@ -600,6 +600,7 @@ package body Lib.Writ is
Pname : constant Unit_Name_Type :=
Get_Parent_Spec_Name (Unit_Name (Main_Unit));
Body_Fname : File_Name_Type;
+ Body_Index : Nat;
begin
-- Loop to build the with table. A with on the main unit itself
@@ -657,12 +658,18 @@ package body Lib.Writ is
(Get_Body_Name (Uname),
Subunit => False, May_Fail => True);
+ Body_Index :=
+ Get_Unit_Index
+ (Get_Body_Name (Uname));
+
if Body_Fname = No_File then
Body_Fname := Get_File_Name (Uname, Subunit => False);
+ Body_Index := Get_Unit_Index (Uname);
end if;
else
Body_Fname := Get_File_Name (Uname, Subunit => False);
+ Body_Index := Get_Unit_Index (Uname);
end if;
-- A package is considered to have a body if it requires
@@ -675,7 +682,7 @@ package body Lib.Writ is
Write_Info_Name (Body_Fname);
Write_Info_Tab (49);
Write_Info_Name
- (Lib_File_Name (Body_Fname, Munit_Index (Unum)));
+ (Lib_File_Name (Body_Fname, Body_Index));
else
Write_Info_Name (Fname);
Write_Info_Tab (49);
diff --git a/gcc/ada/make.adb b/gcc/ada/make.adb
index 264527ed250..a4b2a41ff9f 100644
--- a/gcc/ada/make.adb
+++ b/gcc/ada/make.adb
@@ -124,16 +124,18 @@ package body Make is
procedure Insert_Q
(Source_File : File_Name_Type;
- Source_Unit : Unit_Name_Type := No_Name);
- -- Inserts Source_File at the end of Q. Provide Source_Unit when
- -- possible for external use (gnatdist).
+ Source_Unit : Unit_Name_Type := No_Name;
+ Index : Int := 0);
+ -- Inserts Source_File at the end of Q. Provide Source_Unit when possible
+ -- for external use (gnatdist). Provide index for multi-unit sources.
function Empty_Q return Boolean;
-- Returns True if Q is empty.
procedure Extract_From_Q
- (Source_File : out File_Name_Type;
- Source_Unit : out Unit_Name_Type);
+ (Source_File : out File_Name_Type;
+ Source_Unit : out Unit_Name_Type;
+ Source_Index : out Int);
-- Extracts the first element from the Q.
procedure Insert_Project_Sources
@@ -164,12 +166,14 @@ package body Make is
-- Used to detect multiple --RTS= switches
type Q_Record is record
- File : File_Name_Type;
- Unit : Unit_Name_Type;
+ File : File_Name_Type;
+ Unit : Unit_Name_Type;
+ Index : Int;
end record;
-- File is the name of the file to compile. Unit is for gnatdist
-- use in order to easily get the unit name of a file to compile
- -- when its name is krunched or declared in gnat.adc.
+ -- when its name is krunched or declared in gnat.adc. Index, when not 0,
+ -- is the index of the unit in a multi-unit source.
package Q is new Table.Table (
Table_Component_Type => Q_Record,
@@ -343,11 +347,12 @@ package body Make is
-- Can be set to False with the switches -c, -b and -l.
-- These flags are reset to True for each invokation of procedure Gnatmake.
- Shared_String : aliased String := "-shared";
+ Shared_String : aliased String := "-shared";
+ Force_Elab_Flags_String : aliased String := "-F";
- No_Shared_Switch : aliased Argument_List := (1 .. 0 => null);
- Shared_Switch : aliased Argument_List := (1 => Shared_String'Access);
- Bind_Shared : Argument_List_Access := No_Shared_Switch'Access;
+ No_Shared_Switch : aliased Argument_List := (1 .. 0 => null);
+ Shared_Switch : aliased Argument_List := (1 => Shared_String'Access);
+ Bind_Shared : Argument_List_Access := No_Shared_Switch'Access;
-- Switch to added in front of gnatbind switches. By default no switch is
-- added. Switch "-shared" is added if there is a non-static Library
-- Project File.
@@ -377,7 +382,9 @@ package body Make is
-- and is set to True whenever one of the source of the executable is
-- compiled, or has already been compiled for another executable.
- Max_Header : constant := 200; -- Arbitrary
+ Max_Header : constant := 200;
+ -- This needs a proper comment, it used to say "arbitrary"
+ -- that's not an adequate comment ???
type Header_Num is range 1 .. Max_Header;
-- Header_Num for the hash table Obsoleted below
@@ -456,20 +463,6 @@ package body Make is
-- pragmas file to be specified for For_Project,
-- otherwise return an empty argument list.
- ----------------------
- -- Marking Routines --
- ----------------------
-
- Marking_Label : Byte := 1;
- -- Value to mark the source files
-
- procedure Mark (Source_File : File_Name_Type);
- -- Mark Source_File. Marking is used to signal that Source_File has
- -- already been inserted in the Q.
-
- function Is_Marked (Source_File : File_Name_Type) return Boolean;
- -- Returns True if Source_File was previously marked.
-
-------------------
-- Misc Routines --
-------------------
@@ -571,6 +564,7 @@ package body Make is
function Switches_Of
(Source_File : Name_Id;
Source_File_Name : String;
+ Source_Index : Int;
Naming : Naming_Data;
In_Package : Package_Id;
Allow_ALI : Boolean) return Variable_Value;
@@ -653,6 +647,7 @@ package body Make is
procedure Add_Switches
(The_Package : Package_Id;
File_Name : String;
+ Index : Int;
Program : Make_Program_Type);
procedure Add_Switch
(S : String_Access;
@@ -673,13 +668,14 @@ package body Make is
-- added at the beginning of the command line.
procedure Check
- (Source_File : File_Name_Type;
- The_Args : Argument_List;
- Lib_File : File_Name_Type;
- Read_Only : Boolean;
- ALI : out ALI_Id;
- O_File : out File_Name_Type;
- O_Stamp : out Time_Stamp_Type);
+ (Source_File : File_Name_Type;
+ Source_Index : Int;
+ The_Args : Argument_List;
+ Lib_File : File_Name_Type;
+ Read_Only : Boolean;
+ ALI : out ALI_Id;
+ O_File : out File_Name_Type;
+ O_Stamp : out Time_Stamp_Type);
-- Determines whether the library file Lib_File is up-to-date or not. The
-- full name (with path information) of the object file corresponding to
-- Lib_File is returned in O_File. Its time stamp is saved in O_Stamp.
@@ -700,8 +696,9 @@ package body Make is
-- Otherwise O_File is No_File.
procedure Collect_Arguments
- (Source_File : File_Name_Type;
- Args : Argument_List);
+ (Source_File : File_Name_Type;
+ Source_Index : Int;
+ Args : Argument_List);
-- Collect all arguments for a source to be compiled, including those
-- that come from a project file.
@@ -939,6 +936,7 @@ package body Make is
procedure Add_Switches
(The_Package : Package_Id;
File_Name : String;
+ Index : Int;
Program : Make_Program_Type)
is
Switches : Variable_Value;
@@ -953,6 +951,7 @@ package body Make is
Switches_Of
(Source_File => Name_Find,
Source_File_Name => File_Name,
+ Source_Index => Index,
Naming => Projects.Table (Main_Project).Naming,
In_Package => The_Package,
Allow_ALI =>
@@ -1101,13 +1100,14 @@ package body Make is
-----------
procedure Check
- (Source_File : File_Name_Type;
- The_Args : Argument_List;
- Lib_File : File_Name_Type;
- Read_Only : Boolean;
- ALI : out ALI_Id;
- O_File : out File_Name_Type;
- O_Stamp : out Time_Stamp_Type)
+ (Source_File : File_Name_Type;
+ Source_Index : Int;
+ The_Args : Argument_List;
+ Lib_File : File_Name_Type;
+ Read_Only : Boolean;
+ ALI : out ALI_Id;
+ O_File : out File_Name_Type;
+ O_Stamp : out Time_Stamp_Type)
is
function First_New_Spec (A : ALI_Id) return File_Name_Type;
-- Looks in the with table entries of A and returns the spec file name
@@ -1339,7 +1339,7 @@ package body Make is
-- First, collect all the switches
- Collect_Arguments (Source_File, The_Args);
+ Collect_Arguments (Source_File, Source_Index, The_Args);
Prev_Switch := Dummy_Switch;
@@ -1702,8 +1702,9 @@ package body Make is
-----------------------
procedure Collect_Arguments
- (Source_File : File_Name_Type;
- Args : Argument_List)
+ (Source_File : File_Name_Type;
+ Source_Index : Int;
+ Args : Argument_List)
is
begin
Arguments_Collected := True;
@@ -1726,10 +1727,16 @@ package body Make is
Project => Arguments_Project,
Path => Arguments_Path_Name);
- -- If the source is not a source of a project file,
- -- we simply add the saved gcc switches.
+ -- If the source is not a source of a project file, check if
+ -- this is allowed.
if Arguments_Project = No_Project then
+ if not External_Unit_Compilation_Allowed then
+ Make_Failed ("external source, not part of any projects, " &
+ "cannot be compiled (", Source_File_Name, ")");
+ end if;
+
+ -- If it is allowed, simply add the saved gcc switches
Add_Arguments (The_Saved_Gcc_Switches.all);
@@ -1784,6 +1791,7 @@ package body Make is
Switches := Switches_Of
(Source_File => Source_File,
Source_File_Name => Source_File_Name,
+ Source_Index => Source_Index,
Naming => Data.Naming,
In_Package => Compiler_Package,
Allow_ALI => False);
@@ -1882,6 +1890,7 @@ package body Make is
Most_Recent_Obj_Stamp : out Time_Stamp_Type;
Main_Unit : out Boolean;
Compilation_Failures : out Natural;
+ Main_Index : Int := 0;
Check_Readonly_Files : Boolean := False;
Do_Not_Execute : Boolean := False;
Force_Compilations : Boolean := False;
@@ -1890,15 +1899,6 @@ package body Make is
Initialize_ALI_Data : Boolean := True;
Max_Process : Positive := 1)
is
- function Compile
- (S : Name_Id;
- L : Name_Id;
- Args : Argument_List) return Process_Id;
- -- Compiles S using Args. If S is a GNAT predefined source
- -- "-gnatpg" is added to Args. Non blocking call. L corresponds to the
- -- expected library file name. Process_Id of the process spawned to
- -- execute the compile.
-
No_Mapping_File : constant Natural := 0;
type Compilation_Data is record
@@ -1987,9 +1987,23 @@ package body Make is
-- resp. No_File, No_File and No_Name if there were no compilations
-- to wait for.
- procedure Collect_Arguments_And_Compile (Source_File : File_Name_Type);
+ function Bad_Compilation_Count return Natural;
+ -- Returns the number of compilation failures.
+
+ procedure Collect_Arguments_And_Compile
+ (Source_File : File_Name_Type; Source_Index : Int);
-- Collect arguments from project file (if any) and compile
+ function Compile
+ (S : Name_Id;
+ L : Name_Id;
+ Source_Index : Int;
+ Args : Argument_List) return Process_Id;
+ -- Compiles S using Args. If S is a GNAT predefined source
+ -- "-gnatpg" is added to Args. Non blocking call. L corresponds to the
+ -- expected library file name. Process_Id of the process spawned to
+ -- execute the compile.
+
package Good_ALI is new Table.Table (
Table_Component_Type => ALI_Id,
Table_Index_Type => Natural,
@@ -1999,12 +2013,13 @@ package body Make is
Table_Name => "Make.Good_ALI");
-- Contains the set of valid ALI files that have not yet been scanned.
- procedure Record_Good_ALI (A : ALI_Id);
- -- Records in the previous set the Id of an ALI file.
-
function Good_ALI_Present return Boolean;
-- Returns True if any ALI file was recorded in the previous set.
+ procedure Get_Mapping_File (Project : Project_Id);
+ -- Get a mapping file name. If there is one to be reused, reuse it.
+ -- Otherwise, create a new mapping file.
+
function Get_Next_Good_ALI return ALI_Id;
-- Returns the next good ALI_Id record;
@@ -2016,12 +2031,8 @@ package body Make is
-- If Found is False then the compilation of File failed because we
-- could not find it. Records also Unit when possible.
- function Bad_Compilation_Count return Natural;
- -- Returns the number of compilation failures.
-
- procedure Get_Mapping_File (Project : Project_Id);
- -- Get a mapping file name. If there is one to be reused, reuse it.
- -- Otherwise, create a new mapping file.
+ procedure Record_Good_ALI (A : ALI_Id);
+ -- Records in the previous set the Id of an ALI file.
-----------------
-- Add_Process --
@@ -2143,14 +2154,16 @@ package body Make is
-- Collect_Arguments_And_Compile --
-----------------------------------
- procedure Collect_Arguments_And_Compile (Source_File : File_Name_Type) is
+ procedure Collect_Arguments_And_Compile
+ (Source_File : File_Name_Type; Source_Index : Int)
+ is
begin
-- If arguments have not yet been collected (in Check), collect them
-- now.
if not Arguments_Collected then
- Collect_Arguments (Source_File, Args);
+ Collect_Arguments (Source_File, Source_Index, Args);
end if;
-- If we use mapping file (-P or -C switches), then get one
@@ -2198,7 +2211,7 @@ package body Make is
Change_To_Object_Directory (Arguments_Project);
- Pid := Compile (Arguments_Path_Name, Lib_File,
+ Pid := Compile (Arguments_Path_Name, Lib_File, Source_Index,
Arguments (1 .. Last_Argument));
else
@@ -2210,7 +2223,7 @@ package body Make is
Change_To_Object_Directory (Arguments_Project);
end if;
- Pid := Compile (Full_Source_File, Lib_File,
+ Pid := Compile (Full_Source_File, Lib_File, Source_Index,
Arguments (1 .. Last_Argument));
end if;
end Collect_Arguments_And_Compile;
@@ -2220,9 +2233,10 @@ package body Make is
-------------
function Compile
- (S : Name_Id;
- L : Name_Id;
- Args : Argument_List) return Process_Id
+ (S : Name_Id;
+ L : Name_Id;
+ Source_Index : Int;
+ Args : Argument_List) return Process_Id
is
Comp_Args : Argument_List (Args'First .. Args'Last + 8);
Comp_Next : Integer := Args'First;
@@ -2334,7 +2348,20 @@ package body Make is
Comp_Args (Comp_Last) := Ada_Flag_2;
end if;
- if L /= Strip_Directory (L) or else Object_Directory_Path /= null then
+ if Source_Index /= 0 then
+ declare
+ Num : constant String := Source_Index'Img;
+ begin
+ Comp_Last := Comp_Last + 1;
+ Comp_Args (Comp_Last) :=
+ new String'("-gnateI" & Num (Num'First + 1 .. Num'Last));
+ end;
+ end if;
+
+ if Source_Index /= 0 or else
+ L /= Strip_Directory (L) or else
+ Object_Directory_Path /= null
+ then
-- Build -o argument.
@@ -2498,9 +2525,9 @@ package body Make is
-- Only insert in the Q if it is not already done, to avoid simultaneous
-- compilations if -jnnn is used.
- if not Is_Marked (Main_Source) then
- Insert_Q (Main_Source);
- Mark (Main_Source);
+ if not Is_Marked (Main_Source, Main_Index) then
+ Insert_Q (Main_Source, Index => Main_Index);
+ Mark (Main_Source, Main_Index);
end if;
First_Compiled_File := No_File;
@@ -2534,157 +2561,156 @@ package body Make is
-- up all the available processes.
if not Empty_Q and then Outstanding_Compiles < Max_Process then
- Extract_From_Q (Source_File, Source_Unit);
- Full_Source_File := Osint.Full_Source_Name (Source_File);
- Lib_File := Osint.Lib_File_Name (Source_File);
- Full_Lib_File := Osint.Full_Lib_File_Name (Lib_File);
-
- -- If this source has already been compiled, the executable is
- -- obsolete.
-
- if Is_In_Obsoleted (Source_File) then
- Executable_Obsolete := True;
- end if;
+ declare
+ Source_Index : Int;
+ -- Index of the current unit in the current source file
- -- If the library file is an Ada library skip it
+ begin
+ Extract_From_Q (Source_File, Source_Unit, Source_Index);
+ Full_Source_File := Osint.Full_Source_Name (Source_File);
+ Lib_File := Osint.Lib_File_Name
+ (Source_File, Source_Index);
+ Full_Lib_File := Osint.Full_Lib_File_Name (Lib_File);
- if Full_Lib_File /= No_File
- and then In_Ada_Lib_Dir (Full_Lib_File)
- then
- Verbose_Msg (Lib_File, "is in an Ada library", Prefix => " ");
+ -- If this source has already been compiled, the executable is
+ -- obsolete.
- -- If the library file is a read-only library skip it, but only
- -- if, when using project files, this library file is in the
- -- right object directory (a read-only ALI file in the object
- -- directory of a project being extended should not be skipped).
+ if Is_In_Obsoleted (Source_File) then
+ Executable_Obsolete := True;
+ end if;
- elsif Full_Lib_File /= No_File
- and then not Check_Readonly_Files
- and then Is_Readonly_Library (Full_Lib_File)
- and then Is_In_Object_Directory (Source_File, Full_Lib_File)
- then
- Verbose_Msg
- (Lib_File, "is a read-only library", Prefix => " ");
+ -- If the library file is an Ada library skip it
- -- The source file that we are checking cannot be located
+ if Full_Lib_File /= No_File
+ and then In_Ada_Lib_Dir (Full_Lib_File)
+ then
+ Verbose_Msg
+ (Lib_File, "is in an Ada library", Prefix => " ");
+
+ -- If the library file is a read-only library skip it, but
+ -- only if, when using project files, this library file is
+ -- in the right object directory (a read-only ALI file
+ -- in the object directory of a project being extended
+ -- should not be skipped).
+
+ elsif Full_Lib_File /= No_File
+ and then not Check_Readonly_Files
+ and then Is_Readonly_Library (Full_Lib_File)
+ and then Is_In_Object_Directory (Source_File, Full_Lib_File)
+ then
+ Verbose_Msg
+ (Lib_File, "is a read-only library", Prefix => " ");
- elsif Full_Source_File = No_File then
- Record_Failure (Source_File, Source_Unit, False);
+ -- The source file that we are checking cannot be located
- -- Source and library files can be located but are internal
- -- files
+ elsif Full_Source_File = No_File then
+ Record_Failure (Source_File, Source_Unit, False);
- elsif not Check_Readonly_Files
- and then Full_Lib_File /= No_File
- and then Is_Internal_File_Name (Source_File)
- then
+ -- Source and library files can be located but are internal
+ -- files
- if Force_Compilations then
- Fail
- ("not allowed to compile """ &
- Get_Name_String (Source_File) &
- """; use -a switch, or compile file with " &
- """-gnatg"" switch");
- end if;
+ elsif not Check_Readonly_Files
+ and then Full_Lib_File /= No_File
+ and then Is_Internal_File_Name (Source_File)
+ then
+ if Force_Compilations then
+ Fail
+ ("not allowed to compile """ &
+ Get_Name_String (Source_File) &
+ """; use -a switch, or compile file with " &
+ """-gnatg"" switch");
+ end if;
- Verbose_Msg
- (Lib_File, "is an internal library", Prefix => " ");
+ Verbose_Msg
+ (Lib_File, "is an internal library", Prefix => " ");
- -- The source file that we are checking can be located
+ -- The source file that we are checking can be located
- else
- Arguments_Collected := False;
+ else
+ Arguments_Collected := False;
- -- Don't waste any time if we have to recompile anyway
+ -- Don't waste any time if we have to recompile anyway
- Obj_Stamp := Empty_Time_Stamp;
- Need_To_Compile := Force_Compilations;
+ Obj_Stamp := Empty_Time_Stamp;
+ Need_To_Compile := Force_Compilations;
- if not Force_Compilations then
- Read_Only :=
- Full_Lib_File /= No_File
- and then not Check_Readonly_Files
- and then Is_Readonly_Library (Full_Lib_File);
- Check (Source_File, Args, Lib_File, Read_Only,
- ALI, Obj_File, Obj_Stamp);
- Need_To_Compile := (ALI = No_ALI_Id);
- end if;
+ if not Force_Compilations then
+ Read_Only :=
+ Full_Lib_File /= No_File
+ and then not Check_Readonly_Files
+ and then Is_Readonly_Library (Full_Lib_File);
+ Check (Source_File, Source_Index, Args, Lib_File,
+ Read_Only, ALI, Obj_File, Obj_Stamp);
+ Need_To_Compile := (ALI = No_ALI_Id);
+ end if;
- if not Need_To_Compile then
+ if not Need_To_Compile then
- -- The ALI file is up-to-date. Record its Id.
+ -- The ALI file is up-to-date. Record its Id.
- Record_Good_ALI (ALI);
+ Record_Good_ALI (ALI);
- -- Record the time stamp of the most recent object file
- -- as long as no (re)compilations are needed.
+ -- Record the time stamp of the most recent object file
+ -- as long as no (re)compilations are needed.
- if First_Compiled_File = No_File
- and then (Most_Recent_Obj_File = No_File
- or else Obj_Stamp > Most_Recent_Obj_Stamp)
- then
- Most_Recent_Obj_File := Obj_File;
- Most_Recent_Obj_Stamp := Obj_Stamp;
- end if;
+ if First_Compiled_File = No_File
+ and then (Most_Recent_Obj_File = No_File
+ or else Obj_Stamp > Most_Recent_Obj_Stamp)
+ then
+ Most_Recent_Obj_File := Obj_File;
+ Most_Recent_Obj_Stamp := Obj_Stamp;
+ end if;
- else
- -- Is this the first file we have to compile?
+ else
+ -- 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 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;
+ if Do_Not_Execute then
+ exit Make_Loop;
+ end if;
end if;
- end if;
-
- if In_Place_Mode then
- -- If the library file was not found, then save the
- -- library file near the source file.
+ if In_Place_Mode then
- if Full_Lib_File = No_File then
- Get_Name_String (Full_Source_File);
+ -- If the library file was not found, then save the
+ -- library file near the source file.
- for J in reverse 1 .. Name_Len loop
- if Name_Buffer (J) = '.' then
- Name_Buffer (J + 1 .. J + 3) := "ali";
- Name_Len := J + 3;
- exit;
- end if;
- end loop;
+ if Full_Lib_File = No_File then
+ Lib_File := Osint.Lib_File_Name
+ (Full_Source_File, Source_Index);
- Lib_File := Name_Find;
+ -- 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;
-
- -- 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);
+ 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 Pid = Invalid_Pid then
- Record_Failure (Full_Source_File, Source_Unit);
- else
- Add_Process
- (Pid,
- Full_Source_File,
- Lib_File,
- Source_Unit,
- Mfile);
+ 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;
+ end;
end if;
-- PHASE 2: Now check if we should wait for a compilation to
@@ -2781,96 +2807,111 @@ package body Make is
while Good_ALI_Present loop
ALI := Get_Next_Good_ALI;
- -- If we are processing the library file corresponding to the
- -- main source file check if this source can be a main unit.
+ declare
+ Source_Index : Int := Unit_Index_Of (ALIs.Table (ALI).Afile);
- if ALIs.Table (ALI).Sfile = Main_Source then
- Main_Unit := ALIs.Table (ALI).Main_Program /= None;
- end if;
+ begin
+ -- If we are processing the library file corresponding to the
+ -- main source file check if this source can be a main unit.
- -- The following adds the standard library (s-stalib) to the
- -- list of files to be handled by gnatmake: this file and any
- -- files it depends on are always included in every bind,
- -- even if they are not in the explicit dependency list.
- -- Of course, it is not added if Suppress_Standard_Library
- -- is True.
+ if ALIs.Table (ALI).Sfile = Main_Source and then
+ Source_Index = Main_Index
+ then
+ Main_Unit := ALIs.Table (ALI).Main_Program /= None;
+ end if;
- -- However, to avoid annoying output about s-stalib.ali being
- -- read only, when "-v" is used, we add the standard library
- -- only when "-a" is used.
+ -- The following adds the standard library (s-stalib) to the
+ -- list of files to be handled by gnatmake: this file and any
+ -- files it depends on are always included in every bind,
+ -- even if they are not in the explicit dependency list.
+ -- Of course, it is not added if Suppress_Standard_Library
+ -- is True.
- if Need_To_Check_Standard_Library then
- Need_To_Check_Standard_Library := False;
+ -- However, to avoid annoying output about s-stalib.ali being
+ -- read only, when "-v" is used, we add the standard library
+ -- only when "-a" is used.
- if not Targparm.Suppress_Standard_Library_On_Target then
- declare
- Sfile : Name_Id;
- Add_It : Boolean := True;
+ if Need_To_Check_Standard_Library then
+ Need_To_Check_Standard_Library := False;
- begin
- Name_Len := Standard_Library_Package_Body_Name'Length;
- Name_Buffer (1 .. Name_Len) :=
- Standard_Library_Package_Body_Name;
- Sfile := Name_Enter;
+ if not Targparm.Suppress_Standard_Library_On_Target then
+ declare
+ Sfile : Name_Id;
+ Add_It : Boolean := True;
- -- If we have a special runtime, we add the standard
- -- library only if we can find it.
+ begin
+ Name_Len := Standard_Library_Package_Body_Name'Length;
+ Name_Buffer (1 .. Name_Len) :=
+ Standard_Library_Package_Body_Name;
+ Sfile := Name_Enter;
- if RTS_Switch then
- Add_It := Find_File (Sfile, Osint.Source) /= No_File;
- end if;
+ -- If we have a special runtime, we add the standard
+ -- library only if we can find it.
- if Add_It then
- if Is_Marked (Sfile) then
- if Is_In_Obsoleted (Sfile) then
- Executable_Obsolete := True;
- end if;
+ if RTS_Switch then
+ Add_It :=
+ Find_File (Sfile, Osint.Source) /= No_File;
+ end if;
- else
- Insert_Q (Sfile);
- Mark (Sfile);
+ if Add_It then
+ if Is_Marked (Sfile) then
+ if Is_In_Obsoleted (Sfile) then
+ Executable_Obsolete := True;
+ end if;
+
+ else
+ Insert_Q (Sfile, Index => 0);
+ Mark (Sfile, Index => 0);
+ end if;
end if;
- end if;
- end;
+ end;
+ end if;
end if;
- end if;
- -- Now insert in the Q the unmarked source files (i.e. those
- -- which have never been inserted in the Q and hence never
- -- considered). Only do that if Unique_Compile is False.
+ -- Now insert in the Q the unmarked source files (i.e. those
+ -- which have never been inserted in the Q and hence never
+ -- considered). Only do that if Unique_Compile is False.
- if not Unique_Compile then
- for J in
- ALIs.Table (ALI).First_Unit .. ALIs.Table (ALI).Last_Unit
- loop
- for K in
- Units.Table (J).First_With .. Units.Table (J).Last_With
+ if not Unique_Compile then
+ for J in
+ ALIs.Table (ALI).First_Unit .. ALIs.Table (ALI).Last_Unit
loop
- Sfile := Withs.Table (K).Sfile;
- Add_Dependency (ALIs.Table (ALI).Sfile, Sfile);
+ for K in
+ Units.Table (J).First_With .. Units.Table (J).Last_With
+ loop
+ Sfile := Withs.Table (K).Sfile;
+ Add_Dependency (ALIs.Table (ALI).Sfile, Sfile);
- if Is_In_Obsoleted (Sfile) then
- Executable_Obsolete := True;
- end if;
+ if Is_In_Obsoleted (Sfile) then
+ Executable_Obsolete := True;
+ end if;
- if Sfile = No_File then
- Debug_Msg ("Skipping generic:", Withs.Table (K).Uname);
+ if Sfile = No_File then
+ Debug_Msg
+ ("Skipping generic:", Withs.Table (K).Uname);
- elsif Is_Marked (Sfile) then
- Debug_Msg ("Skipping marked file:", Sfile);
+ else
+ Source_Index :=
+ Unit_Index_Of (Withs.Table (K).Afile);
- elsif not Check_Readonly_Files
- and then Is_Internal_File_Name (Sfile)
- then
- Debug_Msg ("Skipping internal file:", Sfile);
+ if Is_Marked (Sfile, Source_Index) then
+ Debug_Msg ("Skipping marked file:", Sfile);
- else
- Insert_Q (Sfile, Withs.Table (K).Uname);
- Mark (Sfile);
- end if;
+ elsif not Check_Readonly_Files
+ and then Is_Internal_File_Name (Sfile)
+ then
+ Debug_Msg ("Skipping internal file:", Sfile);
+
+ else
+ Insert_Q
+ (Sfile, Withs.Table (K).Uname, Source_Index);
+ Mark (Sfile, Source_Index);
+ end if;
+ end if;
+ end loop;
end loop;
- end loop;
- end if;
+ end if;
+ end;
end loop;
if Display_Compilation_Progress then
@@ -3263,35 +3304,34 @@ package body Make is
--------------------
procedure Extract_From_Q
- (Source_File : out File_Name_Type;
- Source_Unit : out Unit_Name_Type)
+ (Source_File : out File_Name_Type;
+ Source_Unit : out Unit_Name_Type;
+ Source_Index : out Int)
is
- File : constant File_Name_Type := Q.Table (Q_Front).File;
- Unit : constant Unit_Name_Type := Q.Table (Q_Front).Unit;
+ File : constant File_Name_Type := Q.Table (Q_Front).File;
+ Unit : constant Unit_Name_Type := Q.Table (Q_Front).Unit;
+ Index : constant Int := Q.Table (Q_Front).Index;
begin
if Debug.Debug_Flag_Q then
Write_Str (" Q := Q - [ ");
Write_Name (File);
+
+ if Index /= 0 then
+ Write_Str (", ");
+ Write_Int (Index);
+ end if;
+
Write_Str (" ]");
Write_Eol;
end if;
Q_Front := Q_Front + 1;
- Source_File := File;
- Source_Unit := Unit;
+ Source_File := File;
+ Source_Unit := Unit;
+ Source_Index := Index;
end Extract_From_Q;
- -----------------
- -- Make_Failed --
- -----------------
-
- procedure Make_Failed (S1 : String; S2 : String := ""; S3 : String := "") is
- begin
- Delete_All_Temp_Files;
- Osint.Fail (S1, S2, S3);
- end Make_Failed;
-
--------------
-- Gnatmake --
--------------
@@ -3323,6 +3363,13 @@ package body Make is
-- The current working directory, used to modify some relative path
-- switches on the command line when a project file is used.
+ Current_Main_Index : Int := 0;
+ -- If not zero, the index of the current main unit in its source file
+
+ There_Are_Stand_Alone_Libraries : Boolean := False;
+ -- Set to True when there are Stand-Alone Libraries, so that gnatbind
+ -- is invoked with the -F switch to force checking of elaboration flags.
+
begin
Gnatmake_Called := True;
@@ -3402,6 +3449,9 @@ package body Make is
end loop;
end if;
+ elsif Main_Index /= 0 and then Osint.Number_Of_Files > 1 then
+ Make_Failed ("cannot specify several mains with a multi-unit index");
+
elsif Main_Project /= No_Project then
-- If the main project file is a library project file, main(s)
@@ -3570,6 +3620,11 @@ package body Make is
-- the sources of the project file as mains.
else
+ if Main_Index /= 0 then
+ Make_Failed ("cannot specify a multi-unit index but no main " &
+ "on the command line");
+ end if;
+
declare
Value : String_List_Id := Projects.Table (Main_Project).Mains;
@@ -3664,7 +3719,8 @@ package body Make is
At_Least_One_Main := True;
Osint.Add_File
(Get_Name_String
- (String_Elements.Table (Value).Value));
+ (String_Elements.Table (Value).Value),
+ Index => String_Elements.Table (Value).Index);
end if;
Value := String_Elements.Table (Value).Next;
@@ -3738,6 +3794,10 @@ package body Make is
Main_Source_File := Next_Main_Source;
+ if Current_File_Index /= No_Index then
+ Main_Index := Current_File_Index;
+ end if;
+
Add_Switch ("-I-", Binder, And_Save => True);
Add_Switch ("-I-", Compiler, And_Save => True);
@@ -3930,6 +3990,7 @@ package body Make is
Add_Switches
(File_Name => Main_Unit_File_Name,
+ Index => Main_Index,
The_Package => Builder_Package,
Program => None);
@@ -3944,6 +4005,7 @@ package body Make is
Defaults : constant Variable_Value :=
Prj.Util.Value_Of
(Name => Name_Ada,
+ Index => 0,
Attribute_Or_Array_Name => Name_Default_Switches,
In_Package => Builder_Package);
@@ -3968,6 +4030,7 @@ package body Make is
Add_Switches
(File_Name => " ",
+ Index => 0,
The_Package => Builder_Package,
Program => None);
@@ -4005,6 +4068,7 @@ package body Make is
Add_Switches
(File_Name => Main_Unit_File_Name,
+ Index => Main_Index,
The_Package => Binder_Package,
Program => Binder);
end if;
@@ -4020,6 +4084,7 @@ package body Make is
Add_Switches
(File_Name => Main_Unit_File_Name,
+ Index => Main_Index,
The_Package => Linker_Package,
Program => Linker);
end if;
@@ -4251,6 +4316,8 @@ package body Make is
Bad_Compilation.Init;
+ Current_Main_Index := Main_Index;
+
-- Here is where the make process is started
-- We do the same process for each main
@@ -4307,7 +4374,7 @@ package body Make is
-- "main.2.ada", when the body termination is ".2.ada".
Executable := Prj.Util.Executable_Of
- (Main_Project, Main_Source_File);
+ (Main_Project, Main_Source_File, Main_Index);
end if;
end if;
@@ -4375,6 +4442,7 @@ package body Make is
Most_Recent_Obj_File => Youngest_Obj_File,
Most_Recent_Obj_Stamp => Youngest_Obj_Stamp,
Main_Unit => Is_Main_Unit,
+ Main_Index => Current_Main_Index,
Compilation_Failures => Compilation_Failures,
Check_Readonly_Files => Check_Readonly_Files,
Do_Not_Execute => Do_Not_Execute,
@@ -4428,6 +4496,10 @@ package body Make is
for Proj1 in Projects.First .. Projects.Last loop
+ if Projects.Table (Proj1).Standalone_Library then
+ There_Are_Stand_Alone_Libraries := True;
+ end if;
+
if Projects.Table (Proj1).Library
and then not Projects.Table (Proj1).Flag1
then
@@ -4620,7 +4692,7 @@ package body Make is
begin
Src_File := Strip_Directory (Main_Source_File);
- ALI_File := Lib_File_Name (Src_File);
+ ALI_File := Lib_File_Name (Src_File, Current_Main_Index);
Main_ALI_File := Full_Lib_File_Name (ALI_File);
-- When In_Place_Mode, the library file can be located in the
@@ -4643,7 +4715,7 @@ package body Make is
if Do_Bind_Step then
Bind_Step : declare
Args : Argument_List
- (Binder_Switches.First .. Binder_Switches.Last + 1);
+ (Binder_Switches.First .. Binder_Switches.Last + 2);
-- The arguments for the invocation of gnatbind
Last_Arg : Natural := Binder_Switches.Last;
@@ -4704,6 +4776,11 @@ package body Make is
Args (J) := Binder_Switches.Table (J);
end loop;
+ if There_Are_Stand_Alone_Libraries then
+ Last_Arg := Last_Arg + 1;
+ Args (Last_Arg) := Force_Elab_Flags_String'Access;
+ end if;
+
if Main_Project /= No_Project then
-- Put all the source directories in ADA_INCLUDE_PATH,
@@ -5150,6 +5227,10 @@ package body Make is
if N_File < Osint.Number_Of_Files then
Main_Source_File := Next_Main_Source;
+ if Current_File_Index /= No_Index then
+ Main_Index := Current_File_Index;
+ end if;
+
if Main_Project /= No_Project then
-- Find the file name of the main unit
@@ -5235,6 +5316,7 @@ package body Make is
Add_Switches
(File_Name => Main_Unit_File_Name,
+ Index => Main_Index,
The_Package => Binder_Package,
Program => Binder);
end if;
@@ -5251,6 +5333,7 @@ package body Make is
Add_Switches
(File_Name => Main_Unit_File_Name,
+ Index => Main_Index,
The_Package => Linker_Package,
Program => Linker);
end if;
@@ -5303,17 +5386,10 @@ package body Make is
end if;
end if;
- -- Increase the marking label to be sure to check sources
- -- for all executables.
-
- Marking_Label := Marking_Label + 1;
-
- -- Make sure it is not 0, which is the default value for
- -- a file that has never been marked.
+ -- Remove all marks to be sure to check sources for all executables,
+ -- as the switches may be different and -s may be in use.
- if Marking_Label = 0 then
- Marking_Label := 1;
- end if;
+ Delete_All_Marks;
end loop Multiple_Main_Loop;
if Failed_Links.Last > 0 then
@@ -5643,9 +5719,6 @@ package body Make is
Project_Object_Directory := No_Project;
- -- Set the marking label to a value that is not zero
-
- Marking_Label := 1;
end Initialize;
----------------------------
@@ -5814,18 +5887,27 @@ package body Make is
procedure Insert_Q
(Source_File : File_Name_Type;
- Source_Unit : Unit_Name_Type := No_Name)
+ Source_Unit : Unit_Name_Type := No_Name;
+ Index : Int := 0)
is
begin
if Debug.Debug_Flag_Q then
Write_Str (" Q := Q + [ ");
Write_Name (Source_File);
+
+ if Index /= 0 then
+ Write_Str (", ");
+ Write_Int (Index);
+ end if;
+
Write_Str (" ] ");
Write_Eol;
end if;
- Q.Table (Q.Last).File := Source_File;
- Q.Table (Q.Last).Unit := Source_Unit;
+ Q.Table (Q.Last) :=
+ (File => Source_File,
+ Unit => Source_Unit,
+ Index => Index);
Q.Increment_Last;
end Insert_Q;
@@ -5949,15 +6031,6 @@ package body Make is
return True;
end Is_In_Object_Directory;
- ---------------
- -- Is_Marked --
- ---------------
-
- function Is_Marked (Source_File : File_Name_Type) return Boolean is
- begin
- return Get_Name_Table_Byte (Source_File) = Marking_Label;
- end Is_Marked;
-
----------
-- Link --
----------
@@ -6071,14 +6144,15 @@ package body Make is
Set_Standard_Error;
end List_Depend;
- ----------
- -- Mark --
- ----------
+ -----------------
+ -- Make_Failed --
+ -----------------
- procedure Mark (Source_File : File_Name_Type) is
+ procedure Make_Failed (S1 : String; S2 : String := ""; S3 : String := "") is
begin
- Set_Name_Table_Byte (Source_File, Marking_Label);
- end Mark;
+ Delete_All_Temp_Files;
+ Osint.Fail (S1, S2, S3);
+ end Make_Failed;
--------------------
-- Mark_Directory --
@@ -6741,6 +6815,7 @@ package body Make is
-- or one character switches which are not in 'a' .. 'z'
-- (except 'C', 'F', 'M' and 'B') are passed to the compiler,
-- unless we are dealing with a debug switch (starts with 'd')
+ -- or an extended gnatmake switch (starts with 'e').
elsif Argv (2) /= 'd'
and then Argv (2) /= 'e'
@@ -6773,6 +6848,7 @@ package body Make is
function Switches_Of
(Source_File : Name_Id;
Source_File_Name : String;
+ Source_Index : Int;
Naming : Naming_Data;
In_Package : Package_Id;
Allow_ALI : Boolean) return Variable_Value
@@ -6794,8 +6870,9 @@ package body Make is
begin
Switches :=
Prj.Util.Value_Of
- (Index => Source_File,
- In_Array => Switches_Array);
+ (Index => Source_File,
+ Src_Index => Source_Index,
+ In_Array => Switches_Array);
if Switches = Nil_Variable_Value then
declare
@@ -6832,8 +6909,9 @@ package body Make is
Name_Buffer (1 .. Name_Len) := Name (1 .. Last);
Switches :=
Prj.Util.Value_Of
- (Index => Name_Find,
- In_Array => Switches_Array);
+ (Index => Name_Find,
+ Src_Index => 0,
+ In_Array => Switches_Array);
if Switches = Nil_Variable_Value
and then Allow_ALI
@@ -6849,16 +6927,20 @@ package body Make is
Name_Buffer (1 .. Name_Len) := Name (1 .. Name_Len);
Switches :=
Prj.Util.Value_Of
- (Index => Name_Find,
- In_Array => Switches_Array);
+ (Index => Name_Find,
+ Src_Index => 0,
+ In_Array => Switches_Array);
end if;
end if;
end;
end if;
if Switches = Nil_Variable_Value then
- Switches := Prj.Util.Value_Of
- (Index => Name_Ada, In_Array => Defaults);
+ Switches :=
+ Prj.Util.Value_Of
+ (Index => Name_Ada,
+ Src_Index => 0,
+ In_Array => Defaults);
end if;
return Switches;
diff --git a/gcc/ada/make.ads b/gcc/ada/make.ads
index f07846336c7..9fcdf6d3842 100644
--- a/gcc/ada/make.ads
+++ b/gcc/ada/make.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
+-- 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- --
@@ -112,6 +112,7 @@ package Make is
Most_Recent_Obj_Stamp : out Time_Stamp_Type;
Main_Unit : out Boolean;
Compilation_Failures : out Natural;
+ Main_Index : Int := 0;
Check_Readonly_Files : Boolean := False;
Do_Not_Execute : Boolean := False;
Force_Compilations : Boolean := False;
@@ -148,6 +149,10 @@ package Make is
-- Compilation_Failures is a count of compilation failures. This count
-- is used to extract compilation failure reports with Extract_Failure.
--
+ -- Main_Index, when not zero, is the index of the main unit in source
+ -- file Main_Source which is a multi-unit source.
+ -- Zero indicates that Main_Source is a single unit source file.
+ --
-- Check_Readonly_Files set it to True to compile source files
-- which library files are read-only. When compiling GNAT predefined
-- files the "-gnatg" flag is used.
diff --git a/gcc/ada/makeusg.adb b/gcc/ada/makeusg.adb
index 49b7a0df475..ed7140f84d7 100644
--- a/gcc/ada/makeusg.adb
+++ b/gcc/ada/makeusg.adb
@@ -88,6 +88,11 @@ begin
Write_Str (" -D dir Specify dir as the object directory");
Write_Eol;
+ -- Line for -eI
+
+ Write_Str (" -eI Index of unit in multi-unit source file");
+ Write_Eol;
+
-- Line for -eL
Write_Str (" -eL Follow symbolic links when processing " &
@@ -186,6 +191,12 @@ begin
Write_Str (" -vPx Specify verbosity when parsing GNAT Project Files");
Write_Eol;
+ -- Line for -x
+
+ Write_Str (" -x " &
+ "Allow compilation of needed units external to the projects");
+ Write_Eol;
+
-- Line for -X
Write_Str (" -Xnm=val Specify an external reference for GNAT " &
diff --git a/gcc/ada/makeutl.adb b/gcc/ada/makeutl.adb
index f5cd39338fd..926affc54c7 100644
--- a/gcc/ada/makeutl.adb
+++ b/gcc/ada/makeutl.adb
@@ -24,16 +24,43 @@
-- --
------------------------------------------------------------------------------
-with Namet; use Namet;
-with Prj; use Prj;
+with Namet; use Namet;
+with Osint; use Osint;
+with Prj; use Prj;
with Prj.Ext;
with Prj.Util;
-with Snames; use Snames;
+with Snames; use Snames;
with Table;
-with Types; use Types;
+with Types; use Types;
+
+with System.HTable;
package body Makeutl is
+ type Mark_Key is record
+ File : File_Name_Type;
+ Index : Int;
+ end record;
+ -- Identify either a mono-unit source (when Index = 0) or a specific unit
+ -- in a multi-unit source.
+
+ -- There follow many global undocumented declarations, comments needed ???
+
+ Max_Mask_Num : constant := 2048;
+
+ subtype Mark_Num is Union_Id range 0 .. Max_Mask_Num - 1;
+
+ function Hash (Key : Mark_Key) return Mark_Num;
+
+ package Marks is new System.HTable.Simple_HTable
+ (Header_Num => Mark_Num,
+ Element => Boolean,
+ No_Element => False,
+ Key => Mark_Key,
+ Hash => Hash,
+ Equal => "=");
+ -- A hash table to keep tracks of the marked units.
+
type Linker_Options_Data is record
Project : Project_Id;
Options : String_List_Id;
@@ -66,9 +93,9 @@ package body Makeutl is
if Last_Linker_Option = Linker_Options_Buffer'Last then
declare
New_Buffer : constant String_List_Access :=
- new String_List
- (1 .. Linker_Options_Buffer'Last +
- Linker_Option_Initial_Count);
+ new String_List
+ (1 .. Linker_Options_Buffer'Last +
+ Linker_Option_Initial_Count);
begin
New_Buffer (Linker_Options_Buffer'Range) :=
Linker_Options_Buffer.all;
@@ -83,6 +110,24 @@ package body Makeutl is
end if;
end Add_Linker_Option;
+ ----------------------
+ -- Delete_All_Marks --
+ ----------------------
+
+ procedure Delete_All_Marks is
+ begin
+ Marks.Reset;
+ end Delete_All_Marks;
+
+ ----------
+ -- Hash --
+ ----------
+
+ function Hash (Key : Mark_Key) return Mark_Num is
+ begin
+ return Union_Id (Key.File) mod Max_Mask_Num;
+ end Hash;
+
----------------------------
-- Is_External_Assignment --
----------------------------
@@ -115,7 +160,6 @@ package body Makeutl is
or else Equal_Pos >= Finish
then
return False;
-
else
Prj.Ext.Add
(External_Name => Argv (Start .. Equal_Pos - 1),
@@ -124,26 +168,38 @@ package body Makeutl is
end if;
end Is_External_Assignment;
+ ---------------
+ -- Is_Marked --
+ ---------------
+
+ function Is_Marked
+ (Source_File : File_Name_Type;
+ Index : Int := 0) return Boolean
+ is
+ begin
+ return Marks.Get (K => (File => Source_File, Index => Index));
+ end Is_Marked;
+
-----------------------------
-- Linker_Options_Switches --
-----------------------------
function Linker_Options_Switches
- (Project : Project_Id)
- return String_List
+ (Project : Project_Id) return String_List
is
+ procedure Recursive_Add_Linker_Options (Proj : Project_Id);
+ -- The recursive routine used to add linker options
----------------------------------
-- Recursive_Add_Linker_Options --
----------------------------------
- procedure Recursive_Add_Linker_Options (Proj : Project_Id);
-
procedure Recursive_Add_Linker_Options (Proj : Project_Id) is
- Data : Project_Data;
+ Data : Project_Data;
Linker_Package : Package_Id;
- Options : Variable_Value;
- Imported : Project_List;
+ Options : Variable_Value;
+ Imported : Project_List;
+
begin
if Proj /= No_Project then
Data := Projects.Table (Proj);
@@ -166,6 +222,7 @@ package body Makeutl is
Options :=
Prj.Util.Value_Of
(Name => Name_Ada,
+ Index => 0,
Attribute_Or_Array_Name => Name_Linker_Options,
In_Package => Linker_Package);
@@ -182,6 +239,8 @@ package body Makeutl is
end if;
end Recursive_Add_Linker_Options;
+ -- Start of processing for Linker_Options_Switches
+
begin
Linker_Opts.Init;
@@ -305,6 +364,15 @@ package body Makeutl is
end Mains;
+ ----------
+ -- Mark --
+ ----------
+
+ procedure Mark (Source_File : File_Name_Type; Index : Int := 0) is
+ begin
+ Marks.Set (K => (File => Source_File, Index => Index), E => True);
+ end Mark;
+
---------------------------
-- Test_If_Relative_Path --
---------------------------
@@ -316,7 +384,6 @@ package body Makeutl is
is
begin
if Switch /= null then
-
declare
Sw : String (1 .. Switch'Length);
Start : Positive;
@@ -384,4 +451,59 @@ package body Makeutl is
end if;
end Test_If_Relative_Path;
+ -------------------
+ -- Unit_Index_Of --
+ -------------------
+
+ function Unit_Index_Of (ALI_File : File_Name_Type) return Int is
+ Start : Natural;
+ Finish : Natural;
+ Result : Int := 0;
+
+ begin
+ Get_Name_String (ALI_File);
+
+ -- First, find the last dot
+
+ Finish := Name_Len;
+
+ while Finish >= 1 and then Name_Buffer (Finish) /= '.' loop
+ Finish := Finish - 1;
+ end loop;
+
+ if Finish = 1 then
+ return 0;
+ end if;
+
+ -- Now check that the dot is preceded by digits
+
+ Start := Finish;
+ Finish := Finish - 1;
+
+ while Start >= 1 and then Name_Buffer (Start - 1) in '0' .. '9' loop
+ Start := Start - 1;
+ end loop;
+
+ -- If there is no difits, or if the digits are not preceded by
+ -- the character that precedes a unit index, this is not the ALI file
+ -- of a unit in a multi-unit source.
+
+ if Start > Finish
+ or else Start = 1
+ or else Name_Buffer (Start - 1) /= Multi_Unit_Index_Character
+ then
+ return 0;
+ end if;
+
+ -- Build the index from the digit(s)
+
+ while Start <= Finish loop
+ Result := Result * 10 +
+ Character'Pos (Name_Buffer (Start)) - Character'Pos ('0');
+ Start := Start + 1;
+ end loop;
+
+ return Result;
+ end Unit_Index_Of;
+
end Makeutl;
diff --git a/gcc/ada/makeutl.ads b/gcc/ada/makeutl.ads
index 3e82e0d010a..0a3f11a0aaf 100644
--- a/gcc/ada/makeutl.ads
+++ b/gcc/ada/makeutl.ads
@@ -24,33 +24,45 @@
-- --
------------------------------------------------------------------------------
-with GNAT.OS_Lib; use GNAT.OS_Lib;
with Osint;
-with Prj; use Prj;
+with Prj; use Prj;
+with Types; use Types;
+
+with GNAT.OS_Lib; use GNAT.OS_Lib;
package Makeutl is
type Fail_Proc is access procedure
- (S1 : String; S2 : String := ""; S3 : String := "");
+ (S1 : String;
+ S2 : String := "";
+ S3 : String := "");
Do_Fail : Fail_Proc := Osint.Fail'Access;
+ -- Comment required ???
+ function Unit_Index_Of (ALI_File : File_Name_Type) return Int;
+ -- Find the index of a unit in a source file. Return zero if the file
+ -- is not a multi-unit source file.
function Is_External_Assignment (Argv : String) return Boolean;
- -- Verify that an external assignment switch is syntactically correct.
- -- Correct forms are
+ -- Verify that an external assignment switch is syntactically correct
+ --
+ -- Correct forms are:
+ --
-- -Xname=value
-- -X"name=other value"
+ --
-- Assumptions: 'First = 1, Argv (1 .. 2) = "-X"
-- When this function returns True, the external assignment has
-- been entered by a call to Prj.Ext.Add, so that in a project
-- file, External ("name") will return "value".
+ function Linker_Options_Switches (Project : Project_Id) return String_List;
+ -- Comment required ???
+
-- Package Mains is used to store the mains specified on the command line
-- and to retrieve them when a project file is used, to verify that the
-- files exist and that they belong to a project file.
- function Linker_Options_Switches (Project : Project_Id) return String_List;
-
package Mains is
-- Mains are stored in a table. An index is used to retrieve the mains
@@ -85,4 +97,21 @@ package Makeutl is
-- For gnatbind switches, Including_L_Switch is False, because the
-- argument of the -L switch is not a path.
+ ----------------------
+ -- Marking Routines --
+ ----------------------
+
+ procedure Mark (Source_File : File_Name_Type; Index : Int := 0);
+ -- Mark a unit, identified by its source file and, when Index is not 0,
+ -- the index of the unit in the source file. Marking is used to signal
+ -- that the unit has already been inserted in the Q.
+
+ function Is_Marked
+ (Source_File : File_Name_Type;
+ Index : Int := 0) return Boolean;
+ -- Returns True if the unit was previously marked.
+
+ procedure Delete_All_Marks;
+ -- Remove all file/index couples marked
+
end Makeutl;
diff --git a/gcc/ada/misc.c b/gcc/ada/misc.c
index f40d2728367..dca2b0fe9f2 100644
--- a/gcc/ada/misc.c
+++ b/gcc/ada/misc.c
@@ -320,6 +320,9 @@ gnat_init_options (unsigned int argc, const char **argv)
save_argc = argc;
save_argv = argv;
+ /* Uninitialized really means uninitialized in Ada. */
+ flag_zero_initialized_in_bss = 0;
+
return CL_Ada;
}
@@ -972,4 +975,3 @@ fp_size_to_prec (int size)
abort ();
}
-
diff --git a/gcc/ada/mlib-prj.adb b/gcc/ada/mlib-prj.adb
index 70d8741f42e..b55d801388d 100644
--- a/gcc/ada/mlib-prj.adb
+++ b/gcc/ada/mlib-prj.adb
@@ -815,7 +815,9 @@ package body MLib.Prj is
if Defaults /= No_Array_Element then
Switches :=
Value_Of
- (Index => Name_Ada, In_Array => Defaults);
+ (Index => Name_Ada,
+ Src_Index => 0,
+ In_Array => Defaults);
if not Switches.Default then
Switch := Switches.Values;
diff --git a/gcc/ada/mlib-utl.adb b/gcc/ada/mlib-utl.adb
index 7c3a4ee707f..152d272b035 100644
--- a/gcc/ada/mlib-utl.adb
+++ b/gcc/ada/mlib-utl.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2002-2003, Ada Core Technologies, Inc. --
+-- Copyright (C) 2002-2004, Ada Core Technologies, Inc. --
-- --
-- GNAT is 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,7 +64,6 @@ package body MLib.Utl is
Success : Boolean;
Line_Length : Natural := 0;
- Max_Line_Length : constant := 200; -- arbitrary
begin
Initialize;
@@ -82,9 +81,12 @@ package body MLib.Utl is
Line_Length := Ar_Name'Length;
for J in Arguments'Range loop
+
-- Make sure the Output buffer does not overflow
- if Line_Length + 1 + Arguments (J)'Length > Max_Line_Length then
+ if Line_Length + 1 + Arguments (J)'Length >
+ Integer (Opt.Max_Line_Length)
+ then
Write_Eol;
Line_Length := 0;
end if;
diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads
index 9fea924caec..eb34e50f3fc 100644
--- a/gcc/ada/opt.ads
+++ b/gcc/ada/opt.ads
@@ -398,6 +398,11 @@ package Opt is
-- effect if an explicit Link_Name is supplied (a link name is always
-- used exactly as given).
+ External_Unit_Compilation_Allowed : Boolean := False;
+ -- GNATMAKE
+ -- When True (set by gnatmake switch -x), allow compilation of sources
+ -- that are not part of any project file.
+
Float_Format : Character := ' ';
-- GNAT
-- A non-blank value indicates that a Float_Format pragma has been
@@ -638,6 +643,11 @@ package Opt is
-- Set to True when either Compile_Only, Bind_Only or Link_Only is
-- set to True.
+ Main_Index : Int := 0;
+ -- GNATMAKE
+ -- This is set to non-zero by gnatmake switch -eInnn to indicate that
+ -- the main program is the nnn unit in a multi-unit source file.
+
Mapping_File_Name : String_Ptr := null;
-- GNAT
-- File name of mapping between unit names, file names and path names.
@@ -654,6 +664,15 @@ package Opt is
-- extension, as set by the appropriate switch. If no switch is given,
-- then this value is initialized by Osint to the appropriate value.
+ Max_Line_Length : Int := Hostparm.Max_Line_Length;
+ -- This is a copy of Max_Line_Length used by the scanner. It is usually
+ -- set to be a copy of Hostparm.Max_Line_Length, and is used to check
+ -- the maximum line length in the scanner when style checking is inactive.
+ -- The only time it is set to a different value is during the scanning of
+ -- configuration pragma files, where we want to turn off all checking and
+ -- in particular we want to allow long lines. So we reset this value to
+ -- Column_Number'Last during scanning of configuration pragma files.
+
Maximum_Processes : Positive := 1;
-- GNATMAKE
-- Maximum number of processes that should be spawned to carry out
diff --git a/gcc/ada/osint.adb b/gcc/ada/osint.adb
index 2dc5c321509..aa45a7a03b4 100644
--- a/gcc/ada/osint.adb
+++ b/gcc/ada/osint.adb
@@ -520,7 +520,7 @@ package body Osint is
-- Add_File --
--------------
- procedure Add_File (File_Name : String) is
+ procedure Add_File (File_Name : String; Index : Int := No_Index) is
begin
Number_File_Names := Number_File_Names + 1;
@@ -530,9 +530,12 @@ package body Osint is
if Number_File_Names > File_Names'Last then
File_Names := new File_Name_Array'(File_Names.all & File_Names.all);
+ File_Indexes :=
+ new File_Index_Array'(File_Indexes.all & File_Indexes.all);
end if;
- File_Names (Number_File_Names) := new String'(File_Name);
+ File_Names (Number_File_Names) := new String'(File_Name);
+ File_Indexes (Number_File_Names) := Index;
end Add_File;
------------------------
@@ -670,6 +673,15 @@ package body Osint is
end if;
end Create_File_And_Check;
+ ------------------------
+ -- Current_File_Index --
+ ------------------------
+
+ function Current_File_Index return Int is
+ begin
+ return File_Indexes (Current_File_Name_Index);
+ end Current_File_Index;
+
--------------------------------
-- Current_Library_File_Stamp --
--------------------------------
@@ -1017,13 +1029,12 @@ package body Osint is
if Command_Name (Cindex2) in '0' .. '9' then
for J in reverse Cindex1 .. Cindex2 loop
-
- exit when Command_Name (J) not in '0' .. '9';
-
if Command_Name (J) = '.' or Command_Name (J) = ';' then
Cindex2 := J - 1;
exit;
end if;
+
+ exit when Command_Name (J) not in '0' .. '9';
end loop;
end if;
diff --git a/gcc/ada/osint.ads b/gcc/ada/osint.ads
index 44ad5bad4ed..6e5672d1aca 100644
--- a/gcc/ada/osint.ads
+++ b/gcc/ada/osint.ads
@@ -92,9 +92,15 @@ package Osint is
function Number_Of_Files return Int;
-- gives the total number of filenames found on the command line.
- procedure Add_File (File_Name : String);
+ No_Index : constant := -1;
+ -- Value used in Add_File to indicate that no index is specified
+ -- for a main.
+
+ procedure Add_File (File_Name : String; Index : Int := No_Index);
-- Called by the subprogram processing the command line for each
- -- file name found.
+ -- 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
@@ -379,6 +385,9 @@ package Osint is
-- every single time the routines are called unless you have previously
-- called Source_File_Data (Cache => True). See below.
+ function Current_File_Index return Int;
+ -- Return the index in its source file of the current main unit
+
function Matching_Full_Source_Name
(N : File_Name_Type;
T : Time_Stamp_Type) return File_Name_Type;
@@ -573,6 +582,11 @@ private
-- extensible, because when using project files, there may be
-- more files than arguments on the command line.
+ type File_Index_Array is array (Int range <>) of Int;
+ type File_Index_Array_Ptr is access File_Index_Array;
+ File_Indexes : File_Index_Array_Ptr :=
+ new File_Index_Array (1 .. Int (Argument_Count) + 2);
+
Current_File_Name_Index : Int := 0;
-- The index in File_Names of the last file opened by Next_Main_Source
-- or Next_Main_Lib_File. The value 0 indicates that no files have been
diff --git a/gcc/ada/prj-attr.adb b/gcc/ada/prj-attr.adb
index 6e8cc6cccb0..a0588bcb4e1 100644
--- a/gcc/ada/prj-attr.adb
+++ b/gcc/ada/prj-attr.adb
@@ -39,7 +39,9 @@ package body Prj.Attr is
-- The first letter is one of
-- 'S' for Single
- -- 'L' for list
+ -- 's' for Single with optional index
+ -- 'L' for List
+ -- 'l' for List of strings with optional indexes
-- The second letter is one of
-- 'V' for single variable
@@ -47,6 +49,7 @@ package body Prj.Attr is
-- 'a' for case insensitive associative array
-- 'b' for associative array, case insensitive if file names are case
-- insensitive
+ -- 'c' same as 'b', with optional index
-- End is indicated by two consecutive '#'.
@@ -72,7 +75,7 @@ package body Prj.Attr is
"SVlibrary_symbol_file#" &
"SVlibrary_symbol_policy#" &
"SVlibrary_reference_symbol_file#" &
- "LVmain#" &
+ "lVmain#" &
"LVlanguages#" &
"SVmain_language#" &
@@ -86,10 +89,10 @@ package body Prj.Attr is
"SVseparate_suffix#" &
"SVcasing#" &
"SVdot_replacement#" &
- "SAspecification#" &
- "SAspec#" &
- "SAimplementation#" &
- "SAbody#" &
+ "sAspecification#" &
+ "sAspec#" &
+ "sAimplementation#" &
+ "sAbody#" &
"Laspecification_exceptions#" &
"Laimplementation_exceptions#" &
@@ -97,15 +100,15 @@ package body Prj.Attr is
"Pcompiler#" &
"Ladefault_switches#" &
- "Lbswitches#" &
+ "Lcswitches#" &
"SVlocal_configuration_pragmas#" &
-- package Builder
"Pbuilder#" &
"Ladefault_switches#" &
- "Lbswitches#" &
- "Sbexecutable#" &
+ "Lcswitches#" &
+ "Scexecutable#" &
"SVexecutable_suffix#" &
"SVglobal_configuration_pragmas#" &
@@ -118,13 +121,13 @@ package body Prj.Attr is
"Pbinder#" &
"Ladefault_switches#" &
- "Lbswitches#" &
+ "Lcswitches#" &
-- package Linker
"Plinker#" &
"Ladefault_switches#" &
- "Lbswitches#" &
+ "Lcswitches#" &
"LVlinker_options#" &
-- package Cross_Reference
@@ -184,6 +187,7 @@ package body Prj.Attr is
Current_Attribute : Attribute_Node_Id := Empty_Attribute;
Is_An_Attribute : Boolean := False;
Kind_1 : Variable_Kind := Undefined;
+ Optional_Index : Boolean := False;
Kind_2 : Attribute_Kind := Single;
Package_Name : Name_Id := No_Name;
Attribute_Name : Name_Id := No_Name;
@@ -232,10 +236,20 @@ package body Prj.Attr is
Start := Finish + 1;
when 'S' =>
- Kind_1 := Single;
+ Kind_1 := Single;
+ Optional_Index := False;
+
+ when 's' =>
+ Kind_1 := Single;
+ Optional_Index := True;
when 'L' =>
- Kind_1 := List;
+ Kind_1 := List;
+ Optional_Index := False;
+
+ when 'l' =>
+ Kind_1 := List;
+ Optional_Index := True;
when others =>
raise Program_Error;
@@ -263,6 +277,14 @@ package body Prj.Attr is
Kind_2 := Case_Insensitive_Associative_Array;
end if;
+ when 'c' =>
+ if File_Names_Case_Sensitive then
+ Kind_2 := Optional_Index_Associative_Array;
+ else
+ Kind_2 :=
+ Optional_Index_Case_Insensitive_Associative_Array;
+ end if;
+
when others =>
raise Program_Error;
end case;
@@ -279,6 +301,7 @@ package body Prj.Attr is
To_Lower (Initialization_Data (Start .. Finish - 1));
Attribute_Name := Name_Find;
Attributes.Increment_Last;
+
if Current_Attribute = Empty_Attribute then
First_Attribute := Attributes.Last;
@@ -306,10 +329,11 @@ package body Prj.Attr is
Current_Attribute := Attributes.Last;
Attributes.Table (Current_Attribute) :=
- (Name => Attribute_Name,
- Kind_1 => Kind_1,
- Kind_2 => Kind_2,
- Next => Empty_Attribute);
+ (Name => Attribute_Name,
+ Kind_1 => Kind_1,
+ Optional_Index => Optional_Index,
+ Kind_2 => Kind_2,
+ Next => Empty_Attribute);
Start := Finish + 1;
end if;
end loop;
diff --git a/gcc/ada/prj-attr.ads b/gcc/ada/prj-attr.ads
index cf3c140b11f..9ca7ded47c1 100644
--- a/gcc/ada/prj-attr.ads
+++ b/gcc/ada/prj-attr.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2001-2002 Free Software Foundation, Inc. --
+-- Copyright (C) 2001-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- --
@@ -53,13 +53,16 @@ package Prj.Attr is
type Attribute_Kind is
(Single,
Associative_Array,
- Case_Insensitive_Associative_Array);
+ Optional_Index_Associative_Array,
+ Case_Insensitive_Associative_Array,
+ Optional_Index_Case_Insensitive_Associative_Array);
type Attribute_Record is record
- Name : Name_Id;
- Kind_1 : Variable_Kind;
- Kind_2 : Attribute_Kind;
- Next : Attribute_Node_Id;
+ Name : Name_Id;
+ Kind_1 : Variable_Kind;
+ Optional_Index : Boolean;
+ Kind_2 : Attribute_Kind;
+ Next : Attribute_Node_Id;
end record;
package Attributes is
diff --git a/gcc/ada/prj-com.ads b/gcc/ada/prj-com.ads
index 123ff290f67..e4e73d92209 100644
--- a/gcc/ada/prj-com.ads
+++ b/gcc/ada/prj-com.ads
@@ -56,6 +56,7 @@ package Prj.Com is
type File_Name_Data is record
Name : Name_Id := No_Name;
+ Index : Int := 0;
Display_Name : Name_Id := No_Name;
Path : Name_Id := No_Name;
Display_Path : Name_Id := No_Name;
diff --git a/gcc/ada/prj-dect.adb b/gcc/ada/prj-dect.adb
index ac39eeda369..0db8d9150bd 100644
--- a/gcc/ada/prj-dect.adb
+++ b/gcc/ada/prj-dect.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2001-2003 Free Software Foundation, Inc --
+-- Copyright (C) 2001-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- --
@@ -33,6 +33,7 @@ with Scans; use Scans;
with Snames;
with Types; use Types;
with Prj.Attr; use Prj.Attr;
+with Uintp; use Uintp;
package body Prj.Dect is
@@ -121,6 +122,7 @@ package body Prj.Dect is
Current_Attribute : Attribute_Node_Id := First_Attribute;
Full_Associative_Array : Boolean := False;
Attribute_Name : Name_Id := No_Name;
+ Optional_Index : Boolean := False;
begin
Attribute := Default_Project_Node (Of_Kind => N_Attribute_Declaration);
@@ -194,8 +196,9 @@ package body Prj.Dect is
-- Set, if appropriate the index case insensitivity flag
- elsif Attributes.Table (Current_Attribute).Kind_2 =
- Case_Insensitive_Associative_Array
+ elsif Attributes.Table (Current_Attribute).Kind_2 in
+ Case_Insensitive_Associative_Array ..
+ Optional_Index_Case_Insensitive_Associative_Array
then
Set_Case_Insensitive (Attribute, To => True);
end if;
@@ -245,6 +248,41 @@ package body Prj.Dect is
if Token = Tok_String_Literal then
Set_Associative_Array_Index_Of (Attribute, Token_Name);
Scan; -- past the literal string index
+
+ if Token = Tok_At then
+ case Attributes.Table (Current_Attribute).Kind_2 is
+ when Optional_Index_Associative_Array |
+ Optional_Index_Case_Insensitive_Associative_Array =>
+ Scan;
+ Expect (Tok_Integer_Literal, "integer literal");
+
+ if Token = Tok_Integer_Literal then
+
+ -- Set the source index value from given literal
+
+ declare
+ Index : constant Int :=
+ UI_To_Int (Int_Literal_Value);
+ begin
+ if Index = 0 then
+ Error_Msg ("index cannot be zero", Token_Ptr);
+ else
+ Set_Source_Index_Of (Attribute, To => Index);
+ end if;
+ end;
+
+ Scan;
+ end if;
+
+ when others =>
+ Error_Msg ("index not allowed here", Token_Ptr);
+ Scan;
+
+ if Token = Tok_Integer_Literal then
+ Scan;
+ end if;
+ end case;
+ end if;
end if;
Expect (Tok_Right_Paren, "`)`");
@@ -271,6 +309,7 @@ package body Prj.Dect is
if Current_Attribute /= Empty_Attribute then
Set_Expression_Kind_Of
(Attribute, To => Attributes.Table (Current_Attribute).Kind_1);
+ Optional_Index := Attributes.Table (Current_Attribute).Optional_Index;
end if;
Expect (Tok_Use, "USE");
@@ -439,7 +478,8 @@ package body Prj.Dect is
Parse_Expression
(Expression => Expression,
Current_Project => Current_Project,
- Current_Package => Current_Package);
+ Current_Package => Current_Package,
+ Optional_Index => Optional_Index);
Set_Expression_Of (Attribute, To => Expression);
-- If the expression is legal, but not of the right kind
@@ -1225,7 +1265,8 @@ package body Prj.Dect is
Parse_Expression
(Expression => Expression,
Current_Project => Current_Project,
- Current_Package => Current_Package);
+ Current_Package => Current_Package,
+ Optional_Index => False);
Set_Expression_Of (Variable, To => Expression);
if Expression /= Empty_Node then
diff --git a/gcc/ada/prj-env.adb b/gcc/ada/prj-env.adb
index ba2b04f546e..b8e3fc7bf02 100644
--- a/gcc/ada/prj-env.adb
+++ b/gcc/ada/prj-env.adb
@@ -584,7 +584,8 @@ package body Prj.Env is
procedure Put
(Unit_Name : Name_Id;
File_Name : Name_Id;
- Unit_Kind : Spec_Or_Body);
+ Unit_Kind : Spec_Or_Body;
+ Index : Int);
-- Put an SFN pragma in the temporary file
procedure Put (File : File_Descriptor; S : String);
@@ -742,7 +743,8 @@ package body Prj.Env is
procedure Put
(Unit_Name : Name_Id;
File_Name : Name_Id;
- Unit_Kind : Spec_Or_Body)
+ Unit_Kind : Spec_Or_Body;
+ Index : Int)
is
begin
-- A temporary file needs to be open
@@ -761,7 +763,14 @@ package body Prj.Env is
end if;
Put (File, Namet.Get_Name_String (File_Name));
- Put_Line (File, """);");
+ Put (File, """");
+
+ if Index /= 0 then
+ Put (File, ", Index =>");
+ Put (File, Index'Img);
+ end if;
+
+ Put_Line (File, ");");
end Put;
procedure Put (File : File_Descriptor; S : String) is
@@ -788,7 +797,7 @@ package body Prj.Env is
Last : Natural;
begin
- -- Add an ASCII.LF to the string. As this gnat.adc is supposed to
+ -- Add an ASCII.LF to the string. As this config file is supposed to
-- be used only by the compiler, we don't care about the characters
-- for the end of line. In fact we could have put a space, but
-- it is more convenient to be able to read gnat.adc during
@@ -831,13 +840,15 @@ package body Prj.Env is
if Unit.File_Names (Specification).Needs_Pragma then
Put (Unit.Name,
Unit.File_Names (Specification).Name,
- Specification);
+ Specification,
+ Unit.File_Names (Specification).Index);
end if;
if Unit.File_Names (Body_Part).Needs_Pragma then
Put (Unit.Name,
Unit.File_Names (Body_Part).Name,
- Body_Part);
+ Body_Part,
+ Unit.File_Names (Body_Part).Index);
end if;
Current_Unit := Current_Unit + 1;
@@ -1269,7 +1280,6 @@ package body Prj.Env is
Write_Line (" OK");
end if;
-
if Full_Path then
return Get_Name_String
(Unit.File_Names (Specification).Path);
diff --git a/gcc/ada/prj-makr.adb b/gcc/ada/prj-makr.adb
index 6fdb3bba0e3..b6b66dd5195 100644
--- a/gcc/ada/prj-makr.adb
+++ b/gcc/ada/prj-makr.adb
@@ -136,9 +136,10 @@ package body Prj.Makr is
Args : Argument_List (1 .. Preproc_Switches'Length + 6);
type SFN_Pragma is record
- Unit : Name_Id;
- File : Name_Id;
- Spec : Boolean;
+ Unit : Name_Id;
+ File : Name_Id;
+ Index : Int := 0;
+ Spec : Boolean;
end record;
package SFN_Pragmas is new Table.Table
@@ -254,7 +255,7 @@ package body Prj.Makr is
then
Output.Write_Str (" Checking """);
Output.Write_Str (Str (1 .. Last));
- Output.Write_Str (""": ");
+ Output.Write_Line (""": ");
end if;
-- If the file name matches one of the regular expressions,
@@ -362,7 +363,7 @@ package body Prj.Makr is
if End_Of_File (File) then
if Opt.Verbose_Mode then
if not Success then
- Output.Write_Str ("(process died) ");
+ Output.Write_Str (" (process died) ");
end if;
end if;
@@ -383,10 +384,11 @@ package body Prj.Makr is
Name_Buffer (1 .. Name_Len) :=
Text_Line (6 .. J - 7);
SFN_Prag :=
- (Unit => Name_Find,
- File => File_Name_Id,
- Spec => Text_Line (J - 5 .. J) =
- "(spec)");
+ (Unit => Name_Find,
+ File => File_Name_Id,
+ Index => 0,
+ Spec => Text_Line (J - 5 .. J) =
+ "(spec)");
SFN_Pragmas.Increment_Last;
SFN_Pragmas.Table
@@ -400,107 +402,116 @@ package body Prj.Makr is
if Save_Last_Pragma_Index = SFN_Pragmas.Last then
if Opt.Verbose_Mode then
- Output.Write_Line ("not a unit");
- end if;
-
- elsif SFN_Pragmas.Last >
- Save_Last_Pragma_Index + 1
- then
- SFN_Pragmas.Set_Last (Save_Last_Pragma_Index);
-
- if Opt.Verbose_Mode then
- Output.Write_Line
- ("file contains multiple units");
+ Output.Write_Line (" not a unit");
end if;
else
- SFN_Prag := SFN_Pragmas.Table
- (SFN_Pragmas.Last);
-
- if Opt.Verbose_Mode then
- if SFN_Prag.Spec then
- Output.Write_Str ("spec of ");
-
- else
- Output.Write_Str ("body of ");
- end if;
-
- Output.Write_Line
- (Get_Name_String (SFN_Prag.Unit));
+ if SFN_Pragmas.Last >
+ Save_Last_Pragma_Index + 1
+ then
+ for Index in Save_Last_Pragma_Index + 1 ..
+ SFN_Pragmas.Last
+ loop
+ SFN_Pragmas.Table (Index).Index :=
+ Int (Index - Save_Last_Pragma_Index);
+ end loop;
end if;
- if Project_File then
-
- -- Add the corresponding attribute in the
- -- Naming package of the naming project.
-
- declare
- Decl_Item : constant Project_Node_Id :=
- Default_Project_Node
- (Of_Kind =>
- N_Declarative_Item);
-
- Attribute : constant Project_Node_Id :=
- Default_Project_Node
- (Of_Kind =>
- N_Attribute_Declaration);
-
- Expression : constant Project_Node_Id :=
- Default_Project_Node
- (Of_Kind => N_Expression,
- And_Expr_Kind => Single);
-
- Term : constant Project_Node_Id :=
- Default_Project_Node
- (Of_Kind => N_Term,
- And_Expr_Kind => Single);
-
- Value : constant Project_Node_Id :=
- Default_Project_Node
- (Of_Kind => N_Literal_String,
- And_Expr_Kind => Single);
-
- begin
- Set_Next_Declarative_Item
- (Decl_Item,
- To => First_Declarative_Item_Of
- (Naming_Package));
- Set_First_Declarative_Item_Of
- (Naming_Package, To => Decl_Item);
- Set_Current_Item_Node
- (Decl_Item, To => Attribute);
-
- -- Is it a spec or a body?
+ for Index in Save_Last_Pragma_Index + 1 ..
+ SFN_Pragmas.Last
+ loop
+ SFN_Prag := SFN_Pragmas.Table (Index);
+ if Opt.Verbose_Mode then
if SFN_Prag.Spec then
- Set_Name_Of
- (Attribute, To => Name_Spec);
+ Output.Write_Str (" spec of ");
+
else
- Set_Name_Of
- (Attribute,
- To => Name_Body);
+ Output.Write_Str (" body of ");
end if;
- -- Get the name of the unit
+ Output.Write_Line
+ (Get_Name_String (SFN_Prag.Unit));
+ end if;
+
+ if Project_File then
+
+ -- Add the corresponding attribute in the
+ -- Naming package of the naming project.
+
+ declare
+ Decl_Item : constant Project_Node_Id :=
+ Default_Project_Node
+ (Of_Kind =>
+ N_Declarative_Item);
+
+ Attribute : constant Project_Node_Id :=
+ Default_Project_Node
+ (Of_Kind =>
+ N_Attribute_Declaration);
+
+ Expression : constant Project_Node_Id :=
+ Default_Project_Node
+ (Of_Kind => N_Expression,
+ And_Expr_Kind => Single);
+
+ Term : constant Project_Node_Id :=
+ Default_Project_Node
+ (Of_Kind => N_Term,
+ And_Expr_Kind => Single);
+
+ Value : constant Project_Node_Id :=
+ Default_Project_Node
+ (Of_Kind => N_Literal_String,
+ And_Expr_Kind => Single);
+
+ begin
+ Set_Next_Declarative_Item
+ (Decl_Item,
+ To => First_Declarative_Item_Of
+ (Naming_Package));
+ Set_First_Declarative_Item_Of
+ (Naming_Package, To => Decl_Item);
+ Set_Current_Item_Node
+ (Decl_Item, To => Attribute);
+
+ -- Is it a spec or a body?
+
+ if SFN_Prag.Spec then
+ Set_Name_Of
+ (Attribute, To => Name_Spec);
+ else
+ Set_Name_Of
+ (Attribute,
+ To => Name_Body);
+ end if;
- Get_Name_String (SFN_Prag.Unit);
- To_Lower (Name_Buffer (1 .. Name_Len));
- Set_Associative_Array_Index_Of
- (Attribute, To => Name_Find);
+ -- Get the name of the unit
- Set_Expression_Of
- (Attribute, To => Expression);
- Set_First_Term
- (Expression, To => Term);
- Set_Current_Term (Term, To => Value);
+ Get_Name_String (SFN_Prag.Unit);
+ To_Lower (Name_Buffer (1 .. Name_Len));
+ Set_Associative_Array_Index_Of
+ (Attribute, To => Name_Find);
- -- And set the name of the file
+ Set_Expression_Of
+ (Attribute, To => Expression);
+ Set_First_Term
+ (Expression, To => Term);
+ Set_Current_Term (Term, To => Value);
- Set_String_Value_Of
- (Value, To => File_Name_Id);
- end;
+ -- And set the name of the file
- -- Add source file name to source list file
+ Set_String_Value_Of
+ (Value, To => File_Name_Id);
+ Set_Source_Index_Of
+ (Value, To => SFN_Prag.Index);
+ end;
+ end if;
+ end loop;
+
+ if Project_File then
+ -- Add source file name to source list
+ -- file.
Last := Last + 1;
Str (Last) := ASCII.LF;
@@ -1273,7 +1284,15 @@ package body Prj.Makr is
Write_A_String
(Get_Name_String (SFN_Pragmas.Table (Index).File));
- Write_A_String (""");");
+
+ Write_A_String ("""");
+
+ if SFN_Pragmas.Table (Index).Index /= 0 then
+ Write_A_String (", Index =>");
+ Write_A_String (SFN_Pragmas.Table (Index).Index'Img);
+ end if;
+
+ Write_A_String (");");
Write_Eol;
end loop;
diff --git a/gcc/ada/prj-nmsc.adb b/gcc/ada/prj-nmsc.adb
index f49af20afa6..f728d975d34 100644
--- a/gcc/ada/prj-nmsc.adb
+++ b/gcc/ada/prj-nmsc.adb
@@ -38,6 +38,7 @@ with Prj.Err;
with Prj.Util; use Prj.Util;
with Sinput.P;
with Snames; use Snames;
+with Table; use Table;
with Types; use Types;
with Ada.Characters.Handling; use Ada.Characters.Handling;
@@ -97,27 +98,48 @@ package body Prj.Nmsc is
-- several times, and to avoid cycles that may be introduced by symbolic
-- links.
+ type Ada_Naming_Exception_Id is new Nat;
+ No_Ada_Naming_Exception : constant Ada_Naming_Exception_Id := 0;
+
type Unit_Info is record
Kind : Spec_Or_Body;
Unit : Name_Id;
+ Next : Ada_Naming_Exception_Id := No_Ada_Naming_Exception;
end record;
- No_Unit : constant Unit_Info := (Specification, No_Name);
+ -- No_Unit : constant Unit_Info :=
+ -- (Specification, No_Name, No_Ada_Naming_Exception);
+
+ package Ada_Naming_Exception_Table is new Table.Table
+ (Table_Component_Type => Unit_Info,
+ Table_Index_Type => Ada_Naming_Exception_Id,
+ Table_Low_Bound => 1,
+ Table_Initial => 20,
+ Table_Increment => 100,
+ Table_Name => "Prj.Nmsc.Ada_Naming_Exception_Table");
package Ada_Naming_Exceptions is new GNAT.HTable.Simple_HTable
(Header_Num => Header_Num,
- Element => Unit_Info,
- No_Element => No_Unit,
+ Element => Ada_Naming_Exception_Id,
+ No_Element => No_Ada_Naming_Exception,
Key => Name_Id,
Hash => Hash,
Equal => "=");
- -- A hash table to store naming exceptions for Ada
+ -- A hash table to store naming exceptions for Ada. For each file name
+ -- there is one or several unit in table Ada_Naming_Exception_Table.
function Hash (Unit : Unit_Info) return Header_Num;
+ type Name_And_Index is record
+ Name : Name_Id := No_Name;
+ Index : Int := 0;
+ end record;
+ No_Name_And_Index : constant Name_And_Index :=
+ (Name => No_Name, Index => 0);
+
package Reverse_Ada_Naming_Exceptions is new GNAT.HTable.Simple_HTable
(Header_Num => Header_Num,
- Element => Name_Id,
- No_Element => No_Name,
+ Element => Name_And_Index,
+ No_Element => No_Name_And_Index,
Key => Unit_Info,
Hash => Hash,
Equal => "=");
@@ -198,12 +220,15 @@ package body Prj.Nmsc is
procedure Get_Unit
(Canonical_File_Name : Name_Id;
Naming : Naming_Data;
+ Exception_Id : out Ada_Naming_Exception_Id;
Unit_Name : out Name_Id;
Unit_Kind : out Spec_Or_Body;
Needs_Pragma : out Boolean);
-- Find out, from a file name, the unit name, the unit kind and if a
-- specific SFN pragma is needed. If the file name corresponds to no
- -- unit, then Unit_Name will be No_Name.
+ -- unit, then Unit_Name will be No_Name. If the file is a multi-unit source
+ -- or an exception to the naming scheme, then Exception_Id is set to
+ -- the unit or units that the source contains.
function Is_Illegal_Suffix
(Suffix : String;
@@ -362,7 +387,7 @@ package body Prj.Nmsc is
Write_Line (Get_Name_String (Name));
end if;
- -- Register the source if it is an Ada compilation unit..
+ -- Register the source if it is an Ada compilation unit.
Record_Ada_Source
(File_Name => Name,
@@ -574,7 +599,6 @@ package body Prj.Nmsc is
(Name_Locally_Removed_Files,
Data.Decl.Attributes);
-
begin
pragma Assert
(Sources.Kind = List,
@@ -896,6 +920,7 @@ package body Prj.Nmsc is
String_Elements.Increment_Last;
String_Elements.Table (String_Elements.Last) :=
(Value => ALI_Name_Id,
+ Index => 0,
Display_Value => ALI_Name_Id,
Location => String_Elements.Table
(Interfaces).Location,
@@ -2099,8 +2124,9 @@ package body Prj.Nmsc is
declare
Ada_Spec_Suffix : constant Variable_Value :=
Prj.Util.Value_Of
- (Index => Name_Ada,
- In_Array => Data.Naming.Spec_Suffix);
+ (Index => Name_Ada,
+ Src_Index => 0,
+ In_Array => Data.Naming.Spec_Suffix);
begin
if Ada_Spec_Suffix.Kind = Single
@@ -2128,8 +2154,9 @@ package body Prj.Nmsc is
declare
Ada_Body_Suffix : constant Variable_Value :=
Prj.Util.Value_Of
- (Index => Name_Ada,
- In_Array => Data.Naming.Body_Suffix);
+ (Index => Name_Ada,
+ Src_Index => 0,
+ In_Array => Data.Naming.Body_Suffix);
begin
if Ada_Body_Suffix.Kind = Single
@@ -2491,6 +2518,7 @@ package body Prj.Nmsc is
procedure Free_Ada_Naming_Exceptions is
begin
+ Ada_Naming_Exception_Table.Set_Last (0);
Ada_Naming_Exceptions.Reset;
Reverse_Ada_Naming_Exceptions.Reset;
end Free_Ada_Naming_Exceptions;
@@ -2591,57 +2619,42 @@ package body Prj.Nmsc is
procedure Get_Unit
(Canonical_File_Name : Name_Id;
Naming : Naming_Data;
+ Exception_Id : out Ada_Naming_Exception_Id;
Unit_Name : out Name_Id;
Unit_Kind : out Spec_Or_Body;
Needs_Pragma : out Boolean)
is
- function Check_Exception (Canonical : Name_Id) return Boolean;
- pragma Inline (Check_Exception);
- -- Check if Canonical is one of the exceptions in List.
- -- Returns True if Get_Unit should exit
-
- ---------------------
- -- Check_Exception --
- ---------------------
+ Info_Id : Ada_Naming_Exception_Id
+ := Ada_Naming_Exceptions.Get (Canonical_File_Name);
+ VMS_Name : Name_Id;
- function Check_Exception (Canonical : Name_Id) return Boolean is
- Info : Unit_Info := Ada_Naming_Exceptions.Get (Canonical);
- VMS_Name : Name_Id;
-
- begin
- if Info = No_Unit then
- if Hostparm.OpenVMS then
- VMS_Name := Canonical;
- Get_Name_String (VMS_Name);
-
- if Name_Buffer (Name_Len) = '.' then
- Name_Len := Name_Len - 1;
- VMS_Name := Name_Find;
- end if;
-
- Info := Ada_Naming_Exceptions.Get (VMS_Name);
+ begin
+ if Info_Id = No_Ada_Naming_Exception then
+ if Hostparm.OpenVMS then
+ VMS_Name := Canonical_File_Name;
+ Get_Name_String (VMS_Name);
+
+ if Name_Buffer (Name_Len) = '.' then
+ Name_Len := Name_Len - 1;
+ VMS_Name := Name_Find;
end if;
- if Info = No_Unit then
- return False;
- end if;
+ Info_Id := Ada_Naming_Exceptions.Get (VMS_Name);
end if;
- Unit_Kind := Info.Kind;
- Unit_Name := Info.Unit;
- Needs_Pragma := True;
- return True;
- end Check_Exception;
-
- -- Start of processing for Get_Unit
-
- begin
- Needs_Pragma := False;
+ end if;
- if Check_Exception (Canonical_File_Name) then
+ if Info_Id /= No_Ada_Naming_Exception then
+ Exception_Id := Info_Id;
+ Unit_Name := No_Name;
+ Unit_Kind := Specification;
+ Needs_Pragma := True;
return;
end if;
+ Needs_Pragma := False;
+ Exception_Id := No_Ada_Naming_Exception;
+
Get_Name_String (Canonical_File_Name);
declare
@@ -3004,7 +3017,8 @@ package body Prj.Nmsc is
Display_Value => Non_Canonical_Path,
Location => No_Location,
Flag => False,
- Next => Nil_String);
+ Next => Nil_String,
+ Index => 0);
-- Case of first source directory
@@ -3380,7 +3394,8 @@ package body Prj.Nmsc is
Display_Value => Data.Display_Directory,
Location => No_Location,
Flag => False,
- Next => Nil_String);
+ Next => Nil_String,
+ Index => 0);
if Current_Verbosity = High then
Write_Line ("Single source directory:");
@@ -3747,10 +3762,11 @@ package body Prj.Nmsc is
if Suffix2 = No_Array_Element then
Array_Elements.Increment_Last;
Array_Elements.Table (Array_Elements.Last) :=
- (Index => Element.Index,
+ (Index => Element.Index,
+ Src_Index => Element.Src_Index,
Index_Case_Sensitive => False,
- Value => Element.Value,
- Next => Spec_Suffixs);
+ Value => Element.Value,
+ Next => Spec_Suffixs);
Spec_Suffixs := Array_Elements.Last;
end if;
@@ -3823,6 +3839,7 @@ package body Prj.Nmsc is
Array_Elements.Increment_Last;
Array_Elements.Table (Array_Elements.Last) :=
(Index => Element.Index,
+ Src_Index => Element.Src_Index,
Index_Case_Sensitive => False,
Value => Element.Value,
Next => Impl_Suffixs);
@@ -4091,8 +4108,9 @@ package body Prj.Nmsc is
declare
Naming_Exceptions : constant Variable_Value :=
Value_Of
- (Index => Lang_Name_Ids (Lang),
- In_Array => Data.Naming.Implementation_Exceptions);
+ (Index => Lang_Name_Ids (Lang),
+ Src_Index => 0,
+ In_Array => Data.Naming.Implementation_Exceptions);
Element_Id : String_List_Id;
Element : String_Element;
File_Id : Name_Id;
@@ -4325,6 +4343,8 @@ package body Prj.Nmsc is
Current : Array_Element_Id := List;
Element : Array_Element;
+ Unit : Unit_Info;
+
begin
-- Traverse the list
@@ -4332,12 +4352,18 @@ package body Prj.Nmsc is
Element := Array_Elements.Table (Current);
if Element.Index /= No_Name then
- Ada_Naming_Exceptions.Set
- (Element.Value.Value,
- (Kind => Kind, Unit => Element.Index));
+ Unit :=
+ (Kind => Kind,
+ Unit => Element.Index,
+ Next => No_Ada_Naming_Exception);
Reverse_Ada_Naming_Exceptions.Set
- ((Kind => Kind, Unit => Element.Index),
- Element.Value.Value);
+ (Unit, (Element.Value.Value, Element.Value.Index));
+ Unit.Next := Ada_Naming_Exceptions.Get (Element.Value.Value);
+ Ada_Naming_Exception_Table.Increment_Last;
+ Ada_Naming_Exception_Table.Table
+ (Ada_Naming_Exception_Table.Last) := Unit;
+ Ada_Naming_Exceptions.Set
+ (Element.Value.Value, Ada_Naming_Exception_Table.Last);
end if;
Current := Element.Next;
@@ -4382,16 +4408,22 @@ package body Prj.Nmsc is
is
Canonical_File_Name : Name_Id;
Canonical_Path_Name : Name_Id;
+ Exception_Id : Ada_Naming_Exception_Id;
Unit_Name : Name_Id;
Unit_Kind : Spec_Or_Body;
+ Unit_Index : Int := 0;
+ Info : Unit_Info;
+ Name_Index : Name_And_Index;
Needs_Pragma : Boolean;
The_Location : Source_Ptr := Location;
Previous_Source : constant String_List_Id := Current_Source;
- Except_Name : Name_Id := No_Name;
+ Except_Name : Name_And_Index := No_Name_And_Index;
Unit_Prj : Unit_Project;
+ File_Name_Recorded : Boolean := False;
+
begin
Get_Name_String (File_Name);
Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
@@ -4415,11 +4447,14 @@ package body Prj.Nmsc is
Get_Unit
(Canonical_File_Name => Canonical_File_Name,
Naming => Data.Naming,
+ Exception_Id => Exception_Id,
Unit_Name => Unit_Name,
Unit_Kind => Unit_Kind,
Needs_Pragma => Needs_Pragma);
- if Unit_Name = No_Name then
+ if Exception_Id = No_Ada_Naming_Exception and then
+ Unit_Name = No_Name
+ then
if Current_Verbosity = High then
Write_Str (" """);
Write_Str (Get_Name_String (Canonical_File_Name));
@@ -4427,19 +4462,21 @@ package body Prj.Nmsc is
end if;
else
+
-- Check to see if the source has been hidden by an exception,
-- but only if it is not an exception.
if not Needs_Pragma then
Except_Name :=
- Reverse_Ada_Naming_Exceptions.Get ((Unit_Kind, Unit_Name));
+ Reverse_Ada_Naming_Exceptions.Get
+ ((Unit_Kind, Unit_Name, No_Ada_Naming_Exception));
- if Except_Name /= No_Name then
+ if Except_Name /= No_Name_And_Index then
if Current_Verbosity = High then
Write_Str (" """);
Write_Str (Get_Name_String (Canonical_File_Name));
Write_Str (""" contains a unit that is found in """);
- Write_Str (Get_Name_String (Except_Name));
+ Write_Str (Get_Name_String (Except_Name.Name));
Write_Line (""" (ignored).");
end if;
@@ -4451,145 +4488,173 @@ package body Prj.Nmsc is
end if;
end if;
- -- Put the file name in the list of sources of the project
+ loop
+ if Exception_Id /= No_Ada_Naming_Exception then
+ Info := Ada_Naming_Exception_Table.Table (Exception_Id);
+ Exception_Id := Info.Next;
+ Info.Next := No_Ada_Naming_Exception;
+ Name_Index := Reverse_Ada_Naming_Exceptions.Get (Info);
- String_Elements.Increment_Last;
- String_Elements.Table (String_Elements.Last) :=
- (Value => Canonical_File_Name,
- Display_Value => File_Name,
- Location => No_Location,
- Flag => False,
- Next => Nil_String);
+ Unit_Name := Info.Unit;
+ Unit_Index := Name_Index.Index;
+ Unit_Kind := Info.Kind;
+ end if;
+ -- Put the file name in the list of sources of the project
- if Current_Source = Nil_String then
- Data.Sources := String_Elements.Last;
+ if not File_Name_Recorded then
+ String_Elements.Increment_Last;
+ String_Elements.Table (String_Elements.Last) :=
+ (Value => Canonical_File_Name,
+ Display_Value => File_Name,
+ Location => No_Location,
+ Flag => False,
+ Next => Nil_String,
+ Index => Unit_Index);
+ end if;
- else
- String_Elements.Table (Current_Source).Next :=
- String_Elements.Last;
- end if;
+ if Current_Source = Nil_String then
+ Data.Sources := String_Elements.Last;
- Current_Source := String_Elements.Last;
+ else
+ String_Elements.Table (Current_Source).Next :=
+ String_Elements.Last;
+ end if;
- -- Put the unit in unit list
+ Current_Source := String_Elements.Last;
- declare
- The_Unit : Unit_Id := Units_Htable.Get (Unit_Name);
- The_Unit_Data : Unit_Data;
+ -- Put the unit in unit list
- begin
- if Current_Verbosity = High then
- Write_Str ("Putting ");
- Write_Str (Get_Name_String (Unit_Name));
- Write_Line (" in the unit list.");
- end if;
+ declare
+ The_Unit : Unit_Id := Units_Htable.Get (Unit_Name);
+ The_Unit_Data : Unit_Data;
- -- The unit is already in the list, but may be it is
- -- only the other unit kind (spec or body), or what is
- -- in the unit list is a unit of a project we are extending.
+ begin
+ if Current_Verbosity = High then
+ Write_Str ("Putting ");
+ Write_Str (Get_Name_String (Unit_Name));
+ Write_Line (" in the unit list.");
+ end if;
- if The_Unit /= Prj.Com.No_Unit then
- The_Unit_Data := Units.Table (The_Unit);
+ -- The unit is already in the list, but may be it is
+ -- only the other unit kind (spec or body), or what is
+ -- in the unit list is a unit of a project we are extending.
- if The_Unit_Data.File_Names (Unit_Kind).Name = No_Name
- or else Project_Extends
- (Data.Extends,
- The_Unit_Data.File_Names (Unit_Kind).Project)
- then
- if The_Unit_Data.File_Names (Unit_Kind).Path = Slash then
- Remove_Forbidden_File_Name
- (The_Unit_Data.File_Names (Unit_Kind).Name);
- end if;
+ if The_Unit /= Prj.Com.No_Unit then
+ The_Unit_Data := Units.Table (The_Unit);
- -- Record the file name in the hash table Files_Htable
-
- Unit_Prj := (Unit => The_Unit, Project => Project);
- Files_Htable.Set (Canonical_File_Name, Unit_Prj);
-
- The_Unit_Data.File_Names (Unit_Kind) :=
- (Name => Canonical_File_Name,
- Display_Name => File_Name,
- Path => Canonical_Path_Name,
- Display_Path => Path_Name,
- Project => Project,
- Needs_Pragma => Needs_Pragma);
- Units.Table (The_Unit) := The_Unit_Data;
- Source_Recorded := True;
-
- elsif The_Unit_Data.File_Names (Unit_Kind).Project = Project
- and then (Data.Known_Order_Of_Source_Dirs or else
- The_Unit_Data.File_Names (Unit_Kind).Path =
- Canonical_Path_Name)
- then
- if Previous_Source = Nil_String then
- Data.Sources := Nil_String;
- else
- String_Elements.Table (Previous_Source).Next :=
- Nil_String;
- String_Elements.Decrement_Last;
- end if;
+ if The_Unit_Data.File_Names (Unit_Kind).Name = No_Name
+ or else Project_Extends
+ (Data.Extends,
+ The_Unit_Data.File_Names (Unit_Kind).Project)
+ then
+ if The_Unit_Data.File_Names (Unit_Kind).Path = Slash then
+ Remove_Forbidden_File_Name
+ (The_Unit_Data.File_Names (Unit_Kind).Name);
+ end if;
- Current_Source := Previous_Source;
+ -- Record the file name in the hash table Files_Htable
+
+ Unit_Prj := (Unit => The_Unit, Project => Project);
+ Files_Htable.Set (Canonical_File_Name, Unit_Prj);
+
+ The_Unit_Data.File_Names (Unit_Kind) :=
+ (Name => Canonical_File_Name,
+ Index => Unit_Index,
+ Display_Name => File_Name,
+ Path => Canonical_Path_Name,
+ Display_Path => Path_Name,
+ Project => Project,
+ Needs_Pragma => Needs_Pragma);
+ Units.Table (The_Unit) := The_Unit_Data;
+ Source_Recorded := True;
+
+ elsif The_Unit_Data.File_Names (Unit_Kind).Project = Project
+ and then (Data.Known_Order_Of_Source_Dirs or else
+ The_Unit_Data.File_Names (Unit_Kind).Path =
+ Canonical_Path_Name)
+ then
+ if Previous_Source = Nil_String then
+ Data.Sources := Nil_String;
+ else
+ String_Elements.Table (Previous_Source).Next :=
+ Nil_String;
+ String_Elements.Decrement_Last;
+ end if;
- else
- -- It is an error to have two units with the same name
- -- and the same kind (spec or body).
+ Current_Source := Previous_Source;
- if The_Location = No_Location then
- The_Location := Projects.Table (Project).Location;
- end if;
+ else
+ -- It is an error to have two units with the same name
+ -- and the same kind (spec or body).
- Err_Vars.Error_Msg_Name_1 := Unit_Name;
- Error_Msg (Project, "duplicate source {", The_Location);
+ if The_Location = No_Location then
+ The_Location := Projects.Table (Project).Location;
+ end if;
- Err_Vars.Error_Msg_Name_1 :=
- Projects.Table
- (The_Unit_Data.File_Names (Unit_Kind).Project).Name;
- Err_Vars.Error_Msg_Name_2 :=
- The_Unit_Data.File_Names (Unit_Kind).Path;
- Error_Msg (Project, "\ project file {, {", The_Location);
+ Err_Vars.Error_Msg_Name_1 := Unit_Name;
+ Error_Msg (Project, "duplicate source {", The_Location);
- Err_Vars.Error_Msg_Name_1 := Projects.Table (Project).Name;
- Err_Vars.Error_Msg_Name_2 := Canonical_Path_Name;
- Error_Msg (Project, "\ project file {, {", The_Location);
+ Err_Vars.Error_Msg_Name_1 :=
+ Projects.Table
+ (The_Unit_Data.File_Names (Unit_Kind).Project).Name;
+ Err_Vars.Error_Msg_Name_2 :=
+ The_Unit_Data.File_Names (Unit_Kind).Path;
+ Error_Msg
+ (Project, "\ project file {, {", The_Location);
- end if;
+ Err_Vars.Error_Msg_Name_1 :=
+ Projects.Table (Project).Name;
+ Err_Vars.Error_Msg_Name_2 := Canonical_Path_Name;
+ Error_Msg
+ (Project, "\ project file {, {", The_Location);
- -- It is a new unit, create a new record
+ end if;
- else
- -- First, check if there is no other unit with this file name
- -- in another project. If it is, report an error.
+ -- It is a new unit, create a new record
- Unit_Prj := Files_Htable.Get (Canonical_File_Name);
+ else
+ -- First, check if there is no other unit with this file
+ -- name in another project. If it is, report an error.
+ -- Of course, we do that only for the first unit in the
+ -- source file.
- if Unit_Prj /= No_Unit_Project then
- Error_Msg_Name_1 := File_Name;
- Error_Msg_Name_2 := Projects.Table (Unit_Prj.Project).Name;
- Error_Msg
- (Project,
- "{ is already a source of project {",
- Location);
+ Unit_Prj := Files_Htable.Get (Canonical_File_Name);
- else
- Units.Increment_Last;
- The_Unit := Units.Last;
- Units_Htable.Set (Unit_Name, The_Unit);
- Unit_Prj := (Unit => The_Unit, Project => Project);
- Files_Htable.Set (Canonical_File_Name, Unit_Prj);
- The_Unit_Data.Name := Unit_Name;
- The_Unit_Data.File_Names (Unit_Kind) :=
- (Name => Canonical_File_Name,
- Display_Name => File_Name,
- Path => Canonical_Path_Name,
- Display_Path => Path_Name,
- Project => Project,
- Needs_Pragma => Needs_Pragma);
- Units.Table (The_Unit) := The_Unit_Data;
- Source_Recorded := True;
+ if not File_Name_Recorded and then
+ Unit_Prj /= No_Unit_Project
+ then
+ Error_Msg_Name_1 := File_Name;
+ Error_Msg_Name_2 :=
+ Projects.Table (Unit_Prj.Project).Name;
+ Error_Msg
+ (Project,
+ "{ is already a source of project {",
+ Location);
+
+ else
+ Units.Increment_Last;
+ The_Unit := Units.Last;
+ Units_Htable.Set (Unit_Name, The_Unit);
+ Unit_Prj := (Unit => The_Unit, Project => Project);
+ Files_Htable.Set (Canonical_File_Name, Unit_Prj);
+ The_Unit_Data.Name := Unit_Name;
+ The_Unit_Data.File_Names (Unit_Kind) :=
+ (Name => Canonical_File_Name,
+ Index => Unit_Index,
+ Display_Name => File_Name,
+ Path => Canonical_Path_Name,
+ Display_Path => Path_Name,
+ Project => Project,
+ Needs_Pragma => Needs_Pragma);
+ Units.Table (The_Unit) := The_Unit_Data;
+ Source_Recorded := True;
+ end if;
end if;
- end if;
- end;
+ end;
+
+ exit when Exception_Id = No_Ada_Naming_Exception;
+ File_Name_Recorded := True;
+ end loop;
end if;
end Record_Ada_Source;
@@ -4797,8 +4862,9 @@ package body Prj.Nmsc is
is
Suffix : constant Variable_Value :=
Value_Of
- (Index => Lang_Name_Ids (Language),
- In_Array => Naming.Body_Suffix);
+ (Index => Lang_Name_Ids (Language),
+ Src_Index => 0,
+ In_Array => Naming.Body_Suffix);
begin
-- If no suffix for this language is found in package Naming, use the
-- default.
diff --git a/gcc/ada/prj-pp.adb b/gcc/ada/prj-pp.adb
index 965939db193..f9cceb5bc52 100644
--- a/gcc/ada/prj-pp.adb
+++ b/gcc/ada/prj-pp.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2001-2003 Free Software Foundation, Inc. --
+-- Copyright (C) 2001-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- --
@@ -454,6 +454,11 @@ package body Prj.PP is
pragma Debug (Indicate_Tested (N_Literal_String));
Output_String (String_Value_Of (Node));
+ if Source_Index_Of (Node) /= 0 then
+ Write_String (" at ");
+ Write_String (Source_Index_Of (Node)'Img);
+ end if;
+
when N_Attribute_Declaration =>
pragma Debug (Indicate_Tested (N_Attribute_Declaration));
Print (First_Comment_Before (Node), Indent);
@@ -464,6 +469,12 @@ package body Prj.PP is
if Associative_Array_Index_Of (Node) /= No_Name then
Write_String (" (");
Output_String (Associative_Array_Index_Of (Node));
+
+ if Source_Index_Of (Node) /= 0 then
+ Write_String (" at ");
+ Write_String (Source_Index_Of (Node)'Img);
+ end if;
+
Write_String (")");
end if;
diff --git a/gcc/ada/prj-proc.adb b/gcc/ada/prj-proc.adb
index 170da259f9e..439645e4bb7 100644
--- a/gcc/ada/prj-proc.adb
+++ b/gcc/ada/prj-proc.adb
@@ -182,7 +182,8 @@ package body Prj.Proc is
Kind => Single,
Location => No_Location,
Default => True,
- Value => Empty_String);
+ Value => Empty_String,
+ Index => 0);
-- List attributes have a default value of nil list
@@ -275,6 +276,7 @@ package body Prj.Proc is
when Single =>
Add (Result.Value, String_Value_Of (The_Current_Term));
+ Result.Index := Source_Index_Of (The_Current_Term);
when List =>
@@ -295,6 +297,7 @@ package body Prj.Proc is
Last := String_Elements.Last;
String_Elements.Table (Last) :=
(Value => String_Value_Of (The_Current_Term),
+ Index => Source_Index_Of (The_Current_Term),
Display_Value => No_Name,
Location => Location_Of (The_Current_Term),
Flag => False,
@@ -342,7 +345,8 @@ package body Prj.Proc is
Display_Value => No_Name,
Location => Value.Location,
Flag => False,
- Next => Nil_String);
+ Next => Nil_String,
+ Index => Value.Index);
loop
-- Add the other element of the literal string list
@@ -370,7 +374,8 @@ package body Prj.Proc is
Display_Value => No_Name,
Location => Value.Location,
Flag => False,
- Next => Nil_String);
+ Next => Nil_String,
+ Index => Value.Index);
end loop;
end if;
@@ -560,7 +565,8 @@ package body Prj.Proc is
Kind => Single,
Location => No_Location,
Default => True,
- Value => Empty_String);
+ Value => Empty_String,
+ Index => 0);
end if;
end if;
end;
@@ -623,7 +629,8 @@ package body Prj.Proc is
Display_Value => No_Name,
Location => Location_Of (The_Current_Term),
Flag => False,
- Next => Nil_String);
+ Next => Nil_String,
+ Index => 0);
when List =>
@@ -653,7 +660,8 @@ package body Prj.Proc is
Location => Location_Of
(The_Current_Term),
Flag => False,
- Next => Nil_String);
+ Next => Nil_String,
+ Index => 0);
The_List :=
String_Elements.Table (The_List).Next;
end loop;
@@ -725,7 +733,8 @@ package body Prj.Proc is
Display_Value => No_Name,
Location => Location_Of (The_Current_Term),
Flag => False,
- Next => Nil_String);
+ Next => Nil_String,
+ Index => 0);
end case;
end;
@@ -1582,6 +1591,7 @@ package body Prj.Proc is
Array_Elements.Table (The_Array_Element) :=
(Index => Index_Name,
+ Src_Index => Source_Index_Of (Current_Item),
Index_Case_Sensitive =>
not Case_Insensitive (Current_Item),
Value => New_Value,
diff --git a/gcc/ada/prj-strt.adb b/gcc/ada/prj-strt.adb
index 1d1d1a8cb5d..cc1bd83db80 100644
--- a/gcc/ada/prj-strt.adb
+++ b/gcc/ada/prj-strt.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2001-2003 Free Software Foundation, Inc. --
+-- Copyright (C) 2001-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- --
@@ -33,6 +33,7 @@ with Scans; use Scans;
with Snames;
with Table;
with Types; use Types;
+with Uintp; use Uintp;
package body Prj.Strt is
@@ -115,7 +116,8 @@ package body Prj.Strt is
(Term : out Project_Node_Id;
Expr_Kind : in out Variable_Kind;
Current_Project : Project_Node_Id;
- Current_Package : Project_Node_Id);
+ Current_Package : Project_Node_Id;
+ Optional_Index : Boolean);
-- Recursive procedure to parse one term or several terms concatenated
-- using "&".
@@ -454,7 +456,8 @@ package body Prj.Strt is
procedure Parse_Expression
(Expression : out Project_Node_Id;
Current_Project : Project_Node_Id;
- Current_Package : Project_Node_Id)
+ Current_Package : Project_Node_Id;
+ Optional_Index : Boolean)
is
First_Term : Project_Node_Id := Empty_Node;
Expression_Kind : Variable_Kind := Undefined;
@@ -470,7 +473,8 @@ package body Prj.Strt is
Terms (Term => First_Term,
Expr_Kind => Expression_Kind,
Current_Project => Current_Project,
- Current_Package => Current_Package);
+ Current_Package => Current_Package,
+ Optional_Index => Optional_Index);
-- Set the first term and the expression kind
@@ -1077,7 +1081,8 @@ package body Prj.Strt is
(Term : out Project_Node_Id;
Expr_Kind : in out Variable_Kind;
Current_Project : Project_Node_Id;
- Current_Package : Project_Node_Id)
+ Current_Package : Project_Node_Id;
+ Optional_Index : Boolean)
is
Next_Term : Project_Node_Id := Empty_Node;
Term_Id : Project_Node_Id := Empty_Node;
@@ -1143,7 +1148,8 @@ package body Prj.Strt is
Current_Location := Token_Ptr;
Parse_Expression (Expression => Next_Expression,
Current_Project => Current_Project,
- Current_Package => Current_Package);
+ Current_Package => Current_Package,
+ Optional_Index => Optional_Index);
-- The expression kind is String list, report an error
@@ -1199,6 +1205,39 @@ package body Prj.Strt is
Scan;
+ -- Check for possible index expression
+
+ if Token = Tok_At then
+ if not Optional_Index then
+ Error_Msg ("index not allowed here", Token_Ptr);
+ Scan;
+
+ if Token = Tok_Integer_Literal then
+ Scan;
+ end if;
+
+ -- Set the index value
+
+ else
+ Scan;
+ Expect (Tok_Integer_Literal, "integer literal");
+
+ if Token = Tok_Integer_Literal then
+ declare
+ Index : constant Int := UI_To_Int (Int_Literal_Value);
+ begin
+ if Index = 0 then
+ Error_Msg ("index cannot be zero", Token_Ptr);
+ else
+ Set_Source_Index_Of (Term_Id, To => Index);
+ end if;
+ end;
+
+ Scan;
+ end if;
+ end if;
+ end if;
+
when Tok_Identifier =>
Current_Location := Token_Ptr;
@@ -1292,7 +1331,8 @@ package body Prj.Strt is
Terms (Term => Next_Term,
Expr_Kind => Expr_Kind,
Current_Project => Current_Project,
- Current_Package => Current_Package);
+ Current_Package => Current_Package,
+ Optional_Index => Optional_Index);
-- And link the next term to this term
diff --git a/gcc/ada/prj-strt.ads b/gcc/ada/prj-strt.ads
index 69105690b51..633b022e8f5 100644
--- a/gcc/ada/prj-strt.ads
+++ b/gcc/ada/prj-strt.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2001-2003 Free Software Foundation, Inc. --
+-- Copyright (C) 2001-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- --
@@ -70,7 +70,8 @@ private package Prj.Strt is
procedure Parse_Expression
(Expression : out Project_Node_Id;
Current_Project : Project_Node_Id;
- Current_Package : Project_Node_Id);
+ Current_Package : Project_Node_Id;
+ Optional_Index : Boolean);
-- Parse a simple string expression or a string list expression.
-- Current_Project is the node of the project file being parsed.
-- Current_Package is the node of the package being parsed,
diff --git a/gcc/ada/prj-tree.adb b/gcc/ada/prj-tree.adb
index e8603c67bfb..2a67b57c5b1 100644
--- a/gcc/ada/prj-tree.adb
+++ b/gcc/ada/prj-tree.adb
@@ -111,6 +111,7 @@ package body Prj.Tree is
Packages => Empty_Node,
Pkg_Id => Empty_Package,
Name => No_Name,
+ Src_Index => 0,
Path_Name => No_Name,
Value => No_Name,
Field1 => Empty_Node,
@@ -157,6 +158,7 @@ package body Prj.Tree is
Packages => Empty_Node,
Pkg_Id => Empty_Package,
Name => No_Name,
+ Src_Index => 0,
Path_Name => No_Name,
Value => Comments.Table (J).Value,
Field1 => Empty_Node,
@@ -204,7 +206,6 @@ package body Prj.Tree is
Comments.Set_Last (0);
end Add_Comments;
-
--------------------------------
-- Associative_Array_Index_Of --
--------------------------------
@@ -310,6 +311,7 @@ package body Prj.Tree is
Packages => Empty_Node,
Pkg_Id => Empty_Package,
Name => No_Name,
+ Src_Index => 0,
Path_Name => No_Name,
Value => No_Name,
Field1 => Empty_Node,
@@ -379,6 +381,7 @@ package body Prj.Tree is
Packages => Empty_Node,
Pkg_Id => Empty_Package,
Name => No_Name,
+ Src_Index => 0,
Path_Name => No_Name,
Value => No_Name,
Field1 => Empty_Node,
@@ -411,6 +414,7 @@ package body Prj.Tree is
Packages => Empty_Node,
Pkg_Id => Empty_Package,
Name => No_Name,
+ Src_Index => 0,
Path_Name => No_Name,
Value => No_Name,
Field1 => Empty_Node,
@@ -441,6 +445,7 @@ package body Prj.Tree is
Packages => Empty_Node,
Pkg_Id => Empty_Package,
Name => No_Name,
+ Src_Index => 0,
Path_Name => No_Name,
Value => Comments.Table (J).Value,
Field1 => Empty_Node,
@@ -2323,6 +2328,24 @@ package body Prj.Tree is
Project_Nodes.Table (Node).Field1 := To;
end Set_Project_Of_Renamed_Package_Of;
+ -------------------------
+ -- Set_Source_Index_Of --
+ -------------------------
+
+ procedure Set_Source_Index_Of
+ (Node : Project_Node_Id;
+ To : Int)
+ is
+ begin
+ pragma Assert
+ (Node /= Empty_Node
+ and then
+ (Project_Nodes.Table (Node).Kind = N_Literal_String
+ or else
+ Project_Nodes.Table (Node).Kind = N_Attribute_Declaration));
+ Project_Nodes.Table (Node).Src_Index := To;
+ end Set_Source_Index_Of;
+
------------------------
-- Set_String_Type_Of --
------------------------
@@ -2338,8 +2361,8 @@ package body Prj.Tree is
(Project_Nodes.Table (Node).Kind = N_Variable_Reference
or else
Project_Nodes.Table (Node).Kind = N_Typed_Variable_Declaration)
- and then
- Project_Nodes.Table (To).Kind = N_String_Type_Declaration);
+ and then
+ Project_Nodes.Table (To).Kind = N_String_Type_Declaration);
if Project_Nodes.Table (Node).Kind = N_Variable_Reference then
Project_Nodes.Table (Node).Field3 := To;
@@ -2368,13 +2391,26 @@ package body Prj.Tree is
Project_Nodes.Table (Node).Value := To;
end Set_String_Value_Of;
+ ---------------------
+ -- Source_Index_Of --
+ ---------------------
+
+ function Source_Index_Of (Node : Project_Node_Id) return Int is
+ begin
+ pragma Assert
+ (Node /= Empty_Node
+ and then
+ (Project_Nodes.Table (Node).Kind = N_Literal_String
+ or else
+ Project_Nodes.Table (Node).Kind = N_Attribute_Declaration));
+ return Project_Nodes.Table (Node).Src_Index;
+ end Source_Index_Of;
+
--------------------
-- String_Type_Of --
--------------------
- function String_Type_Of
- (Node : Project_Node_Id) return Project_Node_Id
- is
+ function String_Type_Of (Node : Project_Node_Id) return Project_Node_Id is
begin
pragma Assert
(Node /= Empty_Node
@@ -2450,5 +2486,4 @@ package body Prj.Tree is
return Unkept_Comments;
end There_Are_Unkept_Comments;
-
end Prj.Tree;
diff --git a/gcc/ada/prj-tree.ads b/gcc/ada/prj-tree.ads
index 7192fcee796..c376d3beee2 100644
--- a/gcc/ada/prj-tree.ads
+++ b/gcc/ada/prj-tree.ads
@@ -269,6 +269,10 @@ package Prj.Tree is
pragma Inline (String_Value_Of);
-- Only valid for N_With_Clause, N_Literal_String nodes or N_Comment
+ function Source_Index_Of (Node : Project_Node_Id) return Int;
+ pragma Inline (Source_Index_Of);
+ -- Only valid for N_Literal_String and N_Attribute_Declaration nodes
+
function First_With_Clause_Of
(Node : Project_Node_Id) return Project_Node_Id;
pragma Inline (First_With_Clause_Of);
@@ -694,6 +698,11 @@ package Prj.Tree is
To : Project_Node_Id);
pragma Inline (Set_Package_Node_Of);
+ procedure Set_Source_Index_Of
+ (Node : Project_Node_Id;
+ To : Int);
+ pragma Inline (Set_Source_Index_Of);
+
procedure Set_String_Type_Of
(Node : Project_Node_Id;
To : Project_Node_Id);
@@ -773,6 +782,10 @@ package Prj.Tree is
Name : Name_Id := No_Name;
-- See below for what Project_Node_Kind it is used
+ Src_Index : Int := 0;
+ -- Index of a unit in a multi-unit source.
+ -- Onli for some N_Attribute_Declaration and N_Literal_String.
+
Path_Name : Name_Id := No_Name;
-- See below for what Project_Node_Kind it is used
diff --git a/gcc/ada/prj-util.adb b/gcc/ada/prj-util.adb
index 4081e117508..9de974760dd 100644
--- a/gcc/ada/prj-util.adb
+++ b/gcc/ada/prj-util.adb
@@ -76,6 +76,7 @@ package body Prj.Util is
function Executable_Of
(Project : Project_Id;
Main : Name_Id;
+ Index : Int;
Ada_Main : Boolean := True) return Name_Id
is
pragma Assert (Project /= No_Project);
@@ -91,12 +92,14 @@ package body Prj.Util is
Executable : Variable_Value :=
Prj.Util.Value_Of
(Name => Main,
+ Index => Index,
Attribute_Or_Array_Name => Name_Executable,
In_Package => Builder_Package);
Executable_Suffix : constant Variable_Value :=
Prj.Util.Value_Of
(Name => Main,
+ Index => 0,
Attribute_Or_Array_Name =>
Name_Executable_Suffix,
In_Package => Builder_Package);
@@ -158,6 +161,7 @@ package body Prj.Util is
Executable :=
Prj.Util.Value_Of
(Name => Name_Find,
+ Index => 0,
Attribute_Or_Array_Name => Name_Executable,
In_Package => Builder_Package);
end if;
@@ -395,8 +399,8 @@ package body Prj.Util is
end Value_Of;
function Value_Of
- (Index : Name_Id;
- In_Array : Array_Element_Id) return Name_Id
+ (Index : Name_Id;
+ In_Array : Array_Element_Id) return Name_Id
is
Current : Array_Element_Id := In_Array;
Element : Array_Element;
@@ -431,8 +435,9 @@ package body Prj.Util is
end Value_Of;
function Value_Of
- (Index : Name_Id;
- In_Array : Array_Element_Id) return Variable_Value
+ (Index : Name_Id;
+ Src_Index : Int := 0;
+ In_Array : Array_Element_Id) return Variable_Value
is
Current : Array_Element_Id := In_Array;
Element : Array_Element;
@@ -454,7 +459,9 @@ package body Prj.Util is
while Current /= No_Array_Element loop
Element := Array_Elements.Table (Current);
- if Real_Index = Element.Index then
+ if Real_Index = Element.Index and then
+ Src_Index = Element.Src_Index
+ then
return Element.Value;
else
Current := Element.Next;
@@ -466,6 +473,7 @@ package body Prj.Util is
function Value_Of
(Name : Name_Id;
+ Index : Int := 0;
Attribute_Or_Array_Name : Name_Id;
In_Package : Package_Id) return Variable_Value
is
@@ -483,8 +491,9 @@ package body Prj.Util is
In_Arrays => Packages.Table (In_Package).Decl.Arrays);
The_Attribute :=
Value_Of
- (Index => Name,
- In_Array => The_Array);
+ (Index => Name,
+ Src_Index => Index,
+ In_Array => The_Array);
-- If there is no array element, look for a variable
diff --git a/gcc/ada/prj-util.ads b/gcc/ada/prj-util.ads
index c40b2949584..7373a640d59 100644
--- a/gcc/ada/prj-util.ads
+++ b/gcc/ada/prj-util.ads
@@ -35,6 +35,7 @@ package Prj.Util is
function Executable_Of
(Project : Project_Id;
Main : Name_Id;
+ Index : Int;
Ada_Main : Boolean := True) return Name_Id;
-- Return the value of the attribute Builder'Executable for file Main in
-- the project Project, if it exists. If there is no attribute Executable
@@ -59,8 +60,9 @@ package Prj.Util is
-- associative array.
function Value_Of
- (Index : Name_Id;
- In_Array : Array_Element_Id) return Variable_Value;
+ (Index : Name_Id;
+ Src_Index : Int := 0;
+ In_Array : Array_Element_Id) return Variable_Value;
-- Get a string array component (single String or String list).
-- Returns Nil_Variable_Value if there is no component Index
-- or if In_Array is null.
@@ -72,6 +74,7 @@ package Prj.Util is
function Value_Of
(Name : Name_Id;
+ Index : Int := 0;
Attribute_Or_Array_Name : Name_Id;
In_Package : Package_Id) return Variable_Value;
-- In a specific package,
diff --git a/gcc/ada/prj.adb b/gcc/ada/prj.adb
index b71b7db512f..55523435f4f 100644
--- a/gcc/ada/prj.adb
+++ b/gcc/ada/prj.adb
@@ -34,6 +34,7 @@ with Prj.Env;
with Prj.Err; use Prj.Err;
with Scans; use Scans;
with Snames; use Snames;
+with Uintp; use Uintp;
with GNAT.OS_Lib; use GNAT.OS_Lib;
@@ -240,6 +241,7 @@ package body Prj is
begin
if not Initialized then
Initialized := True;
+ Uintp.Initialize;
Name_Len := 0;
The_Empty_String := Name_Find;
Empty_Name := The_Empty_String;
@@ -321,13 +323,15 @@ package body Prj is
if not Found then
Element :=
- (Index => Lang,
+ (Index => Lang,
+ Src_Index => 0,
Index_Case_Sensitive => False,
Value => (Project => No_Project,
Kind => Single,
Location => No_Location,
Default => False,
- Value => Default_Spec_Suffix),
+ Value => Default_Spec_Suffix,
+ Index => 0),
Next => Std_Naming_Data.Spec_Suffix);
Array_Elements.Increment_Last;
Array_Elements.Table (Array_Elements.Last) := Element;
@@ -357,13 +361,15 @@ package body Prj is
if not Found then
Element :=
- (Index => Lang,
+ (Index => Lang,
+ Src_Index => 0,
Index_Case_Sensitive => False,
Value => (Project => No_Project,
Kind => Single,
Location => No_Location,
Default => False,
- Value => Default_Body_Suffix),
+ Value => Default_Body_Suffix,
+ Index => 0),
Next => Std_Naming_Data.Body_Suffix);
Array_Elements.Increment_Last;
Array_Elements.Table (Array_Elements.Last) := Element;
diff --git a/gcc/ada/prj.ads b/gcc/ada/prj.ads
index ebbc8599d07..9d82b5ff841 100644
--- a/gcc/ada/prj.ads
+++ b/gcc/ada/prj.ads
@@ -197,6 +197,7 @@ package Prj is
Nil_String : constant String_List_Id := 0;
type String_Element is record
Value : Name_Id := No_Name;
+ Index : Int := 0;
Display_Value : Name_Id := No_Name;
Location : Source_Ptr := No_Location;
Flag : Boolean := False;
@@ -233,6 +234,7 @@ package Prj is
Values : String_List_Id := Nil_String;
when Single =>
Value : Name_Id := No_Name;
+ Index : Int := 0;
end case;
end record;
-- Values for variables and array elements.
@@ -267,6 +269,7 @@ package Prj is
No_Array_Element : constant Array_Element_Id := 0;
type Array_Element is record
Index : Name_Id;
+ Src_Index : Int := 0;
Index_Case_Sensitive : Boolean := True;
Value : Variable_Value;
Next : Array_Element_Id := No_Array_Element;
diff --git a/gcc/ada/raise.c b/gcc/ada/raise.c
index b0803ae8426..2d7c61a057d 100644
--- a/gcc/ada/raise.c
+++ b/gcc/ada/raise.c
@@ -152,7 +152,7 @@ db_accepted_codes (void)
if (accepted_codes == -1)
{
- char * db_env = getenv ("EH_DEBUG");
+ 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
diff --git a/gcc/ada/restrict.adb b/gcc/ada/restrict.adb
index 4e7222701ee..e9a4a4be749 100644
--- a/gcc/ada/restrict.adb
+++ b/gcc/ada/restrict.adb
@@ -368,7 +368,7 @@ package body Restrict is
and then Restrictions.Set (No_Task_Allocators)
and then Restrictions.Set (No_Dynamic_Priorities)
and then Restrictions.Set (No_Terminate_Alternatives)
- and then Restrictions.Set (No_Dynamic_Interrupts)
+ and then Restrictions.Set (No_Dynamic_Attachment)
and then Restrictions.Set (No_Protected_Type_Allocators)
and then Restrictions.Set (No_Local_Protected_Objects)
and then Restrictions.Set (No_Requeue_Statements)
@@ -442,7 +442,7 @@ package body Restrict is
procedure Set_Ravenscar (N : Node_Id) is
begin
Set_Restricted_Profile (N);
- Set_Restriction (Boolean_Entry_Barriers, N);
+ Set_Restriction (Simple_Barriers, N);
Set_Restriction (No_Select_Statements, N);
Set_Restriction (No_Calendar, N);
Set_Restriction (No_Entry_Queue, N);
@@ -468,7 +468,7 @@ package body Restrict is
Set_Restriction (No_Task_Allocators, N);
Set_Restriction (No_Dynamic_Priorities, N);
Set_Restriction (No_Terminate_Alternatives, N);
- Set_Restriction (No_Dynamic_Interrupts, N);
+ Set_Restriction (No_Dynamic_Attachment, N);
Set_Restriction (No_Protected_Type_Allocators, N);
Set_Restriction (No_Local_Protected_Objects, N);
Set_Restriction (No_Requeue_Statements, N);
diff --git a/gcc/ada/restrict.ads b/gcc/ada/restrict.ads
index 0d2f72f350d..9029620b1f3 100644
--- a/gcc/ada/restrict.ads
+++ b/gcc/ada/restrict.ads
@@ -104,9 +104,9 @@ package Restrict is
-- (which is why this restriction itself is excluded from the list).
Implementation_Restriction : array (All_Restrictions) of Boolean :=
- (Boolean_Entry_Barriers => True,
+ (Simple_Barriers => True,
No_Calendar => True,
- No_Dynamic_Interrupts => True,
+ No_Dynamic_Attachment => True,
No_Enumeration_Maps => True,
No_Entry_Calls_In_Elaboration_Code => True,
No_Entry_Queue => True,
diff --git a/gcc/ada/rtsfind.adb b/gcc/ada/rtsfind.adb
index f677fab890e..b43da3db603 100644
--- a/gcc/ada/rtsfind.adb
+++ b/gcc/ada/rtsfind.adb
@@ -174,6 +174,23 @@ package body Rtsfind is
-- used if you are sure that the message comes directly or indirectly from
-- a call to the RTE function.
+ ------------------------
+ -- Entity_Not_Defined --
+ ------------------------
+
+ procedure Entity_Not_Defined (Id : RE_Id) is
+ begin
+ if No_Run_Time_Mode then
+ RTE_Error_Msg ("|construct not allowed in no run time mode");
+ elsif Configurable_Run_Time_Mode then
+ RTE_Error_Msg ("|construct not allowed in this configuration>");
+ else
+ RTE_Error_Msg ("run-time configuration error");
+ end if;
+
+ Output_Entity_Name (Id, "not defined");
+ end Entity_Not_Defined;
+
-------------------
-- Get_Unit_Name --
-------------------
@@ -403,23 +420,6 @@ package body Rtsfind is
Chars (Sel) in Text_IO_Package_Name;
end Is_Text_IO_Kludge_Unit;
- ------------------------
- -- Entity_Not_Defined --
- ------------------------
-
- procedure Entity_Not_Defined (Id : RE_Id) is
- begin
- if No_Run_Time_Mode then
- RTE_Error_Msg ("|construct not allowed in no run time mode");
- elsif Configurable_Run_Time_Mode then
- RTE_Error_Msg ("|construct not allowed in this configuration>");
- else
- RTE_Error_Msg ("run-time configuration error");
- end if;
-
- Output_Entity_Name (Id, "not defined");
- end Entity_Not_Defined;
-
---------------
-- Load_Fail --
---------------
@@ -1046,6 +1046,15 @@ package body Rtsfind is
end if;
end RTE_Error_Msg;
+ ----------------
+ -- RTU_Loaded --
+ ----------------
+
+ function RTU_Loaded (U : RTU_Id) return Boolean is
+ begin
+ return Present (RT_Unit_Table (U).Entity);
+ end RTU_Loaded;
+
--------------------
-- Text_IO_Kludge --
--------------------
diff --git a/gcc/ada/rtsfind.ads b/gcc/ada/rtsfind.ads
index b0eafd6ea7e..511242909d2 100644
--- a/gcc/ada/rtsfind.ads
+++ b/gcc/ada/rtsfind.ads
@@ -2712,6 +2712,12 @@ package Rtsfind is
-- exception and without generating an error message, i.e. if the
-- call will obtain the desired entity without any problems.
+ function RTU_Loaded (U : RTU_Id) return Boolean;
+ pragma Inline (RTU_Loaded);
+ -- Returns true if indicated unit has already been successfully loaded.
+ -- If the unit has not been loaded, returns False. Note that this does
+ -- not mean that an attempt to load it subsequently would fail.
+
procedure Text_IO_Kludge (Nam : Node_Id);
-- In Ada 83, and hence for compatibility in Ada 9X, package Text_IO has
-- generic subpackages (e.g. Integer_IO). They really should be child
diff --git a/gcc/ada/s-addope.adb b/gcc/ada/s-addope.adb
index 5a388131598..2b360f1c96f 100644
--- a/gcc/ada/s-addope.adb
+++ b/gcc/ada/s-addope.adb
@@ -81,7 +81,7 @@ package body System.Address_Operations is
function ModA (Left, Right : Address) return Address is
begin
- return A (I (Left) and I (Right));
+ return A (I (Left) mod I (Right));
end ModA;
---------
diff --git a/gcc/ada/s-auxdec.ads b/gcc/ada/s-auxdec.ads
index c517ae5ee30..2d34ff111c9 100644
--- a/gcc/ada/s-auxdec.ads
+++ b/gcc/ada/s-auxdec.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1996-2002 Free Software Foundation, Inc. --
+-- Copyright (C) 1996-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- --
@@ -42,6 +42,16 @@ with Unchecked_Conversion;
package System.Aux_DEC is
pragma Elaborate_Body (Aux_DEC);
+ subtype Short_Address is Address;
+ -- In some versions of System.Aux_DEC, notably that for VMS on the
+ -- ia64, there are two address types (64-bit and 32-bit), and the
+ -- name Short_Address is used for the short address form. To avoid
+ -- difficulties (in regression tests and elsewhere) with units that
+ -- reference Short_Address, it is provided for other targets as a
+ -- synonum for the normal Address type, and, as in the case where
+ -- the lengths are different, Address and Short_Address can be
+ -- freely inter-converted.
+
type Integer_8 is range -2 ** (8 - 1) .. +2 ** (8 - 1) - 1;
for Integer_8'Size use 8;
diff --git a/gcc/ada/s-inmaop.ads b/gcc/ada/s-inmaop.ads
index d83f12184af..2bb8ef0caa1 100644
--- a/gcc/ada/s-inmaop.ads
+++ b/gcc/ada/s-inmaop.ads
@@ -7,7 +7,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-1998, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2004, 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,78 +35,82 @@
package System.Interrupt_Management.Operations is
procedure Thread_Block_Interrupt (Interrupt : Interrupt_ID);
- -- Mask the calling thread for the interrupt
pragma Inline (Thread_Block_Interrupt);
+ -- Mask the calling thread for the interrupt
procedure Thread_Unblock_Interrupt (Interrupt : Interrupt_ID);
- -- Unmask the calling thread for the interrupt
pragma Inline (Thread_Unblock_Interrupt);
+ -- Unmask the calling thread for the interrupt
procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask);
-- Set the interrupt mask of the calling thread
+
procedure Set_Interrupt_Mask
(Mask : access Interrupt_Mask;
OMask : access Interrupt_Mask);
+ pragma Inline (Set_Interrupt_Mask);
-- Set the interrupt mask of the calling thread while returning the
-- previous Mask.
- pragma Inline (Set_Interrupt_Mask);
procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask);
- -- Get the interrupt mask of the calling thread
pragma Inline (Get_Interrupt_Mask);
+ -- Get the interrupt mask of the calling thread
function Interrupt_Wait (Mask : access Interrupt_Mask) return Interrupt_ID;
- -- Wait for the interrupts specified in Mask and return
- -- the interrupt received. Upon error it return 0.
pragma Inline (Interrupt_Wait);
+ -- Wait for the interrupts specified in Mask and return
+ -- the interrupt received. Return 0 upon error.
procedure Install_Default_Action (Interrupt : Interrupt_ID);
- -- Set the sigaction of the Interrupt to default (SIG_DFL).
pragma Inline (Install_Default_Action);
+ -- Set the sigaction of the Interrupt to default (SIG_DFL).
procedure Install_Ignore_Action (Interrupt : Interrupt_ID);
- -- Set the sigaction of the Interrupt to ignore (SIG_IGN).
pragma Inline (Install_Ignore_Action);
+ -- Set the sigaction of the Interrupt to ignore (SIG_IGN).
procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask);
- -- Get a Interrupt_Mask with all the interrupt masked
pragma Inline (Fill_Interrupt_Mask);
+ -- Get a Interrupt_Mask with all the interrupt masked
procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask);
- -- Get a Interrupt_Mask with all the interrupt unmasked
pragma Inline (Empty_Interrupt_Mask);
+ -- Get a Interrupt_Mask with all the interrupt unmasked
procedure Add_To_Interrupt_Mask
(Mask : access Interrupt_Mask;
Interrupt : Interrupt_ID);
- -- Mask the given interrupt in the Interrupt_Mask
pragma Inline (Add_To_Interrupt_Mask);
+ -- Mask the given interrupt in the Interrupt_Mask
procedure Delete_From_Interrupt_Mask
(Mask : access Interrupt_Mask;
Interrupt : Interrupt_ID);
- -- Unmask the given interrupt in the Interrupt_Mask
pragma Inline (Delete_From_Interrupt_Mask);
+ -- Unmask the given interrupt in the Interrupt_Mask
function Is_Member
(Mask : access Interrupt_Mask;
Interrupt : Interrupt_ID) return Boolean;
- -- See if a given interrupt is masked in the Interrupt_Mask
pragma Inline (Is_Member);
+ -- See if a given interrupt is masked in the Interrupt_Mask
procedure Copy_Interrupt_Mask (X : out Interrupt_Mask; Y : Interrupt_Mask);
- -- Assigment needed for limited private type Interrupt_Mask.
pragma Inline (Copy_Interrupt_Mask);
+ -- Assigment needed for limited private type Interrupt_Mask.
procedure Interrupt_Self_Process (Interrupt : Interrupt_ID);
- -- raise an Interrupt process-level
pragma Inline (Interrupt_Self_Process);
+ -- Raise an Interrupt process-level
-- 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.
+ -- 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
diff --git a/gcc/ada/s-rident.ads b/gcc/ada/s-rident.ads
index 50229e82e6c..e3bdbff6876 100644
--- a/gcc/ada/s-rident.ads
+++ b/gcc/ada/s-rident.ads
@@ -57,7 +57,7 @@ package System.Rident is
-- The following cases are checked for consistency in the binder
- (Boolean_Entry_Barriers, -- GNAT (Ravenscar)
+ (Simple_Barriers, -- GNAT (Ravenscar)
No_Abort_Statements, -- (RM D.7(5), H.4(3))
No_Access_Subprograms, -- (RM H.4(17))
No_Allocators, -- (RM H.4(7))
@@ -66,7 +66,7 @@ package System.Rident is
No_Delay, -- (RM H.4(21))
No_Direct_Boolean_Operators, -- GNAT
No_Dispatch, -- (RM H.4(19))
- No_Dynamic_Interrupts, -- GNAT
+ No_Dynamic_Attachment, -- GNAT
No_Dynamic_Priorities, -- (RM D.9(9))
No_Enumeration_Maps, -- GNAT
No_Entry_Calls_In_Elaboration_Code, -- GNAT
@@ -144,7 +144,7 @@ package System.Rident is
-- between different non-zero values.
Max_Asynchronous_Select_Nesting, -- (RM D.7(18), H.4(3))
- Max_Entry_Queue_Depth, -- GNAT
+ Max_Entry_Queue_Length, -- GNAT
-- The remaining entries are not checked at compile/bind time
@@ -154,19 +154,22 @@ package System.Rident is
-- Synonyms permitted for historical purposes of compatibility
- -- No_Requeue synonym for No_Requeue_Statements
- -- No_Task_Attributes synonym for No_Task_Attributes_Package
+ -- Boolean_Entry_Barriers synonym for Simple_Barriers
+ -- Max_Entry_Queue_Depth synonym for Max_Entry_Queue_Length
+ -- No_Dynamic_Interrupts synonym for No_Dynamic_Attachment
+ -- No_Requeue synonym for No_Requeue_Statements
+ -- No_Task_Attributes synonym for No_Task_Attributes_Package
subtype All_Restrictions is Restriction_Id range
- Boolean_Entry_Barriers .. Max_Storage_At_Blocking;
+ Simple_Barriers .. Max_Storage_At_Blocking;
-- All restrictions (excluding only Not_A_Restriction_Id)
subtype All_Boolean_Restrictions is Restriction_Id range
- Boolean_Entry_Barriers .. No_Elaboration_Code;
+ Simple_Barriers .. No_Elaboration_Code;
-- All restrictions which do not take a parameter
subtype Partition_Boolean_Restrictions is All_Boolean_Restrictions range
- Boolean_Entry_Barriers .. Static_Storage_Size;
+ Simple_Barriers .. Static_Storage_Size;
-- Boolean restrictions that are checked for partition consistency.
-- Note that all parameter restrictions are checked for partition
-- consistency by default, so this distinction is only needed in the
@@ -186,7 +189,7 @@ package System.Rident is
subtype Checked_Parameter_Restrictions is
All_Parameter_Restrictions range
- Max_Protected_Entries .. Max_Entry_Queue_Depth;
+ Max_Protected_Entries .. Max_Entry_Queue_Length;
-- These are the parameter restrictions that can be at least partially
-- checked at compile/binder time. Minimally, the compiler can detect
-- violations of a restriction pragma with a value of zero reliably.
@@ -213,7 +216,7 @@ package System.Rident is
subtype Checked_Zero_Parameter_Restrictions is
Checked_Parameter_Restrictions range
- Max_Asynchronous_Select_Nesting .. Max_Entry_Queue_Depth;
+ Max_Asynchronous_Select_Nesting .. Max_Entry_Queue_Length;
-- Restrictions with parameters where the compiler can detect the use of
-- the feature, and hence violations of a restriction specifying a value
-- of zero, but cannot detect specific values other than zero/nonzero.
diff --git a/gcc/ada/s-thread.ads b/gcc/ada/s-thread.ads
deleted file mode 100644
index 6798acbedbe..00000000000
--- a/gcc/ada/s-thread.ads
+++ /dev/null
@@ -1,150 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT COMPILER COMPONENTS --
--- --
--- S Y S T E M . T H R E A D S --
--- --
--- S p e c --
--- --
--- 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, 59 Temple Place - Suite 330, Boston, --
--- MA 02111-1307, 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 facilities to register a thread to the runtime,
--- and allocate its task specific datas.
-
--- This package is currently implemented for:
--- VxWorks AE653 rts-cert
--- VxWorks AE653 rts-full (not rts-kernel)
-
-with Ada.Exceptions;
--- used for Exception_Occurrence
-
-with System.Soft_Links;
--- used for TSD
-
-with Unchecked_Conversion;
-
-package System.Threads is
-
- subtype EO is Ada.Exceptions.Exception_Occurrence;
-
- subtype EOA is Ada.Exceptions.Exception_Occurrence_Access;
-
- type ATSD is limited private;
- -- Type of the Ada thread specific data. It contains datas needed
- -- by the GNAT runtime.
-
- type ATSD_Access is access ATSD;
- function From_Address is new Unchecked_Conversion (Address, ATSD_Access);
-
- -- Get/Set for the attributes of the current thread
-
- function Get_Jmpbuf_Address return Address;
- pragma Inline (Get_Jmpbuf_Address);
-
- procedure Set_Jmpbuf_Address (Addr : Address);
- pragma Inline (Set_Jmpbuf_Address);
-
- function Get_Sec_Stack_Addr return Address;
- pragma Inline (Get_Sec_Stack_Addr);
-
- procedure Set_Sec_Stack_Addr (Addr : Address);
- pragma Inline (Set_Sec_Stack_Addr);
-
- function Get_Current_Excep return EOA;
- pragma Inline (Get_Current_Excep);
-
- --------------------------
- -- Thread Body Handling --
- --------------------------
-
- -- The subprograms in this section are called by the expansion of a
- -- subprogram body to which a Thread_Body pragma has been applied:
-
- -- Given a subprogram body
-
- -- procedure xyz (params ....) is -- can also be a function
- -- <user declarations>
- -- begin
- -- <user statements>
- -- <user exception handlers>
- -- end xyz;
-
- -- The expansion resulting from use of the Thread_Body pragma is:
-
- -- procedure xyz (params ...) is
-
- -- _Secondary_Stack : aliased
- -- Storage_Elements.Storage_Array
- -- (1 .. Storage_Offset (Sec_Stack_Size));
- -- for _Secondary_Stack'Alignment use Standard'Maximum_Alignment;
-
- -- _Process_ATSD : aliased System.Threads.ATSD;
-
- -- begin
- -- System.Threads.Thread_Body_Enter;
- -- (_Secondary_Stack'Address,
- -- _Secondary_Stack'Length,
- -- _Process_ATSD'Address);
-
- -- declare
- -- <user declarations>
- -- begin
- -- <user statements>
- -- <user exception handlers>
- -- end;
-
- -- System.Threads.Thread_Body_Leave;
-
- -- exception
- -- when E : others =>
- -- System.Threads.Thread_Body_Exceptional_Exit (E);
- -- end;
-
- -- Note the exception handler is omitted if pragma Restriction
- -- No_Exception_Handlers is currently active.
-
- -- Note: the secondary stack size (Sec_Stack_Size) comes either from
- -- the pragma, if specified, or is the default value taken from
- -- the declaration in System.Secondary_Stack.
-
- procedure Thread_Body_Enter
- (Sec_Stack_Address : System.Address;
- Sec_Stack_Size : Natural;
- Process_ATSD_Address : System.Address);
- -- Enter thread body, see above for details
-
- procedure Thread_Body_Leave;
- -- Leave thread body (normally), see above for details
-
- procedure Thread_Body_Exceptional_Exit
- (EO : Ada.Exceptions.Exception_Occurrence);
- -- Leave thread body (abnormally on exception), see above for details
-
-private
-
- type ATSD is new System.Soft_Links.TSD;
-
-end System.Threads;
diff --git a/gcc/ada/scn.adb b/gcc/ada/scn.adb
index 0398551d5dd..5e8fbbf2298 100644
--- a/gcc/ada/scn.adb
+++ b/gcc/ada/scn.adb
@@ -26,7 +26,6 @@
with Atree; use Atree;
with Csets; use Csets;
-with Hostparm;
with Namet; use Namet;
with Opt; use Opt;
with Scans; use Scans;
@@ -99,13 +98,11 @@ package body Scn is
procedure Check_End_Of_Line is
Len : constant Int := Int (Scan_Ptr) - Int (Current_Line_Start);
-
begin
- if Len > Hostparm.Max_Line_Length then
- Error_Long_Line;
-
- elsif Style_Check then
+ if Style_Check then
Style.Check_Line_Terminator (Len);
+ elsif Len > Opt.Max_Line_Length then
+ Error_Long_Line;
end if;
end Check_End_Of_Line;
@@ -115,6 +112,7 @@ package body Scn is
function Determine_License return License_Type is
GPL_Found : Boolean := False;
+ Result : License_Type;
function Contains (S : String) return Boolean;
-- See if current comment contains successive non-blank characters
@@ -191,14 +189,17 @@ package body Scn is
or else Source (Scan_Ptr + 1) /= '-'
then
if GPL_Found then
- return GPL;
+ Result := GPL;
+ exit;
else
- return Unknown;
+ Result := Unknown;
+ exit;
end if;
elsif Contains ("Asaspecialexception") then
if GPL_Found then
- return Modified_GPL;
+ Result := Modified_GPL;
+ exit;
end if;
elsif Contains ("GNUGeneralPublicLicense") then
@@ -211,7 +212,8 @@ package body Scn is
Contains
("ThisspecificationisderivedfromtheAdaReferenceManual")
then
- return Unrestricted;
+ Result := Unrestricted;
+ exit;
end if;
Skip_EOL;
@@ -240,6 +242,8 @@ package body Scn is
end;
end if;
end loop;
+
+ return Result;
end Determine_License;
----------------------------
@@ -259,7 +263,7 @@ package body Scn is
begin
Error_Msg
("this line is too long",
- Current_Line_Start + Hostparm.Max_Line_Length);
+ Current_Line_Start + Source_Ptr (Opt.Max_Line_Length));
end Error_Long_Line;
------------------------
diff --git a/gcc/ada/scng.adb b/gcc/ada/scng.adb
index 93e340f54ac..92b3c74810d 100644
--- a/gcc/ada/scng.adb
+++ b/gcc/ada/scng.adb
@@ -26,7 +26,6 @@
with Csets; use Csets;
with Err_Vars; use Err_Vars;
-with Hostparm; use Hostparm;
with Namet; use Namet;
with Opt; use Opt;
with Scans; use Scans;
@@ -302,7 +301,14 @@ package body Scng is
if Style_Check and Style_Check_Max_Line_Length then
Style.Check_Line_Terminator (Len);
- elsif Len > Hostparm.Max_Line_Length then
+ -- If style checking is inactive, check maximum line length against
+ -- standard value. Note that we take this from Opt.Max_Line_Length
+ -- rather than Hostparm.Max_Line_Length because we do not want to
+ -- impose any limit during scanning of configuration pragma files,
+ -- and Opt.Max_Line_Length (normally set to Hostparm.Max_Line_Length)
+ -- is reset to Column_Number'Max during scanning of such files.
+
+ elsif Len > Opt.Max_Line_Length then
Error_Long_Line;
end if;
end Check_End_Of_Line;
@@ -359,7 +365,7 @@ package body Scng is
begin
Error_Msg
("this line is too long",
- Current_Line_Start + Hostparm.Max_Line_Length);
+ Current_Line_Start + Source_Ptr (Opt.Max_Line_Length));
end Error_Long_Line;
-------------------------------
diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb
index e9d63ee2562..e5646e7f338 100644
--- a/gcc/ada/sem_aggr.adb
+++ b/gcc/ada/sem_aggr.adb
@@ -212,7 +212,7 @@ package body Sem_Aggr is
-- This procedure performs the semantic checks for an array aggregate.
-- True is returned if the aggregate resolution succeeds.
-- The procedure works by recursively checking each nested aggregate.
- -- Specifically, after checking a sub-aggreate nested at the i-th level
+ -- Specifically, after checking a sub-aggregate nested at the i-th level
-- we recursively check all the subaggregates at the i+1-st level (if any).
-- Note that for aggregates analysis and resolution go hand in hand.
-- Aggregate analysis has been delayed up to here and it is done while
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index ffb0a2706dc..afe954e71ac 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -4820,19 +4820,9 @@ package body Sem_Attr is
--------------
when Attribute_Definite =>
- declare
- Result : Node_Id;
-
- begin
- if Is_Indefinite_Subtype (P_Entity) then
- Result := New_Occurrence_Of (Standard_False, Loc);
- else
- Result := New_Occurrence_Of (Standard_True, Loc);
- end if;
-
- Rewrite (N, Result);
- Analyze_And_Resolve (N, Standard_Boolean);
- end;
+ Rewrite (N, New_Occurrence_Of (
+ Boolean_Literals (not Is_Indefinite_Subtype (P_Entity)), Loc));
+ Analyze_And_Resolve (N, Standard_Boolean);
------------
-- Denorm --
@@ -4961,19 +4951,9 @@ package body Sem_Attr is
-----------------------
when Attribute_Has_Discriminants =>
- declare
- Result : Node_Id;
-
- begin
- if Has_Discriminants (P_Entity) then
- Result := New_Occurrence_Of (Standard_True, Loc);
- else
- Result := New_Occurrence_Of (Standard_False, Loc);
- end if;
-
- Rewrite (N, Result);
- Analyze_And_Resolve (N, Standard_Boolean);
- end;
+ Rewrite (N, New_Occurrence_Of (
+ Boolean_Literals (Has_Discriminants (P_Entity)), Loc));
+ Analyze_And_Resolve (N, Standard_Boolean);
--------------
-- Identity --
@@ -5896,7 +5876,7 @@ package body Sem_Attr is
Id : RE_Id;
begin
- if Is_RTE (P_Root_Type, RE_Address) then
+ if Is_Descendent_Of_Address (Typ) then
Id := RE_Type_Class_Address;
elsif Is_Enumeration_Type (Typ) then
@@ -5962,13 +5942,10 @@ package body Sem_Attr is
Typ : constant Entity_Id := Underlying_Type (P_Type);
begin
- if Is_Array_Type (P_Type)
- and then not Is_Constrained (Typ)
- then
- Rewrite (N, New_Occurrence_Of (Standard_True, Loc));
- else
- Rewrite (N, New_Occurrence_Of (Standard_False, Loc));
- end if;
+ Rewrite (N, New_Occurrence_Of (
+ Boolean_Literals (
+ Is_Array_Type (P_Type)
+ and then not Is_Constrained (Typ)), Loc));
-- Analyze and resolve as boolean, note that this attribute is
-- a static attribute in GNAT.
diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb
index c821c7c2fc0..9c0da7f97f7 100644
--- a/gcc/ada/sem_ch10.adb
+++ b/gcc/ada/sem_ch10.adb
@@ -511,7 +511,7 @@ package body Sem_Ch10 is
end;
end if;
- -- Generate distribution stub files if requested and no error
+ -- Generate distribution stubs if requested and no error
if N = Main_Cunit
and then (Distribution_Stub_Mode = Generate_Receiver_Stub_Body
@@ -546,9 +546,6 @@ package body Sem_Ch10 is
Add_Stub_Constructs (N);
end if;
- -- Reanalyze the unit with the new constructs
-
- Analyze (Unit_Node);
end if;
if Nkind (Unit_Node) = N_Package_Declaration
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index e89041a0eb7..69e324b0a7f 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -45,6 +45,7 @@ with Snames; use Snames;
with Stand; use Stand;
with Sinfo; use Sinfo;
with Table;
+with Targparm; use Targparm;
with Ttypes; use Ttypes;
with Tbuild; use Tbuild;
with Urealp; use Urealp;
@@ -1398,6 +1399,10 @@ package body Sem_Ch13 is
-- Return true if the entity is a procedure with an
-- appropriate profile for the write attribute.
+ ----------------------
+ -- Has_Good_Profile --
+ ----------------------
+
function Has_Good_Profile (Subp : Entity_Id) return Boolean is
F : Entity_Id;
Ok : Boolean := False;
@@ -2699,8 +2704,19 @@ package body Sem_Ch13 is
end if;
end if;
- when N_Integer_Literal |
- N_Real_Literal |
+ when N_Integer_Literal =>
+
+ -- If this is a rewritten unchecked conversion, in a system
+ -- where Address is an integer type, always use the base type
+ -- for a literal value. This is user-friendly and prevents
+ -- order-of-elaboration issues with instances of unchecked
+ -- conversion.
+
+ if Nkind (Original_Node (Nod)) = N_Function_Call then
+ Set_Etype (Nod, Base_Type (Etype (Nod)));
+ end if;
+
+ when N_Real_Literal |
N_String_Literal |
N_Character_Literal =>
return;
@@ -3068,10 +3084,19 @@ package body Sem_Ch13 is
then
return 0;
- -- Access types
+ -- Access types. Normally an access type cannot have a size smaller
+ -- than the size of System.Address. The exception is on VMS, where
+ -- we have short and long addresses, and it is possible for an access
+ -- type to have a short address size (and thus be less than the size
+ -- of System.Address itself). We simply skip the check for VMS, and
+ -- leave the back end to do the check.
elsif Is_Access_Type (T) then
- return System_Address_Size;
+ if OpenVMS_On_Target then
+ return 0;
+ else
+ return System_Address_Size;
+ end if;
-- Floating-point types
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 1b4f7e316a9..a800768af5b 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -734,9 +734,12 @@ package body Sem_Ch3 is
-- discriminant, in a private or a full type declaration. In
-- the case of a subprogram, If the designated type is incomplete,
-- the operation will be a primitive operation of the full type, to
- -- be updated subsequently.
+ -- be updated subsequently. If the type is imported through a limited
+ -- with clause, it is not a primitive operation of the type (which
+ -- is declared elsewhere in some other scope).
if Ekind (Desig_Type) = E_Incomplete_Type
+ and then not From_With_Type (Desig_Type)
and then Is_Overloadable (Current_Scope)
then
Append_Elmt (Current_Scope, Private_Dependents (Desig_Type));
@@ -9988,7 +9991,7 @@ package body Sem_Ch3 is
Defining_Identifier => T,
Subtype_Indication => Relocate_Node (Obj_Def)));
- -- This subtype may need freezing and it will not be done
+ -- This subtype may need freezing, and this will not be done
-- automatically if the object declaration is not in a
-- declarative part. Since this is an object declaration, the
-- type cannot always be frozen here. Deferred constants do not
@@ -10125,7 +10128,7 @@ package body Sem_Ch3 is
elsif Can_Derive_From (Standard_Long_Long_Float) then
Base_Typ := Standard_Long_Long_Float;
- -- If we can't derive from any existing type, use long long float
+ -- If we can't derive from any existing type, use long_long_float
-- and give appropriate message explaining the problem.
else
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb
index cce3e09c7c8..4f9383142e5 100644
--- a/gcc/ada/sem_ch4.adb
+++ b/gcc/ada/sem_ch4.adb
@@ -30,7 +30,9 @@ with Debug; use Debug;
with Einfo; use Einfo;
with Errout; use Errout;
with Exp_Util; use Exp_Util;
+with Fname; use Fname;
with Itypes; use Itypes;
+with Lib; use Lib;
with Lib.Xref; use Lib.Xref;
with Namet; use Namet;
with Nlists; use Nlists;
@@ -4344,22 +4346,68 @@ package body Sem_Ch4 is
--------------------------------
procedure Remove_Abstract_Operations (N : Node_Id) is
- I : Interp_Index;
- It : Interp;
- Abstract_Op : Entity_Id := Empty;
+ I : Interp_Index;
+ It : Interp;
+ Abstract_Op : Entity_Id := Empty;
-- AI-310: If overloaded, remove abstract non-dispatching
- -- operations.
+ -- operations. We activate this if either extensions are
+ -- enabled, or if the abstract operation in question comes
+ -- from a predefined file. This latter test allows us to
+ -- use abstract to make operations invisible to users. In
+ -- particular, if type Address is non-private and abstract
+ -- subprograms are used to hide its operators, they will be
+ -- truly hidden.
+
+ type Operand_Position is (First_Op, Second_Op);
+
+ procedure Remove_Address_Interpretations (Op : Operand_Position);
+ -- Ambiguities may arise when the operands are literal and the
+ -- address operations in s-auxdec are visible. In that case, remove
+ -- the interpretation of a literal as Address, to retain the semantics
+ -- of Address as a private type.
+
+ ------------------------------------
+ -- Remove_Address_Interpretations --
+ ------------------------------------
+
+ procedure Remove_Address_Interpretations (Op : Operand_Position) is
+ Formal : Entity_Id;
+
+ begin
+ if Is_Overloaded (N) then
+ Get_First_Interp (N, I, It);
+ while Present (It.Nam) loop
+ Formal := First_Entity (It.Nam);
+
+ if Op = Second_Op then
+ Formal := Next_Entity (Formal);
+ end if;
+
+ if Is_Descendent_Of_Address (Etype (Formal)) then
+ Remove_Interp (I);
+ end if;
+
+ Get_Next_Interp (I, It);
+ end loop;
+ end if;
+ end Remove_Address_Interpretations;
+
+ -- Start of processing for Remove_Abstract_Operations
begin
- if Extensions_Allowed
- and then Is_Overloaded (N)
- then
+ if Is_Overloaded (N) then
Get_First_Interp (N, I, It);
+
while Present (It.Nam) loop
if not Is_Type (It.Nam)
and then Is_Abstract (It.Nam)
and then not Is_Dispatching_Operation (It.Nam)
+ and then
+ (Extensions_Allowed
+ or else Is_Predefined_File_Name
+ (Unit_File_Name (Get_Source_Unit (It.Nam))))
+
then
Abstract_Op := It.Nam;
Remove_Interp (I);
@@ -4369,34 +4417,43 @@ package body Sem_Ch4 is
Get_Next_Interp (I, It);
end loop;
- -- Remove corresponding predefined operator, which is
- -- always added to the overload set, unless it is a universal
- -- operation.
-
if No (Abstract_Op) then
return;
elsif Nkind (N) in N_Op then
- if Nkind (N) in N_Unary_Op
- and then Present (Universal_Interpretation (Right_Opnd (N)))
- then
- return;
+ -- Remove interpretations that treat literals as addresses.
+ -- This is never appropriate.
- elsif Nkind (N) in N_Binary_Op
- and then Present (Universal_Interpretation (Right_Opnd (N)))
- and then Present (Universal_Interpretation (Left_Opnd (N)))
- then
- return;
+ if Nkind (N) in N_Binary_Op then
+ declare
+ U1 : constant Boolean :=
+ Present (Universal_Interpretation (Right_Opnd (N)));
+ U2 : constant Boolean :=
+ Present (Universal_Interpretation (Left_Opnd (N)));
- else
- Get_First_Interp (N, I, It);
- while Present (It.Nam) loop
- if Scope (It.Nam) = Standard_Standard then
- Remove_Interp (I);
+ begin
+ if U1 and then not U2 then
+ Remove_Address_Interpretations (Second_Op);
+
+ elsif U2 and then not U1 then
+ Remove_Address_Interpretations (First_Op);
end if;
- Get_Next_Interp (I, It);
- end loop;
+ if not (U1 and U2) then
+
+ -- Remove corresponding predefined operator, which is
+ -- always added to the overload set.
+
+ Get_First_Interp (N, I, It);
+ while Present (It.Nam) loop
+ if Scope (It.Nam) = Standard_Standard then
+ Remove_Interp (I);
+ end if;
+
+ Get_Next_Interp (I, It);
+ end loop;
+ end if;
+ end;
end if;
elsif Nkind (N) = N_Function_Call
@@ -4407,21 +4464,29 @@ package body Sem_Ch4 is
and then
Nkind (Selector_Name (Name (N))) = N_Operator_Symbol))
then
+
declare
Arg1 : constant Node_Id := First (Parameter_Associations (N));
+ U1 : constant Boolean :=
+ Present (Universal_Interpretation (Arg1));
+ U2 : constant Boolean :=
+ Present (Next (Arg1)) and then
+ Present (Universal_Interpretation (Next (Arg1)));
begin
- if Present (Universal_Interpretation (Arg1))
- and then
- (No (Next (Arg1))
- or else Present (Universal_Interpretation (Next (Arg1))))
- then
- return;
+ if U1 and then not U2 then
+ Remove_Address_Interpretations (First_Op);
- else
+ elsif U2 and then not U1 then
+ Remove_Address_Interpretations (Second_Op);
+ end if;
+
+ if not (U1 and U2) then
Get_First_Interp (N, I, It);
while Present (It.Nam) loop
- if Scope (It.Nam) = Standard_Standard then
+ if Scope (It.Nam) = Standard_Standard
+ and then It.Typ = Base_Type (Etype (Abstract_Op))
+ then
Remove_Interp (I);
end if;
@@ -4432,7 +4497,7 @@ package body Sem_Ch4 is
end if;
-- If the removal has left no valid interpretations, emit
- -- error message now an label node as illegal.
+ -- error message now and label node as illegal.
if Present (Abstract_Op) then
Get_First_Interp (N, I, It);
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 340eae79e51..89512b51c7e 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -88,6 +88,8 @@ package body Sem_Ch6 is
-- subsequenty used for inline expansions at call sites. If subprogram can
-- be inlined (depending on size and nature of local declarations) this
-- function returns true. Otherwise subprogram body is treated normally.
+ -- If proper warnings are enabled and the subprogram contains a construct
+ -- that cannot be inlined, the offending construct is flagged accordingly.
type Conformance_Type is
(Type_Conformant, Mode_Conformant, Subtype_Conformant, Fully_Conformant);
@@ -2986,6 +2988,17 @@ package body Sem_Ch6 is
or else not Is_Generic_Actual_Type (T2)
or else Scope (T1) /= Scope (T2);
+ -- In some cases a type imported through a limited_with clause,
+ -- and its non-limited view are both visible, for example in an
+ -- anonymous access_to_classwide type in a formal. Both entities
+ -- designate the same type.
+
+ elsif From_With_Type (T1)
+ and then Ekind (T1) = E_Incomplete_Type
+ and then T2 = Non_Limited_View (T1)
+ then
+ return True;
+
else
return False;
end if;
@@ -4586,8 +4599,9 @@ package body Sem_Ch6 is
end if;
-- In any case the implicit operation remains hidden by
- -- the existing declaration.
+ -- the existing declaration, which is overriding.
+ Set_Is_Overriding_Operation (E);
return;
-- Within an instance, the renaming declarations for
diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb
index 4c538b0ff40..5c85af2d600 100644
--- a/gcc/ada/sem_disp.adb
+++ b/gcc/ada/sem_disp.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
+-- 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- --
@@ -41,6 +41,7 @@ with Sem_Ch6; use Sem_Ch6;
with Sem_Eval; use Sem_Eval;
with Sem_Util; use Sem_Util;
with Snames; use Snames;
+with Stand; use Stand;
with Sinfo; use Sinfo;
with Uintp; use Uintp;
@@ -423,6 +424,27 @@ package body Sem_Disp is
Has_Dispatching_Parent : Boolean := False;
Body_Is_Last_Primitive : Boolean := False;
+ function Is_Visibly_Controlled (T : Entity_Id) return Boolean;
+ -- Check whether T is derived from a visibly controlled type.
+ -- This is true if the root type is declared in Ada.Finalization.
+ -- If T is derived instead from a private type whose full view
+ -- is controlled, an explicit Initialize/Adjust/Finalize subprogram
+ -- does not override the inherited one.
+
+ ---------------------------
+ -- Is_Visibly_Controlled --
+ ---------------------------
+
+ function Is_Visibly_Controlled (T : Entity_Id) return Boolean is
+ Root : constant Entity_Id := Root_Type (T);
+ begin
+ return Chars (Scope (Root)) = Name_Finalization
+ and then Chars (Scope (Scope (Root))) = Name_Ada
+ and then Scope (Scope (Scope (Root))) = Standard_Standard;
+ end Is_Visibly_Controlled;
+
+ -- Start of processing for Check_Dispatching_Operation
+
begin
if Ekind (Subp) /= E_Procedure and then Ekind (Subp) /= E_Function then
return;
@@ -595,8 +617,19 @@ package body Sem_Disp is
if Present (Old_Subp) then
Check_Subtype_Conformant (Subp, Old_Subp);
- Override_Dispatching_Operation (Tagged_Type, Old_Subp, Subp);
- Set_Is_Overriding_Operation (Subp);
+ if (Chars (Subp) = Name_Initialize
+ or else Chars (Subp) = Name_Adjust
+ or else Chars (Subp) = Name_Finalize)
+ and then Is_Controlled (Tagged_Type)
+ and then not Is_Visibly_Controlled (Tagged_Type)
+ then
+ Set_Is_Overriding_Operation (Subp, False);
+ Error_Msg_NE
+ ("operation does not override inherited&?", Subp, Subp);
+ else
+ Override_Dispatching_Operation (Tagged_Type, Old_Subp, Subp);
+ Set_Is_Overriding_Operation (Subp);
+ end if;
else
Add_Dispatching_Operation (Tagged_Type, Subp);
end if;
diff --git a/gcc/ada/sem_dist.adb b/gcc/ada/sem_dist.adb
index 5ce3fb3284b..c48361092fe 100644
--- a/gcc/ada/sem_dist.adb
+++ b/gcc/ada/sem_dist.adb
@@ -332,19 +332,12 @@ package body Sem_Dist is
RS_Pkg_Specif := Parent (Remote_Subp_Decl);
RS_Pkg_E := Defining_Entity (RS_Pkg_Specif);
- if Ekind (Remote_Subp) = E_Procedure
- and then Is_Asynchronous (Remote_Subp)
- then
- Async_E := Standard_True;
- else
- Async_E := Standard_False;
- end if;
+ Async_E :=
+ Boolean_Literals (Ekind (Remote_Subp) = E_Procedure
+ and then Is_Asynchronous (Remote_Subp));
- if Has_All_Calls_Remote (RS_Pkg_E) then
- All_Calls_Remote_E := Standard_True;
- else
- All_Calls_Remote_E := Standard_False;
- end if;
+ All_Calls_Remote_E :=
+ Boolean_Literals (Has_All_Calls_Remote (RS_Pkg_E));
Local_Addr :=
Make_Attribute_Reference (Loc,
diff --git a/gcc/ada/sem_elim.adb b/gcc/ada/sem_elim.adb
index 9f138ebf7ce..cb07a921c87 100644
--- a/gcc/ada/sem_elim.adb
+++ b/gcc/ada/sem_elim.adb
@@ -24,19 +24,21 @@
-- --
------------------------------------------------------------------------------
-with Atree; use Atree;
-with Einfo; use Einfo;
-with Errout; use Errout;
-with Namet; use Namet;
-with Nlists; use Nlists;
-with Sinput; use Sinput;
-with Sinfo; use Sinfo;
-with Snames; use Snames;
-with Stand; use Stand;
-with Stringt; use Stringt;
+with Atree; use Atree;
+with Einfo; use Einfo;
+with Errout; use Errout;
+with Namet; use Namet;
+with Nlists; use Nlists;
+with Sem_Prag; use Sem_Prag;
+with Sinput; use Sinput;
+with Sinfo; use Sinfo;
+with Snames; use Snames;
+with Stand; use Stand;
+with Stringt; use Stringt;
with Table;
with GNAT.HTable; use GNAT.HTable;
+
package body Sem_Elim is
No_Elimination : Boolean;
@@ -774,15 +776,11 @@ package body Sem_Elim is
Data.Entity_Scope (1) := Chars (Arg_Ent);
- elsif Nkind (Arg_Entity) = N_String_Literal then
- String_To_Name_Buffer (Strval (Arg_Entity));
+ elsif Is_Config_Static_String (Arg_Entity) then
Data.Entity_Name := Name_Find;
Data.Entity_Node := Arg_Entity;
else
- Error_Msg_N
- ("wrong form for Entity_Argument parameter of pragma%",
- Arg_Unit_Name);
return;
end if;
else
@@ -794,12 +792,33 @@ package body Sem_Elim is
if Present (Arg_Parameter_Types) then
- -- Case of one name, which looks like a parenthesized literal
- -- rather than an aggregate.
+ -- Here for aggregate case
- if Nkind (Arg_Parameter_Types) = N_String_Literal
- and then Paren_Count (Arg_Parameter_Types) = 1
- then
+ if Nkind (Arg_Parameter_Types) = N_Aggregate then
+ Data.Parameter_Types :=
+ new Names
+ (1 .. List_Length (Expressions (Arg_Parameter_Types)));
+
+ Lit := First (Expressions (Arg_Parameter_Types));
+ for J in Data.Parameter_Types'Range loop
+ if Is_Config_Static_String (Lit) then
+ Data.Parameter_Types (J) := Name_Find;
+ Next (Lit);
+ else
+ return;
+ end if;
+ end loop;
+
+ -- Otherwise we must have case of one name, which looks like a
+ -- parenthesized literal rather than an aggregate.
+
+ elsif Paren_Count (Arg_Parameter_Types) /= 1 then
+ Error_Msg_N
+ ("wrong form for argument of pragma Eliminate",
+ Arg_Parameter_Types);
+ return;
+
+ elsif Is_Config_Static_String (Arg_Parameter_Types) then
String_To_Name_Buffer (Strval (Arg_Parameter_Types));
if Name_Len = 0 then
@@ -812,53 +831,21 @@ package body Sem_Elim is
Data.Parameter_Types := new Names'(1 => Name_Find);
end if;
- -- Otherwise must be an aggregate
-
- elsif Nkind (Arg_Parameter_Types) /= N_Aggregate
- or else Present (Component_Associations (Arg_Parameter_Types))
- or else No (Expressions (Arg_Parameter_Types))
- then
- Error_Msg_N
- ("Parameter_Types for pragma% must be list of string literals",
- Arg_Parameter_Types);
- return;
-
- -- Here for aggregate case
-
else
- Data.Parameter_Types :=
- new Names
- (1 .. List_Length (Expressions (Arg_Parameter_Types)));
-
- Lit := First (Expressions (Arg_Parameter_Types));
- for J in Data.Parameter_Types'Range loop
- if Nkind (Lit) /= N_String_Literal then
- Error_Msg_N
- ("parameter types for pragma% must be string literals",
- Lit);
- return;
- end if;
-
- String_To_Name_Buffer (Strval (Lit));
- Data.Parameter_Types (J) := Name_Find;
- Next (Lit);
- end loop;
+ return;
end if;
end if;
-- Process Result_Types argument
if Present (Arg_Result_Type) then
-
- if Nkind (Arg_Result_Type) /= N_String_Literal then
- Error_Msg_N
- ("Result_Type argument for pragma% must be string literal",
- Arg_Result_Type);
+ if Is_Config_Static_String (Arg_Result_Type) then
+ Data.Result_Type := Name_Find;
+ else
return;
end if;
- String_To_Name_Buffer (Strval (Arg_Result_Type));
- Data.Result_Type := Name_Find;
+ -- Here if no Result_Types argument
else
Data.Result_Type := No_Name;
@@ -867,17 +854,11 @@ package body Sem_Elim is
-- Process Source_Location argument
if Present (Arg_Source_Location) then
-
- if Nkind (Arg_Source_Location) /= N_String_Literal then
- Error_Msg_N
- ("Source_Location argument for pragma% must be string literal",
- Arg_Source_Location);
+ if Is_Config_Static_String (Arg_Source_Location) then
+ Data.Source_Location := Name_Find;
+ else
return;
end if;
-
- String_To_Name_Buffer (Strval (Arg_Source_Location));
- Data.Source_Location := Name_Find;
-
else
Data.Source_Location := No_Name;
end if;
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index 7dcf2787101..5ab5bdeed45 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -888,7 +888,7 @@ package body Sem_Prag is
("argument of pragma% must be entity name", Arg1);
elsif Prag_Id = Pragma_Interrupt_Handler then
- Check_Restriction (No_Dynamic_Interrupts, N);
+ Check_Restriction (No_Dynamic_Attachment, N);
end if;
declare
@@ -3276,10 +3276,61 @@ package body Sem_Prag is
Error_Pragma_Arg
("invalid form for restriction", Arg);
+ -- Deal with synonyms. This should be done more cleanly ???
+
else
+ -- Boolean_Entry_Barriers is a synonym of Simple_Barriers
+
+ if Chars (Expr) = Name_Boolean_Entry_Barriers then
+ Check_Restriction
+ (No_Implementation_Restrictions, Arg);
+ Set_Restriction (Simple_Barriers, N);
+ Set_Warning (Simple_Barriers);
+
+ -- Max_Entry_Queue_Depth is a synonym of
+ -- Max_Entry_Queue_Length
+
+ elsif Chars (Expr) = Name_Max_Entry_Queue_Depth then
+ Analyze_And_Resolve (Expr, Any_Integer);
+
+ if not Is_OK_Static_Expression (Expr) then
+ Flag_Non_Static_Expr
+ ("value must be static expression!", Expr);
+ raise Pragma_Exit;
+
+ elsif not Is_Integer_Type (Etype (Expr))
+ or else Expr_Value (Expr) < 0
+ then
+ Error_Pragma_Arg
+ ("value must be non-negative integer", Arg);
+
+ -- Restriction pragma is active
+
+ else
+ Val := Expr_Value (Expr);
+
+ if not UI_Is_In_Int_Range (Val) then
+ Error_Pragma_Arg
+ ("pragma ignored, value too large?", Arg);
+ else
+ Set_Restriction (Max_Entry_Queue_Length, N,
+ Integer (UI_To_Int (Val)));
+ Set_Warning (Max_Entry_Queue_Length);
+ end if;
+ end if;
+
+ -- No_Dynamic_Interrupts is a synonym for
+ -- No_Dynamic_Attachment
+
+ elsif Chars (Expr) = Name_No_Dynamic_Interrupts then
+ Check_Restriction
+ (No_Implementation_Restrictions, Arg);
+ Set_Restriction (No_Dynamic_Attachment, N);
+ Set_Warning (No_Dynamic_Attachment);
+
-- No_Requeue is a synonym for No_Requeue_Statements
- if Chars (Expr) = Name_No_Requeue then
+ elsif Chars (Expr) = Name_No_Requeue then
Check_Restriction
(No_Implementation_Restrictions, Arg);
Set_Restriction (No_Requeue_Statements, N);
@@ -9865,7 +9916,6 @@ package body Sem_Prag is
when Unknown_Pragma =>
raise Program_Error;
-
end case;
exception
@@ -9897,7 +9947,7 @@ package body Sem_Prag is
and then
(Is_Generic_Instance (Result)
or else Nkind (Parent (Declaration_Node (Result))) =
- N_Subprogram_Renaming_Declaration)
+ N_Subprogram_Renaming_Declaration)
and then Present (Alias (Result))
loop
Result := Alias (Result);
@@ -9906,6 +9956,65 @@ package body Sem_Prag is
return Result;
end Get_Base_Subprogram;
+ -----------------------------
+ -- Is_Config_Static_String --
+ -----------------------------
+
+ function Is_Config_Static_String (Arg : Node_Id) return Boolean is
+
+ function Add_Config_Static_String (Arg : Node_Id) return Boolean;
+ -- This is an internal recursive function that is just like the
+ -- outer function except that it adds the string to the name buffer
+ -- rather than placing the string in the name buffer.
+
+ ------------------------------
+ -- Add_Config_Static_String --
+ ------------------------------
+
+ function Add_Config_Static_String (Arg : Node_Id) return Boolean is
+ N : Node_Id;
+ C : Char_Code;
+
+ begin
+ N := Arg;
+
+ if Nkind (N) = N_Op_Concat then
+ if Add_Config_Static_String (Left_Opnd (N)) then
+ N := Right_Opnd (N);
+ else
+ return False;
+ end if;
+ end if;
+
+ if Nkind (N) /= N_String_Literal then
+ Error_Msg_N ("string literal expected for pragma argument", N);
+ return False;
+
+ else
+ for J in 1 .. String_Length (Strval (N)) loop
+ C := Get_String_Char (Strval (N), J);
+
+ if not In_Character_Range (C) then
+ Error_Msg
+ ("string literal contains invalid wide character",
+ Sloc (N) + 1 + Source_Ptr (J));
+ return False;
+ end if;
+
+ Add_Char_To_Name_Buffer (Get_Character (C));
+ end loop;
+ end if;
+
+ return True;
+ end Add_Config_Static_String;
+
+ -- Start of prorcessing for Is_Config_Static_String
+
+ begin
+ Name_Len := 0;
+ return Add_Config_Static_String (Arg);
+ end Is_Config_Static_String;
+
-----------------------------------------
-- Is_Non_Significant_Pragma_Reference --
-----------------------------------------
diff --git a/gcc/ada/sem_prag.ads b/gcc/ada/sem_prag.ads
index 9ff4ede80a2..fe5cd93320a 100644
--- a/gcc/ada/sem_prag.ads
+++ b/gcc/ada/sem_prag.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2002 Free Software Foundation, Inc. --
+-- 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- --
@@ -59,6 +59,17 @@ package Sem_Prag is
-- 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.
+
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
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index 9799860cf13..275e9584993 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -4487,7 +4487,7 @@ package body Sem_Res is
-- call at all violates a specified nesting depth of zero.
if Is_Protected_Type (Scope (Nam)) then
- Check_Restriction (Max_Entry_Queue_Depth, N);
+ Check_Restriction (Max_Entry_Queue_Length, N);
end if;
-- Use context type to disambiguate a protected function that can be
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index f005c75151a..263e701e11d 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -42,6 +42,7 @@ with Nmake; use Nmake;
with Output; use Output;
with Opt; use Opt;
with Restrict; use Restrict;
+with Rtsfind; use Rtsfind;
with Scans; use Scans;
with Scn; use Scn;
with Sem; use Sem;
@@ -135,9 +136,10 @@ package body Sem_Util is
Rtyp := Typ;
end if;
- if No (Compile_Time_Constraint_Error (N, Msg, Ent, Loc, Warn => Warn))
- or else not Rep
- then
+ Discard_Node (
+ Compile_Time_Constraint_Error (N, Msg, Ent, Loc, Warn => Warn));
+
+ if not Rep then
return;
end if;
@@ -3308,9 +3310,21 @@ package body Sem_Util is
P_Aliased := True;
end if;
+ -- A discriminant check on a selected component may be
+ -- expanded into a dereference when removing side-effects.
+ -- Recover the original node and its type, which may be
+ -- unconstrained.
+
+ elsif Nkind (P) = N_Explicit_Dereference
+ and then not (Comes_From_Source (P))
+ then
+ P := Original_Node (P);
+ Prefix_Type := Etype (P);
+
else
-- Check for prefix being an aliased component ???
null;
+
end if;
if Is_Access_Type (Prefix_Type)
@@ -3380,6 +3394,88 @@ package body Sem_Util is
and then Prefix (P) = N;
end Is_Dereferenced;
+ ----------------------
+ -- Is_Descendent_Of --
+ ----------------------
+
+ function Is_Descendent_Of (T1 : Entity_Id; T2 : Entity_Id) return Boolean is
+ T : Entity_Id;
+ Etyp : Entity_Id;
+
+ begin
+ pragma Assert (Nkind (T1) in N_Entity);
+ pragma Assert (Nkind (T2) in N_Entity);
+
+ T := Base_Type (T1);
+
+ -- Immediate return if the types match
+
+ if T = T2 then
+ return True;
+
+ -- Comment needed here ???
+
+ elsif Ekind (T) = E_Class_Wide_Type then
+ return Etype (T) = T2;
+
+ -- All other cases
+
+ else
+ loop
+ Etyp := Etype (T);
+
+ -- Done if we found the type we are looking for
+
+ if Etyp = T2 then
+ return True;
+
+ -- Done if no more derivations to check
+
+ elsif T = T1 then
+ return False;
+
+ -- Following test catches error cases resulting from prev errors
+
+ elsif No (Etyp) then
+ return False;
+
+ elsif Is_Private_Type (T) and then Etyp = Full_View (T) then
+ return False;
+
+ elsif Is_Private_Type (Etyp) and then Full_View (Etyp) = T then
+ return False;
+ end if;
+
+ -- Return if no further entries to check
+
+ if T = Base_Type (T1) or else T = T1 then
+ return False;
+ end if;
+ end loop;
+ end if;
+
+ raise Program_Error;
+ end Is_Descendent_Of;
+
+ ------------------------------
+ -- Is_Descendent_Of_Address --
+ ------------------------------
+
+ function Is_Descendent_Of_Address (T1 : Entity_Id) return Boolean is
+ begin
+ -- If Address has not been loaded, answer must be False
+
+ if not RTU_Loaded (System) then
+ return False;
+
+ -- Otherwise we can get the entity we are interested in without
+ -- causing an unwanted dependency on System, and do the test.
+
+ else
+ return Is_Descendent_Of (T1, Base_Type (RTE (RE_Address)));
+ end if;
+ end Is_Descendent_Of_Address;
+
--------------
-- Is_False --
--------------
@@ -5505,11 +5601,8 @@ package body Sem_Util is
function Rep_To_Pos_Flag (E : Entity_Id; Loc : Source_Ptr) return Node_Id is
begin
- if Range_Checks_Suppressed (E) then
- return New_Occurrence_Of (Standard_False, Loc);
- else
- return New_Occurrence_Of (Standard_True, Loc);
- end if;
+ return New_Occurrence_Of
+ (Boolean_Literals (not Range_Checks_Suppressed (E)), Loc);
end Rep_To_Pos_Flag;
--------------------
diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads
index 9a35d8db75b..d85c35c1e88 100644
--- a/gcc/ada/sem_util.ads
+++ b/gcc/ada/sem_util.ads
@@ -259,28 +259,28 @@ package Sem_Util is
Governed_By : List_Id;
Into : Elist_Id;
Report_Errors : out Boolean);
- -- The purpose of this procedure is to gather the valid components
- -- in a record type according to the values of its discriminants, in order
- -- to validate the components of a record aggregate.
+ -- The purpose of this procedure is to gather the valid components in a
+ -- record type according to the values of its discriminants, in order to
+ -- validate the components of a record aggregate.
--
-- Typ is the type of the aggregate when its constrained discriminants
-- need to be collected, otherwise it is Empty.
--
-- Comp_List is an N_Component_List node.
--
- -- Governed_By is a list of N_Component_Association nodes,
- -- where each choice list contains the name of a discriminant and
- -- the expression field gives its value. The values of the
- -- discriminants governing the (possibly nested) variant parts in
- -- Comp_List are found in this Component_Association List.
+ -- Governed_By is a list of N_Component_Association nodes, where each
+ -- choice list contains the name of a discriminant and the expression
+ -- field gives its value. The values of the discriminants governing
+ -- the (possibly nested) variant parts in Comp_List are found in this
+ -- Component_Association List.
--
- -- Into is the list where the valid components are appended.
- -- Note that Into need not be an Empty list. If it's not, components
- -- are attached to its tail.
+ -- Into is the list where the valid components are appended. Note that
+ -- Into need not be an Empty list. If it's not, components are attached
+ -- to its tail.
+ --
+ -- Report_Errors is set to True if the values of the discriminants are
+ -- non-static.
--
- -- Report_Errors is set to True if the values of the discriminants
- -- are non-static.
-
-- This procedure is also used when building a record subtype. If the
-- discriminant constraint of the subtype is static, the components of the
-- subtype are only those of the variants selected by the values of the
@@ -442,6 +442,16 @@ package Sem_Util is
-- of the access value (selected/indexed component, explicit dereference
-- or a slice), and false otherwise.
+ function Is_Descendent_Of (T1 : Entity_Id; T2 : Entity_Id) return Boolean;
+ -- Returns True if type T1 is a descendent of type T2, and false otherwise.
+ -- This is the RM definition, a type is a descendent of another type if it
+ -- is the same type or is derived from a descendent of the other type.
+
+ function Is_Descendent_Of_Address (T1 : Entity_Id) return Boolean;
+ -- Returns True if type T1 is a descendent of Address or its base type.
+ -- Similar to calling Is_Descendent_Of with Base_Type (RTE (RE_Address))
+ -- except that it avoids creating an unconditional dependency on System.
+
function Is_False (U : Uint) return Boolean;
-- The argument is a Uint value which is the Boolean'Pos value of a
-- Boolean operand (i.e. is either 0 for False, or 1 for True). This
diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb
index 187fc9bf389..970213e7905 100644
--- a/gcc/ada/sem_warn.adb
+++ b/gcc/ada/sem_warn.adb
@@ -384,8 +384,7 @@ package body Sem_Warn is
then
null;
- elsif Warn_On_No_Value_Assigned
- and then Present (UR)
+ elsif Present (UR)
and then Is_Access_Type (Etype (E1))
then
diff --git a/gcc/ada/snames.adb b/gcc/ada/snames.adb
index 5717ce6318e..d764320be36 100644
--- a/gcc/ada/snames.adb
+++ b/gcc/ada/snames.adb
@@ -319,6 +319,7 @@ package body Snames is
"win32#" &
"as_is#" &
"body_file_name#" &
+ "boolean_entry_barriers#" &
"casing#" &
"code#" &
"component#" &
@@ -340,6 +341,7 @@ package body Snames is
"internal#" &
"link_name#" &
"lowercase#" &
+ "max_entry_queue_depth#" &
"max_size#" &
"mechanism#" &
"mixedcase#" &
@@ -350,6 +352,7 @@ package body Snames is
"on#" &
"parameter_types#" &
"reference#" &
+ "no_dynamic_interrupts#" &
"no_requeue#" &
"no_task_attributes#" &
"restricted#" &
diff --git a/gcc/ada/snames.ads b/gcc/ada/snames.ads
index 6a9a58e5f1f..402a791ef63 100644
--- a/gcc/ada/snames.ads
+++ b/gcc/ada/snames.ads
@@ -517,66 +517,69 @@ package Snames is
Name_As_Is : constant Name_Id := N + 260;
Name_Body_File_Name : constant Name_Id := N + 261;
- Name_Casing : constant Name_Id := N + 262;
- Name_Code : constant Name_Id := N + 263;
- Name_Component : constant Name_Id := N + 264;
- Name_Component_Size_4 : constant Name_Id := N + 265;
- Name_Copy : constant Name_Id := N + 266;
- Name_D_Float : constant Name_Id := N + 267;
- Name_Descriptor : constant Name_Id := N + 268;
- Name_Dot_Replacement : constant Name_Id := N + 269;
- Name_Dynamic : constant Name_Id := N + 270;
- Name_Entity : constant Name_Id := N + 271;
- Name_External_Name : constant Name_Id := N + 272;
- Name_First_Optional_Parameter : constant Name_Id := N + 273;
- Name_Form : constant Name_Id := N + 274;
- Name_G_Float : constant Name_Id := N + 275;
- Name_Gcc : constant Name_Id := N + 276;
- Name_Gnat : constant Name_Id := N + 277;
- Name_GPL : constant Name_Id := N + 278;
- Name_IEEE_Float : constant Name_Id := N + 279;
- Name_Internal : constant Name_Id := N + 280;
- Name_Link_Name : constant Name_Id := N + 281;
- Name_Lowercase : constant Name_Id := N + 282;
- Name_Max_Size : constant Name_Id := N + 283;
- Name_Mechanism : constant Name_Id := N + 284;
- Name_Mixedcase : constant Name_Id := N + 285;
- Name_Modified_GPL : constant Name_Id := N + 286;
- Name_Name : constant Name_Id := N + 287;
- Name_NCA : constant Name_Id := N + 288;
- Name_No : constant Name_Id := N + 289;
- Name_On : constant Name_Id := N + 290;
- Name_Parameter_Types : constant Name_Id := N + 291;
- Name_Reference : constant Name_Id := N + 292;
- Name_No_Requeue : constant Name_Id := N + 293;
- Name_No_Task_Attributes : constant Name_Id := N + 294;
- Name_Restricted : constant Name_Id := N + 295;
- Name_Result_Mechanism : constant Name_Id := N + 296;
- Name_Result_Type : constant Name_Id := N + 297;
- Name_Runtime : constant Name_Id := N + 298;
- Name_SB : constant Name_Id := N + 299;
- Name_Secondary_Stack_Size : constant Name_Id := N + 300;
- Name_Section : constant Name_Id := N + 301;
- Name_Semaphore : constant Name_Id := N + 302;
- Name_Spec_File_Name : constant Name_Id := N + 303;
- Name_Static : constant Name_Id := N + 304;
- Name_Stack_Size : constant Name_Id := N + 305;
- Name_Subunit_File_Name : constant Name_Id := N + 306;
- Name_Task_Stack_Size_Default : constant Name_Id := N + 307;
- Name_Task_Type : constant Name_Id := N + 308;
- Name_Time_Slicing_Enabled : constant Name_Id := N + 309;
- Name_Top_Guard : constant Name_Id := N + 310;
- Name_UBA : constant Name_Id := N + 311;
- Name_UBS : constant Name_Id := N + 312;
- Name_UBSB : constant Name_Id := N + 313;
- Name_Unit_Name : constant Name_Id := N + 314;
- Name_Unknown : constant Name_Id := N + 315;
- Name_Unrestricted : constant Name_Id := N + 316;
- Name_Uppercase : constant Name_Id := N + 317;
- Name_User : constant Name_Id := N + 318;
- Name_VAX_Float : constant Name_Id := N + 319;
- Name_VMS : constant Name_Id := N + 320;
- Name_Working_Storage : constant Name_Id := N + 321;
+ Name_Boolean_Entry_Barriers : constant Name_Id := N + 262;
+ Name_Casing : constant Name_Id := N + 263;
+ Name_Code : constant Name_Id := N + 264;
+ Name_Component : constant Name_Id := N + 265;
+ Name_Component_Size_4 : constant Name_Id := N + 266;
+ Name_Copy : constant Name_Id := N + 267;
+ Name_D_Float : constant Name_Id := N + 268;
+ Name_Descriptor : constant Name_Id := N + 269;
+ Name_Dot_Replacement : constant Name_Id := N + 270;
+ Name_Dynamic : constant Name_Id := N + 271;
+ Name_Entity : constant Name_Id := N + 272;
+ Name_External_Name : constant Name_Id := N + 273;
+ Name_First_Optional_Parameter : constant Name_Id := N + 274;
+ Name_Form : constant Name_Id := N + 275;
+ Name_G_Float : constant Name_Id := N + 276;
+ Name_Gcc : constant Name_Id := N + 277;
+ Name_Gnat : constant Name_Id := N + 278;
+ Name_GPL : constant Name_Id := N + 279;
+ Name_IEEE_Float : constant Name_Id := N + 280;
+ Name_Internal : constant Name_Id := N + 281;
+ Name_Link_Name : constant Name_Id := N + 282;
+ Name_Lowercase : constant Name_Id := N + 283;
+ Name_Max_Entry_Queue_Depth : constant Name_Id := N + 284;
+ Name_Max_Size : constant Name_Id := N + 285;
+ Name_Mechanism : constant Name_Id := N + 286;
+ Name_Mixedcase : constant Name_Id := N + 287;
+ Name_Modified_GPL : constant Name_Id := N + 288;
+ Name_Name : constant Name_Id := N + 289;
+ Name_NCA : constant Name_Id := N + 290;
+ Name_No : constant Name_Id := N + 291;
+ Name_On : constant Name_Id := N + 292;
+ Name_Parameter_Types : constant Name_Id := N + 293;
+ Name_Reference : constant Name_Id := N + 294;
+ Name_No_Dynamic_Interrupts : constant Name_Id := N + 295;
+ Name_No_Requeue : constant Name_Id := N + 296;
+ Name_No_Task_Attributes : constant Name_Id := N + 297;
+ Name_Restricted : constant Name_Id := N + 298;
+ Name_Result_Mechanism : constant Name_Id := N + 299;
+ Name_Result_Type : constant Name_Id := N + 300;
+ Name_Runtime : constant Name_Id := N + 301;
+ Name_SB : constant Name_Id := N + 302;
+ Name_Secondary_Stack_Size : constant Name_Id := N + 303;
+ Name_Section : constant Name_Id := N + 304;
+ Name_Semaphore : constant Name_Id := N + 305;
+ Name_Spec_File_Name : constant Name_Id := N + 306;
+ Name_Static : constant Name_Id := N + 307;
+ Name_Stack_Size : constant Name_Id := N + 308;
+ Name_Subunit_File_Name : constant Name_Id := N + 309;
+ Name_Task_Stack_Size_Default : constant Name_Id := N + 310;
+ Name_Task_Type : constant Name_Id := N + 311;
+ Name_Time_Slicing_Enabled : constant Name_Id := N + 312;
+ Name_Top_Guard : constant Name_Id := N + 313;
+ Name_UBA : constant Name_Id := N + 314;
+ Name_UBS : constant Name_Id := N + 315;
+ Name_UBSB : constant Name_Id := N + 316;
+ Name_Unit_Name : constant Name_Id := N + 317;
+ Name_Unknown : constant Name_Id := N + 318;
+ Name_Unrestricted : constant Name_Id := N + 319;
+ Name_Uppercase : constant Name_Id := N + 320;
+ Name_User : constant Name_Id := N + 321;
+ Name_VAX_Float : constant Name_Id := N + 322;
+ Name_VMS : constant Name_Id := N + 323;
+ Name_Working_Storage : constant Name_Id := N + 324;
-- 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
@@ -590,158 +593,158 @@ 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 + 322;
- Name_Abort_Signal : constant Name_Id := N + 322; -- GNAT
- Name_Access : constant Name_Id := N + 323;
- Name_Address : constant Name_Id := N + 324;
- Name_Address_Size : constant Name_Id := N + 325; -- GNAT
- Name_Aft : constant Name_Id := N + 326;
- Name_Alignment : constant Name_Id := N + 327;
- Name_Asm_Input : constant Name_Id := N + 328; -- GNAT
- Name_Asm_Output : constant Name_Id := N + 329; -- GNAT
- Name_AST_Entry : constant Name_Id := N + 330; -- VMS
- Name_Bit : constant Name_Id := N + 331; -- GNAT
- Name_Bit_Order : constant Name_Id := N + 332;
- Name_Bit_Position : constant Name_Id := N + 333; -- GNAT
- Name_Body_Version : constant Name_Id := N + 334;
- Name_Callable : constant Name_Id := N + 335;
- Name_Caller : constant Name_Id := N + 336;
- Name_Code_Address : constant Name_Id := N + 337; -- GNAT
- Name_Component_Size : constant Name_Id := N + 338;
- Name_Compose : constant Name_Id := N + 339;
- Name_Constrained : constant Name_Id := N + 340;
- Name_Count : constant Name_Id := N + 341;
- Name_Default_Bit_Order : constant Name_Id := N + 342; -- GNAT
- Name_Definite : constant Name_Id := N + 343;
- Name_Delta : constant Name_Id := N + 344;
- Name_Denorm : constant Name_Id := N + 345;
- Name_Digits : constant Name_Id := N + 346;
- Name_Elaborated : constant Name_Id := N + 347; -- GNAT
- Name_Emax : constant Name_Id := N + 348; -- Ada 83
- Name_Enum_Rep : constant Name_Id := N + 349; -- GNAT
- Name_Epsilon : constant Name_Id := N + 350; -- Ada 83
- Name_Exponent : constant Name_Id := N + 351;
- Name_External_Tag : constant Name_Id := N + 352;
- Name_First : constant Name_Id := N + 353;
- Name_First_Bit : constant Name_Id := N + 354;
- Name_Fixed_Value : constant Name_Id := N + 355; -- GNAT
- Name_Fore : constant Name_Id := N + 356;
- Name_Has_Discriminants : constant Name_Id := N + 357; -- GNAT
- Name_Identity : constant Name_Id := N + 358;
- Name_Img : constant Name_Id := N + 359; -- GNAT
- Name_Integer_Value : constant Name_Id := N + 360; -- GNAT
- Name_Large : constant Name_Id := N + 361; -- Ada 83
- Name_Last : constant Name_Id := N + 362;
- Name_Last_Bit : constant Name_Id := N + 363;
- Name_Leading_Part : constant Name_Id := N + 364;
- Name_Length : constant Name_Id := N + 365;
- Name_Machine_Emax : constant Name_Id := N + 366;
- Name_Machine_Emin : constant Name_Id := N + 367;
- Name_Machine_Mantissa : constant Name_Id := N + 368;
- Name_Machine_Overflows : constant Name_Id := N + 369;
- Name_Machine_Radix : constant Name_Id := N + 370;
- Name_Machine_Rounds : constant Name_Id := N + 371;
- Name_Machine_Size : constant Name_Id := N + 372; -- GNAT
- Name_Mantissa : constant Name_Id := N + 373; -- Ada 83
- Name_Max_Size_In_Storage_Elements : constant Name_Id := N + 374;
- Name_Maximum_Alignment : constant Name_Id := N + 375; -- GNAT
- Name_Mechanism_Code : constant Name_Id := N + 376; -- GNAT
- Name_Model_Emin : constant Name_Id := N + 377;
- Name_Model_Epsilon : constant Name_Id := N + 378;
- Name_Model_Mantissa : constant Name_Id := N + 379;
- Name_Model_Small : constant Name_Id := N + 380;
- Name_Modulus : constant Name_Id := N + 381;
- Name_Null_Parameter : constant Name_Id := N + 382; -- GNAT
- Name_Object_Size : constant Name_Id := N + 383; -- GNAT
- Name_Partition_ID : constant Name_Id := N + 384;
- Name_Passed_By_Reference : constant Name_Id := N + 385; -- GNAT
- Name_Pool_Address : constant Name_Id := N + 386;
- Name_Pos : constant Name_Id := N + 387;
- Name_Position : constant Name_Id := N + 388;
- Name_Range : constant Name_Id := N + 389;
- Name_Range_Length : constant Name_Id := N + 390; -- GNAT
- Name_Round : constant Name_Id := N + 391;
- Name_Safe_Emax : constant Name_Id := N + 392; -- Ada 83
- Name_Safe_First : constant Name_Id := N + 393;
- Name_Safe_Large : constant Name_Id := N + 394; -- Ada 83
- Name_Safe_Last : constant Name_Id := N + 395;
- Name_Safe_Small : constant Name_Id := N + 396; -- Ada 83
- Name_Scale : constant Name_Id := N + 397;
- Name_Scaling : constant Name_Id := N + 398;
- Name_Signed_Zeros : constant Name_Id := N + 399;
- Name_Size : constant Name_Id := N + 400;
- Name_Small : constant Name_Id := N + 401;
- Name_Storage_Size : constant Name_Id := N + 402;
- Name_Storage_Unit : constant Name_Id := N + 403; -- GNAT
- Name_Tag : constant Name_Id := N + 404;
- Name_Target_Name : constant Name_Id := N + 405; -- GNAT
- Name_Terminated : constant Name_Id := N + 406;
- Name_To_Address : constant Name_Id := N + 407; -- GNAT
- Name_Type_Class : constant Name_Id := N + 408; -- GNAT
- Name_UET_Address : constant Name_Id := N + 409; -- GNAT
- Name_Unbiased_Rounding : constant Name_Id := N + 410;
- Name_Unchecked_Access : constant Name_Id := N + 411;
- Name_Unconstrained_Array : constant Name_Id := N + 412;
- Name_Universal_Literal_String : constant Name_Id := N + 413; -- GNAT
- Name_Unrestricted_Access : constant Name_Id := N + 414; -- GNAT
- Name_VADS_Size : constant Name_Id := N + 415; -- GNAT
- Name_Val : constant Name_Id := N + 416;
- Name_Valid : constant Name_Id := N + 417;
- Name_Value_Size : constant Name_Id := N + 418; -- GNAT
- Name_Version : constant Name_Id := N + 419;
- Name_Wchar_T_Size : constant Name_Id := N + 420; -- GNAT
- Name_Wide_Width : constant Name_Id := N + 421;
- Name_Width : constant Name_Id := N + 422;
- Name_Word_Size : constant Name_Id := N + 423; -- GNAT
+ First_Attribute_Name : constant Name_Id := N + 325;
+ Name_Abort_Signal : constant Name_Id := N + 325; -- GNAT
+ Name_Access : constant Name_Id := N + 326;
+ Name_Address : constant Name_Id := N + 327;
+ Name_Address_Size : constant Name_Id := N + 328; -- GNAT
+ Name_Aft : constant Name_Id := N + 329;
+ Name_Alignment : constant Name_Id := N + 330;
+ Name_Asm_Input : constant Name_Id := N + 331; -- GNAT
+ Name_Asm_Output : constant Name_Id := N + 332; -- GNAT
+ Name_AST_Entry : constant Name_Id := N + 333; -- VMS
+ Name_Bit : constant Name_Id := N + 334; -- GNAT
+ Name_Bit_Order : constant Name_Id := N + 335;
+ Name_Bit_Position : constant Name_Id := N + 336; -- GNAT
+ Name_Body_Version : constant Name_Id := N + 337;
+ Name_Callable : constant Name_Id := N + 338;
+ Name_Caller : constant Name_Id := N + 339;
+ Name_Code_Address : constant Name_Id := N + 340; -- GNAT
+ Name_Component_Size : constant Name_Id := N + 341;
+ Name_Compose : constant Name_Id := N + 342;
+ Name_Constrained : constant Name_Id := N + 343;
+ Name_Count : constant Name_Id := N + 344;
+ Name_Default_Bit_Order : constant Name_Id := N + 345; -- GNAT
+ Name_Definite : constant Name_Id := N + 346;
+ Name_Delta : constant Name_Id := N + 347;
+ Name_Denorm : constant Name_Id := N + 348;
+ Name_Digits : constant Name_Id := N + 349;
+ Name_Elaborated : constant Name_Id := N + 350; -- GNAT
+ Name_Emax : constant Name_Id := N + 351; -- Ada 83
+ Name_Enum_Rep : constant Name_Id := N + 352; -- GNAT
+ Name_Epsilon : constant Name_Id := N + 353; -- Ada 83
+ Name_Exponent : constant Name_Id := N + 354;
+ Name_External_Tag : constant Name_Id := N + 355;
+ Name_First : constant Name_Id := N + 356;
+ Name_First_Bit : constant Name_Id := N + 357;
+ Name_Fixed_Value : constant Name_Id := N + 358; -- GNAT
+ Name_Fore : constant Name_Id := N + 359;
+ Name_Has_Discriminants : constant Name_Id := N + 360; -- GNAT
+ Name_Identity : constant Name_Id := N + 361;
+ Name_Img : constant Name_Id := N + 362; -- GNAT
+ Name_Integer_Value : constant Name_Id := N + 363; -- GNAT
+ Name_Large : constant Name_Id := N + 364; -- Ada 83
+ Name_Last : constant Name_Id := N + 365;
+ Name_Last_Bit : constant Name_Id := N + 366;
+ Name_Leading_Part : constant Name_Id := N + 367;
+ Name_Length : constant Name_Id := N + 368;
+ Name_Machine_Emax : constant Name_Id := N + 369;
+ Name_Machine_Emin : constant Name_Id := N + 370;
+ Name_Machine_Mantissa : constant Name_Id := N + 371;
+ Name_Machine_Overflows : constant Name_Id := N + 372;
+ Name_Machine_Radix : constant Name_Id := N + 373;
+ Name_Machine_Rounds : constant Name_Id := N + 374;
+ Name_Machine_Size : constant Name_Id := N + 375; -- GNAT
+ Name_Mantissa : constant Name_Id := N + 376; -- Ada 83
+ Name_Max_Size_In_Storage_Elements : constant Name_Id := N + 377;
+ Name_Maximum_Alignment : constant Name_Id := N + 378; -- GNAT
+ Name_Mechanism_Code : constant Name_Id := N + 379; -- GNAT
+ Name_Model_Emin : constant Name_Id := N + 380;
+ Name_Model_Epsilon : constant Name_Id := N + 381;
+ Name_Model_Mantissa : constant Name_Id := N + 382;
+ Name_Model_Small : constant Name_Id := N + 383;
+ Name_Modulus : constant Name_Id := N + 384;
+ Name_Null_Parameter : constant Name_Id := N + 385; -- GNAT
+ Name_Object_Size : constant Name_Id := N + 386; -- GNAT
+ Name_Partition_ID : constant Name_Id := N + 387;
+ Name_Passed_By_Reference : constant Name_Id := N + 388; -- GNAT
+ Name_Pool_Address : constant Name_Id := N + 389;
+ Name_Pos : constant Name_Id := N + 390;
+ Name_Position : constant Name_Id := N + 391;
+ Name_Range : constant Name_Id := N + 392;
+ Name_Range_Length : constant Name_Id := N + 393; -- GNAT
+ Name_Round : constant Name_Id := N + 394;
+ Name_Safe_Emax : constant Name_Id := N + 395; -- Ada 83
+ Name_Safe_First : constant Name_Id := N + 396;
+ Name_Safe_Large : constant Name_Id := N + 397; -- Ada 83
+ Name_Safe_Last : constant Name_Id := N + 398;
+ Name_Safe_Small : constant Name_Id := N + 399; -- Ada 83
+ Name_Scale : constant Name_Id := N + 400;
+ Name_Scaling : constant Name_Id := N + 401;
+ Name_Signed_Zeros : constant Name_Id := N + 402;
+ Name_Size : constant Name_Id := N + 403;
+ Name_Small : constant Name_Id := N + 404;
+ Name_Storage_Size : constant Name_Id := N + 405;
+ Name_Storage_Unit : constant Name_Id := N + 406; -- GNAT
+ Name_Tag : constant Name_Id := N + 407;
+ Name_Target_Name : constant Name_Id := N + 408; -- GNAT
+ Name_Terminated : constant Name_Id := N + 409;
+ Name_To_Address : constant Name_Id := N + 410; -- GNAT
+ Name_Type_Class : constant Name_Id := N + 411; -- GNAT
+ Name_UET_Address : constant Name_Id := N + 412; -- GNAT
+ Name_Unbiased_Rounding : constant Name_Id := N + 413;
+ Name_Unchecked_Access : constant Name_Id := N + 414;
+ Name_Unconstrained_Array : constant Name_Id := N + 415;
+ Name_Universal_Literal_String : constant Name_Id := N + 416; -- GNAT
+ Name_Unrestricted_Access : constant Name_Id := N + 417; -- GNAT
+ Name_VADS_Size : constant Name_Id := N + 418; -- GNAT
+ Name_Val : constant Name_Id := N + 419;
+ Name_Valid : constant Name_Id := N + 420;
+ Name_Value_Size : constant Name_Id := N + 421; -- GNAT
+ Name_Version : constant Name_Id := N + 422;
+ Name_Wchar_T_Size : constant Name_Id := N + 423; -- GNAT
+ Name_Wide_Width : constant Name_Id := N + 424;
+ Name_Width : constant Name_Id := N + 425;
+ Name_Word_Size : constant Name_Id := N + 426; -- GNAT
-- Attributes that designate attributes returning renamable functions,
-- i.e. functions that return other than a universal value.
- First_Renamable_Function_Attribute : constant Name_Id := N + 424;
- Name_Adjacent : constant Name_Id := N + 424;
- Name_Ceiling : constant Name_Id := N + 425;
- Name_Copy_Sign : constant Name_Id := N + 426;
- Name_Floor : constant Name_Id := N + 427;
- Name_Fraction : constant Name_Id := N + 428;
- Name_Image : constant Name_Id := N + 429;
- Name_Input : constant Name_Id := N + 430;
- Name_Machine : constant Name_Id := N + 431;
- Name_Max : constant Name_Id := N + 432;
- Name_Min : constant Name_Id := N + 433;
- Name_Model : constant Name_Id := N + 434;
- Name_Pred : constant Name_Id := N + 435;
- Name_Remainder : constant Name_Id := N + 436;
- Name_Rounding : constant Name_Id := N + 437;
- Name_Succ : constant Name_Id := N + 438;
- Name_Truncation : constant Name_Id := N + 439;
- Name_Value : constant Name_Id := N + 440;
- Name_Wide_Image : constant Name_Id := N + 441;
- Name_Wide_Value : constant Name_Id := N + 442;
- Last_Renamable_Function_Attribute : constant Name_Id := N + 442;
+ First_Renamable_Function_Attribute : constant Name_Id := N + 427;
+ Name_Adjacent : constant Name_Id := N + 427;
+ Name_Ceiling : constant Name_Id := N + 428;
+ Name_Copy_Sign : constant Name_Id := N + 429;
+ Name_Floor : constant Name_Id := N + 430;
+ Name_Fraction : constant Name_Id := N + 431;
+ Name_Image : constant Name_Id := N + 432;
+ Name_Input : constant Name_Id := N + 433;
+ Name_Machine : constant Name_Id := N + 434;
+ Name_Max : constant Name_Id := N + 435;
+ Name_Min : constant Name_Id := N + 436;
+ Name_Model : constant Name_Id := N + 437;
+ Name_Pred : constant Name_Id := N + 438;
+ Name_Remainder : constant Name_Id := N + 439;
+ Name_Rounding : constant Name_Id := N + 440;
+ Name_Succ : constant Name_Id := N + 441;
+ Name_Truncation : constant Name_Id := N + 442;
+ Name_Value : constant Name_Id := N + 443;
+ Name_Wide_Image : constant Name_Id := N + 444;
+ Name_Wide_Value : constant Name_Id := N + 445;
+ Last_Renamable_Function_Attribute : constant Name_Id := N + 445;
-- Attributes that designate procedures
- First_Procedure_Attribute : constant Name_Id := N + 443;
- Name_Output : constant Name_Id := N + 443;
- Name_Read : constant Name_Id := N + 444;
- Name_Write : constant Name_Id := N + 445;
- Last_Procedure_Attribute : constant Name_Id := N + 445;
+ First_Procedure_Attribute : constant Name_Id := N + 446;
+ Name_Output : constant Name_Id := N + 446;
+ Name_Read : constant Name_Id := N + 447;
+ Name_Write : constant Name_Id := N + 448;
+ Last_Procedure_Attribute : constant Name_Id := N + 448;
-- Remaining attributes are ones that return entities
- First_Entity_Attribute_Name : constant Name_Id := N + 446;
- Name_Elab_Body : constant Name_Id := N + 446; -- GNAT
- Name_Elab_Spec : constant Name_Id := N + 447; -- GNAT
- Name_Storage_Pool : constant Name_Id := N + 448;
+ First_Entity_Attribute_Name : constant Name_Id := N + 449;
+ Name_Elab_Body : constant Name_Id := N + 449; -- GNAT
+ Name_Elab_Spec : constant Name_Id := N + 450; -- GNAT
+ Name_Storage_Pool : constant Name_Id := N + 451;
-- These attributes are the ones that return types
- First_Type_Attribute_Name : constant Name_Id := N + 449;
- Name_Base : constant Name_Id := N + 449;
- Name_Class : constant Name_Id := N + 450;
- Last_Type_Attribute_Name : constant Name_Id := N + 450;
- Last_Entity_Attribute_Name : constant Name_Id := N + 450;
- Last_Attribute_Name : constant Name_Id := N + 450;
+ First_Type_Attribute_Name : constant Name_Id := N + 452;
+ Name_Base : constant Name_Id := N + 452;
+ Name_Class : constant Name_Id := N + 453;
+ Last_Type_Attribute_Name : constant Name_Id := N + 453;
+ Last_Entity_Attribute_Name : constant Name_Id := N + 453;
+ Last_Attribute_Name : constant Name_Id := N + 453;
-- Names of recognized locking policy identifiers
@@ -749,10 +752,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 + 451;
- Name_Ceiling_Locking : constant Name_Id := N + 451;
- Name_Inheritance_Locking : constant Name_Id := N + 452;
- Last_Locking_Policy_Name : constant Name_Id := N + 452;
+ First_Locking_Policy_Name : constant Name_Id := N + 454;
+ Name_Ceiling_Locking : constant Name_Id := N + 454;
+ Name_Inheritance_Locking : constant Name_Id := N + 455;
+ Last_Locking_Policy_Name : constant Name_Id := N + 455;
-- Names of recognized queuing policy identifiers.
@@ -760,10 +763,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 + 453;
- Name_FIFO_Queuing : constant Name_Id := N + 453;
- Name_Priority_Queuing : constant Name_Id := N + 454;
- Last_Queuing_Policy_Name : constant Name_Id := N + 454;
+ First_Queuing_Policy_Name : constant Name_Id := N + 456;
+ Name_FIFO_Queuing : constant Name_Id := N + 456;
+ Name_Priority_Queuing : constant Name_Id := N + 457;
+ Last_Queuing_Policy_Name : constant Name_Id := N + 457;
-- Names of recognized task dispatching policy identifiers
@@ -771,193 +774,193 @@ 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 + 455;
- Name_FIFO_Within_Priorities : constant Name_Id := N + 455;
- Last_Task_Dispatching_Policy_Name : constant Name_Id := N + 455;
+ First_Task_Dispatching_Policy_Name : constant Name_Id := N + 458;
+ Name_FIFO_Within_Priorities : constant Name_Id := N + 458;
+ Last_Task_Dispatching_Policy_Name : constant Name_Id := N + 458;
-- Names of recognized checks for pragma Suppress
- First_Check_Name : constant Name_Id := N + 456;
- Name_Access_Check : constant Name_Id := N + 456;
- Name_Accessibility_Check : constant Name_Id := N + 457;
- Name_Discriminant_Check : constant Name_Id := N + 458;
- Name_Division_Check : constant Name_Id := N + 459;
- Name_Elaboration_Check : constant Name_Id := N + 460;
- Name_Index_Check : constant Name_Id := N + 461;
- Name_Length_Check : constant Name_Id := N + 462;
- Name_Overflow_Check : constant Name_Id := N + 463;
- Name_Range_Check : constant Name_Id := N + 464;
- Name_Storage_Check : constant Name_Id := N + 465;
- Name_Tag_Check : constant Name_Id := N + 466;
- Name_All_Checks : constant Name_Id := N + 467;
- Last_Check_Name : constant Name_Id := N + 467;
+ First_Check_Name : constant Name_Id := N + 459;
+ Name_Access_Check : constant Name_Id := N + 459;
+ Name_Accessibility_Check : constant Name_Id := N + 460;
+ Name_Discriminant_Check : constant Name_Id := N + 461;
+ Name_Division_Check : constant Name_Id := N + 462;
+ Name_Elaboration_Check : constant Name_Id := N + 463;
+ Name_Index_Check : constant Name_Id := N + 464;
+ Name_Length_Check : constant Name_Id := N + 465;
+ Name_Overflow_Check : constant Name_Id := N + 466;
+ Name_Range_Check : constant Name_Id := N + 467;
+ Name_Storage_Check : constant Name_Id := N + 468;
+ Name_Tag_Check : constant Name_Id := N + 469;
+ Name_All_Checks : constant Name_Id := N + 470;
+ Last_Check_Name : constant Name_Id := N + 470;
-- Names corresponding to reserved keywords, excluding those already
-- declared in the attribute list (Access, Delta, Digits, Range).
- Name_Abort : constant Name_Id := N + 468;
- Name_Abs : constant Name_Id := N + 469;
- Name_Accept : constant Name_Id := N + 470;
- Name_And : constant Name_Id := N + 471;
- Name_All : constant Name_Id := N + 472;
- Name_Array : constant Name_Id := N + 473;
- Name_At : constant Name_Id := N + 474;
- Name_Begin : constant Name_Id := N + 475;
- Name_Body : constant Name_Id := N + 476;
- Name_Case : constant Name_Id := N + 477;
- Name_Constant : constant Name_Id := N + 478;
- Name_Declare : constant Name_Id := N + 479;
- Name_Delay : constant Name_Id := N + 480;
- Name_Do : constant Name_Id := N + 481;
- Name_Else : constant Name_Id := N + 482;
- Name_Elsif : constant Name_Id := N + 483;
- Name_End : constant Name_Id := N + 484;
- Name_Entry : constant Name_Id := N + 485;
- Name_Exception : constant Name_Id := N + 486;
- Name_Exit : constant Name_Id := N + 487;
- Name_For : constant Name_Id := N + 488;
- Name_Function : constant Name_Id := N + 489;
- Name_Generic : constant Name_Id := N + 490;
- Name_Goto : constant Name_Id := N + 491;
- Name_If : constant Name_Id := N + 492;
- Name_In : constant Name_Id := N + 493;
- Name_Is : constant Name_Id := N + 494;
- Name_Limited : constant Name_Id := N + 495;
- Name_Loop : constant Name_Id := N + 496;
- Name_Mod : constant Name_Id := N + 497;
- Name_New : constant Name_Id := N + 498;
- Name_Not : constant Name_Id := N + 499;
- Name_Null : constant Name_Id := N + 500;
- Name_Of : constant Name_Id := N + 501;
- Name_Or : constant Name_Id := N + 502;
- Name_Others : constant Name_Id := N + 503;
- Name_Out : constant Name_Id := N + 504;
- Name_Package : constant Name_Id := N + 505;
- Name_Pragma : constant Name_Id := N + 506;
- Name_Private : constant Name_Id := N + 507;
- Name_Procedure : constant Name_Id := N + 508;
- Name_Raise : constant Name_Id := N + 509;
- Name_Record : constant Name_Id := N + 510;
- Name_Rem : constant Name_Id := N + 511;
- Name_Renames : constant Name_Id := N + 512;
- Name_Return : constant Name_Id := N + 513;
- Name_Reverse : constant Name_Id := N + 514;
- Name_Select : constant Name_Id := N + 515;
- Name_Separate : constant Name_Id := N + 516;
- Name_Subtype : constant Name_Id := N + 517;
- Name_Task : constant Name_Id := N + 518;
- Name_Terminate : constant Name_Id := N + 519;
- Name_Then : constant Name_Id := N + 520;
- Name_Type : constant Name_Id := N + 521;
- Name_Use : constant Name_Id := N + 522;
- Name_When : constant Name_Id := N + 523;
- Name_While : constant Name_Id := N + 524;
- Name_With : constant Name_Id := N + 525;
- Name_Xor : constant Name_Id := N + 526;
+ Name_Abort : constant Name_Id := N + 471;
+ Name_Abs : constant Name_Id := N + 472;
+ Name_Accept : constant Name_Id := N + 473;
+ Name_And : constant Name_Id := N + 474;
+ Name_All : constant Name_Id := N + 475;
+ Name_Array : constant Name_Id := N + 476;
+ Name_At : constant Name_Id := N + 477;
+ Name_Begin : constant Name_Id := N + 478;
+ Name_Body : constant Name_Id := N + 479;
+ Name_Case : constant Name_Id := N + 480;
+ Name_Constant : constant Name_Id := N + 481;
+ Name_Declare : constant Name_Id := N + 482;
+ Name_Delay : constant Name_Id := N + 483;
+ Name_Do : constant Name_Id := N + 484;
+ Name_Else : constant Name_Id := N + 485;
+ Name_Elsif : constant Name_Id := N + 486;
+ Name_End : constant Name_Id := N + 487;
+ Name_Entry : constant Name_Id := N + 488;
+ Name_Exception : constant Name_Id := N + 489;
+ Name_Exit : constant Name_Id := N + 490;
+ Name_For : constant Name_Id := N + 491;
+ Name_Function : constant Name_Id := N + 492;
+ Name_Generic : constant Name_Id := N + 493;
+ Name_Goto : constant Name_Id := N + 494;
+ Name_If : constant Name_Id := N + 495;
+ Name_In : constant Name_Id := N + 496;
+ Name_Is : constant Name_Id := N + 497;
+ Name_Limited : constant Name_Id := N + 498;
+ Name_Loop : constant Name_Id := N + 499;
+ Name_Mod : constant Name_Id := N + 500;
+ Name_New : constant Name_Id := N + 501;
+ Name_Not : constant Name_Id := N + 502;
+ Name_Null : constant Name_Id := N + 503;
+ Name_Of : constant Name_Id := N + 504;
+ Name_Or : constant Name_Id := N + 505;
+ Name_Others : constant Name_Id := N + 506;
+ Name_Out : constant Name_Id := N + 507;
+ Name_Package : constant Name_Id := N + 508;
+ Name_Pragma : constant Name_Id := N + 509;
+ Name_Private : constant Name_Id := N + 510;
+ Name_Procedure : constant Name_Id := N + 511;
+ Name_Raise : constant Name_Id := N + 512;
+ Name_Record : constant Name_Id := N + 513;
+ Name_Rem : constant Name_Id := N + 514;
+ Name_Renames : constant Name_Id := N + 515;
+ Name_Return : constant Name_Id := N + 516;
+ Name_Reverse : constant Name_Id := N + 517;
+ Name_Select : constant Name_Id := N + 518;
+ Name_Separate : constant Name_Id := N + 519;
+ Name_Subtype : constant Name_Id := N + 520;
+ Name_Task : constant Name_Id := N + 521;
+ Name_Terminate : constant Name_Id := N + 522;
+ Name_Then : constant Name_Id := N + 523;
+ Name_Type : constant Name_Id := N + 524;
+ Name_Use : constant Name_Id := N + 525;
+ Name_When : constant Name_Id := N + 526;
+ Name_While : constant Name_Id := N + 527;
+ Name_With : constant Name_Id := N + 528;
+ Name_Xor : constant Name_Id := N + 529;
-- 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 + 527;
- Name_Divide : constant Name_Id := N + 527;
- Name_Enclosing_Entity : constant Name_Id := N + 528;
- Name_Exception_Information : constant Name_Id := N + 529;
- Name_Exception_Message : constant Name_Id := N + 530;
- Name_Exception_Name : constant Name_Id := N + 531;
- Name_File : constant Name_Id := N + 532;
- Name_Import_Address : constant Name_Id := N + 533;
- Name_Import_Largest_Value : constant Name_Id := N + 534;
- Name_Import_Value : constant Name_Id := N + 535;
- Name_Is_Negative : constant Name_Id := N + 536;
- Name_Line : constant Name_Id := N + 537;
- Name_Rotate_Left : constant Name_Id := N + 538;
- Name_Rotate_Right : constant Name_Id := N + 539;
- Name_Shift_Left : constant Name_Id := N + 540;
- Name_Shift_Right : constant Name_Id := N + 541;
- Name_Shift_Right_Arithmetic : constant Name_Id := N + 542;
- Name_Source_Location : constant Name_Id := N + 543;
- Name_Unchecked_Conversion : constant Name_Id := N + 544;
- Name_Unchecked_Deallocation : constant Name_Id := N + 545;
- Name_To_Pointer : constant Name_Id := N + 546;
- Last_Intrinsic_Name : constant Name_Id := N + 546;
+ First_Intrinsic_Name : constant Name_Id := N + 530;
+ Name_Divide : constant Name_Id := N + 530;
+ Name_Enclosing_Entity : constant Name_Id := N + 531;
+ Name_Exception_Information : constant Name_Id := N + 532;
+ Name_Exception_Message : constant Name_Id := N + 533;
+ Name_Exception_Name : constant Name_Id := N + 534;
+ Name_File : constant Name_Id := N + 535;
+ Name_Import_Address : constant Name_Id := N + 536;
+ Name_Import_Largest_Value : constant Name_Id := N + 537;
+ Name_Import_Value : constant Name_Id := N + 538;
+ Name_Is_Negative : constant Name_Id := N + 539;
+ Name_Line : constant Name_Id := N + 540;
+ Name_Rotate_Left : constant Name_Id := N + 541;
+ Name_Rotate_Right : constant Name_Id := N + 542;
+ Name_Shift_Left : constant Name_Id := N + 543;
+ Name_Shift_Right : constant Name_Id := N + 544;
+ Name_Shift_Right_Arithmetic : constant Name_Id := N + 545;
+ Name_Source_Location : constant Name_Id := N + 546;
+ Name_Unchecked_Conversion : constant Name_Id := N + 547;
+ Name_Unchecked_Deallocation : constant Name_Id := N + 548;
+ Name_To_Pointer : constant Name_Id := N + 549;
+ Last_Intrinsic_Name : constant Name_Id := N + 549;
-- Reserved words used only in Ada 95
- First_95_Reserved_Word : constant Name_Id := N + 547;
- Name_Abstract : constant Name_Id := N + 547;
- Name_Aliased : constant Name_Id := N + 548;
- Name_Protected : constant Name_Id := N + 549;
- Name_Until : constant Name_Id := N + 550;
- Name_Requeue : constant Name_Id := N + 551;
- Name_Tagged : constant Name_Id := N + 552;
- Last_95_Reserved_Word : constant Name_Id := N + 552;
+ First_95_Reserved_Word : constant Name_Id := N + 550;
+ Name_Abstract : constant Name_Id := N + 550;
+ Name_Aliased : constant Name_Id := N + 551;
+ Name_Protected : constant Name_Id := N + 552;
+ Name_Until : constant Name_Id := N + 553;
+ Name_Requeue : constant Name_Id := N + 554;
+ Name_Tagged : constant Name_Id := N + 555;
+ Last_95_Reserved_Word : constant Name_Id := N + 555;
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 + 553;
+ Name_Raise_Exception : constant Name_Id := N + 556;
-- Additional reserved words in GNAT Project Files
-- Note that Name_External is already previously declared
- Name_Binder : constant Name_Id := N + 554;
- Name_Body_Suffix : constant Name_Id := N + 555;
- Name_Builder : constant Name_Id := N + 556;
- Name_Compiler : constant Name_Id := N + 557;
- Name_Cross_Reference : constant Name_Id := N + 558;
- Name_Default_Switches : constant Name_Id := N + 559;
- Name_Exec_Dir : constant Name_Id := N + 560;
- Name_Executable : constant Name_Id := N + 561;
- Name_Executable_Suffix : constant Name_Id := N + 562;
- Name_Extends : constant Name_Id := N + 563;
- Name_Finder : constant Name_Id := N + 564;
- Name_Global_Configuration_Pragmas : constant Name_Id := N + 565;
- Name_Gnatls : constant Name_Id := N + 566;
- Name_Gnatstub : constant Name_Id := N + 567;
- Name_Implementation : constant Name_Id := N + 568;
- Name_Implementation_Exceptions : constant Name_Id := N + 569;
- Name_Implementation_Suffix : constant Name_Id := N + 570;
- Name_Languages : constant Name_Id := N + 571;
- Name_Library_Dir : constant Name_Id := N + 572;
- Name_Library_Auto_Init : constant Name_Id := N + 573;
- Name_Library_GCC : constant Name_Id := N + 574;
- Name_Library_Interface : constant Name_Id := N + 575;
- Name_Library_Kind : constant Name_Id := N + 576;
- Name_Library_Name : constant Name_Id := N + 577;
- Name_Library_Options : constant Name_Id := N + 578;
- Name_Library_Reference_Symbol_File : constant Name_Id := N + 579;
- Name_Library_Src_Dir : constant Name_Id := N + 580;
- Name_Library_Symbol_File : constant Name_Id := N + 581;
- Name_Library_Symbol_Policy : constant Name_Id := N + 582;
- Name_Library_Version : constant Name_Id := N + 583;
- Name_Linker : constant Name_Id := N + 584;
- Name_Local_Configuration_Pragmas : constant Name_Id := N + 585;
- Name_Locally_Removed_Files : constant Name_Id := N + 586;
- Name_Naming : constant Name_Id := N + 587;
- Name_Object_Dir : constant Name_Id := N + 588;
- Name_Pretty_Printer : constant Name_Id := N + 589;
- Name_Project : constant Name_Id := N + 590;
- Name_Separate_Suffix : constant Name_Id := N + 591;
- Name_Source_Dirs : constant Name_Id := N + 592;
- Name_Source_Files : constant Name_Id := N + 593;
- Name_Source_List_File : constant Name_Id := N + 594;
- Name_Spec : constant Name_Id := N + 595;
- Name_Spec_Suffix : constant Name_Id := N + 596;
- Name_Specification : constant Name_Id := N + 597;
- Name_Specification_Exceptions : constant Name_Id := N + 598;
- Name_Specification_Suffix : constant Name_Id := N + 599;
- Name_Switches : constant Name_Id := N + 600;
+ Name_Binder : constant Name_Id := N + 557;
+ Name_Body_Suffix : constant Name_Id := N + 558;
+ Name_Builder : constant Name_Id := N + 559;
+ Name_Compiler : constant Name_Id := N + 560;
+ Name_Cross_Reference : constant Name_Id := N + 561;
+ Name_Default_Switches : constant Name_Id := N + 562;
+ Name_Exec_Dir : constant Name_Id := N + 563;
+ Name_Executable : constant Name_Id := N + 564;
+ Name_Executable_Suffix : constant Name_Id := N + 565;
+ Name_Extends : constant Name_Id := N + 566;
+ Name_Finder : constant Name_Id := N + 567;
+ Name_Global_Configuration_Pragmas : constant Name_Id := N + 568;
+ Name_Gnatls : constant Name_Id := N + 569;
+ Name_Gnatstub : constant Name_Id := N + 570;
+ Name_Implementation : constant Name_Id := N + 571;
+ Name_Implementation_Exceptions : constant Name_Id := N + 572;
+ Name_Implementation_Suffix : constant Name_Id := N + 573;
+ Name_Languages : constant Name_Id := N + 574;
+ Name_Library_Dir : constant Name_Id := N + 575;
+ Name_Library_Auto_Init : constant Name_Id := N + 576;
+ Name_Library_GCC : constant Name_Id := N + 577;
+ Name_Library_Interface : constant Name_Id := N + 578;
+ Name_Library_Kind : constant Name_Id := N + 579;
+ Name_Library_Name : constant Name_Id := N + 580;
+ Name_Library_Options : constant Name_Id := N + 581;
+ Name_Library_Reference_Symbol_File : constant Name_Id := N + 582;
+ Name_Library_Src_Dir : constant Name_Id := N + 583;
+ Name_Library_Symbol_File : constant Name_Id := N + 584;
+ Name_Library_Symbol_Policy : constant Name_Id := N + 585;
+ Name_Library_Version : constant Name_Id := N + 586;
+ Name_Linker : constant Name_Id := N + 587;
+ Name_Local_Configuration_Pragmas : constant Name_Id := N + 588;
+ Name_Locally_Removed_Files : constant Name_Id := N + 589;
+ Name_Naming : constant Name_Id := N + 590;
+ Name_Object_Dir : constant Name_Id := N + 591;
+ Name_Pretty_Printer : constant Name_Id := N + 592;
+ Name_Project : constant Name_Id := N + 593;
+ Name_Separate_Suffix : constant Name_Id := N + 594;
+ Name_Source_Dirs : constant Name_Id := N + 595;
+ Name_Source_Files : constant Name_Id := N + 596;
+ Name_Source_List_File : constant Name_Id := N + 597;
+ Name_Spec : constant Name_Id := N + 598;
+ Name_Spec_Suffix : constant Name_Id := N + 599;
+ Name_Specification : constant Name_Id := N + 600;
+ Name_Specification_Exceptions : constant Name_Id := N + 601;
+ Name_Specification_Suffix : constant Name_Id := N + 602;
+ Name_Switches : constant Name_Id := N + 603;
-- Other miscellaneous names used in front end
- Name_Unaligned_Valid : constant Name_Id := N + 601;
+ Name_Unaligned_Valid : constant Name_Id := N + 604;
-- Mark last defined name for consistency check in Snames body
- Last_Predefined_Name : constant Name_Id := N + 601;
+ Last_Predefined_Name : constant Name_Id := N + 604;
subtype Any_Operator_Name is Name_Id range
First_Operator_Name .. Last_Operator_Name;
diff --git a/gcc/ada/stand.ads b/gcc/ada/stand.ads
index 91207695765..0970a06a6ee 100644
--- a/gcc/ada/stand.ads
+++ b/gcc/ada/stand.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2001 Free Software Foundation, Inc. --
+-- 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- --
@@ -310,6 +310,9 @@ package Stand is
-- Highest List_Id value used by Standard (including those used by
-- normal list headers, element list headers, and list elements)
+ Boolean_Literals : array (Boolean) of Entity_Id;
+ -- Entities for the two boolean literals, used by the expander
+
-------------------------------------
-- Semantic Phase Special Entities --
-------------------------------------
diff --git a/gcc/ada/switch-c.adb b/gcc/ada/switch-c.adb
index df91201a7ae..a378f209d9b 100644
--- a/gcc/ada/switch-c.adb
+++ b/gcc/ada/switch-c.adb
@@ -386,7 +386,7 @@ package body Switch.C is
when 'I' =>
Ptr := Ptr + 1;
- Scan_Pos (Switch_Chars, 999, Ptr, Multiple_Unit_Index);
+ Scan_Pos (Switch_Chars, Max, Ptr, Multiple_Unit_Index);
-- -gnatem (mapping file)
diff --git a/gcc/ada/switch-m.adb b/gcc/ada/switch-m.adb
index 03124a1481c..5215fe15029 100644
--- a/gcc/ada/switch-m.adb
+++ b/gcc/ada/switch-m.adb
@@ -562,6 +562,12 @@ package body Switch.M is
case Switch_Chars (Ptr) is
+ -- processing for eI switch
+
+ when 'I' =>
+ Ptr := Ptr + 1;
+ Scan_Pos (Switch_Chars, Max, Ptr, Main_Index);
+
-- processing for eL switch
when 'L' =>
@@ -666,6 +672,12 @@ package body Switch.M is
Ptr := Ptr + 1;
Verbose_Mode := True;
+ -- Processing for x switch
+
+ when 'x' =>
+ Ptr := Ptr + 1;
+ External_Unit_Compilation_Allowed := True;
+
-- Processing for z switch
when 'z' =>
diff --git a/gcc/ada/usage.adb b/gcc/ada/usage.adb
index 3adf3044049..b5903da0190 100644
--- a/gcc/ada/usage.adb
+++ b/gcc/ada/usage.adb
@@ -269,10 +269,12 @@ begin
Write_Switch_Char ("Q");
Write_Line ("Don't quit, write ali/tree file even if compile errors");
- -- Line for -gnatR switch
+ -- Lines for -gnatR switch
Write_Switch_Char ("R?");
- Write_Line ("List rep inf (?=0/1/2/3 for none/types/all/variable)");
+ Write_Line ("List rep info (?=0/1/2/3 for none/types/all/variable)");
+ Write_Switch_Char ("R?s");
+ Write_Line ("List rep info to file.rep instead of standard output");
-- Lines for -gnats switch
diff --git a/gcc/ada/utils.c b/gcc/ada/utils.c
index bb2b3bf2e57..06961f848ca 100644
--- a/gcc/ada/utils.c
+++ b/gcc/ada/utils.c
@@ -1348,7 +1348,6 @@ create_var_decl (tree var_name,
|| (static_flag && ! init_const)))
assign_init = var_init, var_init = 0;
- DECL_COMMON (var_decl) = !flag_no_common;
DECL_INITIAL (var_decl) = var_init;
TREE_READONLY (var_decl) = const_flag;
DECL_EXTERNAL (var_decl) = extern_flag;
@@ -1621,7 +1620,6 @@ process_attributes (tree decl, struct attrib *attr_list)
DECL_SECTION_NAME (decl)
= build_string (IDENTIFIER_LENGTH (attr_list->name),
IDENTIFIER_POINTER (attr_list->name));
- DECL_COMMON (decl) = 0;
}
else
post_error ("?section attributes are not supported for this target",
diff --git a/gcc/ada/vms_data.ads b/gcc/ada/vms_data.ads
index fd9cb34057d..ca621b033b6 100644
--- a/gcc/ada/vms_data.ads
+++ b/gcc/ada/vms_data.ads
@@ -191,7 +191,6 @@ package VMS_Data is
-- Switches for GNAT BIND --
----------------------------
-
S_Bind_Bind : aliased constant S := "/BIND_FILE=" &
"ADA " &
"-A " &
@@ -490,7 +489,6 @@ package VMS_Data is
"!-b,!-v";
-- NODOC (see /REPORT_ERRORS)
-
S_Bind_Restr : aliased constant S := "/RESTRICTION_LIST " &
"-r";
-- /NORESTRICTION_LIST (D)
@@ -814,6 +812,13 @@ package VMS_Data is
--
-- Output a message explaining the usage of gnatclean.
+ S_Clean_Index : aliased constant S := "/SOURCE_INDEX=#" &
+ "-i#";
+ -- /SOURCE_INDEX=nnn
+ --
+ -- Specifies the index of the units in the source file
+ -- By default, source files are mono-unit and there is no index
+
S_Clean_Mess : aliased constant S := "/MESSAGES_PROJECT_FILE=" &
"DEFAULT " &
"-vP0 " &
@@ -833,7 +838,6 @@ package VMS_Data is
-- HIGH A great number of messages are output, most of them not
-- being useful for the user.
-
S_Clean_Object : aliased constant S := "/OBJECT_SEARCH=*" &
"-aO*";
-- /OBJECT_SEARCH=(directory,...)
@@ -892,6 +896,7 @@ package VMS_Data is
S_Clean_Ext 'Access,
S_Clean_Full 'Access,
S_Clean_Help 'Access,
+ S_Clean_Index 'Access,
S_Clean_Mess 'Access,
S_Clean_Object 'Access,
S_Clean_Project'Access,
@@ -3738,6 +3743,15 @@ package VMS_Data is
-- are found on the Ada object path, the new object and ALI files are
-- created in the directory containing the source being compiled.
+ S_Make_Index : aliased constant S := "/SOURCE_INDEX=#" &
+ "-eI#";
+ -- /SOURCE_INDEX=nnn
+ --
+ -- Specifies the index of the units in the source file
+ -- By default, source files are mono-unit and there is no index
+ -- When /SOURCE_INDEX=nnn is specified, only one main may be specified
+ -- on the command line.
+
S_Make_Library : aliased constant S := "/LIBRARY_SEARCH=*" &
"-L*";
-- /LIBRARY_SEARCH=(directory[,...])
@@ -3825,6 +3839,14 @@ package VMS_Data is
-- will execute the elaboration routines of the package and its closure,
-- then the finalization routines.
+ S_Make_Nonpro : aliased constant S := "/NON_PROJECT_UNIT_COMPILATION " &
+ "-x";
+ -- /NON_PROJECT_UNIT_COMPILATION
+ --
+ -- Normally, when using project files, a unit that is not part of any
+ -- project file, cannot be compile. These units may be compile, when
+ -- needed, if this qualifier is specified.
+
S_Make_Nostinc : aliased constant S := "/NOSTD_INCLUDES " &
"-nostdinc";
-- /NOSTD_INCLUDES
@@ -3965,6 +3987,7 @@ package VMS_Data is
S_Make_Force 'Access,
S_Make_Full 'Access,
S_Make_Inplace 'Access,
+ S_Make_Index 'Access,
S_Make_Library 'Access,
S_Make_Link 'Access,
S_Make_Make 'Access,
@@ -3973,6 +3996,7 @@ package VMS_Data is
S_Make_Minimal 'Access,
S_Make_Nolink 'Access,
S_Make_Nomain 'Access,
+ S_Make_Nonpro 'Access,
S_Make_Nostinc 'Access,
S_Make_Nostlib 'Access,
S_Make_Object 'Access,
diff --git a/gcc/attribs.c b/gcc/attribs.c
index 5d8450ff601..671528ccacd 100644
--- a/gcc/attribs.c
+++ b/gcc/attribs.c
@@ -294,7 +294,26 @@ decl_attributes (tree *node, tree attributes, int flags)
if (DECL_P (*anode))
DECL_ATTRIBUTES (*anode) = tree_cons (name, args, old_attrs);
else if (flags & (int) ATTR_FLAG_TYPE_IN_PLACE)
- TYPE_ATTRIBUTES (*anode) = tree_cons (name, args, old_attrs);
+ {
+ TYPE_ATTRIBUTES (*anode) = tree_cons (name, args, old_attrs);
+ /* If this is the main variant, also push the attributes
+ out to the other variants. */
+ if (*anode == TYPE_MAIN_VARIANT (*anode))
+ {
+ tree variant;
+ for (variant = *anode; variant;
+ variant = TYPE_NEXT_VARIANT (variant))
+ {
+ if (TYPE_ATTRIBUTES (variant) == old_attrs)
+ TYPE_ATTRIBUTES (variant)
+ = TYPE_ATTRIBUTES (*anode);
+ else if (!lookup_attribute
+ (spec->name, TYPE_ATTRIBUTES (variant)))
+ TYPE_ATTRIBUTES (variant) = tree_cons
+ (name, args, TYPE_ATTRIBUTES (variant));
+ }
+ }
+ }
else
*anode = build_type_attribute_variant (*anode,
tree_cons (name, args,
diff --git a/gcc/basic-block.h b/gcc/basic-block.h
index 38de6db9a0b..c64b7b0d556 100644
--- a/gcc/basic-block.h
+++ b/gcc/basic-block.h
@@ -406,7 +406,7 @@ extern void compute_bb_for_insn (void);
extern void free_bb_for_insn (void);
extern void update_bb_for_insn (basic_block);
-extern void free_basic_block_vars (int);
+extern void free_basic_block_vars (void);
extern void insert_insn_on_edge (rtx, edge);
bool safe_insert_insn_on_edge (rtx, edge);
diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c
index b169a566f64..c461a160313 100644
--- a/gcc/bb-reorder.c
+++ b/gcc/bb-reorder.c
@@ -901,7 +901,7 @@ connect_traces (int n_traces, struct trace *traces)
last_trace = -1;
/* If we are partitioning hot/cold basic blocks, mark the cold
- traces as already connnected, to remove them from consideration
+ traces as already connected, to remove them from consideration
for connection to the hot traces. After the hot traces have all
been connected (determined by "unconnected_hot_trace_count"), we
will go back and connect the cold traces. */
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 7de556ee1f5..b0375c377aa 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -1676,6 +1676,10 @@ expand_builtin_mathfn (tree exp, rtx target, rtx subtarget)
case BUILT_IN_EXP2F:
case BUILT_IN_EXP2L:
errno_set = true; builtin_optab = exp2_optab; break;
+ case BUILT_IN_EXPM1:
+ case BUILT_IN_EXPM1F:
+ case BUILT_IN_EXPM1L:
+ errno_set = true; builtin_optab = expm1_optab; break;
case BUILT_IN_LOGB:
case BUILT_IN_LOGBF:
case BUILT_IN_LOGBL:
@@ -1696,6 +1700,10 @@ expand_builtin_mathfn (tree exp, rtx target, rtx subtarget)
case BUILT_IN_LOG2F:
case BUILT_IN_LOG2L:
errno_set = true; builtin_optab = log2_optab; break;
+ case BUILT_IN_LOG1P:
+ case BUILT_IN_LOG1PF:
+ case BUILT_IN_LOG1PL:
+ errno_set = true; builtin_optab = log1p_optab; break;
case BUILT_IN_ASIN:
case BUILT_IN_ASINF:
case BUILT_IN_ASINL:
@@ -1865,6 +1873,14 @@ expand_builtin_mathfn_2 (tree exp, rtx target, rtx subtarget)
case BUILT_IN_ATAN2F:
case BUILT_IN_ATAN2L:
builtin_optab = atan2_optab; break;
+ case BUILT_IN_FMOD:
+ case BUILT_IN_FMODF:
+ case BUILT_IN_FMODL:
+ builtin_optab = fmod_optab; break;
+ case BUILT_IN_DREM:
+ case BUILT_IN_DREMF:
+ case BUILT_IN_DREML:
+ builtin_optab = drem_optab; break;
default:
abort ();
}
@@ -5322,7 +5338,7 @@ expand_builtin_fork_or_exec (tree fn, tree arglist, rtx target, int ignore)
/* Otherwise call the wrapper. This should be equivalent for the rest of
compiler, so the code does not diverge, and the wrapper may run the
- code neccesary for keeping the profiling sane. */
+ code necessary for keeping the profiling sane. */
switch (DECL_FUNCTION_CODE (fn))
{
@@ -5480,6 +5496,9 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode,
case BUILT_IN_EXP2:
case BUILT_IN_EXP2F:
case BUILT_IN_EXP2L:
+ case BUILT_IN_EXPM1:
+ case BUILT_IN_EXPM1F:
+ case BUILT_IN_EXPM1L:
case BUILT_IN_LOGB:
case BUILT_IN_LOGBF:
case BUILT_IN_LOGBL:
@@ -5495,6 +5514,9 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode,
case BUILT_IN_LOG2:
case BUILT_IN_LOG2F:
case BUILT_IN_LOG2L:
+ case BUILT_IN_LOG1P:
+ case BUILT_IN_LOG1PF:
+ case BUILT_IN_LOG1PL:
case BUILT_IN_TAN:
case BUILT_IN_TANF:
case BUILT_IN_TANL:
@@ -5545,6 +5567,12 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode,
case BUILT_IN_ATAN2:
case BUILT_IN_ATAN2F:
case BUILT_IN_ATAN2L:
+ case BUILT_IN_FMOD:
+ case BUILT_IN_FMODF:
+ case BUILT_IN_FMODL:
+ case BUILT_IN_DREM:
+ case BUILT_IN_DREMF:
+ case BUILT_IN_DREML:
if (! flag_unsafe_math_optimizations)
break;
target = expand_builtin_mathfn_2 (exp, target, subtarget);
@@ -6329,6 +6357,45 @@ fold_trunc_transparent_mathfn (tree exp)
return 0;
}
+/* EXP is assumed to be builtin call which can narrow the FP type of
+ the argument, for instance lround((double)f) -> lroundf (f). */
+
+static tree
+fold_fixed_mathfn (tree exp)
+{
+ tree fndecl = get_callee_fndecl (exp);
+ tree arglist = TREE_OPERAND (exp, 1);
+ enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
+ tree arg;
+
+ if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+ return 0;
+
+ arg = TREE_VALUE (arglist);
+
+ /* If argument is already integer valued, and we don't need to worry
+ about setting errno, there's no need to perform rounding. */
+ if (! flag_errno_math && integer_valued_real_p (arg))
+ return fold (build1 (FIX_TRUNC_EXPR, TREE_TYPE (exp), arg));
+
+ if (optimize)
+ {
+ tree ftype = TREE_TYPE (arg);
+ tree arg0 = strip_float_extensions (arg);
+ tree newtype = TREE_TYPE (arg0);
+ tree decl;
+
+ if (TYPE_PRECISION (newtype) < TYPE_PRECISION (ftype)
+ && (decl = mathfn_built_in (newtype, fcode)))
+ {
+ arglist =
+ build_tree_list (NULL_TREE, fold_convert (newtype, arg0));
+ return build_function_call_expr (decl, arglist);
+ }
+ }
+ return 0;
+}
+
/* Fold function call to builtin cabs, cabsf or cabsl. ARGLIST
is the argument list and TYPE is the return type. Return
NULL_TREE if no if no simplification can be made. */
@@ -6508,7 +6575,7 @@ fold_builtin_round (tree exp)
if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
return 0;
- /* Optimize ceil of constant value. */
+ /* Optimize round of constant value. */
arg = TREE_VALUE (arglist);
if (TREE_CODE (arg) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg))
{
@@ -6528,6 +6595,42 @@ fold_builtin_round (tree exp)
return fold_trunc_transparent_mathfn (exp);
}
+/* Fold function call to builtin lround, lroundf or lroundl (or the
+ corresponding long long versions). Return NULL_TREE if no
+ simplification can be made. */
+
+static tree
+fold_builtin_lround (tree exp)
+{
+ tree arglist = TREE_OPERAND (exp, 1);
+ tree arg;
+
+ if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+ return 0;
+
+ /* Optimize lround of constant value. */
+ arg = TREE_VALUE (arglist);
+ if (TREE_CODE (arg) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg))
+ {
+ const REAL_VALUE_TYPE x = TREE_REAL_CST (arg);
+
+ if (! REAL_VALUE_ISNAN (x) && ! REAL_VALUE_ISINF (x))
+ {
+ tree itype = TREE_TYPE (exp), ftype = TREE_TYPE (arg), result;
+ HOST_WIDE_INT hi, lo;
+ REAL_VALUE_TYPE r;
+
+ real_round (&r, TYPE_MODE (ftype), &x);
+ REAL_VALUE_TO_INT (&lo, &hi, r);
+ result = build_int_2 (lo, hi);
+ if (int_fits_type_p (result, itype))
+ return fold_convert (itype, result);
+ }
+ }
+
+ return fold_fixed_mathfn (exp);
+}
+
/* Fold function call to builtin ffs, clz, ctz, popcount and parity
and their long and long long variants (i.e. ffsl and ffsll).
Return NULL_TREE if no simplification can be made. */
@@ -7642,6 +7745,22 @@ fold_builtin_1 (tree exp)
case BUILT_IN_RINTL:
return fold_trunc_transparent_mathfn (exp);
+ case BUILT_IN_LROUND:
+ case BUILT_IN_LROUNDF:
+ case BUILT_IN_LROUNDL:
+ case BUILT_IN_LLROUND:
+ case BUILT_IN_LLROUNDF:
+ case BUILT_IN_LLROUNDL:
+ return fold_builtin_lround (exp);
+
+ case BUILT_IN_LRINT:
+ case BUILT_IN_LRINTF:
+ case BUILT_IN_LRINTL:
+ case BUILT_IN_LLRINT:
+ case BUILT_IN_LLRINTF:
+ case BUILT_IN_LLRINTL:
+ return fold_fixed_mathfn (exp);
+
case BUILT_IN_FFS:
case BUILT_IN_FFSL:
case BUILT_IN_FFSLL:
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 5aac04cb5da..9b7206a94c7 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -1289,6 +1289,16 @@ constant_fits_type_p (tree c, tree type)
return !TREE_OVERFLOW (c);
}
+/* Nonzero if vector types T1 and T2 can be converted to each other
+ without an explicit cast. */
+int
+vector_types_convertible_p (tree t1, tree t2)
+{
+ return targetm.vector_opaque_p (t1)
+ || targetm.vector_opaque_p (t2)
+ || TYPE_MODE (t1) == TYPE_MODE (t2);
+}
+
/* Convert EXPR to TYPE, warning about conversion problems with constants.
Invoke this function on every expression that is converted implicitly,
i.e. because of language rules and not because of an explicit cast. */
diff --git a/gcc/c-common.h b/gcc/c-common.h
index acb06d54d43..74999104428 100644
--- a/gcc/c-common.h
+++ b/gcc/c-common.h
@@ -1180,6 +1180,8 @@ extern tree finish_label_address_expr (tree);
different implementations. Used in c-common.c. */
extern tree lookup_label (tree);
+extern int vector_types_convertible_p (tree t1, tree t2);
+
extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
extern int c_safe_from_p (rtx, tree);
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 6763e019d6d..d0fc708ea05 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -113,9 +113,11 @@ static GTY(()) tree c_scope_stmt_stack;
int c_in_iteration_stmt;
int c_in_case_stmt;
-/* A DECL for the current file-scope context. */
+/* Linked list of TRANSLATION_UNIT_DECLS for the translation units
+ included in this invocation. Note that the current translation
+ unit is not included in this list. */
-static GTY(()) tree current_file_decl;
+static GTY(()) tree all_translation_units;
/* A list of decls to be made automatically visible in each file scope. */
static GTY(()) tree visible_builtins;
@@ -654,7 +656,12 @@ pop_scope (void)
if (scope->function_body)
context = current_function_decl;
else if (scope == file_scope)
- context = current_file_decl;
+ {
+ tree file_decl = build_decl (TRANSLATION_UNIT_DECL, 0, 0);
+ TREE_CHAIN (file_decl) = all_translation_units;
+ all_translation_units = file_decl;
+ context = file_decl;
+ }
else
context = block;
@@ -741,6 +748,9 @@ pop_scope (void)
TREE_CHAIN (p) = BLOCK_VARS (block);
BLOCK_VARS (block) = p;
}
+ /* If this is the file scope, must set DECL_CONTEXT on these. */
+ if (!C_DECL_IN_EXTERNAL_SCOPE (p) && scope == file_scope)
+ DECL_CONTEXT (p) = context;
/* Fall through. */
/* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
@@ -800,9 +810,6 @@ void
push_file_scope (void)
{
tree decl;
- tree file_decl = build_decl (TRANSLATION_UNIT_DECL, 0, 0);
- TREE_CHAIN (file_decl) = current_file_decl;
- current_file_decl = file_decl;
push_scope ();
file_scope = current_scope;
@@ -1801,14 +1808,12 @@ pushdecl (tree x)
if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_LANG_SPECIFIC (x))
DECL_LANG_SPECIFIC (x) = ggc_alloc_cleared (sizeof (struct lang_decl));
- /* A local extern declaration for a function doesn't constitute nesting.
- A local auto declaration does, since it's a forward decl
- for a nested function coming later. */
- if (current_function_decl == NULL
- || ((TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
- && DECL_INITIAL (x) == 0 && DECL_EXTERNAL (x)))
- DECL_CONTEXT (x) = current_file_decl;
- else
+ /* Must set DECL_CONTEXT for everything not at file scope or
+ DECL_FILE_SCOPE_P won't work. Local externs don't count
+ unless they have initializers (which generate code). */
+ if (current_function_decl
+ && ((TREE_CODE (x) != FUNCTION_DECL && TREE_CODE (x) != VAR_DECL)
+ || DECL_INITIAL (x) || !DECL_EXTERNAL (x)))
DECL_CONTEXT (x) = current_function_decl;
/* Anonymous decls are just inserted in the scope. */
@@ -1932,7 +1937,6 @@ pushdecl_top_level (tree x)
if (I_SYMBOL_BINDING (name))
abort ();
- DECL_CONTEXT (x) = current_file_decl;
if (DECL_EXTERNAL (x) || TREE_PUBLIC (x))
{
C_DECL_IN_EXTERNAL_SCOPE (x) = 1;
@@ -4807,9 +4811,9 @@ get_parm_info (bool ellipsis)
}
break;
- case ENUMERAL_TYPE: keyword = "struct"; goto tag;
+ case ENUMERAL_TYPE: keyword = "enum"; goto tag;
case UNION_TYPE: keyword = "union"; goto tag;
- case RECORD_TYPE: keyword = "enum"; goto tag;
+ case RECORD_TYPE: keyword = "struct"; goto tag;
tag:
/* Types may not have tag-names, in which case the type
appears in the bindings list with b->id NULL. */
@@ -5838,8 +5842,7 @@ store_parm_decls_newstyle (tree fndecl, tree arg_info)
warning if we got here because ARG_INFO_TYPES was error_mark_node
(this happens when a function definition has just an ellipsis in
its parameter list). */
- else if (warn_traditional && !in_system_header
- && DECL_CONTEXT (fndecl) == current_file_decl
+ else if (warn_traditional && !in_system_header && !current_function_scope
&& ARG_INFO_TYPES (arg_info) != error_mark_node)
warning ("%Jtraditional C rejects ISO C style function definitions",
fndecl);
@@ -6722,7 +6725,7 @@ c_write_global_declarations (void)
return;
/* Process all file scopes in this compilation. */
- for (t = current_file_decl; t; t = TREE_CHAIN (t))
+ for (t = all_translation_units; t; t = TREE_CHAIN (t))
c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
/* Now do the same for the externals scope. */
diff --git a/gcc/c-incpath.c b/gcc/c-incpath.c
index 167b05a0d9a..b4da86fb7ba 100644
--- a/gcc/c-incpath.c
+++ b/gcc/c-incpath.c
@@ -171,6 +171,7 @@ add_standard_paths (const char *sysroot, const char *iprefix, int cxx_stdinc)
JOIN, unless it duplicates JOIN in which case the last path is
removed. Return the head of the resulting chain. Any of HEAD,
JOIN and SYSTEM can be NULL. */
+
static struct cpp_dir *
remove_duplicates (cpp_reader *pfile, struct cpp_dir *head,
struct cpp_dir *system, struct cpp_dir *join,
@@ -243,9 +244,10 @@ remove_duplicates (cpp_reader *pfile, struct cpp_dir *head,
We can't just merge the lists and then uniquify them because then
we may lose directories from the <> search path that should be
- there; consider -Ifoo -Ibar -I- -Ifoo -Iquux. It is however safe
- to treat -Ibar -Ifoo -I- -Ifoo -Iquux as if written -Ibar -I- -Ifoo
- -Iquux. */
+ there; consider -iquote foo -iquote bar -Ifoo -Iquux. It is
+ however safe to treat -iquote bar -iquote foo -Ifoo -Iquux as if
+ written -iquote bar -Ifoo -Iquux. */
+
static void
merge_include_chains (cpp_reader *pfile, int verbose)
{
diff --git a/gcc/c-opts.c b/gcc/c-opts.c
index e071cfbd5f3..1300b69cd0b 100644
--- a/gcc/c-opts.c
+++ b/gcc/c-opts.c
@@ -101,7 +101,7 @@ static size_t deferred_count;
/* Number of deferred options scanned for -include. */
static size_t include_cursor;
-/* Permit Fotran front-end options. */
+/* Permit Fortran front-end options. */
static bool permit_fortran_options;
static void set_Wimplicit (int);
@@ -162,6 +162,7 @@ c_common_missing_argument (const char *opt, size_t code)
case OPT_idirafter:
case OPT_isysroot:
case OPT_isystem:
+ case OPT_iquote:
error ("missing path after \"%s\"", opt);
break;
@@ -303,6 +304,7 @@ c_common_handle_option (size_t scode, const char *arg, int value)
error ("-I- specified twice");
quote_chain_split = true;
split_quote_chain ();
+ inform ("obsolete option -I- used, please use -iquote instead");
}
break;
@@ -949,6 +951,10 @@ c_common_handle_option (size_t scode, const char *arg, int value)
iprefix = arg;
break;
+ case OPT_iquote:
+ add_path (xstrdup (arg), QUOTE, 0);
+ break;
+
case OPT_isysroot:
sysroot = arg;
break;
diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c
index aa85deea6f3..31a17a109d2 100644
--- a/gcc/c-pragma.c
+++ b/gcc/c-pragma.c
@@ -376,7 +376,8 @@ handle_pragma_redefine_extname (cpp_reader *dummy ATTRIBUTE_UNUSED)
warning ("junk at end of #pragma redefine_extname");
decl = identifier_global_value (oldname);
- if (decl && TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
+ if (decl && (TREE_CODE (decl) == FUNCTION_DECL
+ || TREE_CODE (decl) == VAR_DECL))
{
if (DECL_ASSEMBLER_NAME_SET_P (decl)
&& DECL_ASSEMBLER_NAME (decl) != newname)
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 65d532a3c45..14270b971ca 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -592,10 +592,8 @@ comptypes (tree type1, tree type2, int flags)
break;
case VECTOR_TYPE:
- /* The target might allow certain vector types to be compatible. */
- val = targetm.vector_opaque_p (t1)
- || targetm.vector_opaque_p (t2)
- || TYPE_MODE (t1) == TYPE_MODE (t2);
+ val = TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
+ && comptypes (TREE_TYPE (t1), TREE_TYPE (t2), 0);
break;
default:
@@ -3279,7 +3277,7 @@ convert_for_assignment (tree type, tree rhs, const char *errtype,
}
/* Some types can interconvert without explicit casts. */
else if (codel == VECTOR_TYPE
- && comptypes (type, TREE_TYPE (rhs), COMPARE_STRICT) == 1)
+ && vector_types_convertible_p (type, TREE_TYPE (rhs)))
return convert (type, rhs);
/* Arithmetic types all interconvert, and enum is treated like int. */
else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
@@ -3924,11 +3922,11 @@ digest_init (tree type, tree init, int require_constant)
vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
below and handle as a constructor. */
if (code == VECTOR_TYPE
- && comptypes (TREE_TYPE (inside_init), type, COMPARE_STRICT)
+ && vector_types_convertible_p (TREE_TYPE (inside_init), type)
&& TREE_CONSTANT (inside_init))
{
if (TREE_CODE (inside_init) == VECTOR_CST
- && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
+ && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
TYPE_MAIN_VARIANT (type),
COMPARE_STRICT))
return inside_init;
@@ -4029,7 +4027,8 @@ digest_init (tree type, tree init, int require_constant)
/* Handle scalar types, including conversions. */
if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
- || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE)
+ || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
+ || code == VECTOR_TYPE)
{
/* Note that convert_for_assignment calls default_conversion
for arrays and functions. We must not call it in the
diff --git a/gcc/c.opt b/gcc/c.opt
index d9730203f04..bafe6a14d8b 100644
--- a/gcc/c.opt
+++ b/gcc/c.opt
@@ -103,7 +103,7 @@ Print the name of header files as they are used
I
C ObjC C++ ObjC++ Joined Separate
--I <dir> Add <dir> to the end of the main include path. -I- gives more include path control; see info documentation
+-I <dir> Add <dir> to the end of the main include path
M
C ObjC C++ ObjC++
@@ -716,6 +716,10 @@ isystem
C ObjC C++ ObjC++ Joined Separate
-isystem <dir> Add <dir> to the start of the system include path
+iquote
+C ObjC C++ ObjC++ Joined Separate
+-iquote <dir> Add <dir> to the end of the quote include path
+
iwithprefix
C ObjC C++ ObjC++ Joined Separate
-iwithprefix <dir> Add <dir> to the end of the system include path
diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c
index 77eddd3ec26..8a57c68c2b2 100644
--- a/gcc/cfglayout.c
+++ b/gcc/cfglayout.c
@@ -1115,8 +1115,7 @@ cfg_layout_duplicate_bb (basic_block bb)
return new_bb;
}
-
-/* Main entry point to this module - initialize the datastructures for
+/* Main entry point to this module - initialize the data structures for
CFG layout changes. It keeps LOOPS up-to-date if not null. */
void
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 34f757a03db..5669edd8f08 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -50,9 +50,9 @@ The callgraph:
Intraprocedural information:
Callgraph is place to store data needed for intraprocedural optimization.
- All datastructures are divided into three components: local_info that
+ All data structures are divided into three components: local_info that
is produced while analyzing the function, global_info that is result
- of global walkking of the callgraph on the end of compilation and
+ of global walking of the callgraph on the end of compilation and
rtl_info used by RTL backend to propagate data from already compiled
functions to their callers.
@@ -60,16 +60,16 @@ The callgraph:
The function inlining information is decided in advance and maintained
in the callgraph as so called inline plan.
- For each inlined call, the calle's node is clonned to represent the
+ For each inlined call, the callee's node is cloned to represent the
new function copy produced by inlininer.
- Each inlined call gets unque corresponding clone node of the callee
- and the datastructure is updated while inlining is performed, so
- the clones are elliminated and their callee edges redirected to the
+ Each inlined call gets a unique corresponding clone node of the callee
+ and the data structure is updated while inlining is performed, so
+ the clones are eliminated and their callee edges redirected to the
caller.
Each edge has "inline_failed" field. When the field is set to NULL,
- the call will be inlined. When it is non-NULL it contains an reason
- why inlining wasn't performaned.
+ the call will be inlined. When it is non-NULL it contains a reason
+ why inlining wasn't performed.
The varpool data structure:
@@ -99,8 +99,8 @@ The varpool data structure:
/* Hash table used to convert declarations into nodes. */
static GTY((param_is (struct cgraph_node))) htab_t cgraph_hash;
-/* We destructivly update callgraph during inlining and thus we need to
- keep information on whether inlining happent separately. */
+/* We destructively update callgraph during inlining and thus we need to
+ keep information on whether inlining happened separately. */
htab_t cgraph_inline_hash;
/* The linked list of cgraph nodes. */
@@ -152,7 +152,7 @@ eq_node (const void *p1, const void *p2)
(tree) p2);
}
-/* Allocate new callgraph node and insert it into basic datastructures. */
+/* Allocate new callgraph node and insert it into basic data structures. */
static struct cgraph_node *
cgraph_create_node (void)
{
@@ -209,7 +209,7 @@ cgraph_edge (struct cgraph_node *node, tree call_expr)
/* This loop may turn out to be performance problem. In such case adding
hashtables into call nodes with very many edges is probably best
- sollution. It is not good idea to add pointer into CALL_EXPR itself
+ solution. It is not good idea to add pointer into CALL_EXPR itself
because we want to make possible having multiple cgraph nodes representing
different clones of the same body before the body is actually cloned. */
for (e = node->callees; e; e= e->next_callee)
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index b20268a31d9..c079e404ee5 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -36,7 +36,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
- cgraph_varpool_finalize_variable
- This function has same behaviour as the above but is used for static
+ This function has same behavior as the above but is used for static
variables.
- cgraph_finalize_compilation_unit
@@ -183,6 +183,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "fibheap.h"
#include "c-common.h"
#include "intl.h"
+#include "function.h"
#define INSNS_PER_CALL 10
@@ -330,7 +331,7 @@ cgraph_finalize_function (tree decl, bool nested)
if (node->output)
abort ();
- /* Reset our datastructures so we can analyze the function again. */
+ /* Reset our data structures so we can analyze the function again. */
memset (&node->local, 0, sizeof (node->local));
memset (&node->global, 0, sizeof (node->global));
memset (&node->rtl, 0, sizeof (node->rtl));
@@ -379,6 +380,10 @@ cgraph_finalize_function (tree decl, bool nested)
/* If we've not yet emitted decl, tell the debug info about it. */
if (!TREE_ASM_WRITTEN (decl))
(*debug_hooks->deferred_inline_function) (decl);
+
+ /* Possibly warn about unused parameters. */
+ if (warn_unused_parameter)
+ do_warn_unused_parameter (decl);
}
/* Walk tree and record all calls. Called via walk_tree. */
@@ -888,7 +893,8 @@ cgraph_remove_unreachable_nodes (void)
abort ();
#endif
for (node = cgraph_nodes; node; node = node->next)
- if (node->needed && (!DECL_EXTERNAL (node->decl) || !node->analyzed))
+ if (node->needed && !node->global.inlined_to
+ && (!DECL_EXTERNAL (node->decl) || !node->analyzed))
{
node->aux = first;
first = node;
@@ -922,8 +928,8 @@ cgraph_remove_unreachable_nodes (void)
eliminated.
Reachable extern inline functions we sometimes inlined will be turned into
unanalyzed nodes so they look like for true extern functions to the rest
- of code. Body of such functions is relased via remove_node once the
- inline clones are elliminated. */
+ of code. Body of such functions is released via remove_node once the
+ inline clones are eliminated. */
for (node = cgraph_nodes; node; node = node->next)
{
if (!node->aux)
@@ -931,6 +937,7 @@ cgraph_remove_unreachable_nodes (void)
int local_insns;
tree decl = node->decl;
+ node->global.inlined_to = NULL;
if (DECL_STRUCT_FUNCTION (decl))
local_insns = node->local.self_insns;
else
@@ -1021,7 +1028,7 @@ cgraph_clone_inlined_nodes (struct cgraph_edge *e, bool duplicate)
{
struct cgraph_node *n;
- /* We may elliminate the need for out-of-line copy to be output. In that
+ /* We may eliminate the need for out-of-line copy to be output. In that
case just go ahead and re-use it. */
if (!e->callee->callers->next_caller
&& (!e->callee->needed || DECL_EXTERNAL (e->callee->decl))
@@ -1045,7 +1052,7 @@ cgraph_clone_inlined_nodes (struct cgraph_edge *e, bool duplicate)
else
e->callee->global.inlined_to = e->caller;
- /* Recursivly clone all bodies. */
+ /* Recursively clone all bodies. */
for (e = e->callee->callees; e; e = e->next_callee)
if (!e->inline_failed)
cgraph_clone_inlined_nodes (e, duplicate);
@@ -1108,7 +1115,7 @@ cgraph_mark_inline (struct cgraph_edge *edge)
struct cgraph_edge *e, *next;
int times = 0;
- /* Look for all calls, mark them inline and clone recursivly
+ /* Look for all calls, mark them inline and clone recursively
all inlined functions. */
for (e = what->callers; e; e = next)
{
@@ -1178,9 +1185,9 @@ cgraph_default_inline_p (struct cgraph_node *n)
return n->global.insns < MAX_INLINE_INSNS_AUTO;
}
-/* Return true when inlining WHAT to TO would be recursive inlining
- (i.e. inlining function to itself). We don't do recursive inlinnig
- in the default heuristics as we do have special heuristics for it. */
+/* Return true when inlining WHAT would create recursive inlining.
+ We call recursive inlining all cases where same function appears more than
+ once in the single recursion nest path in the inline graph. */
static bool
cgraph_recursive_inlining_p (struct cgraph_node *to,
@@ -1441,7 +1448,7 @@ cgraph_decide_inlining_of_small_functions (void)
}
/* Decide on the inlining. We do so in the topological order to avoid
- expenses on updating datastructures. */
+ expenses on updating data structures. */
static void
cgraph_decide_inlining (void)
@@ -1582,7 +1589,7 @@ cgraph_decide_inlining (void)
}
/* Decide on the inlining. We do so in the topological order to avoid
- expenses on updating datastructures. */
+ expenses on updating data structures. */
static void
cgraph_decide_inlining_incrementally (struct cgraph_node *node)
@@ -1652,7 +1659,7 @@ cgraph_expand_all_functions (void)
if (order_pos != cgraph_n_nodes)
abort ();
- /* Garbage collector may remove inline clones we elliminate during
+ /* Garbage collector may remove inline clones we eliminate during
optimization. So we must be sure to not reference them. */
for (i = 0; i < order_pos; i++)
if (order[i]->output)
diff --git a/gcc/combine.c b/gcc/combine.c
index 26654f8e6fe..8acc37c9b96 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -4994,23 +4994,23 @@ simplify_set (rtx x)
rtx op0, op1, tmp;
int other_changed = 0;
enum machine_mode compare_mode = GET_MODE (dest);
- enum machine_mode tmp_mode;
if (GET_CODE (src) == COMPARE)
op0 = XEXP (src, 0), op1 = XEXP (src, 1);
else
op0 = src, op1 = const0_rtx;
- /* Check whether the comparison is known at compile time. */
- if (GET_MODE (op0) != VOIDmode)
- tmp_mode = GET_MODE (op0);
- else if (GET_MODE (op1) != VOIDmode)
- tmp_mode = GET_MODE (op1);
+ tmp = simplify_relational_operation (old_code, compare_mode, VOIDmode,
+ op0, op1);
+ if (!tmp)
+ new_code = old_code;
+ else if (!CONSTANT_P (tmp))
+ {
+ new_code = GET_CODE (tmp);
+ op0 = XEXP (tmp, 0);
+ op1 = XEXP (tmp, 1);
+ }
else
- tmp_mode = compare_mode;
- tmp = simplify_const_relational_operation (old_code, tmp_mode,
- op0, op1);
- if (tmp != NULL_RTX)
{
rtx pat = PATTERN (other_insn);
undobuf.other_insn = other_insn;
@@ -5031,12 +5031,15 @@ simplify_set (rtx x)
}
/* Simplify our comparison, if possible. */
- new_code = simplify_comparison (old_code, &op0, &op1);
+ new_code = simplify_comparison (new_code, &op0, &op1);
#ifdef SELECT_CC_MODE
/* If this machine has CC modes other than CCmode, check to see if we
need to use a different CC mode here. */
- compare_mode = SELECT_CC_MODE (new_code, op0, op1);
+ if (GET_MODE_CLASS (GET_MODE (op0)) == MODE_CC)
+ compare_mode = GET_MODE (op0);
+ else
+ compare_mode = SELECT_CC_MODE (new_code, op0, op1);
#ifndef HAVE_cc0
/* If the mode changed, we have to change SET_DEST, the mode in the
diff --git a/gcc/common.opt b/gcc/common.opt
index da939d91265..5309365a0f5 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -76,6 +76,10 @@ Wextra
Common
Print extra (possibly unwanted) warnings
+Wfatal-errors
+Common
+Exit on the first error occurred
+
Winline
Common
Warn when an inlined function cannot be inlined
diff --git a/gcc/config.gcc b/gcc/config.gcc
index bf980027e7d..67efab57f15 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1820,7 +1820,7 @@ sparc-*-rtems*)
extra_parts="crti.o crtn.o crtbegin.o crtend.o"
;;
sparc64-*-solaris2* | sparcv9-*-solaris2*)
- tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sol2.h sparc/sol2.h sparc/sol2-64.h sparc/sol2-bi.h"
+ tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sol2.h sparc/sol2.h sparc/sol2-64.h sparc/sol2-bi.h tm-dwarf2.h"
if test x$gnu_ld = xyes; then
tm_file="${tm_file} sparc/sol2-gld.h sparc/sol2-gld-bi.h"
fi
@@ -1859,7 +1859,7 @@ sparc-*-solaris2*)
fi
;;
*-*-solaris2.[789] | *-*-solaris2.1[0-9])
- tm_file="sparc/biarch64.h ${tm_file} sparc/sol2-bi.h"
+ tm_file="sparc/biarch64.h ${tm_file} sparc/sol2-bi.h tm-dwarf2.h"
if test x$gnu_ld = xyes; then
tm_file="${tm_file} sparc/sol2-gld-bi.h"
fi
@@ -2173,6 +2173,15 @@ if test x$with_cpu = x ; then
esac
fi
+# Similarly for --with-float
+if test x$with_float = x; then
+ case ${target} in
+ ep9312-*-*)
+ with_float=hard
+ ;;
+ esac
+fi
+
# Similarly for --with-schedule.
if test x$with_schedule = x; then
case ${target} in
@@ -2212,27 +2221,18 @@ fi
arm*-*-*)
supported_defaults="arch cpu float tune fpu abi"
for which in cpu tune; do
+ # See if it matches any of the entries in arm-cores.def
eval "val=\$with_$which"
- case "$val" in
- "" \
- | arm[236789] | arm250 | arm[67][01]0 \
- | arm60 | arm620 | arm7d | arm7di \
- | arm7m | arm7dm | arm7dmi | arm[79]tdmi \
- | arm70 | arm700i | arm710t | arm720 \
- | arm720t | arm740t | arm710c | arm920 \
- | arm920t | arm926ejs | arm940t | arm9e | arm10tdmi \
- | arm7100 | arm7500 | arm7500fe | arm810 \
- | arm1026ejs | arm1020t | arm1136js | arm1136jfs \
- | xscale | iwmmxt \
- | ep9312 \
- | strongarm | strongarm110 | strongarm11[01]0)
- # OK
- ;;
- *)
- echo "Unknown CPU used in --with-$which=$val" 1>&2
- exit 1
- ;;
- esac
+ if [ x"$val" = x ] \
+ || grep "^ARM_CORE($val," \
+ ${srcdir}/config/arm/arm-cores.def \
+ > /dev/null; then
+ # Ok
+ true
+ else
+ echo "Unknown CPU used in --with-$which=$val" 1>&2
+ exit 1
+ fi
done
case "$with_arch" in
@@ -2580,10 +2580,6 @@ fi
;;
powerpc*-*-* | rs6000-*-*)
- if test x$enable_altivec = xyes
- then
- tm_file="$tm_file rs6000/altivec-defs.h"
- fi
# FIXME: The PowerPC port uses the value set at compile time,
# although it's only cosmetic.
if test "x$with_cpu" != x
diff --git a/gcc/config.in b/gcc/config.in
index 38c88a56caa..6f0661fd6ee 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -262,6 +262,10 @@
skip when using the GAS .p2align command. */
#undef HAVE_GAS_MAX_SKIP_P2ALIGN
+/* Define if your assembler and linker support 32-bit section relative relocs
+ via '.secrel32 label'. */
+#undef HAVE_GAS_PE_SECREL32_RELOC
+
/* Define 0/1 if your assembler supports marking sections with SHF_MERGE flag.
*/
#undef HAVE_GAS_SHF_MERGE
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 6b708ded7a5..1f78205771c 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -2153,7 +2153,7 @@ alpha_rtx_costs (rtx x, int code, int outer_code, int *total)
&& const48_operand (XEXP (XEXP (x, 0), 1), VOIDmode))
{
*total = (rtx_cost (XEXP (XEXP (x, 0), 0), outer_code)
- + rtx_cost (XEXP (x, 1), outer_code) + 2);
+ + rtx_cost (XEXP (x, 1), outer_code) + COSTS_N_INSNS (1));
return true;
}
return false;
diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md
index 64c88e32332..3d3b7313cc7 100644
--- a/gcc/config/alpha/alpha.md
+++ b/gcc/config/alpha/alpha.md
@@ -7185,7 +7185,7 @@
(define_expand "builtin_insbl"
[(match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "reg_or_0_operand" "")
+ (match_operand:DI 1 "register_operand" "")
(match_operand:DI 2 "reg_or_8bit_operand" "")]
""
{
@@ -7201,7 +7201,7 @@
(define_expand "builtin_inswl"
[(match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "reg_or_0_operand" "")
+ (match_operand:DI 1 "register_operand" "")
(match_operand:DI 2 "reg_or_8bit_operand" "")]
""
{
@@ -7217,7 +7217,7 @@
(define_expand "builtin_insll"
[(match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "reg_or_0_operand" "")
+ (match_operand:DI 1 "register_operand" "")
(match_operand:DI 2 "reg_or_8bit_operand" "")]
""
{
diff --git a/gcc/config/alpha/ev4.md b/gcc/config/alpha/ev4.md
index cee3ae608ee..5056fa1277a 100644
--- a/gcc/config/alpha/ev4.md
+++ b/gcc/config/alpha/ev4.md
@@ -98,7 +98,7 @@
"ev4_ist"
"store_data_bypass_p")
-; Multiplies use a non-piplined imul unit. Also, "no [ebox] insn can
+; Multiplies use a non-pipelined imul unit. Also, "no [ebox] insn can
; be issued exactly three cycles before an integer multiply completes".
(define_insn_reservation "ev4_imulsi" 21
diff --git a/gcc/config/alpha/ev5.md b/gcc/config/alpha/ev5.md
index 20757e15159..ece25d7e961 100644
--- a/gcc/config/alpha/ev5.md
+++ b/gcc/config/alpha/ev5.md
@@ -18,7 +18,7 @@
;; the Free Software Foundation, 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
-;; EV5 has two asymetric integer units, E0 and E1, plus separate
+;; EV5 has two asymmetric integer units, E0 and E1, plus separate
;; FP add and multiply units.
(define_automaton "ev5_0,ev5_1")
@@ -97,7 +97,7 @@
; Conditional move and branch can issue the same cycle as the test.
(define_bypass 0 "ev5_ilogcmp" "ev5_ibr,ev5_cmov" "if_test_bypass_p")
-; Multiplies use a non-piplined imul unit. Also, "no insn can be issued
+; Multiplies use a non-pipelined imul unit. Also, "no insn can be issued
; to E0 exactly two cycles before an integer multiply completes".
(define_insn_reservation "ev5_imull" 8
@@ -136,7 +136,7 @@
(define_bypass 13 "ev5_imulq" "ev5_imull,ev5_imulq,ev5_imulh")
(define_bypass 15 "ev5_imulh" "ev5_imull,ev5_imulq,ev5_imulh")
-; Similarly for the FPU we have two asymetric units.
+; Similarly for the FPU we have two asymmetric units.
(define_insn_reservation "ev5_fadd" 4
(and (eq_attr "cpu" "ev5")
diff --git a/gcc/config/alpha/ev6.md b/gcc/config/alpha/ev6.md
index 23a09b053a3..561ca709d5d 100644
--- a/gcc/config/alpha/ev6.md
+++ b/gcc/config/alpha/ev6.md
@@ -22,7 +22,7 @@
; expected to help over-much, but a precise description can be important
; for software pipelining.
;
-; EV6 has two symmetric pairs ("clusters") of two asymetric integer
+; EV6 has two symmetric pairs ("clusters") of two asymmetric integer
; units ("upper" and "lower"), yielding pipe names U0, U1, L0, L1.
;
; ??? The clusters have independent register files that are re-synced
diff --git a/gcc/config/alpha/freebsd.h b/gcc/config/alpha/freebsd.h
index 6b10d495b97..0b293610f4c 100644
--- a/gcc/config/alpha/freebsd.h
+++ b/gcc/config/alpha/freebsd.h
@@ -20,6 +20,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }
diff --git a/gcc/config/alpha/osf.h b/gcc/config/alpha/osf.h
index fd72ba38132..f8b4eca49b3 100644
--- a/gcc/config/alpha/osf.h
+++ b/gcc/config/alpha/osf.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler, for DEC Alpha on OSF/1.
- Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2002, 2003
- Free Software Foundation, Inc.
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2002, 2003,
+ 2004 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
This file is part of GCC.
@@ -169,6 +169,10 @@ __enable_execute_stack (void *addr) \
#define LD_INIT_SWITCH "-init"
#define LD_FINI_SWITCH "-fini"
+/* The linker needs a space after "-o". This allows -oldstyle_liblookup to
+ be passed to ld. */
+#define SWITCHES_NEED_SPACES "o"
+
/* 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.
diff --git a/gcc/config/alpha/xm-vms.h b/gcc/config/alpha/xm-vms.h
index bdac52e78aa..cf18b2f7019 100644
--- a/gcc/config/alpha/xm-vms.h
+++ b/gcc/config/alpha/xm-vms.h
@@ -1,5 +1,5 @@
/* Configuration for GNU C-compiler for openVMS/Alpha.
- Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 2001, 2004 Free Software Foundation, Inc.
Contributed by Klaus Kaempf (kkaempf@progis.de).
This file is part of GCC.
@@ -43,3 +43,15 @@ Boston, MA 02111-1307, USA. */
#define HOST_OBJECT_SUFFIX ".obj"
#define DUMPFILE_FORMAT "_%02d_"
+
+#define DELETE_IF_ORDINARY(NAME,ST,VERBOSE_FLAG) \
+do \
+ { \
+ while (stat (NAME, &ST) >= 0 && S_ISREG (ST.st_mode)) \
+ if (unlink (NAME) < 0) \
+ { \
+ if (VERBOSE_FLAG) \
+ perror_with_name (NAME); \
+ break; \
+ } \
+ } while (0)
diff --git a/gcc/config/arm/arm-cores.def b/gcc/config/arm/arm-cores.def
index 774ba6f10f2..cf08aa865f3 100644
--- a/gcc/config/arm/arm-cores.def
+++ b/gcc/config/arm/arm-cores.def
@@ -20,68 +20,73 @@
02111-1307, USA. */
/* Before using #include to read this file, define a macro:
-
- ARM_CORE(CORE_NAME, FLAGS)
+
+ ARM_CORE(CORE_NAME, ARCH, FLAGS, COSTS)
The CORE_NAME is the name of the core, represented as an identifier
- rather than a string constant. The FLAGS are the bitwise-or of the
- traits that apply to that core.
+ rather than a string constant.
+ ARCH is the architecture revision implemeted by the chip.
+ FLAGS are the bitwise-or of the traits that apply to that core.
+ This need not include flags implied by the architecture.
+ COSTS is the name of the rtx_costs routine to use.
If you update this table, you must update the "tune" attribute in
- arm.md. */
+ arm.md.
+
+ Some tools assume no whitespace up to the first "," in each entry. */
-ARM_CORE(arm2, FL_CO_PROC | FL_MODE26, slowmul)
-ARM_CORE(arm250, FL_CO_PROC | FL_MODE26, slowmul)
-ARM_CORE(arm3, FL_CO_PROC | FL_MODE26, slowmul)
-ARM_CORE(arm6, FL_CO_PROC | FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm60, FL_CO_PROC | FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm600, FL_CO_PROC | FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm610, FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm620, FL_CO_PROC | FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm7, FL_CO_PROC | FL_MODE26 | FL_MODE32, slowmul)
+ARM_CORE(arm2, 2, FL_CO_PROC | FL_MODE26, slowmul)
+ARM_CORE(arm250, 2, FL_CO_PROC | FL_MODE26, slowmul)
+ARM_CORE(arm3, 2, FL_CO_PROC | FL_MODE26, slowmul)
+ARM_CORE(arm6, 3, FL_CO_PROC | FL_MODE26, slowmul)
+ARM_CORE(arm60, 3, FL_CO_PROC | FL_MODE26, slowmul)
+ARM_CORE(arm600, 3, FL_CO_PROC | FL_MODE26, slowmul)
+ARM_CORE(arm610, 3, FL_MODE26, slowmul)
+ARM_CORE(arm620, 3, FL_CO_PROC | FL_MODE26, slowmul)
+ARM_CORE(arm7, 3, FL_CO_PROC | FL_MODE26, slowmul)
/* arm7m doesn't exist on its own, but only with D, (and I), but
those don't alter the code, so arm7m is sometimes used. */
-ARM_CORE(arm7m, FL_CO_PROC | FL_MODE26 | FL_MODE32 | FL_ARCH3M, fastmul)
-ARM_CORE(arm7d, FL_CO_PROC | FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm7dm, FL_CO_PROC | FL_MODE26 | FL_MODE32 | FL_ARCH3M, fastmul)
-ARM_CORE(arm7di, FL_CO_PROC | FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm7dmi, FL_CO_PROC | FL_MODE26 | FL_MODE32 | FL_ARCH3M, fastmul)
-ARM_CORE(arm70, FL_CO_PROC | FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm700, FL_CO_PROC | FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm700i, FL_CO_PROC | FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm710, FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm720, FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm710c, FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm7100, FL_MODE26 | FL_MODE32, slowmul)
-ARM_CORE(arm7500, FL_MODE26 | FL_MODE32, slowmul)
+ARM_CORE(arm7m, 3M, FL_CO_PROC | FL_MODE26, fastmul)
+ARM_CORE(arm7d, 3, FL_CO_PROC | FL_MODE26, slowmul)
+ARM_CORE(arm7dm, 3M, FL_CO_PROC | FL_MODE26, fastmul)
+ARM_CORE(arm7di, 3, FL_CO_PROC | FL_MODE26, slowmul)
+ARM_CORE(arm7dmi, 3M, FL_CO_PROC | FL_MODE26, fastmul)
+ARM_CORE(arm70, 3, FL_CO_PROC | FL_MODE26, slowmul)
+ARM_CORE(arm700, 3, FL_CO_PROC | FL_MODE26, slowmul)
+ARM_CORE(arm700i, 3, FL_CO_PROC | FL_MODE26, slowmul)
+ARM_CORE(arm710, 3, FL_MODE26, slowmul)
+ARM_CORE(arm720, 3, FL_MODE26, slowmul)
+ARM_CORE(arm710c, 3, FL_MODE26, slowmul)
+ARM_CORE(arm7100, 3, FL_MODE26, slowmul)
+ARM_CORE(arm7500, 3, FL_MODE26, slowmul)
/* Doesn't have an external co-proc, but does have embedded fpa. */
-ARM_CORE(arm7500fe, FL_CO_PROC | FL_MODE26 | FL_MODE32, slowmul)
+ARM_CORE(arm7500fe, 3, FL_CO_PROC | FL_MODE26, slowmul)
/* V4 Architecture Processors */
-ARM_CORE(arm7tdmi, FL_CO_PROC | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB, fastmul)
-ARM_CORE(arm710t, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB, fastmul)
-ARM_CORE(arm720t, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB, fastmul)
-ARM_CORE(arm740t, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB, fastmul)
-ARM_CORE(arm8, FL_MODE26 | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_LDSCHED, fastmul)
-ARM_CORE(arm810, FL_MODE26 | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_LDSCHED, fastmul)
-ARM_CORE(arm9, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_LDSCHED, fastmul)
-ARM_CORE(arm920, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_LDSCHED, fastmul)
-ARM_CORE(arm920t, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_LDSCHED, fastmul)
-ARM_CORE(arm940t, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_LDSCHED, fastmul)
-ARM_CORE(arm9tdmi, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_LDSCHED, fastmul)
-ARM_CORE(arm9e, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_LDSCHED, 9e)
+ARM_CORE(arm7tdmi, 4T, FL_CO_PROC , fastmul)
+ARM_CORE(arm710t, 4T, 0 , fastmul)
+ARM_CORE(arm720t, 4T, 0 , fastmul)
+ARM_CORE(arm740t, 4T, 0 , fastmul)
+ARM_CORE(arm8, 4, FL_MODE26 | FL_LDSCHED, fastmul)
+ARM_CORE(arm810, 4, FL_MODE26 | FL_LDSCHED, fastmul)
+ARM_CORE(arm9, 4T, FL_LDSCHED, fastmul)
+ARM_CORE(arm920, 4, FL_LDSCHED, fastmul)
+ARM_CORE(arm920t, 4T, FL_LDSCHED, fastmul)
+ARM_CORE(arm940t, 4T, FL_LDSCHED, fastmul)
+ARM_CORE(arm9tdmi, 4T, FL_LDSCHED, fastmul)
+ARM_CORE(arm9e, 4, FL_LDSCHED, 9e)
-ARM_CORE(ep9312, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_LDSCHED | FL_CIRRUS, fastmul)
-ARM_CORE(strongarm, FL_MODE26 | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_LDSCHED | FL_STRONG, fastmul)
-ARM_CORE(strongarm110, FL_MODE26 | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_LDSCHED | FL_STRONG, fastmul)
-ARM_CORE(strongarm1100, FL_MODE26 | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_LDSCHED | FL_STRONG, fastmul)
-ARM_CORE(strongarm1110, FL_MODE26 | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_LDSCHED | FL_STRONG, fastmul)
+ARM_CORE(ep9312, 4T, FL_LDSCHED | FL_CIRRUS, fastmul)
+ARM_CORE(strongarm, 4, FL_MODE26 | FL_LDSCHED | FL_STRONG, fastmul)
+ARM_CORE(strongarm110, 4, FL_MODE26 | FL_LDSCHED | FL_STRONG, fastmul)
+ARM_CORE(strongarm1100, 4, FL_MODE26 | FL_LDSCHED | FL_STRONG, fastmul)
+ARM_CORE(strongarm1110, 4, FL_MODE26 | FL_LDSCHED | FL_STRONG, fastmul)
/* V5 Architecture Processors */
-ARM_CORE(arm10tdmi, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_ARCH5, fastmul)
-ARM_CORE(arm1020t, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_ARCH5, fastmul)
-ARM_CORE(arm926ejs, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E, 9e)
-ARM_CORE(arm1026ejs, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E, 9e)
-ARM_CORE(xscale, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_STRONG | FL_ARCH5 | FL_ARCH5E | FL_XSCALE, xscale)
-ARM_CORE(iwmmxt, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_STRONG | FL_ARCH5 | FL_ARCH5E | FL_XSCALE | FL_IWMMXT, xscale)
+ARM_CORE(arm10tdmi, 5T, FL_LDSCHED, fastmul)
+ARM_CORE(arm1020t, 5T, FL_LDSCHED, fastmul)
+ARM_CORE(arm926ejs, 5TEJ, 0, 9e)
+ARM_CORE(arm1026ejs, 5TEJ, 0, 9e)
+ARM_CORE(xscale, 5TE, FL_LDSCHED | FL_STRONG | FL_XSCALE, xscale)
+ARM_CORE(iwmmxt, 5TE, FL_LDSCHED | FL_STRONG | FL_XSCALE | FL_IWMMXT, xscale)
/* V6 Architecture Processors */
-ARM_CORE(arm1136js, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E | FL_ARCH6, 9e)
-ARM_CORE(arm1136jfs, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E | FL_ARCH6 | FL_VFPV2, 9e)
+ARM_CORE(arm1136js, 6J, 0, 9e)
+ARM_CORE(arm1136jfs, 6J, FL_VFPV2, 9e)
diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h
index 0359fe77116..0605803a3fe 100644
--- a/gcc/config/arm/arm-protos.h
+++ b/gcc/config/arm/arm-protos.h
@@ -100,7 +100,7 @@ extern int cirrus_general_operand (rtx, enum machine_mode);
extern int cirrus_register_operand (rtx, enum machine_mode);
extern int cirrus_shift_const (rtx, enum machine_mode);
extern int cirrus_memory_offset (rtx);
-extern int vfp_mem_operand (rtx);
+extern int arm_coproc_mem_operand (rtx, bool);
extern int vfp_compare_operand (rtx, enum machine_mode);
extern int arm_float_compare_operand (rtx, enum machine_mode);
extern int arm_no_early_store_addr_dep (rtx, rtx);
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 722036f6234..ae9ff3a1b80 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -331,6 +331,19 @@ int arm_structure_size_boundary = DEFAULT_STRUCTURE_SIZE_BOUNDARY;
#define FL_IWMMXT (1 << 29) /* XScale v2 or "Intel Wireless MMX technology". */
+#define FL_FOR_ARCH2 0
+#define FL_FOR_ARCH3 FL_MODE32
+#define FL_FOR_ARCH3M (FL_FOR_ARCH3 | FL_ARCH3M)
+#define FL_FOR_ARCH4 (FL_FOR_ARCH3M | FL_ARCH4)
+#define FL_FOR_ARCH4T (FL_FOR_ARCH4 | FL_THUMB)
+#define FL_FOR_ARCH5 (FL_FOR_ARCH4 | FL_ARCH5)
+#define FL_FOR_ARCH5T (FL_FOR_ARCH5 | FL_THUMB)
+#define FL_FOR_ARCH5E (FL_FOR_ARCH5 | FL_ARCH5E)
+#define FL_FOR_ARCH5TE (FL_FOR_ARCH5E | FL_THUMB)
+#define FL_FOR_ARCH5TEJ FL_FOR_ARCH5TE
+#define FL_FOR_ARCH6 (FL_FOR_ARCH5TE | FL_ARCH6)
+#define FL_FOR_ARCH6J FL_FOR_ARCH6
+
/* The bits in this mask specify which
instructions we are allowed to generate. */
static unsigned long insn_flags = 0;
@@ -363,6 +376,9 @@ int arm_ld_sched = 0;
/* Nonzero if this chip is a StrongARM. */
int arm_is_strong = 0;
+/* Nonzero if this chip is a Cirrus variant. */
+int arm_arch_cirrus = 0;
+
/* Nonzero if this chip supports Intel Wireless MMX technology. */
int arm_arch_iwmmxt = 0;
@@ -419,6 +435,7 @@ struct processors
{
const char *const name;
enum processor_type core;
+ const char *arch;
const unsigned long flags;
bool (* rtx_costs) (rtx, int, int, int *);
};
@@ -428,11 +445,11 @@ struct processors
static const struct processors all_cores[] =
{
/* ARM Cores */
-#define ARM_CORE(NAME, FLAGS, COSTS) \
- {#NAME, arm_none, FLAGS, arm_##COSTS##_rtx_costs},
+#define ARM_CORE(NAME, ARCH, FLAGS, COSTS) \
+ {#NAME, arm_none, #ARCH, FLAGS | FL_FOR_ARCH##ARCH, arm_##COSTS##_rtx_costs},
#include "arm-cores.def"
#undef ARM_CORE
- {NULL, arm_none, 0, NULL}
+ {NULL, arm_none, NULL, 0, NULL}
};
static const struct processors all_architectures[] =
@@ -441,22 +458,23 @@ static const struct processors all_architectures[] =
/* We don't specify rtx_costs here as it will be figured out
from the core. */
- { "armv2", arm2, FL_CO_PROC | FL_MODE26 , NULL},
- { "armv2a", arm2, FL_CO_PROC | FL_MODE26 , NULL},
- { "armv3", arm6, FL_CO_PROC | FL_MODE26 | FL_MODE32 , NULL},
- { "armv3m", arm7m, FL_CO_PROC | FL_MODE26 | FL_MODE32 | FL_ARCH3M , NULL},
- { "armv4", arm7tdmi, FL_CO_PROC | FL_MODE26 | FL_MODE32 | FL_ARCH3M | FL_ARCH4 , NULL},
+ {"armv2", arm2, "2", FL_CO_PROC | FL_MODE26 | FL_FOR_ARCH2, NULL},
+ {"armv2a", arm2, "2", FL_CO_PROC | FL_MODE26 | FL_FOR_ARCH2, NULL},
+ {"armv3", arm6, "3", FL_CO_PROC | FL_MODE26 | FL_FOR_ARCH3, NULL},
+ {"armv3m", arm7m, "3M", FL_CO_PROC | FL_MODE26 | FL_FOR_ARCH3M, NULL},
+ {"armv4", arm7tdmi, "4", FL_CO_PROC | FL_MODE26 | FL_FOR_ARCH4, NULL},
/* Strictly, FL_MODE26 is a permitted option for v4t, but there are no
implementations that support it, so we will leave it out for now. */
- { "armv4t", arm7tdmi, FL_CO_PROC | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB , NULL},
- { "armv5", arm10tdmi, FL_CO_PROC | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_ARCH5 , NULL},
- { "armv5t", arm10tdmi, FL_CO_PROC | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_ARCH5 , NULL},
- { "armv5te", arm1026ejs, FL_CO_PROC | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E , NULL},
- { "armv6", arm1136js, FL_CO_PROC | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E | FL_ARCH6 , NULL},
- { "armv6j", arm1136js, FL_CO_PROC | FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E | FL_ARCH6 , NULL},
- { "ep9312", ep9312, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_LDSCHED | FL_CIRRUS , NULL},
- {"iwmmxt", iwmmxt, FL_MODE32 | FL_ARCH3M | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_STRONG | FL_ARCH5 | FL_ARCH5E | FL_XSCALE | FL_IWMMXT , NULL},
- { NULL, arm_none, 0 , NULL}
+ {"armv4t", arm7tdmi, "4T", FL_CO_PROC | FL_FOR_ARCH4T, NULL},
+ {"armv5", arm10tdmi, "5", FL_CO_PROC | FL_FOR_ARCH5, NULL},
+ {"armv5t", arm10tdmi, "5T", FL_CO_PROC | FL_FOR_ARCH5T, NULL},
+ {"armv5e", arm1026ejs, "5E", FL_CO_PROC | FL_FOR_ARCH5E, NULL},
+ {"armv5te", arm1026ejs, "5TE", FL_CO_PROC | FL_FOR_ARCH5TE, NULL},
+ {"armv6", arm1136js, "6", FL_CO_PROC | FL_FOR_ARCH6, NULL},
+ {"armv6j", arm1136js, "6J", FL_CO_PROC | FL_FOR_ARCH6J, NULL},
+ {"ep9312", ep9312, "4T", FL_LDSCHED | FL_CIRRUS | FL_FOR_ARCH4, NULL},
+ {"iwmmxt", iwmmxt, "5TE", FL_LDSCHED | FL_STRONG | FL_FOR_ARCH5TE | FL_XSCALE | FL_IWMMXT , NULL},
+ {NULL, arm_none, NULL, 0 , NULL}
};
/* This is a magic structure. The 'string' field is magically filled in
@@ -471,6 +489,11 @@ struct arm_cpu_select arm_select[] =
{ NULL, "-mtune=", all_cores }
};
+
+/* The name of the proprocessor macro to define for this architecture. */
+
+char arm_arch_name[] = "__ARM_ARCH_0UNK__";
+
struct fpu_desc
{
const char * name;
@@ -573,6 +596,10 @@ arm_override_options (void)
for (sel = ptr->processors; sel->name != NULL; sel++)
if (streq (ptr->string, sel->name))
{
+ /* Set the architecture define. */
+ if (i != 2)
+ sprintf (arm_arch_name, "__ARM_ARCH_%s__", sel->arch);
+
/* Determine the processor core for which we should
tune code-generation. */
if (/* -mcpu= is a sensible default. */
@@ -611,52 +638,21 @@ arm_override_options (void)
{
const struct processors * sel;
unsigned int sought;
- static const struct cpu_default
- {
- const int cpu;
- const char *const name;
- }
- cpu_defaults[] =
- {
- { TARGET_CPU_arm2, "arm2" },
- { TARGET_CPU_arm6, "arm6" },
- { TARGET_CPU_arm610, "arm610" },
- { TARGET_CPU_arm710, "arm710" },
- { TARGET_CPU_arm7m, "arm7m" },
- { TARGET_CPU_arm7500fe, "arm7500fe" },
- { TARGET_CPU_arm7tdmi, "arm7tdmi" },
- { TARGET_CPU_arm8, "arm8" },
- { TARGET_CPU_arm810, "arm810" },
- { TARGET_CPU_arm9, "arm9" },
- { TARGET_CPU_strongarm, "strongarm" },
- { TARGET_CPU_xscale, "xscale" },
- { TARGET_CPU_ep9312, "ep9312" },
- { TARGET_CPU_iwmmxt, "iwmmxt" },
- { TARGET_CPU_arm926ejs, "arm926ejs" },
- { TARGET_CPU_arm1026ejs, "arm1026ejs" },
- { TARGET_CPU_arm1136js, "arm1136js" },
- { TARGET_CPU_arm1136jfs, "arm1136jfs" },
- { TARGET_CPU_generic, "arm" },
- { 0, 0 }
- };
- const struct cpu_default * def;
-
- /* Find the default. */
- for (def = cpu_defaults; def->name; def++)
- if (def->cpu == TARGET_CPU_DEFAULT)
- break;
+ enum processor_type cpu;
- /* Make sure we found the default CPU. */
- if (def->name == NULL)
- abort ();
-
- /* Find the default CPU's flags. */
- for (sel = all_cores; sel->name != NULL; sel++)
- if (streq (def->name, sel->name))
- break;
-
- if (sel->name == NULL)
- abort ();
+ cpu = TARGET_CPU_DEFAULT;
+ if (cpu == arm_none)
+ {
+#ifdef SUBTARGET_CPU_DEFAULT
+ /* Use the subtarget default CPU if none was specified by
+ configure. */
+ cpu = SUBTARGET_CPU_DEFAULT;
+#endif
+ /* Default to ARM6. */
+ if (cpu == arm_none)
+ cpu = arm6;
+ }
+ sel = &all_cores[cpu];
insn_flags = sel->flags;
@@ -729,6 +725,7 @@ arm_override_options (void)
insn_flags = sel->flags;
}
+ sprintf (arm_arch_name, "__ARM_ARCH_%s__", sel->arch);
if (arm_tune == arm_none)
arm_tune = (enum processor_type) (sel - all_cores);
}
@@ -834,6 +831,7 @@ arm_override_options (void)
arm_arch5e = (insn_flags & FL_ARCH5E) != 0;
arm_arch6 = (insn_flags & FL_ARCH6) != 0;
arm_arch_xscale = (insn_flags & FL_XSCALE) != 0;
+ arm_arch_cirrus = (insn_flags & FL_CIRRUS) != 0;
arm_ld_sched = (tune_flags & FL_LDSCHED) != 0;
arm_is_strong = (tune_flags & FL_STRONG) != 0;
@@ -895,14 +893,17 @@ arm_override_options (void)
else
{
#ifdef FPUTYPE_DEFAULT
- /* Use the default is it is specified for this platform. */
+ /* Use the default if it is specified for this platform. */
arm_fpu_arch = FPUTYPE_DEFAULT;
arm_fpu_tune = FPUTYPE_DEFAULT;
#else
/* Pick one based on CPU type. */
+ /* ??? Some targets assume FPA is the default.
if ((insn_flags & FL_VFP) != 0)
arm_fpu_arch = FPUTYPE_VFP;
- else if (insn_flags & FL_CIRRUS)
+ else
+ */
+ if (arm_arch_cirrus)
arm_fpu_arch = FPUTYPE_MAVERICK;
else
arm_fpu_arch = FPUTYPE_FPA_EMU2;
@@ -2318,11 +2319,8 @@ arm_init_cumulative_args (CUMULATIVE_ARGS *pcum, tree fntype,
bool
arm_needs_doubleword_align (enum machine_mode mode, tree type)
{
- return (mode == DImode
- || mode == DFmode
- || VECTOR_MODE_SUPPORTED_P (mode)
- || (mode == BLKmode
- && TYPE_ALIGN (type) > PARM_BOUNDARY));
+ return (GET_MODE_ALIGNMENT (mode) > PARM_BOUNDARY
+ || (type && TYPE_ALIGN (type) > PARM_BOUNDARY));
}
@@ -2985,25 +2983,44 @@ int
arm_legitimate_address_p (enum machine_mode mode, rtx x, RTX_CODE outer,
int strict_p)
{
+ bool use_ldrd;
+ enum rtx_code code = GET_CODE (x);
+
if (arm_address_register_rtx_p (x, strict_p))
return 1;
- else if (GET_CODE (x) == POST_INC || GET_CODE (x) == PRE_DEC)
+ use_ldrd = (TARGET_LDRD
+ && (mode == DImode
+ || (mode == DFmode && (TARGET_SOFT_FLOAT || TARGET_VFP))));
+
+ if (code == POST_INC || code == PRE_DEC
+ || ((code == PRE_INC || code == POST_DEC)
+ && (use_ldrd || GET_MODE_SIZE (mode) <= 4)))
return arm_address_register_rtx_p (XEXP (x, 0), strict_p);
- else if ((GET_CODE (x) == POST_MODIFY || GET_CODE (x) == PRE_MODIFY)
- && GET_MODE_SIZE (mode) <= 4
+ else if ((code == POST_MODIFY || code == PRE_MODIFY)
&& arm_address_register_rtx_p (XEXP (x, 0), strict_p)
&& GET_CODE (XEXP (x, 1)) == PLUS
&& rtx_equal_p (XEXP (XEXP (x, 1), 0), XEXP (x, 0)))
- return arm_legitimate_index_p (mode, XEXP (XEXP (x, 1), 1), outer,
- strict_p);
+ {
+ rtx addend = XEXP (XEXP (x, 1), 1);
+
+ /* Don't allow ldrd post increment by register becuase it's hard
+ to fixup invalid register choices. */
+ if (use_ldrd
+ && GET_CODE (x) == POST_MODIFY
+ && GET_CODE (addend) == REG)
+ return 0;
+
+ return ((use_ldrd || GET_MODE_SIZE (mode) <= 4)
+ && arm_legitimate_index_p (mode, addend, outer, strict_p));
+ }
/* After reload constants split into minipools will have addresses
from a LABEL_REF. */
else if (reload_completed
- && (GET_CODE (x) == LABEL_REF
- || (GET_CODE (x) == CONST
+ && (code == LABEL_REF
+ || (code == CONST
&& GET_CODE (XEXP (x, 0)) == PLUS
&& GET_CODE (XEXP (XEXP (x, 0), 0)) == LABEL_REF
&& GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT)))
@@ -3012,38 +3029,7 @@ arm_legitimate_address_p (enum machine_mode mode, rtx x, RTX_CODE outer,
else if (mode == TImode)
return 0;
- else if (mode == DImode || (TARGET_SOFT_FLOAT && mode == DFmode))
- {
- if (GET_CODE (x) == PLUS
- && arm_address_register_rtx_p (XEXP (x, 0), strict_p)
- && GET_CODE (XEXP (x, 1)) == CONST_INT)
- {
- HOST_WIDE_INT val = INTVAL (XEXP (x, 1));
-
- if (val == 4 || val == -4 || val == -8)
- return 1;
- }
- }
-
- else if (TARGET_HARD_FLOAT && TARGET_VFP && mode == DFmode)
- {
- if (GET_CODE (x) == PLUS
- && arm_address_register_rtx_p (XEXP (x, 0), strict_p)
- && GET_CODE (XEXP (x, 1)) == CONST_INT)
- {
- HOST_WIDE_INT val = INTVAL (XEXP (x, 1));
-
- /* ??? valid arm offsets are a subset of VFP offsets.
- For now only allow this subset. Proper fix is to add an
- additional memory constraint for arm address modes.
- Alternatively allow full vfp addressing and let
- output_move_double fix it up with a sub-optimal sequence. */
- if (val == 4 || val == -4 || val == -8)
- return 1;
- }
- }
-
- else if (GET_CODE (x) == PLUS)
+ else if (code == PLUS)
{
rtx xop0 = XEXP (x, 0);
rtx xop1 = XEXP (x, 1);
@@ -3067,17 +3053,12 @@ arm_legitimate_address_p (enum machine_mode mode, rtx x, RTX_CODE outer,
#endif
else if (GET_MODE_CLASS (mode) != MODE_FLOAT
- && GET_CODE (x) == SYMBOL_REF
+ && code == SYMBOL_REF
&& CONSTANT_POOL_ADDRESS_P (x)
&& ! (flag_pic
&& symbol_mentioned_p (get_pool_constant (x))))
return 1;
- else if ((GET_CODE (x) == PRE_INC || GET_CODE (x) == POST_DEC)
- && (GET_MODE_SIZE (mode) <= 4)
- && arm_address_register_rtx_p (XEXP (x, 0), strict_p))
- return 1;
-
return 0;
}
@@ -3099,16 +3080,31 @@ arm_legitimate_index_p (enum machine_mode mode, rtx index, RTX_CODE outer,
&& INTVAL (index) > -1024
&& (INTVAL (index) & 3) == 0);
- if (arm_address_register_rtx_p (index, strict_p)
- && GET_MODE_SIZE (mode) <= 4)
- return 1;
-
if (TARGET_REALLY_IWMMXT && VALID_IWMMXT_REG_MODE (mode))
return (code == CONST_INT
&& INTVAL (index) < 1024
&& INTVAL (index) > -1024
&& (INTVAL (index) & 3) == 0);
+ if (arm_address_register_rtx_p (index, strict_p)
+ && (GET_MODE_SIZE (mode) <= 4))
+ return 1;
+
+ if (mode == DImode || mode == DFmode)
+ {
+ if (code == CONST_INT)
+ {
+ HOST_WIDE_INT val = INTVAL (index);
+
+ if (TARGET_LDRD)
+ return val > -256 && val < 256;
+ else
+ return val == 4 || val == -4 || val == -8;
+ }
+
+ return TARGET_LDRD && arm_address_register_rtx_p (index, strict_p);
+ }
+
if (GET_MODE_SIZE (mode) <= 4
&& ! (arm_arch4
&& (mode == HImode
@@ -4616,14 +4612,15 @@ cirrus_shift_const (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
}
-/* Return TRUE if OP is a valid VFP memory address pattern. */
-/* Copied from cirrus_memory_offset but with restricted offset range. */
+/* Return TRUE if OP is a valid VFP memory address pattern.
+ WB if true if writeback address modes are allowed. */
int
-vfp_mem_operand (rtx op)
+arm_coproc_mem_operand (rtx op, bool wb)
{
- /* Reject eliminable registers. */
+ rtx ind;
+ /* Reject eliminable registers. */
if (! (reload_in_progress || reload_completed)
&& ( reg_mentioned_p (frame_pointer_rtx, op)
|| reg_mentioned_p (arg_pointer_rtx, op)
@@ -4634,35 +4631,49 @@ vfp_mem_operand (rtx op)
return FALSE;
/* Constants are converted into offsets from labels. */
- if (GET_CODE (op) == MEM)
- {
- rtx ind;
-
- ind = XEXP (op, 0);
+ if (GET_CODE (op) != MEM)
+ return FALSE;
- if (reload_completed
- && (GET_CODE (ind) == LABEL_REF
- || (GET_CODE (ind) == CONST
- && GET_CODE (XEXP (ind, 0)) == PLUS
- && GET_CODE (XEXP (XEXP (ind, 0), 0)) == LABEL_REF
- && GET_CODE (XEXP (XEXP (ind, 0), 1)) == CONST_INT)))
- return TRUE;
+ ind = XEXP (op, 0);
- /* Match: (mem (reg)). */
- if (GET_CODE (ind) == REG)
- return arm_address_register_rtx_p (ind, 0);
+ if (reload_completed
+ && (GET_CODE (ind) == LABEL_REF
+ || (GET_CODE (ind) == CONST
+ && GET_CODE (XEXP (ind, 0)) == PLUS
+ && GET_CODE (XEXP (XEXP (ind, 0), 0)) == LABEL_REF
+ && GET_CODE (XEXP (XEXP (ind, 0), 1)) == CONST_INT)))
+ return TRUE;
- /* Match:
- (mem (plus (reg)
- (const))). */
- if (GET_CODE (ind) == PLUS
- && GET_CODE (XEXP (ind, 0)) == REG
- && REG_MODE_OK_FOR_BASE_P (XEXP (ind, 0), VOIDmode)
- && GET_CODE (XEXP (ind, 1)) == CONST_INT
- && INTVAL (XEXP (ind, 1)) > -1024
- && INTVAL (XEXP (ind, 1)) < 1024)
- return TRUE;
- }
+ /* Match: (mem (reg)). */
+ if (GET_CODE (ind) == REG)
+ return arm_address_register_rtx_p (ind, 0);
+
+ /* Autoincremment addressing modes. */
+ if (wb
+ && (GET_CODE (ind) == PRE_INC
+ || GET_CODE (ind) == POST_INC
+ || GET_CODE (ind) == PRE_DEC
+ || GET_CODE (ind) == POST_DEC))
+ return arm_address_register_rtx_p (XEXP (ind, 0), 0);
+
+ if (wb
+ && (GET_CODE (ind) == POST_MODIFY || GET_CODE (ind) == PRE_MODIFY)
+ && arm_address_register_rtx_p (XEXP (ind, 0), 0)
+ && GET_CODE (XEXP (ind, 1)) == PLUS
+ && rtx_equal_p (XEXP (XEXP (ind, 1), 0), XEXP (ind, 0)))
+ ind = XEXP (ind, 1);
+
+ /* Match:
+ (plus (reg)
+ (const)). */
+ if (GET_CODE (ind) == PLUS
+ && GET_CODE (XEXP (ind, 0)) == REG
+ && REG_MODE_OK_FOR_BASE_P (XEXP (ind, 0), VOIDmode)
+ && GET_CODE (XEXP (ind, 1)) == CONST_INT
+ && INTVAL (XEXP (ind, 1)) > -1024
+ && INTVAL (XEXP (ind, 1)) < 1024
+ && (INTVAL (XEXP (ind, 1)) & 3) == 0)
+ return TRUE;
return FALSE;
}
@@ -4686,7 +4697,7 @@ vfp_compare_operand (rtx op, enum machine_mode mode)
enum reg_class
vfp_secondary_reload_class (enum machine_mode mode, rtx x)
{
- if (vfp_mem_operand (x) || s_register_operand (x, mode))
+ if (arm_coproc_mem_operand (x, FALSE) || s_register_operand (x, mode))
return NO_REGS;
return GENERAL_REGS;
@@ -7877,7 +7888,7 @@ print_multi_reg (FILE *stream, const char *instr, int reg, int mask)
/* Add a ^ character for the 26-bit ABI, but only if we were loading
the PC. Otherwise we would generate an UNPREDICTABLE instruction.
- Strictly speaking the instruction would be unpredicatble only if
+ Strictly speaking the instruction would be unpredictable only if
we were writing back the base register as well, but since we never
want to generate an LDM type 2 instruction (register bank switching)
which is what you get if the PC is not being loaded, we do not need
@@ -8386,7 +8397,9 @@ output_move_double (rtx *operands)
break;
case PRE_INC:
- abort (); /* Should never happen now. */
+ if (!TARGET_LDRD)
+ abort (); /* Should never happen now. */
+ output_asm_insn ("ldr%?d\t%0, [%m1, #8]!", operands);
break;
case PRE_DEC:
@@ -8398,7 +8411,33 @@ output_move_double (rtx *operands)
break;
case POST_DEC:
- abort (); /* Should never happen now. */
+ if (!TARGET_LDRD)
+ abort (); /* Should never happen now. */
+ output_asm_insn ("ldr%?d\t%0, [%m1], #-8", operands);
+ break;
+
+ case PRE_MODIFY:
+ case POST_MODIFY:
+ otherops[0] = operands[0];
+ otherops[1] = XEXP (XEXP (XEXP (operands[1], 0), 1), 0);
+ otherops[2] = XEXP (XEXP (XEXP (operands[1], 0), 1), 1);
+
+ if (GET_CODE (XEXP (operands[1], 0)) == PRE_MODIFY)
+ {
+ if (reg_overlap_mentioned_p (otherops[0], otherops[2]))
+ {
+ /* Registers overlap so split out the increment. */
+ output_asm_insn ("add%?\t%1, %1, %2", otherops);
+ output_asm_insn ("ldr%?d\t%0, [%1] @split", otherops);
+ }
+ else
+ output_asm_insn ("ldr%?d\t%0, [%1, %2]!", otherops);
+ }
+ else
+ {
+ /* We only allow constant increments, so this is safe. */
+ output_asm_insn ("ldr%?d\t%0, [%1], %2", otherops);
+ }
break;
case LABEL_REF:
@@ -8431,7 +8470,41 @@ output_move_double (rtx *operands)
output_asm_insn ("ldm%?ib\t%1, %M0", otherops);
return "";
}
-
+ }
+ if (TARGET_LDRD
+ && (GET_CODE (otherops[2]) == REG
+ || (GET_CODE (otherops[2]) == CONST_INT
+ && INTVAL (otherops[2]) > -256
+ && INTVAL (otherops[2]) < 256)))
+ {
+ if (reg_overlap_mentioned_p (otherops[0],
+ otherops[2]))
+ {
+ /* Swap base and index registers over to
+ avoid a conflict. */
+ otherops[1] = XEXP (XEXP (operands[1], 0), 1);
+ otherops[2] = XEXP (XEXP (operands[1], 0), 0);
+
+ }
+ /* If both registers conflict, it will usually
+ have been fixed by a splitter. */
+ if (reg_overlap_mentioned_p (otherops[0],
+ otherops[2]))
+ {
+ output_asm_insn ("add%?\t%1, %1, %2", otherops);
+ output_asm_insn ("ldr%?d\t%0, [%1]",
+ otherops);
+ return "";
+ }
+ else
+ {
+ output_asm_insn ("ldr%?d\t%0, [%1, %2]",
+ otherops);
+ return "";
+ }
+ }
+ if (GET_CODE (otherops[2]) == CONST_INT)
+ {
if (!(const_ok_for_arm (INTVAL (otherops[2]))))
output_asm_insn ("sub%?\t%0, %1, #%n2", otherops);
else
@@ -8477,7 +8550,9 @@ output_move_double (rtx *operands)
break;
case PRE_INC:
- abort (); /* Should never happen now. */
+ if (!TARGET_LDRD)
+ abort (); /* Should never happen now. */
+ output_asm_insn ("str%?d\t%1, [%m0, #8]!", operands);
break;
case PRE_DEC:
@@ -8489,11 +8564,26 @@ output_move_double (rtx *operands)
break;
case POST_DEC:
- abort (); /* Should never happen now. */
+ if (!TARGET_LDRD)
+ abort (); /* Should never happen now. */
+ output_asm_insn ("str%?d\t%1, [%m0], #-8", operands);
+ break;
+
+ case PRE_MODIFY:
+ case POST_MODIFY:
+ otherops[0] = operands[1];
+ otherops[1] = XEXP (XEXP (XEXP (operands[0], 0), 1), 0);
+ otherops[2] = XEXP (XEXP (XEXP (operands[0], 0), 1), 1);
+
+ if (GET_CODE (XEXP (operands[0], 0)) == PRE_MODIFY)
+ output_asm_insn ("str%?d\t%0, [%1, %2]!", otherops);
+ else
+ output_asm_insn ("str%?d\t%0, [%1], %2", otherops);
break;
case PLUS:
- if (GET_CODE (XEXP (XEXP (operands[0], 0), 1)) == CONST_INT)
+ otherops[2] = XEXP (XEXP (operands[0], 0), 1);
+ if (GET_CODE (otherops[2]) == CONST_INT)
{
switch ((int) INTVAL (XEXP (XEXP (operands[0], 0), 1)))
{
@@ -8510,6 +8600,17 @@ output_move_double (rtx *operands)
return "";
}
}
+ if (TARGET_LDRD
+ && (GET_CODE (otherops[2]) == REG
+ || (GET_CODE (otherops[2]) == CONST_INT
+ && INTVAL (otherops[2]) > -256
+ && INTVAL (otherops[2]) < 256)))
+ {
+ otherops[0] = operands[1];
+ otherops[1] = XEXP (XEXP (operands[0], 0), 0);
+ output_asm_insn ("str%?d\t%0, [%1, %2]", otherops);
+ return "";
+ }
/* Fall through */
default:
@@ -11395,9 +11496,11 @@ arm_hard_regno_mode_ok (unsigned int regno, enum machine_mode mode)
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)
- /* We allow any value to be stored in the general registers. */
- return 1;
+ return !(TARGET_LDRD && GET_MODE_SIZE (mode) > 4 && (regno & 1) != 0);
if ( regno == FRAME_POINTER_REGNUM
|| regno == ARG_POINTER_REGNUM)
@@ -14447,6 +14550,6 @@ arm_no_early_mul_dep (rtx producer, rtx consumer)
static bool
arm_promote_prototypes (tree t ATTRIBUTE_UNUSED)
{
- return arm_abi == ARM_ABI_APCS || arm_abi == ARM_ABI_ATPCS;
+ return !TARGET_AAPCS_BASED;
}
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index c32907e7610..518e387bba8 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -26,6 +26,9 @@
#ifndef GCC_ARM_H
#define GCC_ARM_H
+/* The archetecture define. */
+extern char arm_arch_name[];
+
/* Target CPU builtins. */
#define TARGET_CPU_CPP_BUILTINS() \
do \
@@ -69,45 +72,20 @@
\
builtin_assert ("cpu=arm"); \
builtin_assert ("machine=arm"); \
+ \
+ builtin_define (arm_arch_name); \
+ if (arm_arch_cirrus) \
+ builtin_define ("__MAVERICK__"); \
+ if (arm_arch_xscale) \
+ builtin_define ("__XSCALE__"); \
+ if (arm_arch_iwmmxt) \
+ builtin_define ("__IWMMXT__"); \
} while (0)
-#define TARGET_CPU_arm2 0x0000
-#define TARGET_CPU_arm250 0x0000
-#define TARGET_CPU_arm3 0x0000
-#define TARGET_CPU_arm6 0x0001
-#define TARGET_CPU_arm600 0x0001
-#define TARGET_CPU_arm610 0x0002
-#define TARGET_CPU_arm7 0x0001
-#define TARGET_CPU_arm7m 0x0004
-#define TARGET_CPU_arm7dm 0x0004
-#define TARGET_CPU_arm7dmi 0x0004
-#define TARGET_CPU_arm700 0x0001
-#define TARGET_CPU_arm710 0x0002
-#define TARGET_CPU_arm7100 0x0002
-#define TARGET_CPU_arm7500 0x0002
-#define TARGET_CPU_arm7500fe 0x1001
-#define TARGET_CPU_arm7tdmi 0x0008
-#define TARGET_CPU_arm8 0x0010
-#define TARGET_CPU_arm810 0x0020
-#define TARGET_CPU_strongarm 0x0040
-#define TARGET_CPU_strongarm110 0x0040
-#define TARGET_CPU_strongarm1100 0x0040
-#define TARGET_CPU_arm9 0x0080
-#define TARGET_CPU_arm9tdmi 0x0080
-#define TARGET_CPU_xscale 0x0100
-#define TARGET_CPU_ep9312 0x0200
-#define TARGET_CPU_iwmmxt 0x0400
-#define TARGET_CPU_arm926ejs 0x0800
-#define TARGET_CPU_arm1026ejs 0x1000
-#define TARGET_CPU_arm1136js 0x2000
-#define TARGET_CPU_arm1136jfs 0x4000
-/* Configure didn't specify. */
-#define TARGET_CPU_generic 0x8000
-
/* The various ARM cores. */
enum processor_type
{
-#define ARM_CORE(NAME, FLAGS, COSTS) \
+#define ARM_CORE(NAME, ARCH, FLAGS, COSTS) \
NAME,
#include "arm-cores.def"
#undef ARM_CORE
@@ -115,6 +93,15 @@ enum processor_type
arm_none
};
+enum target_cpus
+{
+#define ARM_CORE(NAME, ARCH, FLAGS, COSTS) \
+ TARGET_CPU_##NAME,
+#include "arm-cores.def"
+#undef ARM_CORE
+ TARGET_CPU_generic
+};
+
/* The processor for which instructions should be scheduled. */
extern enum processor_type arm_tune;
@@ -159,69 +146,9 @@ extern GTY(()) rtx aof_pic_label;
#define TARGET_CPU_DEFAULT TARGET_CPU_generic
#endif
-/* If the configuration file doesn't specify the cpu, the subtarget may
- override it. If it doesn't, then default to an ARM6. */
-#if TARGET_CPU_DEFAULT == TARGET_CPU_generic
-#undef TARGET_CPU_DEFAULT
-
-#ifdef SUBTARGET_CPU_DEFAULT
-#define TARGET_CPU_DEFAULT SUBTARGET_CPU_DEFAULT
-#else
-#define TARGET_CPU_DEFAULT TARGET_CPU_arm6
-#endif
-#endif
-
-#if TARGET_CPU_DEFAULT == TARGET_CPU_arm2
-#define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_2__"
-#else
-#if TARGET_CPU_DEFAULT == TARGET_CPU_arm6 || TARGET_CPU_DEFAULT == TARGET_CPU_arm610 || TARGET_CPU_DEFAULT == TARGET_CPU_arm7500fe
-#define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_3__"
-#else
-#if TARGET_CPU_DEFAULT == TARGET_CPU_arm7m
-#define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_3M__"
-#else
-#if TARGET_CPU_DEFAULT == TARGET_CPU_arm7tdmi || TARGET_CPU_DEFAULT == TARGET_CPU_arm9 || TARGET_CPU_DEFAULT == TARGET_CPU_arm9tdmi
-#define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_4T__"
-#else
-#if TARGET_CPU_DEFAULT == TARGET_CPU_arm8 || TARGET_CPU_DEFAULT == TARGET_CPU_arm810 || TARGET_CPU_DEFAULT == TARGET_CPU_strongarm || TARGET_CPU_DEFAULT == TARGET_CPU_strongarm110 || TARGET_CPU_DEFAULT == TARGET_CPU_strongarm1100
-#define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_4__"
-#else
-#if TARGET_CPU_DEFAULT == TARGET_CPU_xscale
-#define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_5TE__ -D__XSCALE__"
-#else
-#if TARGET_CPU_DEFAULT == TARGET_CPU_ep9312
-#define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_4T__ -D__MAVERICK__"
-/* Set TARGET_DEFAULT to the default, but without soft-float. */
-#ifdef TARGET_DEFAULT
-#undef TARGET_DEFAULT
-#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME)
-#endif
-#else
-#if TARGET_CPU_DEFAULT == TARGET_CPU_iwmmxt
-#define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_5TE__ -D__XSCALE__ -D__IWMMXT__"
-#else
-#if (TARGET_CPU_DEFAULT == TARGET_CPU_arm926ejs || \
- TARGET_CPU_DEFAULT == TARGET_CPU_arm1026ejs)
-#define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_5TEJ__"
-#else
-#if (TARGET_CPU_DEFAULT == TARGET_CPU_arm1136js || \
- TARGET_CPU_DEFAULT == TARGET_CPU_arm1136jfs)
-#define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_6J__"
-#else
-#error Unrecognized value in TARGET_CPU_DEFAULT.
-#endif
-#endif
-#endif
-#endif
-#endif
-#endif
-#endif
-#endif
-#endif
-#endif
#undef CPP_SPEC
-#define CPP_SPEC "%(cpp_cpu_arch) %(subtarget_cpp_spec) \
+#define CPP_SPEC "%(subtarget_cpp_spec) \
%{mapcs-32:%{mapcs-26: \
%e-mapcs-26 and -mapcs-32 may not be used together}} \
%{msoft-float:%{mhard-float: \
@@ -229,96 +156,6 @@ extern GTY(()) rtx aof_pic_label;
%{mbig-endian:%{mlittle-endian: \
%e-mbig-endian and -mlittle-endian may not be used together}}"
-/* Set the architecture define -- if -march= is set, then it overrides
- the -mcpu= setting. */
-#define CPP_CPU_ARCH_SPEC "\
-%{march=arm2:-D__ARM_ARCH_2__} \
-%{march=arm250:-D__ARM_ARCH_2__} \
-%{march=arm3:-D__ARM_ARCH_2__} \
-%{march=arm6:-D__ARM_ARCH_3__} \
-%{march=arm600:-D__ARM_ARCH_3__} \
-%{march=arm610:-D__ARM_ARCH_3__} \
-%{march=arm7:-D__ARM_ARCH_3__} \
-%{march=arm700:-D__ARM_ARCH_3__} \
-%{march=arm710:-D__ARM_ARCH_3__} \
-%{march=arm720:-D__ARM_ARCH_3__} \
-%{march=arm7100:-D__ARM_ARCH_3__} \
-%{march=arm7500:-D__ARM_ARCH_3__} \
-%{march=arm7500fe:-D__ARM_ARCH_3__} \
-%{march=arm7m:-D__ARM_ARCH_3M__} \
-%{march=arm7dm:-D__ARM_ARCH_3M__} \
-%{march=arm7dmi:-D__ARM_ARCH_3M__} \
-%{march=arm7tdmi:-D__ARM_ARCH_4T__} \
-%{march=arm8:-D__ARM_ARCH_4__} \
-%{march=arm810:-D__ARM_ARCH_4__} \
-%{march=arm9:-D__ARM_ARCH_4T__} \
-%{march=arm920:-D__ARM_ARCH_4__} \
-%{march=arm920t:-D__ARM_ARCH_4T__} \
-%{march=arm926ejs:-D__ARM_ARCH_5TEJ__} \
-%{march=arm9tdmi:-D__ARM_ARCH_4T__} \
-%{march=arm1026ejs:-D__ARM_ARCH_5TEJ__} \
-%{march=arm1136js:-D__ARM_ARCH_6J__} \
-%{march=arm1136jfs:-D__ARM_ARCH_6J__} \
-%{march=strongarm:-D__ARM_ARCH_4__} \
-%{march=strongarm110:-D__ARM_ARCH_4__} \
-%{march=strongarm1100:-D__ARM_ARCH_4__} \
-%{march=xscale:-D__ARM_ARCH_5TE__} \
-%{march=xscale:-D__XSCALE__} \
-%{march=ep9312:-D__ARM_ARCH_4T__} \
-%{march=ep9312:-D__MAVERICK__} \
-%{march=armv2:-D__ARM_ARCH_2__} \
-%{march=armv2a:-D__ARM_ARCH_2__} \
-%{march=armv3:-D__ARM_ARCH_3__} \
-%{march=armv3m:-D__ARM_ARCH_3M__} \
-%{march=armv4:-D__ARM_ARCH_4__} \
-%{march=armv4t:-D__ARM_ARCH_4T__} \
-%{march=armv5:-D__ARM_ARCH_5__} \
-%{march=armv5t:-D__ARM_ARCH_5T__} \
-%{march=armv5e:-D__ARM_ARCH_5E__} \
-%{march=armv5te:-D__ARM_ARCH_5TE__} \
-%{march=armv6:-D__ARM_ARCH6__} \
-%{march=armv6j:-D__ARM_ARCH6J__} \
-%{!march=*: \
- %{mcpu=arm2:-D__ARM_ARCH_2__} \
- %{mcpu=arm250:-D__ARM_ARCH_2__} \
- %{mcpu=arm3:-D__ARM_ARCH_2__} \
- %{mcpu=arm6:-D__ARM_ARCH_3__} \
- %{mcpu=arm600:-D__ARM_ARCH_3__} \
- %{mcpu=arm610:-D__ARM_ARCH_3__} \
- %{mcpu=arm7:-D__ARM_ARCH_3__} \
- %{mcpu=arm700:-D__ARM_ARCH_3__} \
- %{mcpu=arm710:-D__ARM_ARCH_3__} \
- %{mcpu=arm720:-D__ARM_ARCH_3__} \
- %{mcpu=arm7100:-D__ARM_ARCH_3__} \
- %{mcpu=arm7500:-D__ARM_ARCH_3__} \
- %{mcpu=arm7500fe:-D__ARM_ARCH_3__} \
- %{mcpu=arm7m:-D__ARM_ARCH_3M__} \
- %{mcpu=arm7dm:-D__ARM_ARCH_3M__} \
- %{mcpu=arm7dmi:-D__ARM_ARCH_3M__} \
- %{mcpu=arm7tdmi:-D__ARM_ARCH_4T__} \
- %{mcpu=arm8:-D__ARM_ARCH_4__} \
- %{mcpu=arm810:-D__ARM_ARCH_4__} \
- %{mcpu=arm9:-D__ARM_ARCH_4T__} \
- %{mcpu=arm920:-D__ARM_ARCH_4__} \
- %{mcpu=arm920t:-D__ARM_ARCH_4T__} \
- %{mcpu=arm926ejs:-D__ARM_ARCH_5TEJ__} \
- %{mcpu=arm9tdmi:-D__ARM_ARCH_4T__} \
- %{mcpu=arm1026ejs:-D__ARM_ARCH_5TEJ__} \
- %{mcpu=arm1136js:-D__ARM_ARCH_6J__} \
- %{mcpu=arm1136jfs:-D__ARM_ARCH_6J__} \
- %{mcpu=strongarm:-D__ARM_ARCH_4__} \
- %{mcpu=strongarm110:-D__ARM_ARCH_4__} \
- %{mcpu=strongarm1100:-D__ARM_ARCH_4__} \
- %{mcpu=xscale:-D__ARM_ARCH_5TE__} \
- %{mcpu=xscale:-D__XSCALE__} \
- %{mcpu=ep9312:-D__ARM_ARCH_4T__} \
- %{mcpu=ep9312:-D__MAVERICK__} \
- %{mcpu=iwmmxt:-D__ARM_ARCH_5TE__} \
- %{mcpu=iwmmxt:-D__XSCALE__} \
- %{mcpu=iwmmxt:-D__IWMMXT__} \
- %{!mcpu*:%(cpp_cpu_arch_default)}} \
-"
-
#ifndef CC1_SPEC
#define CC1_SPEC ""
#endif
@@ -333,8 +170,6 @@ extern GTY(()) rtx aof_pic_label;
Do not define this macro if it does not need to do anything. */
#define EXTRA_SPECS \
- { "cpp_cpu_arch", CPP_CPU_ARCH_SPEC }, \
- { "cpp_cpu_arch_default", CPP_ARCH_DEFAULT_SPEC }, \
{ "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }, \
SUBTARGET_EXTRA_SPECS
@@ -471,6 +306,9 @@ extern GTY(()) rtx aof_pic_label;
? (target_flags & THUMB_FLAG_LEAF_BACKTRACE) \
: (target_flags & THUMB_FLAG_BACKTRACE))
#define TARGET_CIRRUS_FIX_INVALID_INSNS (target_flags & CIRRUS_FIX_INVALID_INSNS)
+#define TARGET_LDRD (arm_arch5e && ARM_DOUBLEWORD_ALIGN)
+#define TARGET_AAPCS_BASED \
+ (arm_abi != ARM_ABI_APCS && arm_abi != ARM_ABI_ATPCS)
/* SUBTARGET_SWITCHES is used to add flags on a per-config basis. */
#ifndef SUBTARGET_SWITCHES
@@ -669,21 +507,6 @@ enum float_abi_type
extern enum float_abi_type arm_float_abi;
-/* Default floating point architecture. Override in sub-target if
- necessary.
- FIXME: Is this still necessary/desirable? Do we want VFP chips to
- default to VFP unless overridden by a subtarget? If so it would be best
- to remove these definitions. It also assumes there is only one cpu model
- with a Maverick fpu. */
-#ifndef FPUTYPE_DEFAULT
-#define FPUTYPE_DEFAULT FPUTYPE_FPA_EMU2
-#endif
-
-#if TARGET_CPU_DEFAULT == TARGET_CPU_ep9312
-#undef FPUTYPE_DEFAULT
-#define FPUTYPE_DEFAULT FPUTYPE_MAVERICK
-#endif
-
/* Which ABI to use. */
enum arm_abi_type
{
@@ -724,7 +547,7 @@ extern int thumb_code;
extern int arm_is_strong;
/* Nonzero if this chip is a Cirrus variant. */
-extern int arm_is_cirrus;
+extern int arm_arch_cirrus;
/* Nonzero if this chip supports Intel XScale with Wireless MMX technology. */
extern int arm_arch_iwmmxt;
@@ -834,8 +657,8 @@ extern int arm_is_6_or_7;
#define UNITS_PER_WORD 4
/* True if natural alignment is used for doubleword types. */
-#define ARM_DOUBLEWORD_ALIGN \
- (arm_abi == ARM_ABI_AAPCS || arm_abi == ARM_ABI_IWMMXT)
+#define ARM_DOUBLEWORD_ALIGN TARGET_AAPCS_BASED
+
#define DOUBLEWORD_ALIGNMENT 64
#define PARM_BOUNDARY 32
@@ -895,6 +718,17 @@ extern const char * structure_size_string;
/* Nonzero if move instructions will actually fail to work
when given unaligned data. */
#define STRICT_ALIGNMENT 1
+
+/* wchar_t is unsigned under the AAPCS. */
+#ifndef WCHAR_TYPE
+#define WCHAR_TYPE (TARGET_AAPCS_BASED ? "unsigned int" : "int")
+
+#define WCHAR_TYPE_SIZE BITS_PER_WORD
+#endif
+
+#ifndef SIZE_TYPE
+#define SIZE_TYPE (TARGET_AAPCS_BASED ? "unsigned int" : "long unsigned int")
+#endif
/* Standard register usage. */
@@ -1472,6 +1306,7 @@ enum reg_class
accessed without using a load.
'U' Prefixes an extended memory constraint where:
'Uv' is an address valid for VFP load/store insns.
+ 'Uy' is an address valid for iwmmxt load/store insns.
'Uq' is an address valid for ldrsb. */
#define EXTRA_CONSTRAINT_STR_ARM(OP, C, STR) \
@@ -1482,7 +1317,8 @@ enum reg_class
&& CONSTANT_POOL_ADDRESS_P (XEXP (OP, 0))) : \
((C) == 'S') ? (optimize > 0 && CONSTANT_ADDRESS_P (OP)) : \
((C) == 'T') ? cirrus_memory_offset (OP) : \
- ((C) == 'U' && (STR)[1] == 'v') ? vfp_mem_operand (OP) : \
+ ((C) == 'U' && (STR)[1] == 'v') ? arm_coproc_mem_operand (OP, FALSE) : \
+ ((C) == 'U' && (STR)[1] == 'y') ? arm_coproc_mem_operand (OP, TRUE) : \
((C) == 'U' && (STR)[1] == 'q') \
? arm_extendqisi_mem_op (OP, GET_MODE (OP)) \
: 0)
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 7255b325997..554b332283b 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -4073,7 +4073,7 @@
)
(define_insn "*arm_movdi"
- [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r, o<>")
+ [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r ,m")
(match_operand:DI 1 "di_operand" "rIK,mi,r"))]
"TARGET_ARM
&& !(TARGET_HARD_FLOAT && (TARGET_MAVERICK || TARGET_VFP))
@@ -4087,6 +4087,26 @@
(set_attr "neg_pool_range" "*,1008,*")]
)
+;; We can't actually do base+index doubleword loads if the index and
+;; destination overlap. Split here so that we at least have chance to
+;; schedule.
+(define_split
+ [(set (match_operand:DI 0 "s_register_operand" "")
+ (mem:DI (plus:SI (match_operand:SI 1 "s_register_operand" "")
+ (match_operand:SI 2 "s_register_operand" ""))))]
+ "TARGET_LDRD
+ && reg_overlap_mentioned_p (operands[0], operands[1])
+ && reg_overlap_mentioned_p (operands[0], operands[2])"
+ [(set (match_dup 4)
+ (plus:SI (match_dup 1)
+ (match_dup 2)))
+ (set (match_dup 0)
+ (mem:DI (match_dup 4)))]
+ "
+ operands[4] = gen_rtx_REG (SImode, REGNO(operands[0]));
+ "
+)
+
;;; ??? This should have alternatives for constants.
;;; ??? This was originally identical to the movdf_insn pattern.
;;; ??? The 'i' constraint looks funny, but it should always be replaced by
diff --git a/gcc/config/arm/crti.asm b/gcc/config/arm/crti.asm
index ac58e44838d..3597e42b02e 100644
--- a/gcc/config/arm/crti.asm
+++ b/gcc/config/arm/crti.asm
@@ -42,12 +42,12 @@
#ifdef __thumb__
.thumb
- push {r4, r5, r6, r7, lr}
+ push {r3, r4, r5, r6, r7, lr}
#else
.arm
# Create a stack frame and save any call-preserved registers
mov ip, sp
- stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc}
+ stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc}
sub fp, ip, #4
#endif
.endm
diff --git a/gcc/config/arm/crtn.asm b/gcc/config/arm/crtn.asm
index 9ad75e3f2aa..714060ce60d 100644
--- a/gcc/config/arm/crtn.asm
+++ b/gcc/config/arm/crtn.asm
@@ -43,17 +43,19 @@
# sequences here, it is just not worth it. Instead keep things
# simple. Restore all the save resgisters, including the link
# register and then perform the correct function return instruction.
+ # We also save/restore r3 to ensure stack alignment.
.macro FUNC_END
#ifdef __thumb__
.thumb
- pop {r4, r5, r6, r7}
+ pop {r3, r4, r5, r6, r7}
pop {r3}
mov lr, r3
#else
.arm
- ldmdb fp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr}
+ sub sp, fp, #40
+ ldmfd sp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr}
#endif
#if defined __THUMB_INTERWORK__ || defined __thumb__
diff --git a/gcc/config/arm/freebsd.h b/gcc/config/arm/freebsd.h
index cfeb479a54a..cc3f72725b6 100644
--- a/gcc/config/arm/freebsd.h
+++ b/gcc/config/arm/freebsd.h
@@ -20,6 +20,7 @@
Boston, MA 02111-1307, USA. */
+#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }
diff --git a/gcc/config/arm/iwmmxt.md b/gcc/config/arm/iwmmxt.md
index e1b00538c1f..758847fd547 100644
--- a/gcc/config/arm/iwmmxt.md
+++ b/gcc/config/arm/iwmmxt.md
@@ -64,8 +64,8 @@
[(set_attr "predicable" "yes")])
(define_insn "*iwmmxt_arm_movdi"
- [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r, o<>,y,y,yr,y,yrm")
- (match_operand:DI 1 "di_operand" "rIK,mi,r ,y,yr,y,yrm,y"))]
+ [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r, m,y,y,yr,y,yrUy")
+ (match_operand:DI 1 "di_operand" "rIK,mi,r,y,yr,y,yrUy,y"))]
"TARGET_REALLY_IWMMXT"
"*
{
diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md
index 6f7e2a7a639..7008ab40c76 100644
--- a/gcc/config/arm/vfp.md
+++ b/gcc/config/arm/vfp.md
@@ -136,8 +136,8 @@
;; DImode moves
(define_insn "*arm_movdi_vfp"
- [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r,o<>,w,r,w,w ,Uv")
- (match_operand:DI 1 "di_operand" "rIK,mi,r ,r,w,w,Uvi,w"))]
+ [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r,m,w,r,w,w, Uv")
+ (match_operand:DI 1 "di_operand" "rIK,mi,r,r,w,w,Uvi,w"))]
"TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"
"*
switch (which_alternative)
diff --git a/gcc/config/c4x/c4x.c b/gcc/config/c4x/c4x.c
index 3d1e74885aa..850bcef44b9 100644
--- a/gcc/config/c4x/c4x.c
+++ b/gcc/config/c4x/c4x.c
@@ -1244,7 +1244,7 @@ c4x_emit_move_sequence (rtx *operands, enum machine_mode mode)
&& dp_reg_operand (XEXP (op1, 0), mode))
{
/* expand_increment will sometimes create a LO_SUM immediate
- address. Undo this sillyness. */
+ address. Undo this silliness. */
op1 = XEXP (op1, 1);
}
diff --git a/gcc/config/c4x/c4x.md b/gcc/config/c4x/c4x.md
index 0999adca406..1ea954abdd8 100644
--- a/gcc/config/c4x/c4x.md
+++ b/gcc/config/c4x/c4x.md
@@ -154,7 +154,7 @@
; not for 'c'.
; The 'f' constraint is only for float register operands---when
-; a register satisying the 'f' constraint is used as a dst operand,
+; a register satisfying the 'f' constraint is used as a dst operand,
; the CC gets clobbered (except for LDFcond).
; The ! in front of the 'b' constraint says to GCC to disparage the
@@ -190,7 +190,7 @@
; didn't allow it to move the CC around.
; Note that fundamental operations, such as moves, must not clobber the
-; CC. Thus movqi choses a move instruction that doesn't clobber the CC.
+; CC. Thus movqi chooses a move instruction that doesn't clobber the CC.
; If GCC wants to combine a move with a compare, it is smart enough to
; chose the move instruction that sets the CC.
diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c
index 4bbb02e26f3..9ca9d2d3551 100644
--- a/gcc/config/cris/cris.c
+++ b/gcc/config/cris/cris.c
@@ -2944,7 +2944,7 @@ cris_split_movdx (rtx *operands)
int reverse
= (refers_to_regno_p (dregno, dregno + 1, addr, NULL) != 0);
- /* The original code imples that we can't do
+ /* The original code implies that we can't do
move.x [rN+],rM move.x [rN],rM+1
when rN is dead, because of REG_NOTES damage. That is
consistent with what I've seen, so don't try it.
diff --git a/gcc/config/darwin-c.c b/gcc/config/darwin-c.c
index abe0a6b28b8..281d1668685 100644
--- a/gcc/config/darwin-c.c
+++ b/gcc/config/darwin-c.c
@@ -44,7 +44,8 @@ static void push_field_alignment (int);
static void pop_field_alignment (void);
static const char *find_subframework_file (const char *, const char *);
static void add_system_framework_path (char *);
-static const char *find_subframework_header (cpp_reader *pfile, const char *header);
+static const char *find_subframework_header (cpp_reader *pfile, const char *header,
+ cpp_dir **dirp);
typedef struct align_stack
{
@@ -166,11 +167,13 @@ static int max_frameworks = 0;
/* Remember which frameworks have been seen, so that we can ensure
that all uses of that framework come from the same framework. DIR
is the place where the named framework NAME, which is of length
- LEN, was found. */
+ LEN, was found. We copy the directory name from NAME, as it will be
+ freed by others. */
static void
add_framework (const char *name, size_t len, cpp_dir *dir)
{
+ char *dir_name;
int i;
for (i = 0; i < num_frameworks; ++i)
{
@@ -183,10 +186,14 @@ add_framework (const char *name, size_t len, cpp_dir *dir)
if (i >= max_frameworks)
{
max_frameworks = i*2;
+ max_frameworks += i == 0;
frameworks_in_use = xrealloc (frameworks_in_use,
max_frameworks*sizeof(*frameworks_in_use));
}
- frameworks_in_use[num_frameworks].name = name;
+ dir_name = xmalloc (len + 1);
+ memcpy (dir_name, name, len);
+ dir_name[len] = '\0';
+ frameworks_in_use[num_frameworks].name = dir_name;
frameworks_in_use[num_frameworks].len = len;
frameworks_in_use[num_frameworks].dir = dir;
++num_frameworks;
@@ -272,7 +279,8 @@ framework_construct_pathname (const char *fname, cpp_dir *dir)
if (stat (frname, &st) == 0)
{
- add_framework (fname, fname_len, dir);
+ if (fast_dir == 0)
+ add_framework (fname, fname_len, dir);
return frname;
}
}
@@ -445,7 +453,7 @@ darwin_register_frameworks (int stdinc)
returns non-zero. */
static const char*
-find_subframework_header (cpp_reader *pfile, const char *header)
+find_subframework_header (cpp_reader *pfile, const char *header, cpp_dir **dirp)
{
const char *fname = header;
struct cpp_buffer *b;
@@ -457,7 +465,14 @@ find_subframework_header (cpp_reader *pfile, const char *header)
{
n = find_subframework_file (fname, cpp_get_path (cpp_get_file (b)));
if (n)
- return n;
+ {
+ /* Logically, the place where we found the subframework is
+ the place where we found the Framework that contains the
+ subframework. This is useful for tracking wether or not
+ we are in a system header. */
+ *dirp = cpp_get_dir (cpp_get_file (b));
+ return n;
+ }
}
return 0;
diff --git a/gcc/config/fr30/fr30.h b/gcc/config/fr30/fr30.h
index c7459f83205..81b5f1f9bc5 100644
--- a/gcc/config/fr30/fr30.h
+++ b/gcc/config/fr30/fr30.h
@@ -1208,7 +1208,7 @@ extern struct rtx_def * fr30_compare_op0;
extern struct rtx_def * fr30_compare_op1;
/*}}}*/
-/*{{{ PERDICATE_CODES. */
+/*{{{ PREDICATE_CODES. */
#define PREDICATE_CODES \
{ "stack_add_operand", { CONST_INT }}, \
diff --git a/gcc/config/frv/frv-protos.h b/gcc/config/frv/frv-protos.h
index 642635090d0..3a0e386d25d 100644
--- a/gcc/config/frv/frv-protos.h
+++ b/gcc/config/frv/frv-protos.h
@@ -53,7 +53,7 @@ extern frv_cpu_t frv_cpu_type; /* value of -mcpu= */
/* Define functions defined in frv.c */
extern void frv_expand_prologue (void);
-extern void frv_expand_epilogue (int);
+extern void frv_expand_epilogue (bool);
extern void frv_override_options (void);
extern void frv_optimization_options (int, int);
extern void frv_conditional_register_usage (void);
@@ -225,7 +225,7 @@ extern int even_acc_operand (rtx, enum machine_mode);
extern int quad_acc_operand (rtx, enum machine_mode);
extern int accg_operand (rtx, enum machine_mode);
extern rtx frv_matching_accg_for_acc (rtx);
-extern void frv_expand_fdpic_call (rtx *, int);
+extern void frv_expand_fdpic_call (rtx *, bool, bool);
extern rtx frv_gen_GPsym2reg (rtx, rtx);
#endif
diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c
index 242dfcde9ce..92e0dd213fa 100644
--- a/gcc/config/frv/frv.c
+++ b/gcc/config/frv/frv.c
@@ -285,6 +285,7 @@ static bool frv_cannot_force_const_mem (rtx);
static const char *unspec_got_name (int);
static void frv_output_const_unspec (FILE *,
const struct frv_unspec *);
+static bool frv_function_ok_for_sibcall (tree, tree);
static rtx frv_struct_value_rtx (tree, int);
/* Initialize the GCC target structure. */
@@ -319,6 +320,8 @@ static rtx frv_struct_value_rtx (tree, int);
#undef TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE
#define TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE frv_use_dfa_pipeline_interface
+#undef TARGET_FUNCTION_OK_FOR_SIBCALL
+#define TARGET_FUNCTION_OK_FOR_SIBCALL frv_function_ok_for_sibcall
#undef TARGET_CANNOT_FORCE_CONST_MEM
#define TARGET_CANNOT_FORCE_CONST_MEM frv_cannot_force_const_mem
@@ -332,6 +335,16 @@ static rtx frv_struct_value_rtx (tree, int);
struct gcc_target targetm = TARGET_INITIALIZER;
+/* Any function call that satisfies the machine-independent
+ requirements is eligible on FR-V. */
+
+static bool
+frv_function_ok_for_sibcall (tree decl ATTRIBUTE_UNUSED,
+ tree exp ATTRIBUTE_UNUSED)
+{
+ return true;
+}
+
/* Return true if SYMBOL is a small data symbol and relocation RELOC
can be used to access it directly in a load or store. */
@@ -1749,7 +1762,7 @@ frv_function_epilogue (FILE *file ATTRIBUTE_UNUSED,
slots for arguments passed to the current function. */
void
-frv_expand_epilogue (int sibcall_p)
+frv_expand_epilogue (bool emit_return)
{
frv_stack_t *info = frv_stack_info ();
rtx fp = frame_pointer_rtx;
@@ -1769,9 +1782,7 @@ frv_expand_epilogue (int sibcall_p)
/* Set RETURN_ADDR to the address we should return to. Set it to NULL if
no return instruction should be emitted. */
- if (sibcall_p)
- return_addr = 0;
- else if (info->save_p[LR_REGNO])
+ if (info->save_p[LR_REGNO])
{
int lr_offset;
rtx mem;
@@ -1814,8 +1825,20 @@ frv_expand_epilogue (int sibcall_p)
if (current_function_calls_eh_return)
emit_insn (gen_stack_adjust (sp, sp, EH_RETURN_STACKADJ_RTX));
- if (return_addr)
+ if (emit_return)
emit_jump_insn (gen_epilogue_return (return_addr));
+ else
+ {
+ rtx lr = return_addr;
+
+ if (REGNO (return_addr) != LR_REGNO)
+ {
+ lr = gen_rtx_REG (Pmode, LR_REGNO);
+ emit_move_insn (lr, return_addr);
+ }
+
+ emit_insn (gen_rtx_USE (VOIDmode, lr));
+ }
}
@@ -3529,7 +3552,7 @@ frv_legitimate_memory_operand (rtx op, enum machine_mode mode, int condexec_p)
}
void
-frv_expand_fdpic_call (rtx *operands, int ret_value)
+frv_expand_fdpic_call (rtx *operands, bool ret_value, bool sibcall)
{
rtx lr = gen_rtx_REG (Pmode, LR_REGNO);
rtx picreg = get_hard_reg_initial_val (SImode, FDPIC_REG);
@@ -3565,8 +3588,9 @@ frv_expand_fdpic_call (rtx *operands, int ret_value)
all external functions, so one would have to also mark function
declarations available in the same module with non-default
visibility, which is advantageous in itself. */
- if (GET_CODE (addr) == SYMBOL_REF && !SYMBOL_REF_LOCAL_P (addr)
- && TARGET_INLINE_PLT)
+ if (GET_CODE (addr) == SYMBOL_REF
+ && ((!SYMBOL_REF_LOCAL_P (addr) && TARGET_INLINE_PLT)
+ || sibcall))
{
rtx x, dest;
dest = gen_reg_rtx (SImode);
@@ -3598,7 +3622,11 @@ frv_expand_fdpic_call (rtx *operands, int ret_value)
picreg = gen_reg_rtx (DImode);
emit_insn (gen_movdi_ldd (picreg, addr));
- if (ret_value)
+ if (sibcall && ret_value)
+ c = gen_sibcall_value_fdpicdi (rvrtx, picreg, const0_rtx);
+ else if (sibcall)
+ c = gen_sibcall_fdpicdi (picreg, const0_rtx);
+ else if (ret_value)
c = gen_call_value_fdpicdi (rvrtx, picreg, const0_rtx, lr);
else
c = gen_call_fdpicdi (picreg, const0_rtx, lr);
@@ -4766,6 +4794,21 @@ call_operand (rtx op, enum machine_mode mode)
return gpr_or_int12_operand (op, mode);
}
+/* Return true if operand is a memory reference suitable for a sibcall. */
+
+int
+sibcall_operand (rtx op, enum machine_mode mode)
+{
+ if (GET_MODE (op) != mode && mode != VOIDmode && GET_CODE (op) != CONST_INT)
+ return FALSE;
+
+ /* Note this doesn't allow reg+reg or reg+imm12 addressing (which should
+ never occur anyway), but prevents reload from not handling the case
+ properly of a call through a pointer on a function that calls
+ vfork/setjmp, etc. due to the need to flush all of the registers to stack. */
+ return gpr_or_int12_operand (op, mode);
+}
+
/* Return true if operator is a kind of relational operator. */
int
@@ -6627,7 +6670,7 @@ frv_ifcvt_init_extra_fields (ce_if_block_t *ce_info ATTRIBUTE_UNUSED)
}
-/* Internal function to add a potenial insn to the list of insns to be inserted
+/* Internal function to add a potential insn to the list of insns to be inserted
if the conditional execution conversion is successful. */
static void
diff --git a/gcc/config/frv/frv.h b/gcc/config/frv/frv.h
index 56e69ef7e23..9c62e36ed40 100644
--- a/gcc/config/frv/frv.h
+++ b/gcc/config/frv/frv.h
@@ -109,7 +109,7 @@
%{mmedia} %{mno-media} \
%{mmuladd} %{mno-muladd} \
%{mpack} %{mno-pack} \
- %{mfdpic} \
+ %{mno-fdpic:-mnopic} %{mfdpic} \
%{fpic|fpie: -mpic} %{fPIC|fPIE: -mPIC} %{mlibrary-pic}}"
/* Another C string constant used much like `LINK_SPEC'. The difference
@@ -151,7 +151,7 @@
%{mcpu=tomcat: %(cpp_fr500)} \
%{mcpu=simple: %(cpp_simple)} \
%{!mcpu*: %(cpp_cpu_default)} \
-%{mno-media: -D__FRV_ACC__=0 %{msoft-float: -D__FRV_FPR__=0}} \
+%{mno-media: -U__FRV_ACC__ -D__FRV_ACC__=0 %{msoft-float: -U__FRV_FPR__ -D__FRV_FPR__=0}} \
%{mhard-float: -D__FRV_HARD_FLOAT__} \
%{msoft-float: -U__FRV_HARD_FLOAT__} \
%{mgpr-32: -U__FRV_GPR__ -D__FRV_GPR__=32} \
@@ -203,7 +203,7 @@
-D__FRV_GPR__=32 \
-D__FRV_FPR__=0 \
-D__FRV_ACC__=0 \
-%{mmedia: -D__FRV_ACC__=8} \
+%{mmedia: -U__FRV_ACC__ -D__FRV_ACC__=8} \
%{mhard-float|mmedia: -D__FRV_FPR__=64}"
#define MASK_DEFAULT_FRV \
@@ -931,7 +931,7 @@ extern int target_flags;
#define LAST_ARG_REGNUM (FIRST_ARG_REGNUM + FRV_NUM_ARG_REGS - 1)
/* Registers used by the exception handling functions. These should be
- registers that are not otherwised used by the calling sequence. */
+ registers that are not otherwise used by the calling sequence. */
#define FIRST_EH_REGNUM 14
#define LAST_EH_REGNUM 15
@@ -3110,8 +3110,10 @@ do { \
{ "odd_fpr_operand", { REG, SUBREG }}, \
{ "dbl_memory_one_insn_operand", { MEM }}, \
{ "dbl_memory_two_insn_operand", { MEM }}, \
- { "call_operand", { REG, SUBREG, PLUS, CONST_INT, \
- SYMBOL_REF, LABEL_REF, CONST }}, \
+ { "call_operand", { REG, SUBREG, CONST_INT, \
+ CONST, SYMBOL_REF }}, \
+ { "sibcall_operand", { REG, SUBREG, CONST_INT, \
+ CONST }}, \
{ "upper_int16_operand", { CONST_INT }}, \
{ "uint16_operand", { CONST_INT }}, \
{ "relational_operator", { EQ, NE, LE, LT, GE, GT, \
diff --git a/gcc/config/frv/frv.md b/gcc/config/frv/frv.md
index ef2b49d128c..92329cc443d 100644
--- a/gcc/config/frv/frv.md
+++ b/gcc/config/frv/frv.md
@@ -2788,7 +2788,7 @@
[(set_attr "length" "8")
(set_attr "type" "multi")])
-;; Patterns for addsi3/subdi3 after spliting
+;; Patterns for addsi3/subdi3 after splitting
(define_insn "adddi3_lower"
[(set (match_operand:SI 0 "integer_register_operand" "=d")
(plus:SI (match_operand:SI 1 "integer_register_operand" "d")
@@ -5260,7 +5260,7 @@
operands[2] = const0_rtx;
if (TARGET_FDPIC)
- frv_expand_fdpic_call (operands, 0);
+ frv_expand_fdpic_call (operands, false, false);
else
emit_call_insn (gen_call_internal (addr, operands[1], operands[2], lr));
@@ -5308,7 +5308,7 @@
(match_operand 1 "" ""))
(clobber (match_operand:SI 2 "lr_operand" "=l"))]
"TARGET_FDPIC"
- "calll %M0"
+ "call%i0l %M0"
[(set_attr "length" "4")
(set_attr "type" "jumpl")])
@@ -5325,6 +5325,65 @@
[(set_attr "length" "4")
(set_attr "type" "call,jumpl")])
+(define_expand "sibcall"
+ [(use (match_operand:QI 0 "" ""))
+ (use (match_operand 1 "" ""))
+ (use (match_operand 2 "" ""))
+ (use (match_operand 3 "" ""))]
+ ""
+ "
+{
+ rtx addr;
+
+ if (GET_CODE (operands[0]) != MEM)
+ abort ();
+
+ addr = XEXP (operands[0], 0);
+ if (! sibcall_operand (addr, Pmode))
+ addr = force_reg (Pmode, addr);
+
+ if (! operands[2])
+ operands[2] = const0_rtx;
+
+ if (TARGET_FDPIC)
+ frv_expand_fdpic_call (operands, false, true);
+ else
+ emit_call_insn (gen_sibcall_internal (addr, operands[1], operands[2]));
+
+ DONE;
+}")
+
+;; It might seem that these sibcall patterns are missing references to
+;; LR, but they're not necessary because sibcall_epilogue will make
+;; sure LR is restored, and having LR here will set
+;; regs_ever_used[REG_LR], forcing it to be saved on the stack, and
+;; then restored in sibcalls and regular return code paths, even if
+;; the function becomes a leaf function after tail-call elimination.
+
+;; We must not use a call-saved register here. `W' limits ourselves
+;; to gr14 or gr15, but since we're almost running out of constraint
+;; letters, and most other call-clobbered registers are often used for
+;; argument-passing, this will do.
+(define_insn "sibcall_internal"
+ [(call (mem:QI (match_operand:SI 0 "sibcall_operand" "WNOP"))
+ (match_operand 1 "" ""))
+ (use (match_operand 2 "" ""))
+ (return)]
+ "! TARGET_FDPIC"
+ "jmp%i0l %M0"
+ [(set_attr "length" "4")
+ (set_attr "type" "jumpl")])
+
+(define_insn "sibcall_fdpicdi"
+ [(call (mem:QI (match_operand:DI 0 "fdpic_fptr_operand" "W"))
+ (match_operand 1 "" ""))
+ (return)]
+ "TARGET_FDPIC"
+ "jmp%i0l %M0"
+ [(set_attr "length" "4")
+ (set_attr "type" "jumpl")])
+
+
;; Subroutine call instruction returning a value. Operand 0 is the hard
;; register in which the value is returned. There are three more operands, the
;; same as the three operands of the `call' instruction (but with numbers
@@ -5355,7 +5414,7 @@
operands[3] = const0_rtx;
if (TARGET_FDPIC)
- frv_expand_fdpic_call (operands, 1);
+ frv_expand_fdpic_call (operands, true, false);
else
emit_call_insn (gen_call_value_internal (operands[0], addr, operands[2],
operands[3], lr));
@@ -5382,7 +5441,7 @@
(match_operand 2 "" "")))
(clobber (match_operand:SI 3 "lr_operand" "=l"))]
"TARGET_FDPIC"
- "calll %M1"
+ "call%i1l %M1"
[(set_attr "length" "4")
(set_attr "type" "jumpl")])
@@ -5400,6 +5459,56 @@
[(set_attr "length" "4")
(set_attr "type" "call,jumpl")])
+(define_expand "sibcall_value"
+ [(use (match_operand 0 "" ""))
+ (use (match_operand:QI 1 "" ""))
+ (use (match_operand 2 "" ""))
+ (use (match_operand 3 "" ""))
+ (use (match_operand 4 "" ""))]
+ ""
+ "
+{
+ rtx addr;
+
+ if (GET_CODE (operands[1]) != MEM)
+ abort ();
+
+ addr = XEXP (operands[1], 0);
+ if (! sibcall_operand (addr, Pmode))
+ addr = force_reg (Pmode, addr);
+
+ if (! operands[3])
+ operands[3] = const0_rtx;
+
+ if (TARGET_FDPIC)
+ frv_expand_fdpic_call (operands, true, true);
+ else
+ emit_call_insn (gen_sibcall_value_internal (operands[0], addr, operands[2],
+ operands[3]));
+ DONE;
+}")
+
+(define_insn "sibcall_value_internal"
+ [(set (match_operand 0 "register_operand" "=d")
+ (call (mem:QI (match_operand:SI 1 "sibcall_operand" "WNOP"))
+ (match_operand 2 "" "")))
+ (use (match_operand 3 "" ""))
+ (return)]
+ "! TARGET_FDPIC"
+ "jmp%i1l %M1"
+ [(set_attr "length" "4")
+ (set_attr "type" "jumpl")])
+
+(define_insn "sibcall_value_fdpicdi"
+ [(set (match_operand 0 "register_operand" "=d")
+ (call (mem:QI (match_operand:DI 1 "fdpic_fptr_operand" "W"))
+ (match_operand 2 "" "")))
+ (return)]
+ "TARGET_FDPIC"
+ "jmp%i1l %M1"
+ [(set_attr "length" "4")
+ (set_attr "type" "jumpl")])
+
;; return instruction generated instead of jmp to epilog
(define_expand "return"
[(parallel [(return)
@@ -5430,6 +5539,54 @@
[(set_attr "length" "4")
(set_attr "type" "jump,jumpl")])
+(define_insn "*return_true"
+ [(set (pc)
+ (if_then_else (match_operator:CC 0 "signed_relational_operator"
+ [(match_operand 1 "icc_operand" "t")
+ (const_int 0)])
+ (return)
+ (pc)))]
+ "direct_return_p ()"
+ "b%c0lr %1,%#"
+ [(set_attr "length" "4")
+ (set_attr "type" "jump")])
+
+(define_insn "*return_false"
+ [(set (pc)
+ (if_then_else (match_operator:CC 0 "signed_relational_operator"
+ [(match_operand 1 "icc_operand" "t")
+ (const_int 0)])
+ (pc)
+ (return)))]
+ "direct_return_p ()"
+ "b%C0lr %1,%#"
+ [(set_attr "length" "4")
+ (set_attr "type" "jump")])
+
+(define_insn "*return_unsigned_true"
+ [(set (pc)
+ (if_then_else (match_operator:CC_UNS 0 "unsigned_relational_operator"
+ [(match_operand 1 "icc_operand" "t")
+ (const_int 0)])
+ (return)
+ (pc)))]
+ "direct_return_p ()"
+ "b%c0lr %1,%#"
+ [(set_attr "length" "4")
+ (set_attr "type" "jump")])
+
+(define_insn "*return_unsigned_false"
+ [(set (pc)
+ (if_then_else (match_operator:CC_UNS 0 "unsigned_relational_operator"
+ [(match_operand 1 "icc_operand" "t")
+ (const_int 0)])
+ (pc)
+ (return)))]
+ "direct_return_p ()"
+ "b%C0lr %1,%#"
+ [(set_attr "length" "4")
+ (set_attr "type" "jump")])
+
;; A version of addsi3 for deallocating stack space at the end of the
;; epilogue. The addition is done in parallel with an (unspec_volatile),
;; which represents the clobbering of the deallocated space.
@@ -5634,7 +5791,7 @@
""
"
{
- frv_expand_epilogue (FALSE);
+ frv_expand_epilogue (true);
DONE;
}")
@@ -5650,7 +5807,7 @@
""
"
{
- frv_expand_epilogue (TRUE);
+ frv_expand_epilogue (false);
DONE;
}")
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c
index 46f2ef3bfb6..9efa140c23b 100644
--- a/gcc/config/h8300/h8300.c
+++ b/gcc/config/h8300/h8300.c
@@ -4671,7 +4671,7 @@ same_cmp_following_p (rtx i1)
}
/* Return nonzero if OPERANDS are valid for stm (or ldm) that pushes
- (or pops) N registers. OPERANDS are asssumed to be an array of
+ (or pops) N registers. OPERANDS are assumed to be an array of
registers. */
int
diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h
index 85027925ec1..69d7f7920ae 100644
--- a/gcc/config/i386/cygming.h
+++ b/gcc/config/i386/cygming.h
@@ -25,6 +25,27 @@ Boston, MA 02111-1307, USA. */
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+#ifdef HAVE_GAS_PE_SECREL32_RELOC
+#define DWARF2_DEBUGGING_INFO 1
+
+#undef DBX_REGISTER_NUMBER
+#define DBX_REGISTER_NUMBER(n) (write_symbols == DWARF2_DEBUG \
+ ? svr4_dbx_register_map[n] \
+ : dbx_register_map[n])
+
+/* Use section relative relocations for debugging offsets. Unlike
+ other targets that fake this by putting the section VMA at 0, PE
+ won't allow it. */
+#define ASM_OUTPUT_DWARF_OFFSET(FILE, SIZE, LABEL) \
+ do { \
+ if (SIZE != 4) \
+ abort (); \
+ \
+ fputs ("\t.secrel32\t", FILE); \
+ assemble_name (FILE, LABEL); \
+ } while (0)
+#endif
+
#define TARGET_EXECUTABLE_SUFFIX ".exe"
#include <stdio.h>
diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
index d95be60e23f..42771f95051 100644
--- a/gcc/config/i386/i386-protos.h
+++ b/gcc/config/i386/i386-protos.h
@@ -182,6 +182,9 @@ extern bool ix86_fp_jump_nontrivial_p (enum rtx_code);
extern void x86_order_regs_for_local_alloc (void);
extern void x86_function_profiler (FILE *, int);
extern void x86_emit_floatuns (rtx [2]);
+extern void ix86_emit_fp_unordered_jump (rtx);
+
+extern void ix86_emit_i387_log1p (rtx, rtx);
extern enum rtx_code ix86_reverse_condition (enum rtx_code, enum machine_mode);
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 615f2eeec49..9e8fdf48d0e 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -10636,7 +10636,7 @@ ix86_split_to_parts (rtx operand, rtx *parts, enum machine_mode mode)
long l[3];
REAL_VALUE_FROM_CONST_DOUBLE (r, operand);
- REAL_VALUE_TO_TARGET_LONG_DOUBLE (r, l);
+ real_to_target (l, &r, mode);
/* Do not use shift by 32 to avoid warning on 32bit systems. */
if (HOST_BITS_PER_WIDE_INT >= 64)
parts[0]
@@ -15817,7 +15817,7 @@ ix86_expand_vector_init (rtx target, rtx vals)
}
/* ... values where only first field is non-constant are best loaded
- from the pool and overwriten via move later. */
+ from the pool and overwritten via move later. */
if (!i)
{
rtx op = simplify_gen_subreg (mode, XVECEXP (vals, 0, 0),
@@ -15928,4 +15928,67 @@ output_387_reg_move (rtx insn, rtx *operands)
return "fst\t%y0";
}
+/* Output code to perform a conditional jump to LABEL, if C2 flag in
+ FP status register is set. */
+
+void
+ix86_emit_fp_unordered_jump (rtx label)
+{
+ rtx reg = gen_reg_rtx (HImode);
+ rtx temp;
+
+ emit_insn (gen_x86_fnstsw_1 (reg));
+
+ if (TARGET_USE_SAHF)
+ {
+ emit_insn (gen_x86_sahf_1 (reg));
+
+ temp = gen_rtx_REG (CCmode, FLAGS_REG);
+ temp = gen_rtx_UNORDERED (VOIDmode, temp, const0_rtx);
+ }
+ else
+ {
+ emit_insn (gen_testqi_ext_ccno_0 (reg, GEN_INT (0x04)));
+
+ temp = gen_rtx_REG (CCNOmode, FLAGS_REG);
+ temp = gen_rtx_NE (VOIDmode, temp, const0_rtx);
+ }
+
+ temp = gen_rtx_IF_THEN_ELSE (VOIDmode, temp,
+ gen_rtx_LABEL_REF (VOIDmode, label),
+ pc_rtx);
+ temp = gen_rtx_SET (VOIDmode, pc_rtx, temp);
+ emit_jump_insn (temp);
+}
+
+/* Output code to perform a log1p XFmode calculation. */
+
+void ix86_emit_i387_log1p (rtx op0, rtx op1)
+{
+ rtx label1 = gen_label_rtx ();
+ rtx label2 = gen_label_rtx ();
+
+ rtx tmp = gen_reg_rtx (XFmode);
+ rtx tmp2 = gen_reg_rtx (XFmode);
+
+ emit_insn (gen_absxf2 (tmp, op1));
+ emit_insn (gen_cmpxf (tmp,
+ CONST_DOUBLE_FROM_REAL_VALUE (
+ REAL_VALUE_ATOF ("0.29289321881345247561810596348408353", XFmode),
+ XFmode)));
+ emit_jump_insn (gen_bge (label1));
+
+ emit_move_insn (tmp2, standard_80387_constant_rtx (4)); /* fldln2 */
+ emit_insn (gen_fyl2xp1_xf3 (op0, tmp2, op1));
+ emit_jump (label2);
+
+ emit_label (label1);
+ emit_move_insn (tmp, CONST1_RTX (XFmode));
+ emit_insn (gen_addxf3 (tmp, op1, tmp));
+ emit_move_insn (tmp2, standard_80387_constant_rtx (4)); /* fldln2 */
+ emit_insn (gen_fyl2x_xf3 (op0, tmp2, tmp));
+
+ emit_label (label2);
+}
+
#include "gt-i386.h"
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index c0a3ff4cfe5..b1366799ba3 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -117,7 +117,7 @@
; x87 Floating point
(UNSPEC_FPATAN 65)
(UNSPEC_FYL2X 66)
- (UNSPEC_FSCALE 67)
+ (UNSPEC_FYL2XP1 67)
(UNSPEC_FRNDINT 68)
(UNSPEC_F2XM1 69)
@@ -128,6 +128,12 @@
(UNSPEC_TAN_TAN 83)
(UNSPEC_XTRACT_FRACT 84)
(UNSPEC_XTRACT_EXP 85)
+ (UNSPEC_FSCALE_FRACT 86)
+ (UNSPEC_FSCALE_EXP 87)
+ (UNSPEC_FPREM_F 88)
+ (UNSPEC_FPREM_U 89)
+ (UNSPEC_FPREM1_F 90)
+ (UNSPEC_FPREM1_U 91)
; REP instruction
(UNSPEC_REP 75)
@@ -940,9 +946,9 @@
;; FP compares, step 2
;; Move the fpsw to ax.
-(define_insn "*x86_fnstsw_1"
+(define_insn "x86_fnstsw_1"
[(set (match_operand:HI 0 "register_operand" "=a")
- (unspec:HI [(reg 18)] UNSPEC_FNSTSW))]
+ (unspec:HI [(reg:CCFP 18)] UNSPEC_FNSTSW))]
"TARGET_80387"
"fnstsw\t%0"
[(set_attr "length" "2")
@@ -14857,6 +14863,172 @@
(set_attr "mode" "XF")
(set_attr "athlon_decode" "direct")])
+(define_insn "fpremxf4"
+ [(set (match_operand:XF 0 "register_operand" "=f")
+ (unspec:XF [(match_operand:XF 2 "register_operand" "0")
+ (match_operand:XF 3 "register_operand" "1")]
+ UNSPEC_FPREM_F))
+ (set (match_operand:XF 1 "register_operand" "=u")
+ (unspec:XF [(match_dup 2) (match_dup 3)]
+ UNSPEC_FPREM_U))
+ (set (reg:CCFP 18)
+ (unspec:CCFP [(const_int 0)] UNSPEC_NOP))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+ "fprem"
+ [(set_attr "type" "fpspc")
+ (set_attr "mode" "XF")])
+
+(define_expand "fmodsf3"
+ [(use (match_operand:SF 0 "register_operand" ""))
+ (use (match_operand:SF 1 "register_operand" ""))
+ (use (match_operand:SF 2 "register_operand" ""))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+{
+ rtx label = gen_label_rtx ();
+
+ rtx op1 = gen_reg_rtx (XFmode);
+ rtx op2 = gen_reg_rtx (XFmode);
+
+ emit_insn(gen_extendsfxf2 (op1, operands[1]));
+ emit_insn(gen_extendsfxf2 (op2, operands[2]));
+
+ emit_label (label);
+
+ emit_insn (gen_fpremxf4 (op1, op2, op1, op2));
+ ix86_emit_fp_unordered_jump (label);
+
+ emit_insn (gen_truncxfsf2_noop (operands[0], op1));
+ DONE;
+})
+
+(define_expand "fmoddf3"
+ [(use (match_operand:DF 0 "register_operand" ""))
+ (use (match_operand:DF 1 "register_operand" ""))
+ (use (match_operand:DF 2 "register_operand" ""))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+{
+ rtx label = gen_label_rtx ();
+
+ rtx op1 = gen_reg_rtx (XFmode);
+ rtx op2 = gen_reg_rtx (XFmode);
+
+ emit_insn (gen_extenddfxf2 (op1, operands[1]));
+ emit_insn (gen_extenddfxf2 (op2, operands[2]));
+
+ emit_label (label);
+
+ emit_insn (gen_fpremxf4 (op1, op2, op1, op2));
+ ix86_emit_fp_unordered_jump (label);
+
+ emit_insn (gen_truncxfdf2_noop (operands[0], op1));
+ DONE;
+})
+
+(define_expand "fmodxf3"
+ [(use (match_operand:XF 0 "register_operand" ""))
+ (use (match_operand:XF 1 "register_operand" ""))
+ (use (match_operand:XF 2 "register_operand" ""))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+{
+ rtx label = gen_label_rtx ();
+
+ emit_label (label);
+
+ emit_insn (gen_fpremxf4 (operands[1], operands[2],
+ operands[1], operands[2]));
+ ix86_emit_fp_unordered_jump (label);
+
+ emit_move_insn (operands[0], operands[1]);
+ DONE;
+})
+
+(define_insn "fprem1xf4"
+ [(set (match_operand:XF 0 "register_operand" "=f")
+ (unspec:XF [(match_operand:XF 2 "register_operand" "0")
+ (match_operand:XF 3 "register_operand" "1")]
+ UNSPEC_FPREM1_F))
+ (set (match_operand:XF 1 "register_operand" "=u")
+ (unspec:XF [(match_dup 2) (match_dup 3)]
+ UNSPEC_FPREM1_U))
+ (set (reg:CCFP 18)
+ (unspec:CCFP [(const_int 0)] UNSPEC_NOP))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+ "fprem1"
+ [(set_attr "type" "fpspc")
+ (set_attr "mode" "XF")])
+
+(define_expand "dremsf3"
+ [(use (match_operand:SF 0 "register_operand" ""))
+ (use (match_operand:SF 1 "register_operand" ""))
+ (use (match_operand:SF 2 "register_operand" ""))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+{
+ rtx label = gen_label_rtx ();
+
+ rtx op1 = gen_reg_rtx (XFmode);
+ rtx op2 = gen_reg_rtx (XFmode);
+
+ emit_insn(gen_extendsfxf2 (op1, operands[1]));
+ emit_insn(gen_extendsfxf2 (op2, operands[2]));
+
+ emit_label (label);
+
+ emit_insn (gen_fprem1xf4 (op1, op2, op1, op2));
+ ix86_emit_fp_unordered_jump (label);
+
+ emit_insn (gen_truncxfsf2_noop (operands[0], op1));
+ DONE;
+})
+
+(define_expand "dremdf3"
+ [(use (match_operand:DF 0 "register_operand" ""))
+ (use (match_operand:DF 1 "register_operand" ""))
+ (use (match_operand:DF 2 "register_operand" ""))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+{
+ rtx label = gen_label_rtx ();
+
+ rtx op1 = gen_reg_rtx (XFmode);
+ rtx op2 = gen_reg_rtx (XFmode);
+
+ emit_insn (gen_extenddfxf2 (op1, operands[1]));
+ emit_insn (gen_extenddfxf2 (op2, operands[2]));
+
+ emit_label (label);
+
+ emit_insn (gen_fprem1xf4 (op1, op2, op1, op2));
+ ix86_emit_fp_unordered_jump (label);
+
+ emit_insn (gen_truncxfdf2_noop (operands[0], op1));
+ DONE;
+})
+
+(define_expand "dremxf3"
+ [(use (match_operand:XF 0 "register_operand" ""))
+ (use (match_operand:XF 1 "register_operand" ""))
+ (use (match_operand:XF 2 "register_operand" ""))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+{
+ rtx label = gen_label_rtx ();
+
+ emit_label (label);
+
+ emit_insn (gen_fprem1xf4 (operands[1], operands[2],
+ operands[1], operands[2]));
+ ix86_emit_fp_unordered_jump (label);
+
+ emit_move_insn (operands[0], operands[1]);
+ DONE;
+})
+
(define_insn "*sindf2"
[(set (match_operand:DF 0 "register_operand" "=f")
(unspec:DF [(match_operand:DF 1 "register_operand" "0")] UNSPEC_SIN))]
@@ -14936,7 +15108,7 @@
;; With sincos pattern defined, sin and cos builtin function will be
;; expanded to sincos pattern with one of its outputs left unused.
;; Cse pass will detected, if two sincos patterns can be combined,
-;; otherwise sincos pattern will be splitted back to sin or cos pattern,
+;; otherwise sincos pattern will be split back to sin or cos pattern,
;; depending on the unused output.
(define_insn "sincosdf3"
@@ -15234,6 +15406,19 @@
DONE;
})
+(define_expand "atandf2"
+ [(parallel [(set (match_operand:DF 0 "register_operand" "")
+ (unspec:DF [(match_dup 2)
+ (match_operand:DF 1 "register_operand" "")]
+ UNSPEC_FPATAN))
+ (clobber (match_scratch:DF 3 ""))])]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+{
+ operands[2] = gen_reg_rtx (DFmode);
+ emit_move_insn (operands[2], CONST1_RTX (DFmode)); /* fld1 */
+})
+
(define_insn "atan2sf3_1"
[(set (match_operand:SF 0 "register_operand" "=f")
(unspec:SF [(match_operand:SF 2 "register_operand" "0")
@@ -15259,6 +15444,19 @@
DONE;
})
+(define_expand "atansf2"
+ [(parallel [(set (match_operand:SF 0 "register_operand" "")
+ (unspec:SF [(match_dup 2)
+ (match_operand:SF 1 "register_operand" "")]
+ UNSPEC_FPATAN))
+ (clobber (match_scratch:SF 3 ""))])]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+{
+ operands[2] = gen_reg_rtx (SFmode);
+ emit_move_insn (operands[2], CONST1_RTX (SFmode)); /* fld1 */
+})
+
(define_insn "atan2xf3_1"
[(set (match_operand:XF 0 "register_operand" "=f")
(unspec:XF [(match_operand:XF 2 "register_operand" "0")
@@ -15284,6 +15482,19 @@
DONE;
})
+(define_expand "atanxf2"
+ [(parallel [(set (match_operand:XF 0 "register_operand" "")
+ (unspec:XF [(match_dup 2)
+ (match_operand:XF 1 "register_operand" "")]
+ UNSPEC_FPATAN))
+ (clobber (match_scratch:XF 3 ""))])]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+{
+ operands[2] = gen_reg_rtx (XFmode);
+ emit_move_insn (operands[2], CONST1_RTX (XFmode)); /* fld1 */
+})
+
(define_expand "asindf2"
[(set (match_dup 2)
(float_extend:XF (match_operand:DF 1 "register_operand" "")))
@@ -15418,31 +15629,7 @@
emit_move_insn (operands[3], CONST1_RTX (XFmode)); /* fld1 */
})
-(define_insn "*fyl2x_sfxf3"
- [(set (match_operand:SF 0 "register_operand" "=f")
- (unspec:SF [(match_operand:SF 2 "register_operand" "0")
- (match_operand:XF 1 "register_operand" "u")]
- UNSPEC_FYL2X))
- (clobber (match_scratch:SF 3 "=1"))]
- "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
- "fyl2x"
- [(set_attr "type" "fpspc")
- (set_attr "mode" "SF")])
-
-(define_insn "*fyl2x_dfxf3"
- [(set (match_operand:DF 0 "register_operand" "=f")
- (unspec:DF [(match_operand:DF 2 "register_operand" "0")
- (match_operand:XF 1 "register_operand" "u")]
- UNSPEC_FYL2X))
- (clobber (match_scratch:DF 3 "=1"))]
- "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
- "fyl2x"
- [(set_attr "type" "fpspc")
- (set_attr "mode" "DF")])
-
-(define_insn "*fyl2x_xf3"
+(define_insn "fyl2x_xf3"
[(set (match_operand:XF 0 "register_operand" "=f")
(unspec:XF [(match_operand:XF 2 "register_operand" "0")
(match_operand:XF 1 "register_operand" "u")]
@@ -15455,33 +15642,47 @@
(set_attr "mode" "XF")])
(define_expand "logsf2"
- [(parallel [(set (match_operand:SF 0 "register_operand" "")
- (unspec:SF [(match_operand:SF 1 "register_operand" "")
- (match_dup 2)] UNSPEC_FYL2X))
- (clobber (match_scratch:SF 3 ""))])]
+ [(set (match_dup 2)
+ (float_extend:XF (match_operand:SF 1 "register_operand" "")))
+ (parallel [(set (match_dup 4)
+ (unspec:XF [(match_dup 2)
+ (match_dup 3)] UNSPEC_FYL2X))
+ (clobber (match_scratch:XF 5 ""))])
+ (set (match_operand:SF 0 "register_operand" "")
+ (float_truncate:SF (match_dup 4)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
rtx temp;
operands[2] = gen_reg_rtx (XFmode);
+ operands[3] = gen_reg_rtx (XFmode);
+ operands[4] = gen_reg_rtx (XFmode);
+
temp = standard_80387_constant_rtx (4); /* fldln2 */
- emit_move_insn (operands[2], temp);
+ emit_move_insn (operands[3], temp);
})
(define_expand "logdf2"
- [(parallel [(set (match_operand:DF 0 "register_operand" "")
- (unspec:DF [(match_operand:DF 1 "register_operand" "")
- (match_dup 2)] UNSPEC_FYL2X))
- (clobber (match_scratch:DF 3 ""))])]
+ [(set (match_dup 2)
+ (float_extend:XF (match_operand:DF 1 "register_operand" "")))
+ (parallel [(set (match_dup 4)
+ (unspec:XF [(match_dup 2)
+ (match_dup 3)] UNSPEC_FYL2X))
+ (clobber (match_scratch:XF 5 ""))])
+ (set (match_operand:DF 0 "register_operand" "")
+ (float_truncate:DF (match_dup 4)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
rtx temp;
operands[2] = gen_reg_rtx (XFmode);
+ operands[3] = gen_reg_rtx (XFmode);
+ operands[4] = gen_reg_rtx (XFmode);
+
temp = standard_80387_constant_rtx (4); /* fldln2 */
- emit_move_insn (operands[2], temp);
+ emit_move_insn (operands[3], temp);
})
(define_expand "logxf2"
@@ -15500,33 +15701,47 @@
})
(define_expand "log10sf2"
- [(parallel [(set (match_operand:SF 0 "register_operand" "")
- (unspec:SF [(match_operand:SF 1 "register_operand" "")
- (match_dup 2)] UNSPEC_FYL2X))
- (clobber (match_scratch:SF 3 ""))])]
+ [(set (match_dup 2)
+ (float_extend:XF (match_operand:SF 1 "register_operand" "")))
+ (parallel [(set (match_dup 4)
+ (unspec:XF [(match_dup 2)
+ (match_dup 3)] UNSPEC_FYL2X))
+ (clobber (match_scratch:XF 5 ""))])
+ (set (match_operand:SF 0 "register_operand" "")
+ (float_truncate:SF (match_dup 4)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
rtx temp;
operands[2] = gen_reg_rtx (XFmode);
+ operands[3] = gen_reg_rtx (XFmode);
+ operands[4] = gen_reg_rtx (XFmode);
+
temp = standard_80387_constant_rtx (3); /* fldlg2 */
- emit_move_insn (operands[2], temp);
+ emit_move_insn (operands[3], temp);
})
(define_expand "log10df2"
- [(parallel [(set (match_operand:DF 0 "register_operand" "")
- (unspec:DF [(match_operand:DF 1 "register_operand" "")
- (match_dup 2)] UNSPEC_FYL2X))
- (clobber (match_scratch:DF 3 ""))])]
+ [(set (match_dup 2)
+ (float_extend:XF (match_operand:DF 1 "register_operand" "")))
+ (parallel [(set (match_dup 4)
+ (unspec:XF [(match_dup 2)
+ (match_dup 3)] UNSPEC_FYL2X))
+ (clobber (match_scratch:XF 5 ""))])
+ (set (match_operand:DF 0 "register_operand" "")
+ (float_truncate:DF (match_dup 4)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
rtx temp;
operands[2] = gen_reg_rtx (XFmode);
+ operands[3] = gen_reg_rtx (XFmode);
+ operands[4] = gen_reg_rtx (XFmode);
+
temp = standard_80387_constant_rtx (3); /* fldlg2 */
- emit_move_insn (operands[2], temp);
+ emit_move_insn (operands[3], temp);
})
(define_expand "log10xf2"
@@ -15545,28 +15760,41 @@
})
(define_expand "log2sf2"
- [(parallel [(set (match_operand:SF 0 "register_operand" "")
- (unspec:SF [(match_operand:SF 1 "register_operand" "")
- (match_dup 2)] UNSPEC_FYL2X))
- (clobber (match_scratch:SF 3 ""))])]
+ [(set (match_dup 2)
+ (float_extend:XF (match_operand:SF 1 "register_operand" "")))
+ (parallel [(set (match_dup 4)
+ (unspec:XF [(match_dup 2)
+ (match_dup 3)] UNSPEC_FYL2X))
+ (clobber (match_scratch:XF 5 ""))])
+ (set (match_operand:SF 0 "register_operand" "")
+ (float_truncate:SF (match_dup 4)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
operands[2] = gen_reg_rtx (XFmode);
- emit_move_insn (operands[2], CONST1_RTX (XFmode)); /* fld1 */
+ operands[3] = gen_reg_rtx (XFmode);
+ operands[4] = gen_reg_rtx (XFmode);
+ emit_move_insn (operands[3], CONST1_RTX (XFmode)); /* fld1 */
})
(define_expand "log2df2"
- [(parallel [(set (match_operand:DF 0 "register_operand" "")
- (unspec:DF [(match_operand:DF 1 "register_operand" "")
- (match_dup 2)] UNSPEC_FYL2X))
- (clobber (match_scratch:DF 3 ""))])]
+ [(set (match_dup 2)
+ (float_extend:XF (match_operand:DF 1 "register_operand" "")))
+ (parallel [(set (match_dup 4)
+ (unspec:XF [(match_dup 2)
+ (match_dup 3)] UNSPEC_FYL2X))
+ (clobber (match_scratch:XF 5 ""))])
+ (set (match_operand:DF 0 "register_operand" "")
+ (float_truncate:DF (match_dup 4)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
operands[2] = gen_reg_rtx (XFmode);
- emit_move_insn (operands[2], CONST1_RTX (XFmode)); /* fld1 */
+ operands[3] = gen_reg_rtx (XFmode);
+ operands[4] = gen_reg_rtx (XFmode);
+
+ emit_move_insn (operands[3], CONST1_RTX (XFmode)); /* fld1 */
})
(define_expand "log2xf2"
@@ -15581,52 +15809,56 @@
emit_move_insn (operands[2], CONST1_RTX (XFmode)); /* fld1 */
})
-(define_insn "*fxtractdf3"
- [(set (match_operand:DF 0 "register_operand" "=f")
- (unspec:DF [(match_operand:DF 2 "register_operand" "0")]
- UNSPEC_XTRACT_FRACT))
- (set (match_operand:DF 1 "register_operand" "=u")
- (unspec:DF [(match_dup 2)] UNSPEC_XTRACT_EXP))]
- "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+(define_insn "fyl2xp1_xf3"
+ [(set (match_operand:XF 0 "register_operand" "=f")
+ (unspec:XF [(match_operand:XF 2 "register_operand" "0")
+ (match_operand:XF 1 "register_operand" "u")]
+ UNSPEC_FYL2XP1))
+ (clobber (match_scratch:XF 3 "=1"))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
- "fxtract"
+ "fyl2xp1"
[(set_attr "type" "fpspc")
- (set_attr "mode" "DF")])
+ (set_attr "mode" "XF")])
-(define_expand "logbdf2"
- [(parallel [(set (match_dup 2)
- (unspec:DF [(match_operand:DF 1 "register_operand" "")]
- UNSPEC_XTRACT_FRACT))
- (set (match_operand:DF 0 "register_operand" "")
- (unspec:DF [(match_dup 1)] UNSPEC_XTRACT_EXP))])]
- "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+(define_expand "log1psf2"
+ [(use (match_operand:XF 0 "register_operand" ""))
+ (use (match_operand:XF 1 "register_operand" ""))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
- operands[2] = gen_reg_rtx (DFmode);
+ rtx op0 = gen_reg_rtx (XFmode);
+ rtx op1 = gen_reg_rtx (XFmode);
+
+ emit_insn (gen_extendsfxf2 (op1, operands[1]));
+ ix86_emit_i387_log1p (op0, op1);
+ emit_insn (gen_truncxfsf2_noop (operands[0], op0));
+ DONE;
})
-(define_insn "*fxtractsf3"
- [(set (match_operand:SF 0 "register_operand" "=f")
- (unspec:SF [(match_operand:SF 2 "register_operand" "0")]
- UNSPEC_XTRACT_FRACT))
- (set (match_operand:SF 1 "register_operand" "=u")
- (unspec:SF [(match_dup 2)] UNSPEC_XTRACT_EXP))]
- "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+(define_expand "log1pdf2"
+ [(use (match_operand:XF 0 "register_operand" ""))
+ (use (match_operand:XF 1 "register_operand" ""))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
- "fxtract"
- [(set_attr "type" "fpspc")
- (set_attr "mode" "SF")])
+{
+ rtx op0 = gen_reg_rtx (XFmode);
+ rtx op1 = gen_reg_rtx (XFmode);
-(define_expand "logbsf2"
- [(parallel [(set (match_dup 2)
- (unspec:SF [(match_operand:SF 1 "register_operand" "")]
- UNSPEC_XTRACT_FRACT))
- (set (match_operand:SF 0 "register_operand" "")
- (unspec:SF [(match_dup 1)] UNSPEC_XTRACT_EXP))])]
- "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ emit_insn (gen_extenddfxf2 (op1, operands[1]));
+ ix86_emit_i387_log1p (op0, op1);
+ emit_insn (gen_truncxfdf2_noop (operands[0], op0));
+ DONE;
+})
+
+(define_expand "log1pxf2"
+ [(use (match_operand:XF 0 "register_operand" ""))
+ (use (match_operand:XF 1 "register_operand" ""))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
- operands[2] = gen_reg_rtx (SFmode);
+ ix86_emit_i387_log1p (operands[0], operands[1]);
+ DONE;
})
(define_insn "*fxtractxf3"
@@ -15641,6 +15873,40 @@
[(set_attr "type" "fpspc")
(set_attr "mode" "XF")])
+(define_expand "logbsf2"
+ [(set (match_dup 2)
+ (float_extend:XF (match_operand:SF 1 "register_operand" "")))
+ (parallel [(set (match_dup 3)
+ (unspec:XF [(match_dup 2)] UNSPEC_XTRACT_FRACT))
+ (set (match_dup 4)
+ (unspec:XF [(match_dup 2)] UNSPEC_XTRACT_EXP))])
+ (set (match_operand:SF 0 "register_operand" "")
+ (float_truncate:SF (match_dup 4)))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+{
+ operands[2] = gen_reg_rtx (XFmode);
+ operands[3] = gen_reg_rtx (XFmode);
+ operands[4] = gen_reg_rtx (XFmode);
+})
+
+(define_expand "logbdf2"
+ [(set (match_dup 2)
+ (float_extend:XF (match_operand:DF 1 "register_operand" "")))
+ (parallel [(set (match_dup 3)
+ (unspec:XF [(match_dup 2)] UNSPEC_XTRACT_FRACT))
+ (set (match_dup 4)
+ (unspec:XF [(match_dup 2)] UNSPEC_XTRACT_EXP))])
+ (set (match_operand:DF 0 "register_operand" "")
+ (float_truncate:DF (match_dup 4)))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+{
+ operands[2] = gen_reg_rtx (XFmode);
+ operands[3] = gen_reg_rtx (XFmode);
+ operands[4] = gen_reg_rtx (XFmode);
+})
+
(define_expand "logbxf2"
[(parallel [(set (match_dup 2)
(unspec:XF [(match_operand:XF 1 "register_operand" "")]
@@ -15669,42 +15935,6 @@
operands[3] = gen_reg_rtx (XFmode);
})
-(define_insn "*fscale_sfxf3"
- [(set (match_operand:SF 0 "register_operand" "=f")
- (unspec:SF [(match_operand:XF 2 "register_operand" "0")
- (match_operand:XF 1 "register_operand" "u")]
- UNSPEC_FSCALE))
- (clobber (match_scratch:SF 3 "=1"))]
- "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
- "fscale\;fstp\t%y1"
- [(set_attr "type" "fpspc")
- (set_attr "mode" "SF")])
-
-(define_insn "*fscale_dfxf3"
- [(set (match_operand:DF 0 "register_operand" "=f")
- (unspec:DF [(match_operand:XF 2 "register_operand" "0")
- (match_operand:XF 1 "register_operand" "u")]
- UNSPEC_FSCALE))
- (clobber (match_scratch:DF 3 "=1"))]
- "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
- "fscale\;fstp\t%y1"
- [(set_attr "type" "fpspc")
- (set_attr "mode" "DF")])
-
-(define_insn "*fscale_xf3"
- [(set (match_operand:XF 0 "register_operand" "=f")
- (unspec:XF [(match_operand:XF 2 "register_operand" "0")
- (match_operand:XF 1 "register_operand" "u")]
- UNSPEC_FSCALE))
- (clobber (match_scratch:XF 3 "=1"))]
- "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
- "fscale\;fstp\t%y1"
- [(set_attr "type" "fpspc")
- (set_attr "mode" "XF")])
-
(define_insn "*frndintxf2"
[(set (match_operand:XF 0 "register_operand" "=f")
(unspec:XF [(match_operand:XF 1 "register_operand" "0")]
@@ -15725,6 +15955,20 @@
[(set_attr "type" "fpspc")
(set_attr "mode" "XF")])
+(define_insn "*fscalexf4"
+ [(set (match_operand:XF 0 "register_operand" "=f")
+ (unspec:XF [(match_operand:XF 2 "register_operand" "0")
+ (match_operand:XF 3 "register_operand" "1")]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_operand:XF 1 "register_operand" "=u")
+ (unspec:XF [(match_dup 2) (match_dup 3)]
+ UNSPEC_FSCALE_EXP))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations"
+ "fscale"
+ [(set_attr "type" "fpspc")
+ (set_attr "mode" "XF")])
+
(define_expand "expsf2"
[(set (match_dup 2)
(float_extend:XF (match_operand:SF 1 "register_operand" "")))
@@ -15733,16 +15977,21 @@
(set (match_dup 6) (minus:XF (match_dup 4) (match_dup 5)))
(set (match_dup 7) (unspec:XF [(match_dup 6)] UNSPEC_F2XM1))
(set (match_dup 9) (plus:XF (match_dup 7) (match_dup 8)))
- (parallel [(set (match_operand:SF 0 "register_operand" "")
- (unspec:SF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
- (clobber (match_scratch:SF 5 ""))])]
+ (parallel [(set (match_dup 10)
+ (unspec:XF [(match_dup 9) (match_dup 5)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 11)
+ (unspec:XF [(match_dup 9) (match_dup 5)]
+ UNSPEC_FSCALE_EXP))])
+ (set (match_operand:SF 0 "register_operand" "")
+ (float_truncate:SF (match_dup 10)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
rtx temp;
int i;
- for (i=2; i<10; i++)
+ for (i=2; i<12; i++)
operands[i] = gen_reg_rtx (XFmode);
temp = standard_80387_constant_rtx (5); /* fldl2e */
emit_move_insn (operands[3], temp);
@@ -15755,19 +16004,23 @@
(set (match_dup 4) (mult:XF (match_dup 2) (match_dup 3)))
(set (match_dup 5) (unspec:XF [(match_dup 4)] UNSPEC_FRNDINT))
(set (match_dup 6) (minus:XF (match_dup 4) (match_dup 5)))
-
(set (match_dup 7) (unspec:XF [(match_dup 6)] UNSPEC_F2XM1))
(set (match_dup 9) (plus:XF (match_dup 7) (match_dup 8)))
- (parallel [(set (match_operand:DF 0 "register_operand" "")
- (unspec:DF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
- (clobber (match_scratch:DF 5 ""))])]
+ (parallel [(set (match_dup 10)
+ (unspec:XF [(match_dup 9) (match_dup 5)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 11)
+ (unspec:XF [(match_dup 9) (match_dup 5)]
+ UNSPEC_FSCALE_EXP))])
+ (set (match_operand:DF 0 "register_operand" "")
+ (float_truncate:DF (match_dup 10)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
rtx temp;
int i;
- for (i=2; i<10; i++)
+ for (i=2; i<12; i++)
operands[i] = gen_reg_rtx (XFmode);
temp = standard_80387_constant_rtx (5); /* fldl2e */
emit_move_insn (operands[3], temp);
@@ -15782,15 +16035,18 @@
(set (match_dup 6) (unspec:XF [(match_dup 5)] UNSPEC_F2XM1))
(set (match_dup 8) (plus:XF (match_dup 6) (match_dup 7)))
(parallel [(set (match_operand:XF 0 "register_operand" "")
- (unspec:XF [(match_dup 8) (match_dup 4)] UNSPEC_FSCALE))
- (clobber (match_scratch:XF 5 ""))])]
+ (unspec:XF [(match_dup 8) (match_dup 4)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 9)
+ (unspec:XF [(match_dup 8) (match_dup 4)]
+ UNSPEC_FSCALE_EXP))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
rtx temp;
int i;
- for (i=2; i<9; i++)
+ for (i=2; i<10; i++)
operands[i] = gen_reg_rtx (XFmode);
temp = standard_80387_constant_rtx (5); /* fldl2e */
emit_move_insn (operands[2], temp);
@@ -15805,16 +16061,21 @@
(set (match_dup 6) (minus:XF (match_dup 4) (match_dup 5)))
(set (match_dup 7) (unspec:XF [(match_dup 6)] UNSPEC_F2XM1))
(set (match_dup 9) (plus:XF (match_dup 7) (match_dup 8)))
- (parallel [(set (match_operand:SF 0 "register_operand" "")
- (unspec:SF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
- (clobber (match_scratch:SF 5 ""))])]
+ (parallel [(set (match_dup 10)
+ (unspec:XF [(match_dup 9) (match_dup 5)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 11)
+ (unspec:XF [(match_dup 9) (match_dup 5)]
+ UNSPEC_FSCALE_EXP))])
+ (set (match_operand:SF 0 "register_operand" "")
+ (float_truncate:SF (match_dup 10)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
rtx temp;
int i;
- for (i=2; i<10; i++)
+ for (i=2; i<12; i++)
operands[i] = gen_reg_rtx (XFmode);
temp = standard_80387_constant_rtx (6); /* fldl2t */
emit_move_insn (operands[3], temp);
@@ -15829,16 +16090,21 @@
(set (match_dup 6) (minus:XF (match_dup 4) (match_dup 5)))
(set (match_dup 7) (unspec:XF [(match_dup 6)] UNSPEC_F2XM1))
(set (match_dup 9) (plus:XF (match_dup 7) (match_dup 8)))
- (parallel [(set (match_operand:DF 0 "register_operand" "")
- (unspec:DF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
- (clobber (match_scratch:DF 5 ""))])]
+ (parallel [(set (match_dup 10)
+ (unspec:XF [(match_dup 9) (match_dup 5)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 11)
+ (unspec:XF [(match_dup 9) (match_dup 5)]
+ UNSPEC_FSCALE_EXP))])
+ (set (match_operand:DF 0 "register_operand" "")
+ (float_truncate:DF (match_dup 10)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
rtx temp;
int i;
- for (i=2; i<10; i++)
+ for (i=2; i<12; i++)
operands[i] = gen_reg_rtx (XFmode);
temp = standard_80387_constant_rtx (6); /* fldl2t */
emit_move_insn (operands[3], temp);
@@ -15853,15 +16119,18 @@
(set (match_dup 6) (unspec:XF [(match_dup 5)] UNSPEC_F2XM1))
(set (match_dup 8) (plus:XF (match_dup 6) (match_dup 7)))
(parallel [(set (match_operand:XF 0 "register_operand" "")
- (unspec:XF [(match_dup 8) (match_dup 4)] UNSPEC_FSCALE))
- (clobber (match_scratch:XF 5 ""))])]
+ (unspec:XF [(match_dup 8) (match_dup 4)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 9)
+ (unspec:XF [(match_dup 8) (match_dup 4)]
+ UNSPEC_FSCALE_EXP))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
rtx temp;
int i;
- for (i=2; i<9; i++)
+ for (i=2; i<10; i++)
operands[i] = gen_reg_rtx (XFmode);
temp = standard_80387_constant_rtx (6); /* fldl2t */
emit_move_insn (operands[2], temp);
@@ -15875,15 +16144,20 @@
(set (match_dup 4) (minus:XF (match_dup 2) (match_dup 3)))
(set (match_dup 5) (unspec:XF [(match_dup 4)] UNSPEC_F2XM1))
(set (match_dup 7) (plus:XF (match_dup 5) (match_dup 6)))
- (parallel [(set (match_operand:SF 0 "register_operand" "")
- (unspec:SF [(match_dup 7) (match_dup 3)] UNSPEC_FSCALE))
- (clobber (match_scratch:SF 3 ""))])]
+ (parallel [(set (match_dup 8)
+ (unspec:XF [(match_dup 7) (match_dup 3)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 9)
+ (unspec:XF [(match_dup 7) (match_dup 3)]
+ UNSPEC_FSCALE_EXP))])
+ (set (match_operand:SF 0 "register_operand" "")
+ (float_truncate:SF (match_dup 8)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
int i;
- for (i=2; i<8; i++)
+ for (i=2; i<10; i++)
operands[i] = gen_reg_rtx (XFmode);
emit_move_insn (operands[6], CONST1_RTX (XFmode)); /* fld1 */
})
@@ -15895,15 +16169,20 @@
(set (match_dup 4) (minus:XF (match_dup 2) (match_dup 3)))
(set (match_dup 5) (unspec:XF [(match_dup 4)] UNSPEC_F2XM1))
(set (match_dup 7) (plus:XF (match_dup 5) (match_dup 6)))
- (parallel [(set (match_operand:DF 0 "register_operand" "")
- (unspec:DF [(match_dup 7) (match_dup 3)] UNSPEC_FSCALE))
- (clobber (match_scratch:DF 3 ""))])]
+ (parallel [(set (match_dup 8)
+ (unspec:XF [(match_dup 7) (match_dup 3)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 9)
+ (unspec:XF [(match_dup 7) (match_dup 3)]
+ UNSPEC_FSCALE_EXP))])
+ (set (match_operand:DF 0 "register_operand" "")
+ (float_truncate:DF (match_dup 8)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
int i;
- for (i=2; i<8; i++)
+ for (i=2; i<10; i++)
operands[i] = gen_reg_rtx (XFmode);
emit_move_insn (operands[6], CONST1_RTX (XFmode)); /* fld1 */
})
@@ -15915,55 +16194,125 @@
(set (match_dup 5) (unspec:XF [(match_dup 4)] UNSPEC_F2XM1))
(set (match_dup 7) (plus:XF (match_dup 5) (match_dup 6)))
(parallel [(set (match_operand:XF 0 "register_operand" "")
- (unspec:XF [(match_dup 7) (match_dup 3)] UNSPEC_FSCALE))
- (clobber (match_scratch:XF 3 ""))])]
+ (unspec:XF [(match_dup 7) (match_dup 3)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 8)
+ (unspec:XF [(match_dup 7) (match_dup 3)]
+ UNSPEC_FSCALE_EXP))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
int i;
- for (i=2; i<8; i++)
+ for (i=2; i<9; i++)
operands[i] = gen_reg_rtx (XFmode);
emit_move_insn (operands[6], CONST1_RTX (XFmode)); /* fld1 */
})
-(define_expand "atansf2"
- [(parallel [(set (match_operand:SF 0 "register_operand" "")
- (unspec:SF [(match_dup 2)
- (match_operand:SF 1 "register_operand" "")]
- UNSPEC_FPATAN))
- (clobber (match_scratch:SF 3 ""))])]
+(define_expand "expm1df2"
+ [(set (match_dup 2)
+ (float_extend:XF (match_operand:DF 1 "register_operand" "")))
+ (set (match_dup 4) (mult:XF (match_dup 2) (match_dup 3)))
+ (set (match_dup 5) (unspec:XF [(match_dup 4)] UNSPEC_FRNDINT))
+ (set (match_dup 6) (minus:XF (match_dup 4) (match_dup 5)))
+ (set (match_dup 7) (unspec:XF [(match_dup 6)] UNSPEC_F2XM1))
+ (parallel [(set (match_dup 8)
+ (unspec:XF [(match_dup 7) (match_dup 5)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 9)
+ (unspec:XF [(match_dup 7) (match_dup 5)]
+ UNSPEC_FSCALE_EXP))])
+ (parallel [(set (match_dup 11)
+ (unspec:XF [(match_dup 10) (match_dup 9)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 12)
+ (unspec:XF [(match_dup 10) (match_dup 9)]
+ UNSPEC_FSCALE_EXP))])
+ (set (match_dup 13) (minus:XF (match_dup 11) (match_dup 10)))
+ (set (match_dup 14) (plus:XF (match_dup 13) (match_dup 8)))
+ (set (match_operand:DF 0 "register_operand" "")
+ (float_truncate:DF (match_dup 14)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
- operands[2] = gen_reg_rtx (SFmode);
- emit_move_insn (operands[2], CONST1_RTX (SFmode)); /* fld1 */
+ rtx temp;
+ int i;
+
+ for (i=2; i<15; i++)
+ operands[i] = gen_reg_rtx (XFmode);
+ temp = standard_80387_constant_rtx (5); /* fldl2e */
+ emit_move_insn (operands[3], temp);
+ emit_move_insn (operands[10], CONST1_RTX (XFmode)); /* fld1 */
})
-(define_expand "atandf2"
- [(parallel [(set (match_operand:DF 0 "register_operand" "")
- (unspec:DF [(match_dup 2)
- (match_operand:DF 1 "register_operand" "")]
- UNSPEC_FPATAN))
- (clobber (match_scratch:DF 3 ""))])]
+(define_expand "expm1sf2"
+ [(set (match_dup 2)
+ (float_extend:XF (match_operand:SF 1 "register_operand" "")))
+ (set (match_dup 4) (mult:XF (match_dup 2) (match_dup 3)))
+ (set (match_dup 5) (unspec:XF [(match_dup 4)] UNSPEC_FRNDINT))
+ (set (match_dup 6) (minus:XF (match_dup 4) (match_dup 5)))
+ (set (match_dup 7) (unspec:XF [(match_dup 6)] UNSPEC_F2XM1))
+ (parallel [(set (match_dup 8)
+ (unspec:XF [(match_dup 7) (match_dup 5)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 9)
+ (unspec:XF [(match_dup 7) (match_dup 5)]
+ UNSPEC_FSCALE_EXP))])
+ (parallel [(set (match_dup 11)
+ (unspec:XF [(match_dup 10) (match_dup 9)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 12)
+ (unspec:XF [(match_dup 10) (match_dup 9)]
+ UNSPEC_FSCALE_EXP))])
+ (set (match_dup 13) (minus:XF (match_dup 11) (match_dup 10)))
+ (set (match_dup 14) (plus:XF (match_dup 13) (match_dup 8)))
+ (set (match_operand:SF 0 "register_operand" "")
+ (float_truncate:SF (match_dup 14)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
- operands[2] = gen_reg_rtx (DFmode);
- emit_move_insn (operands[2], CONST1_RTX (DFmode)); /* fld1 */
+ rtx temp;
+ int i;
+
+ for (i=2; i<15; i++)
+ operands[i] = gen_reg_rtx (XFmode);
+ temp = standard_80387_constant_rtx (5); /* fldl2e */
+ emit_move_insn (operands[3], temp);
+ emit_move_insn (operands[10], CONST1_RTX (XFmode)); /* fld1 */
})
-(define_expand "atanxf2"
- [(parallel [(set (match_operand:XF 0 "register_operand" "")
- (unspec:XF [(match_dup 2)
- (match_operand:XF 1 "register_operand" "")]
- UNSPEC_FPATAN))
- (clobber (match_scratch:XF 3 ""))])]
+(define_expand "expm1xf2"
+ [(set (match_dup 3) (mult:XF (match_operand:XF 1 "register_operand" "")
+ (match_dup 2)))
+ (set (match_dup 4) (unspec:XF [(match_dup 3)] UNSPEC_FRNDINT))
+ (set (match_dup 5) (minus:XF (match_dup 3) (match_dup 4)))
+ (set (match_dup 6) (unspec:XF [(match_dup 5)] UNSPEC_F2XM1))
+ (parallel [(set (match_dup 7)
+ (unspec:XF [(match_dup 6) (match_dup 4)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 8)
+ (unspec:XF [(match_dup 6) (match_dup 4)]
+ UNSPEC_FSCALE_EXP))])
+ (parallel [(set (match_dup 10)
+ (unspec:XF [(match_dup 9) (match_dup 8)]
+ UNSPEC_FSCALE_FRACT))
+ (set (match_dup 11)
+ (unspec:XF [(match_dup 9) (match_dup 8)]
+ UNSPEC_FSCALE_EXP))])
+ (set (match_dup 12) (minus:XF (match_dup 10) (match_dup 9)))
+ (set (match_operand:XF 0 "register_operand" "")
+ (plus:XF (match_dup 12) (match_dup 7)))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
- operands[2] = gen_reg_rtx (XFmode);
- emit_move_insn (operands[2], CONST1_RTX (XFmode)); /* fld1 */
+ rtx temp;
+ int i;
+
+ for (i=2; i<13; i++)
+ operands[i] = gen_reg_rtx (XFmode);
+ temp = standard_80387_constant_rtx (5); /* fldl2e */
+ emit_move_insn (operands[2], temp);
+ emit_move_insn (operands[9], CONST1_RTX (XFmode)); /* fld1 */
})
;; Block operation instructions
diff --git a/gcc/config/i386/winnt.c b/gcc/config/i386/winnt.c
index c4326f01a28..6196d32aa6f 100644
--- a/gcc/config/i386/winnt.c
+++ b/gcc/config/i386/winnt.c
@@ -171,7 +171,8 @@ associated_type (tree decl)
dtor's are not affected by class status but virtual and
non-virtual thunks are. */
if (!DECL_ARTIFICIAL (decl) || DECL_COMDAT (decl))
- t = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl))));
+ t = TYPE_MAIN_VARIANT
+ (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
}
else if (DECL_CONTEXT (decl)
&& TREE_CODE_CLASS (TREE_CODE (DECL_CONTEXT (decl))) == 't')
@@ -672,7 +673,7 @@ i386_pe_section_type_flags (tree decl, const char *name, int reloc)
unsigned int **slot;
/* The names we put in the hashtable will always be the unique
- versions gived to us by the stringtable, so we can just use
+ versions given to us by the stringtable, so we can just use
their addresses as the keys. */
if (!htab)
htab = htab_create (31, htab_hash_pointer, htab_eq_pointer, NULL);
diff --git a/gcc/config/ia64/freebsd.h b/gcc/config/ia64/freebsd.h
index 60b79f0c715..d5977ff4661 100644
--- a/gcc/config/ia64/freebsd.h
+++ b/gcc/config/ia64/freebsd.h
@@ -18,6 +18,7 @@ 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
+#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }
diff --git a/gcc/config/ia64/itanium2.md b/gcc/config/ia64/itanium2.md
index 0cdb0701346..6e71f5b0f9a 100644
--- a/gcc/config/ia64/itanium2.md
+++ b/gcc/config/ia64/itanium2.md
@@ -484,7 +484,7 @@
(define_reservation "2_M_only_um01" "2_M0_only_um01|2_M1_only_um01")
;; I instruction is dispersed to the lowest numbered I unit
-;; not already in use. Remeber about possible splitting.
+;; not already in use. Remember about possible splitting.
(define_reservation "2_I0"
"2_0mi.i+2_ui0|2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0\
|2_0mfi.+2_ui0|2_0mi.b+2_ui0|(2_1mi.i|2_1mi.b)+(2_ui0|2_ui1)\
@@ -1335,7 +1335,7 @@
+(2b_um2|2b_um3)")
;; I instruction is dispersed to the lowest numbered I unit
-;; not already in use. Remeber about possible splitting.
+;; not already in use. Remember about possible splitting.
(define_reservation "2b_I"
"2b_0mi.i+2_2+2b_ui0|2b_0mii.+2_3+(2b_ui0|2b_ui1)|2b_0mmi.+2_3+2b_ui0\
|2b_0mfi.+2_3+2b_ui0|2b_0mi.b+2_2+2b_ui0\
diff --git a/gcc/config/ia64/t-ia64 b/gcc/config/ia64/t-ia64
index 21d37a79a92..04cfc21592d 100644
--- a/gcc/config/ia64/t-ia64
+++ b/gcc/config/ia64/t-ia64
@@ -41,7 +41,7 @@ crtfastmath.o: $(srcdir)/config/ia64/crtfastmath.c $(GCC_PASSES)
$(srcdir)/config/ia64/crtfastmath.c
LIB2ADDEH = $(srcdir)/config/ia64/unwind-ia64.c $(srcdir)/unwind-sjlj.c \
- $(srcdir)/unwind-c.c $(srcdir)/gthr-gnat.c
+ $(srcdir)/unwind-c.c
ia64-c.o: $(srcdir)/config/ia64/ia64-c.c $(CONFIG_H) $(SYSTEM_H) \
coretypes.h $(TM_H) $(TREE_H) $(CPPLIB_H) $(C_COMMON_H) c-pragma.h toplev.h
diff --git a/gcc/config/ip2k/ip2k.c b/gcc/config/ip2k/ip2k.c
index c6fd0d1b968..05ccb614c4f 100644
--- a/gcc/config/ip2k/ip2k.c
+++ b/gcc/config/ip2k/ip2k.c
@@ -2730,7 +2730,7 @@ ip2k_gen_unsigned_comp_branch (rtx insn, enum rtx_code code, rtx label)
case GTU:
if (imm_sub)
{
- /* > 0xffffffffffffffff never suceeds! */
+ /* > 0xffffffffffffffff never succeeds! */
if (((const_high & 0xffffffff) != 0xffffffff)
|| ((const_low & 0xffffffff) != 0xffffffff))
{
@@ -2948,7 +2948,7 @@ ip2k_gen_unsigned_comp_branch (rtx insn, enum rtx_code code, rtx label)
if (((const_high & 0xffffffff) == 0xffffffff)
&& ((const_low & 0xffffffff) == 0xffffffff))
{
- /* <= 0xffffffffffffffff always suceeds. */
+ /* <= 0xffffffffffffffff always succeeds. */
OUT_AS1 (page, %2);
OUT_AS1 (jmp, %2);
}
diff --git a/gcc/config/mips/5500.md b/gcc/config/mips/5500.md
index d912f666ca6..d5344227d0a 100644
--- a/gcc/config/mips/5500.md
+++ b/gcc/config/mips/5500.md
@@ -31,7 +31,12 @@
(eq_attr "type" "load,fpload,fpidxload"))
"vr55_mem")
-(define_insn_reservation "ir_vr55_store" 1
+(define_bypass 4
+ "ir_vr55_load"
+ "ir_vr55_mthilo,ir_vr55_imul_si,ir_vr55_imul_di,ir_vr55_imadd,
+ ir_vr55_idiv_si,ir_vr55_idiv_di")
+
+(define_insn_reservation "ir_vr55_store" 0
(and (eq_attr "cpu" "r5500")
(eq_attr "type" "store,fpstore,fpidxstore"))
"vr55_mem")
@@ -49,33 +54,66 @@
(eq_attr "type" "xfer"))
"vr55_dp0|vr55_dp1")
-(define_insn_reservation "ir_vr55_hilo" 2
- (and (eq_attr "cpu" "r5500")
- (eq_attr "type" "mthilo,mfhilo"))
- "vr55_dp0|vr55_dp1")
-
(define_insn_reservation "ir_vr55_arith" 1
(and (eq_attr "cpu" "r5500")
(eq_attr "type" "arith,shift,slt,clz,const,nop,trap"))
"vr55_dp0|vr55_dp1")
-(define_insn_reservation "ir_vr55_imul_si" 3
+(define_bypass 2
+ "ir_vr55_arith"
+ "ir_vr55_mthilo,ir_vr55_imul_si,ir_vr55_imul_di,ir_vr55_imadd,
+ ir_vr55_idiv_si,ir_vr55_idiv_di")
+
+(define_insn_reservation "ir_vr55_mthilo" 1
+ (and (eq_attr "cpu" "r5500")
+ (eq_attr "type" "mthilo"))
+ "vr55_mac")
+
+(define_insn_reservation "ir_vr55_mfhilo" 5
+ (and (eq_attr "cpu" "r5500")
+ (eq_attr "type" "mfhilo"))
+ "vr55_mac")
+
+;; The default latency is for the GPR result of a mul. Bypasses handle the
+;; latency of {mul,mult}->{mfhi,mflo}.
+(define_insn_reservation "ir_vr55_imul_si" 5
(and (eq_attr "cpu" "r5500")
(and (eq_attr "type" "imul")
(eq_attr "mode" "SI")))
"vr55_mac")
-(define_insn_reservation "ir_vr55_imul_di" 4
+;; The default latency is for pre-reload scheduling and handles the case
+;; where a pseudo destination will be stored in a GPR (as it usually is).
+;; The delay includes the latency of the dmult itself and the anticipated
+;; mflo or mfhi.
+;;
+;; Once the mflo or mfhi has been created, bypasses handle the latency
+;; between it and the dmult.
+(define_insn_reservation "ir_vr55_imul_di" 9
(and (eq_attr "cpu" "r5500")
(and (eq_attr "type" "imul")
(eq_attr "mode" "DI")))
- "vr55_mac")
+ "vr55_mac*4")
-(define_insn_reservation "ir_vr55_imadd_si" 3
+;; The default latency is as for ir_vr55_imul_si.
+(define_insn_reservation "ir_vr55_imadd" 5
(and (eq_attr "cpu" "r5500")
- (eq_attr "type" "imul"))
+ (eq_attr "type" "imadd"))
"vr55_mac")
+(define_bypass 1
+ "ir_vr55_imul_si,ir_vr55_imadd"
+ "ir_vr55_imadd"
+ "mips_linked_madd_p")
+
+(define_bypass 2
+ "ir_vr55_imul_si,ir_vr55_imadd"
+ "ir_vr55_mfhilo")
+
+(define_bypass 4
+ "ir_vr55_imul_di"
+ "ir_vr55_mfhilo")
+
;; Divide algorithm is early out with best latency of 7 pcycles.
;; Use worst case for scheduling purposes.
(define_insn_reservation "ir_vr55_idiv_si" 42
diff --git a/gcc/config/mips/7000.md b/gcc/config/mips/7000.md
index 55402b95931..8917a6fa102 100644
--- a/gcc/config/mips/7000.md
+++ b/gcc/config/mips/7000.md
@@ -113,7 +113,7 @@
(and (eq_attr "cpu" "r7000")
(and (eq_attr "type" "imul,imadd")
(and (eq_attr "mode" "SI")
- (match_operand 0 "hilo_operand" ""))))
+ (match_operand 0 "hilo_operand"))))
"rm7_impydiv+(rm7_impydiv_iter*3)")
;; There are an additional 2 stall cycles.
@@ -121,7 +121,7 @@
(and (eq_attr "cpu" "r7000")
(and (eq_attr "type" "imul,imadd")
(and (eq_attr "mode" "SI")
- (not (match_operand 0 "hilo_operand" "")))))
+ (not (match_operand 0 "hilo_operand")))))
"rm7_impydiv")
(define_insn_reservation "rm7_impy_di" 9 (and (eq_attr "cpu" "r7000")
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index b02486b0d09..5bcdbd938bc 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -54,6 +54,7 @@ Boston, MA 02111-1307, USA. */
#include "integrate.h"
#include "langhooks.h"
#include "cfglayout.h"
+#include "sched-int.h"
/* Enumeration for all of the relational tests, so that we can build
arrays indexed by the test type, and not worry about the order
@@ -107,6 +108,33 @@ enum internal_test {
multi-instruction addu sequence. Use 0x7fe0 to work around this. */
#define MIPS_MAX_FIRST_STACK_STEP (TARGET_MIPS16 ? 0x100 : 0x7fe0)
+/* True if INSN is a mips.md pattern or asm statement. */
+#define USEFUL_INSN_P(INSN) \
+ (INSN_P (INSN) \
+ && GET_CODE (PATTERN (INSN)) != USE \
+ && GET_CODE (PATTERN (INSN)) != CLOBBER \
+ && GET_CODE (PATTERN (INSN)) != ADDR_VEC \
+ && GET_CODE (PATTERN (INSN)) != ADDR_DIFF_VEC)
+
+/* If INSN is a delayed branch sequence, return the first instruction
+ in the sequence, otherwise return INSN itself. */
+#define SEQ_BEGIN(INSN) \
+ (INSN_P (INSN) && GET_CODE (PATTERN (INSN)) == SEQUENCE \
+ ? XVECEXP (PATTERN (INSN), 0, 0) \
+ : (INSN))
+
+/* Likewise for the last instruction in a delayed branch sequence. */
+#define SEQ_END(INSN) \
+ (INSN_P (INSN) && GET_CODE (PATTERN (INSN)) == SEQUENCE \
+ ? XVECEXP (PATTERN (INSN), 0, XVECLEN (PATTERN (INSN), 0) - 1) \
+ : (INSN))
+
+/* Execute the following loop body with SUBINSN set to each instruction
+ between SEQ_BEGIN (INSN) and SEQ_END (INSN) inclusive. */
+#define FOR_EACH_SUBINSN(SUBINSN, INSN) \
+ for ((SUBINSN) = SEQ_BEGIN (INSN); \
+ (SUBINSN) != NEXT_INSN (SEQ_END (INSN)); \
+ (SUBINSN) = NEXT_INSN (SUBINSN))
/* Classifies an address.
@@ -138,6 +166,7 @@ struct mips16_constant;
struct mips_arg_info;
struct mips_address_info;
struct mips_integer_op;
+struct mips_sim;
static enum mips_symbol_type mips_classify_symbol (rtx);
static void mips_split_const (rtx, rtx *, HOST_WIDE_INT *);
@@ -219,6 +248,21 @@ static void dump_constants (struct mips16_constant *, rtx);
static int mips16_insn_length (rtx);
static int mips16_rewrite_pool_refs (rtx *, void *);
static void mips16_lay_out_constants (void);
+static void mips_sim_reset (struct mips_sim *);
+static void mips_sim_init (struct mips_sim *, state_t);
+static void mips_sim_next_cycle (struct mips_sim *);
+static void mips_sim_wait_reg (struct mips_sim *, rtx, rtx);
+static int mips_sim_wait_regs_2 (rtx *, void *);
+static void mips_sim_wait_regs_1 (rtx *, void *);
+static void mips_sim_wait_regs (struct mips_sim *, rtx);
+static void mips_sim_wait_units (struct mips_sim *, rtx);
+static void mips_sim_wait_insn (struct mips_sim *, rtx);
+static void mips_sim_record_set (rtx, rtx, void *);
+static void mips_sim_issue_insn (struct mips_sim *, rtx);
+static void mips_sim_issue_nop (struct mips_sim *);
+static void mips_sim_finish_insn (struct mips_sim *, rtx);
+static void vr4130_avoid_branch_rt_conflict (rtx);
+static void vr4130_align_insns (void);
static void mips_avoid_hazard (rtx, rtx, int *, rtx *, rtx);
static void mips_avoid_hazards (void);
static void mips_reorg (void);
@@ -230,6 +274,10 @@ static bool mips_return_in_memory (tree, tree);
static bool mips_strict_argument_naming (CUMULATIVE_ARGS *);
static void mips_macc_chains_record (rtx);
static void mips_macc_chains_reorder (rtx *, int);
+static void vr4130_true_reg_dependence_p_1 (rtx, rtx, void *);
+static bool vr4130_true_reg_dependence_p (rtx);
+static bool vr4130_swap_insns_p (rtx, rtx);
+static void vr4130_reorder (rtx *, int);
static void mips_promote_ready (rtx *, int, int);
static int mips_sched_reorder (FILE *, int, rtx *, int *, int);
static int mips_variable_issue (FILE *, int, rtx, int);
@@ -2344,9 +2392,11 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total)
*total = COSTS_N_INSNS (12);
else if (TUNE_MIPS3900)
*total = COSTS_N_INSNS (2);
- else if (TUNE_MIPS5400 || TUNE_MIPS5500 || TUNE_SB1)
- *total = COSTS_N_INSNS ((mode == DImode) ? 4 : 3);
- else if (TUNE_MIPS7000)
+ else if (TUNE_MIPS4130)
+ *total = COSTS_N_INSNS (mode == DImode ? 6 : 4);
+ else if (TUNE_MIPS5400 || TUNE_SB1)
+ *total = COSTS_N_INSNS (mode == DImode ? 4 : 3);
+ else if (TUNE_MIPS5500 || TUNE_MIPS7000)
*total = COSTS_N_INSNS (mode == DImode ? 9 : 5);
else if (TUNE_MIPS9000)
*total = COSTS_N_INSNS (mode == DImode ? 8 : 3);
@@ -4080,8 +4130,6 @@ mips_va_arg (tree valist, tree type)
rsize = UNITS_PER_WORD;
}
- addr_rtx = gen_reg_rtx (Pmode);
-
if (!EABI_FLOAT_VARARGS_P)
{
/* Case of all args in a merged stack. No need to check bounds,
@@ -4104,12 +4152,12 @@ mips_va_arg (tree valist, tree type)
/* Emit code to set addr_rtx to the valist, and postincrement
the valist by the size of the argument, rounded up to the
- next word. */
+ next word. Account for padding on big-endian targets. */
t = build (POSTINCREMENT_EXPR, TREE_TYPE (gpr), gpr,
size_int (rsize));
- r = expand_expr (t, addr_rtx, Pmode, EXPAND_NORMAL);
- if (r != addr_rtx)
- emit_move_insn (addr_rtx, r);
+ addr_rtx = expand_expr (t, 0, Pmode, EXPAND_NORMAL);
+ if (BYTES_BIG_ENDIAN)
+ addr_rtx = plus_constant (addr_rtx, rsize - size);
/* Flush the POSTINCREMENT. */
emit_queue();
@@ -4123,6 +4171,8 @@ mips_va_arg (tree valist, tree type)
rtx lab_over = NULL_RTX, lab_false;
HOST_WIDE_INT osize;
+ addr_rtx = gen_reg_rtx (Pmode);
+
f_ovfl = TYPE_FIELDS (va_list_type_node);
f_gtop = TREE_CHAIN (f_ovfl);
f_ftop = TREE_CHAIN (f_gtop);
@@ -4173,6 +4223,25 @@ mips_va_arg (tree valist, tree type)
each one will take up UNITS_PER_HWFPVALUE bytes, regardless
of the float's precision. */
rsize = UNITS_PER_HWFPVALUE;
+
+ /* Overflow arguments are padded to UNITS_PER_WORD bytes
+ (= PARM_BOUNDARY bits). This can be different from RSIZE
+ in two cases:
+
+ (1) On 32-bit targets when TYPE is a structure such as:
+
+ struct s { float f; };
+
+ Such structures are passed in paired FPRs, so RSIZE
+ will be 8 bytes. However, the structure only takes
+ up 4 bytes of memory, so OSIZE will only be 4.
+
+ (2) In combinations such as -mgp64 -msingle-float
+ -fshort-double. Doubles passed in registers
+ will then take up 4 (UNITS_PER_HWFPVALUE) bytes,
+ but those passed on the stack take up
+ UNITS_PER_WORD bytes. */
+ osize = MAX (GET_MODE_SIZE (TYPE_MODE (type)), UNITS_PER_WORD);
}
else
{
@@ -4186,14 +4255,8 @@ mips_va_arg (tree valist, tree type)
t = build (MODIFY_EXPR, TREE_TYPE (off), off, t);
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
}
+ osize = rsize;
}
- /* Every overflow argument must take up at least UNITS_PER_WORD
- bytes (= PARM_BOUNDARY bits). RSIZE can sometimes be smaller
- than that, such as in the combination -mgp64 -msingle-float
- -fshort-double. Doubles passed in registers will then take
- up UNITS_PER_HWFPVALUE bytes, but those passed on the stack
- take up UNITS_PER_WORD bytes. */
- osize = MAX (rsize, UNITS_PER_WORD);
/* [2] Emit code to branch if off == 0. */
r = expand_expr (off, NULL_RTX, TYPE_MODE (TREE_TYPE (off)),
@@ -4201,8 +4264,12 @@ mips_va_arg (tree valist, tree type)
emit_cmp_and_jump_insns (r, const0_rtx, EQ, const1_rtx, GET_MODE (r),
1, lab_false);
- /* [4] Emit code for: addr_rtx = top - off. */
+ /* [4] Emit code for: addr_rtx = top - off. On big endian machines,
+ the argument has RSIZE - SIZE bytes of leading padding. */
t = build (MINUS_EXPR, TREE_TYPE (top), top, off);
+ if (BYTES_BIG_ENDIAN && rsize > size)
+ t = build (PLUS_EXPR, TREE_TYPE (t), t,
+ build_int_2 (rsize - size, 0));
r = expand_expr (t, addr_rtx, Pmode, EXPAND_NORMAL);
if (r != addr_rtx)
emit_move_insn (addr_rtx, r);
@@ -4232,12 +4299,12 @@ mips_va_arg (tree valist, tree type)
/* [10, 11]. Emit code to store ovfl in addr_rtx, then
post-increment ovfl by osize. On big-endian machines,
- the argument has OSIZE - RSIZE bytes of leading padding. */
+ the argument has OSIZE - SIZE bytes of leading padding. */
t = build (POSTINCREMENT_EXPR, TREE_TYPE (ovfl), ovfl,
size_int (osize));
- if (BYTES_BIG_ENDIAN && osize > rsize)
+ if (BYTES_BIG_ENDIAN && osize > size)
t = build (PLUS_EXPR, TREE_TYPE (t), t,
- build_int_2 (osize - rsize, 0));
+ build_int_2 (osize - size, 0));
r = expand_expr (t, addr_rtx, Pmode, EXPAND_NORMAL);
if (r != addr_rtx)
emit_move_insn (addr_rtx, r);
@@ -4245,8 +4312,6 @@ mips_va_arg (tree valist, tree type)
emit_queue();
emit_label (lab_over);
}
- if (BYTES_BIG_ENDIAN && rsize != size)
- addr_rtx = plus_constant (addr_rtx, rsize - size);
if (indirect)
{
addr_rtx = force_reg (Pmode, addr_rtx);
@@ -4678,9 +4743,10 @@ override_options (void)
architecture.
By default, we enable use of Branch Likely instructions on
- all architectures which support them except for MIPS32 and MIPS64
- (i.e., the generic MIPS32 and MIPS64 ISAs, and processors which
- implement them).
+ all architectures which support them with the following
+ exceptions: when creating MIPS32 or MIPS64 code, and when
+ tuning for architectures where their use tends to hurt
+ performance.
The MIPS32 and MIPS64 architecture specifications say "Software
is strongly encouraged to avoid use of Branch Likely
@@ -4688,7 +4754,9 @@ override_options (void)
of the [MIPS32 and MIPS64] architecture." Therefore, we do not
issue those instructions unless instructed to do so by
-mbranch-likely. */
- if (ISA_HAS_BRANCHLIKELY && !(ISA_MIPS32 || ISA_MIPS32R2 || ISA_MIPS64))
+ if (ISA_HAS_BRANCHLIKELY
+ && !(ISA_MIPS32 || ISA_MIPS32R2 || ISA_MIPS64)
+ && !(TUNE_MIPS5500 || TUNE_SB1))
target_flags |= MASK_BRANCHLIKELY;
else
target_flags &= ~MASK_BRANCHLIKELY;
@@ -4759,7 +4827,7 @@ override_options (void)
(1) The value of an R_MIPS_GOT16 relocation depends on whether
the symbol is local or global. We therefore need to know
- a symbol's binding before refering to it using %got().
+ a symbol's binding before referring to it using %got().
(2) R_MIPS_CALL16 can only be applied to global symbols.
@@ -4782,6 +4850,12 @@ override_options (void)
if (TARGET_NAME_REGS)
memcpy (mips_reg_names, mips_sw_reg_names, sizeof (mips_reg_names));
+ /* -mvr4130-align is a "speed over size" optimization: it usually produces
+ faster code, but at the expense of more nops. Enable it at -O3 and
+ above. */
+ if (optimize > 2 && (target_flags_explicit & MASK_VR4130_ALIGN) == 0)
+ target_flags |= MASK_VR4130_ALIGN;
+
/* When compiling for the mips16, we can not use floating point. We
record the original hard float value in mips16_hard_float. */
if (TARGET_MIPS16)
@@ -4908,7 +4982,7 @@ override_options (void)
|| (ISA_HAS_8CC && mode == TFmode));
else if (MD_REG_P (regno))
- temp = (class == MODE_INT
+ temp = (INTEGRAL_MODE_P (mode)
&& (size <= UNITS_PER_WORD
|| (regno == MD_REG_FIRST
&& size == 2 * UNITS_PER_WORD)));
@@ -8361,8 +8435,373 @@ mips16_lay_out_constants (void)
}
dump_constants (pool.first, get_last_insn ());
}
+
+/* A temporary variable used by for_each_rtx callbacks, etc. */
+static rtx mips_sim_insn;
+
+/* A structure representing the state of the processor pipeline.
+ Used by the mips_sim_* family of functions. */
+struct mips_sim {
+ /* The maximum number of instructions that can be issued in a cycle.
+ (Caches mips_issue_rate.) */
+ unsigned int issue_rate;
+
+ /* The current simulation time. */
+ unsigned int time;
+
+ /* How many more instructions can be issued in the current cycle. */
+ unsigned int insns_left;
+
+ /* LAST_SET[X].INSN is the last instruction to set register X.
+ LAST_SET[X].TIME is the time at which that instruction was issued.
+ INSN is null if no instruction has yet set register X. */
+ struct {
+ rtx insn;
+ unsigned int time;
+ } last_set[FIRST_PSEUDO_REGISTER];
+
+ /* The pipeline's current DFA state. */
+ state_t dfa_state;
+};
+
+/* Reset STATE to the initial simulation state. */
+
+static void
+mips_sim_reset (struct mips_sim *state)
+{
+ state->time = 0;
+ state->insns_left = state->issue_rate;
+ memset (&state->last_set, 0, sizeof (state->last_set));
+ state_reset (state->dfa_state);
+}
+
+/* Initialize STATE before its first use. DFA_STATE points to an
+ allocated but uninitialized DFA state. */
+
+static void
+mips_sim_init (struct mips_sim *state, state_t dfa_state)
+{
+ state->issue_rate = mips_issue_rate ();
+ state->dfa_state = dfa_state;
+ mips_sim_reset (state);
+}
+/* Advance STATE by one clock cycle. */
+static void
+mips_sim_next_cycle (struct mips_sim *state)
+{
+ state->time++;
+ state->insns_left = state->issue_rate;
+ state_transition (state->dfa_state, 0);
+}
+
+/* Advance simulation state STATE until instruction INSN can read
+ register REG. */
+
+static void
+mips_sim_wait_reg (struct mips_sim *state, rtx insn, rtx reg)
+{
+ unsigned int i;
+
+ for (i = 0; i < HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg)); i++)
+ if (state->last_set[REGNO (reg) + i].insn != 0)
+ {
+ unsigned int t;
+
+ t = state->last_set[REGNO (reg) + i].time;
+ t += insn_latency (state->last_set[REGNO (reg) + i].insn, insn);
+ while (state->time < t)
+ mips_sim_next_cycle (state);
+ }
+}
+
+/* A for_each_rtx callback. If *X is a register, advance simulation state
+ DATA until mips_sim_insn can read the register's value. */
+
+static int
+mips_sim_wait_regs_2 (rtx *x, void *data)
+{
+ if (REG_P (*x))
+ mips_sim_wait_reg (data, mips_sim_insn, *x);
+ return 0;
+}
+
+/* Call mips_sim_wait_regs_2 (R, DATA) for each register R mentioned in *X. */
+
+static void
+mips_sim_wait_regs_1 (rtx *x, void *data)
+{
+ for_each_rtx (x, mips_sim_wait_regs_2, data);
+}
+
+/* Advance simulation state STATE until all of INSN's register
+ dependencies are satisfied. */
+
+static void
+mips_sim_wait_regs (struct mips_sim *state, rtx insn)
+{
+ mips_sim_insn = insn;
+ note_uses (&PATTERN (insn), mips_sim_wait_regs_1, state);
+}
+
+/* Advance simulation state STATE until the units required by
+ instruction INSN are available. */
+
+static void
+mips_sim_wait_units (struct mips_sim *state, rtx insn)
+{
+ state_t tmp_state;
+
+ tmp_state = alloca (state_size ());
+ while (state->insns_left == 0
+ || (memcpy (tmp_state, state->dfa_state, state_size ()),
+ state_transition (tmp_state, insn) >= 0))
+ mips_sim_next_cycle (state);
+}
+
+/* Advance simulation state STATE until INSN is ready to issue. */
+
+static void
+mips_sim_wait_insn (struct mips_sim *state, rtx insn)
+{
+ mips_sim_wait_regs (state, insn);
+ mips_sim_wait_units (state, insn);
+}
+
+/* mips_sim_insn has just set X. Update the LAST_SET array
+ in simulation state DATA. */
+
+static void
+mips_sim_record_set (rtx x, rtx pat ATTRIBUTE_UNUSED, void *data)
+{
+ struct mips_sim *state;
+ unsigned int i;
+
+ state = data;
+ if (REG_P (x))
+ for (i = 0; i < HARD_REGNO_NREGS (REGNO (x), GET_MODE (x)); i++)
+ {
+ state->last_set[REGNO (x) + i].insn = mips_sim_insn;
+ state->last_set[REGNO (x) + i].time = state->time;
+ }
+}
+
+/* Issue instruction INSN in scheduler state STATE. Assume that INSN
+ can issue immediately (i.e., that mips_sim_wait_insn has already
+ been called). */
+
+static void
+mips_sim_issue_insn (struct mips_sim *state, rtx insn)
+{
+ state_transition (state->dfa_state, insn);
+ state->insns_left--;
+
+ mips_sim_insn = insn;
+ note_stores (PATTERN (insn), mips_sim_record_set, state);
+}
+
+/* Simulate issuing a NOP in state STATE. */
+
+static void
+mips_sim_issue_nop (struct mips_sim *state)
+{
+ if (state->insns_left == 0)
+ mips_sim_next_cycle (state);
+ state->insns_left--;
+}
+
+/* Update simulation state STATE so that it's ready to accept the instruction
+ after INSN. INSN should be part of the main rtl chain, not a member of a
+ SEQUENCE. */
+
+static void
+mips_sim_finish_insn (struct mips_sim *state, rtx insn)
+{
+ /* If INSN is a jump with an implicit delay slot, simulate a nop. */
+ if (JUMP_P (insn))
+ mips_sim_issue_nop (state);
+
+ switch (GET_CODE (SEQ_BEGIN (insn)))
+ {
+ case CODE_LABEL:
+ case CALL_INSN:
+ /* We can't predict the processor state after a call or label. */
+ mips_sim_reset (state);
+ break;
+
+ case JUMP_INSN:
+ /* The delay slots of branch likely instructions are only executed
+ when the branch is taken. Therefore, if the caller has simulated
+ the delay slot instruction, STATE does not really reflect the state
+ of the pipeline for the instruction after the delay slot. Also,
+ branch likely instructions tend to incur a penalty when not taken,
+ so there will probably be an extra delay between the branch and
+ the instruction after the delay slot. */
+ if (INSN_ANNULLED_BRANCH_P (SEQ_BEGIN (insn)))
+ mips_sim_reset (state);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* The VR4130 pipeline issues aligned pairs of instructions together,
+ but it stalls the second instruction if it depends on the first.
+ In order to cut down the amount of logic required, this dependence
+ check is not based on a full instruction decode. Instead, any non-SPECIAL
+ instruction is assumed to modify the register specified by bits 20-16
+ (which is usually the "rt" field).
+
+ In beq, beql, bne and bnel instructions, the rt field is actually an
+ input, so we can end up with a false dependence between the branch
+ and its delay slot. If this situation occurs in instruction INSN,
+ try to avoid it by swapping rs and rt. */
+
+static void
+vr4130_avoid_branch_rt_conflict (rtx insn)
+{
+ rtx first, second;
+
+ first = SEQ_BEGIN (insn);
+ second = SEQ_END (insn);
+ if (GET_CODE (first) == JUMP_INSN
+ && GET_CODE (second) == INSN
+ && GET_CODE (PATTERN (first)) == SET
+ && GET_CODE (SET_DEST (PATTERN (first))) == PC
+ && GET_CODE (SET_SRC (PATTERN (first))) == IF_THEN_ELSE)
+ {
+ /* Check for the right kind of condition. */
+ rtx cond = XEXP (SET_SRC (PATTERN (first)), 0);
+ if ((GET_CODE (cond) == EQ || GET_CODE (cond) == NE)
+ && REG_P (XEXP (cond, 0))
+ && REG_P (XEXP (cond, 1))
+ && reg_referenced_p (XEXP (cond, 1), PATTERN (second))
+ && !reg_referenced_p (XEXP (cond, 0), PATTERN (second)))
+ {
+ /* SECOND mentions the rt register but not the rs register. */
+ rtx tmp = XEXP (cond, 0);
+ XEXP (cond, 0) = XEXP (cond, 1);
+ XEXP (cond, 1) = tmp;
+ }
+ }
+}
+
+/* Implement -mvr4130-align. Go through each basic block and simulate the
+ processor pipeline. If we find that a pair of instructions could execute
+ in parallel, and the first of those instruction is not 8-byte aligned,
+ insert a nop to make it aligned. */
+
+static void
+vr4130_align_insns (void)
+{
+ struct mips_sim state;
+ rtx insn, subinsn, last, last2, next;
+ bool aligned_p;
+
+ dfa_start ();
+
+ /* LAST is the last instruction before INSN to have a nonzero length.
+ LAST2 is the last such instruction before LAST. */
+ last = 0;
+ last2 = 0;
+
+ /* ALIGNED_P is true if INSN is known to be at an aligned address. */
+ aligned_p = true;
+
+ mips_sim_init (&state, alloca (state_size ()));
+ for (insn = get_insns (); insn != 0; insn = next)
+ {
+ unsigned int length;
+
+ next = NEXT_INSN (insn);
+
+ /* See the comment above vr4130_avoid_branch_rt_conflict for details.
+ This isn't really related to the alignment pass, but we do it on
+ the fly to avoid a separate instruction walk. */
+ vr4130_avoid_branch_rt_conflict (insn);
+
+ if (USEFUL_INSN_P (insn))
+ FOR_EACH_SUBINSN (subinsn, insn)
+ {
+ mips_sim_wait_insn (&state, subinsn);
+
+ /* If we want this instruction to issue in parallel with the
+ previous one, make sure that the previous instruction is
+ aligned. There are several reasons why this isn't worthwhile
+ when the second instruction is a call:
+
+ - Calls are less likely to be performance critical,
+ - There's a good chance that the delay slot can execute
+ in parallel with the call.
+ - The return address would then be unaligned.
+
+ In general, if we're going to insert a nop between instructions
+ X and Y, it's better to insert it immediately after X. That
+ way, if the nop makes Y aligned, it will also align any labels
+ between X and Y. */
+ if (state.insns_left != state.issue_rate
+ && GET_CODE (subinsn) != CALL_INSN)
+ {
+ if (subinsn == SEQ_BEGIN (insn) && aligned_p)
+ {
+ /* SUBINSN is the first instruction in INSN and INSN is
+ aligned. We want to align the previous instruction
+ instead, so insert a nop between LAST2 and LAST.
+
+ Note that LAST could be either a single instruction
+ or a branch with a delay slot. In the latter case,
+ LAST, like INSN, is already aligned, but the delay
+ slot must have some extra delay that stops it from
+ issuing at the same time as the branch. We therefore
+ insert a nop before the branch in order to align its
+ delay slot. */
+ emit_insn_after (gen_nop (), last2);
+ aligned_p = false;
+ }
+ else if (subinsn != SEQ_BEGIN (insn) && !aligned_p)
+ {
+ /* SUBINSN is the delay slot of INSN, but INSN is
+ currently unaligned. Insert a nop between
+ LAST and INSN to align it. */
+ emit_insn_after (gen_nop (), last);
+ aligned_p = true;
+ }
+ }
+ mips_sim_issue_insn (&state, subinsn);
+ }
+ mips_sim_finish_insn (&state, insn);
+
+ /* Update LAST, LAST2 and ALIGNED_P for the next instruction. */
+ length = get_attr_length (insn);
+ if (length > 0)
+ {
+ /* If the instruction is an asm statement or multi-instruction
+ mips.md patern, the length is only an estimate. Insert an
+ 8 byte alignment after it so that the following instructions
+ can be handled correctly. */
+ if (GET_CODE (SEQ_BEGIN (insn)) == INSN
+ && (recog_memoized (insn) < 0 || length >= 8))
+ {
+ next = emit_insn_after (gen_align (GEN_INT (3)), insn);
+ next = NEXT_INSN (next);
+ mips_sim_next_cycle (&state);
+ aligned_p = true;
+ }
+ else if (length & 4)
+ aligned_p = !aligned_p;
+ last2 = last;
+ last = insn;
+ }
+
+ /* See whether INSN is an aligned label. */
+ if (LABEL_P (insn) && label_to_alignment (insn) >= 3)
+ aligned_p = true;
+ }
+ dfa_finish ();
+}
+
/* Subroutine of mips_reorg. If there is a hazard between INSN
and a previous instruction, avoid it by inserting nops after
instruction AFTER.
@@ -8493,6 +8932,8 @@ mips_reorg (void)
if (mips_flag_delayed_branch)
dbr_schedule (get_insns (), dump_file);
mips_avoid_hazards ();
+ if (TUNE_MIPS4130 && TARGET_VR4130_ALIGN)
+ vr4130_align_insns ();
}
}
@@ -9260,6 +9701,104 @@ mips_macc_chains_reorder (rtx *ready, int nready)
}
}
+/* The last instruction to be scheduled. */
+
+static rtx vr4130_last_insn;
+
+/* A note_stores callback used by vr4130_true_reg_dependence_p. DATA
+ points to an rtx that is initially an instruction. Nullify the rtx
+ if the instruction uses the value of register X. */
+
+static void
+vr4130_true_reg_dependence_p_1 (rtx x, rtx pat ATTRIBUTE_UNUSED, void *data)
+{
+ rtx *insn_ptr = data;
+ if (REG_P (x)
+ && *insn_ptr != 0
+ && reg_referenced_p (x, PATTERN (*insn_ptr)))
+ *insn_ptr = 0;
+}
+
+/* Return true if there is true register dependence between vr4130_last_insn
+ and INSN. */
+
+static bool
+vr4130_true_reg_dependence_p (rtx insn)
+{
+ note_stores (PATTERN (vr4130_last_insn),
+ vr4130_true_reg_dependence_p_1, &insn);
+ return insn == 0;
+}
+
+/* A TUNE_MIPS4130 helper function. Given that INSN1 is at the head of
+ the ready queue and that INSN2 is the instruction after it, return
+ true if it is worth promoting INSN2 ahead of INSN1. Look for cases
+ in which INSN1 and INSN2 can probably issue in parallel, but for
+ which (INSN2, INSN1) should be less sensitive to instruction
+ alignment than (INSN1, INSN2). See 4130.md for more details. */
+
+static bool
+vr4130_swap_insns_p (rtx insn1, rtx insn2)
+{
+ rtx dep;
+
+ /* Check for the following case:
+
+ 1) there is some other instruction X with an anti dependence on INSN1;
+ 2) X has a higher priority than INSN2; and
+ 3) X is an arithmetic instruction (and thus has no unit restrictions).
+
+ If INSN1 is the last instruction blocking X, it would better to
+ choose (INSN1, X) over (INSN2, INSN1). */
+ for (dep = INSN_DEPEND (insn1); dep != 0; dep = XEXP (dep, 1))
+ if (REG_NOTE_KIND (dep) == REG_DEP_ANTI
+ && INSN_PRIORITY (XEXP (dep, 0)) > INSN_PRIORITY (insn2)
+ && recog_memoized (XEXP (dep, 0)) >= 0
+ && get_attr_vr4130_class (XEXP (dep, 0)) == VR4130_CLASS_ALU)
+ return false;
+
+ if (vr4130_last_insn != 0
+ && recog_memoized (insn1) >= 0
+ && recog_memoized (insn2) >= 0)
+ {
+ /* See whether INSN1 and INSN2 use different execution units,
+ or if they are both ALU-type instructions. If so, they can
+ probably execute in parallel. */
+ enum attr_vr4130_class class1 = get_attr_vr4130_class (insn1);
+ enum attr_vr4130_class class2 = get_attr_vr4130_class (insn2);
+ if (class1 != class2 || class1 == VR4130_CLASS_ALU)
+ {
+ /* If only one of the instructions has a dependence on
+ vr4130_last_insn, prefer to schedule the other one first. */
+ bool dep1 = vr4130_true_reg_dependence_p (insn1);
+ bool dep2 = vr4130_true_reg_dependence_p (insn2);
+ if (dep1 != dep2)
+ return dep1;
+
+ /* Prefer to schedule INSN2 ahead of INSN1 if vr4130_last_insn
+ is not an ALU-type instruction and if INSN1 uses the same
+ execution unit. (Note that if this condition holds, we already
+ know that INSN2 uses a different execution unit.) */
+ if (class1 != VR4130_CLASS_ALU
+ && recog_memoized (vr4130_last_insn) >= 0
+ && class1 == get_attr_vr4130_class (vr4130_last_insn))
+ return true;
+ }
+ }
+ return false;
+}
+
+/* A TUNE_MIPS4130 helper function. (READY, NREADY) describes a ready
+ queue with at least two instructions. Swap the first two if
+ vr4130_swap_insns_p says that it could be worthwhile. */
+
+static void
+vr4130_reorder (rtx *ready, int nready)
+{
+ if (vr4130_swap_insns_p (ready[nready - 1], ready[nready - 2]))
+ mips_promote_ready (ready, nready - 2, nready - 1);
+}
+
/* Remove the instruction at index LOWER from ready queue READY and
reinsert it in front of the instruction at index HIGHER. LOWER must
be <= HIGHER. */
@@ -9289,6 +9828,13 @@ mips_sched_reorder (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
if (*nreadyp > 0)
mips_macc_chains_reorder (ready, *nreadyp);
}
+ if (reload_completed && TUNE_MIPS4130 && !TARGET_VR4130_ALIGN)
+ {
+ if (cycle == 0)
+ vr4130_last_insn = 0;
+ if (*nreadyp > 1)
+ vr4130_reorder (ready, *nreadyp);
+ }
return mips_issue_rate ();
}
@@ -9309,6 +9855,7 @@ mips_variable_issue (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
more--;
if (!reload_completed && TUNE_MACC_CHAINS)
mips_macc_chains_record (insn);
+ vr4130_last_insn = insn;
break;
}
return more;
@@ -9333,6 +9880,7 @@ mips_issue_rate (void)
{
switch (mips_tune)
{
+ case PROCESSOR_R4130:
case PROCESSOR_R5400:
case PROCESSOR_R5500:
case PROCESSOR_R7000:
@@ -9362,6 +9910,7 @@ mips_use_dfa_pipeline_interface (void)
{
switch (mips_tune)
{
+ case PROCESSOR_R4130:
case PROCESSOR_R5400:
case PROCESSOR_R5500:
case PROCESSOR_R7000:
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index e678ba98449..cdde774673b 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -171,7 +171,7 @@ extern const struct mips_cpu_info *mips_tune_info;
#define MASK_FIX_R4400 0x01000000 /* Work around R4400 errata. */
#define MASK_FIX_SB1 0x02000000 /* Work around SB-1 errata. */
#define MASK_FIX_VR4120 0x04000000 /* Work around VR4120 errata. */
-
+#define MASK_VR4130_ALIGN 0x08000000 /* Perform VR4130 alignment opts. */
#define MASK_FP_EXCEPTIONS 0x10000000 /* FP exceptions are enabled. */
/* Debug switches, not documented */
@@ -253,6 +253,7 @@ extern const struct mips_cpu_info *mips_tune_info;
/* Work around R4400 errata. */
#define TARGET_FIX_R4400 (target_flags & MASK_FIX_R4400)
#define TARGET_FIX_VR4120 (target_flags & MASK_FIX_VR4120)
+#define TARGET_VR4130_ALIGN (target_flags & MASK_VR4130_ALIGN)
#define TARGET_FP_EXCEPTIONS (target_flags & MASK_FP_EXCEPTIONS)
@@ -332,6 +333,8 @@ extern const struct mips_cpu_info *mips_tune_info;
#define TUNE_MIPS3000 (mips_tune == PROCESSOR_R3000)
#define TUNE_MIPS3900 (mips_tune == PROCESSOR_R3900)
#define TUNE_MIPS4000 (mips_tune == PROCESSOR_R4000)
+#define TUNE_MIPS4120 (mips_tune == PROCESSOR_R4120)
+#define TUNE_MIPS4130 (mips_tune == PROCESSOR_R4130)
#define TUNE_MIPS5000 (mips_tune == PROCESSOR_R5000)
#define TUNE_MIPS5400 (mips_tune == PROCESSOR_R5400)
#define TUNE_MIPS5500 (mips_tune == PROCESSOR_R5500)
@@ -346,10 +349,10 @@ extern const struct mips_cpu_info *mips_tune_info;
t1 = a * b
t2 = t1 + c * d
- t3 = c * d
- t4 = t3 - c * d
+ t3 = e * f
+ t4 = t3 - g * h
- t1 will have a higher priority and t2 and t3 will have a higher
+ t1 will have a higher priority than t2 and t3 will have a higher
priority than t4. However, before reload, there is no dependence
between t1 and t3, and they can often have similar priorities.
The scheduler will then tend to prefer:
@@ -371,7 +374,9 @@ extern const struct mips_cpu_info *mips_tune_info;
Multiply-accumulate instructions are a bigger win for some targets
than others, so this macro is defined on an opt-in basis. */
-#define TUNE_MACC_CHAINS TUNE_MIPS5500
+#define TUNE_MACC_CHAINS (TUNE_MIPS5500 \
+ || TUNE_MIPS4120 \
+ || TUNE_MIPS4130)
#define TARGET_OLDABI (mips_abi == ABI_32 || mips_abi == ABI_O64)
#define TARGET_NEWABI (mips_abi == ABI_N32 || mips_abi == ABI_64)
@@ -619,6 +624,10 @@ extern const struct mips_cpu_info *mips_tune_info;
N_("Don't generate fused multiply/add instructions")}, \
{"fused-madd", -MASK_NO_FUSED_MADD, \
N_("Generate fused multiply/add instructions")}, \
+ {"vr4130-align", MASK_VR4130_ALIGN, \
+ N_("Perform VR4130-specific alignment optimizations")}, \
+ {"no-vr4130-align", -MASK_VR4130_ALIGN, \
+ N_("Don't perform VR4130-specific alignment optimizations")}, \
{"fix4300", MASK_4300_MUL_FIX, \
N_("Work around early 4300 hardware bug")}, \
{"no-fix4300", -MASK_4300_MUL_FIX, \
@@ -849,8 +858,7 @@ extern const struct mips_cpu_info *mips_tune_info;
/* ISA has branch likely instructions (eg. mips2). */
/* Disable branchlikely for tx39 until compare rewrite. They haven't
been generated up to this point. */
-#define ISA_HAS_BRANCHLIKELY (!ISA_MIPS1 \
- && !TARGET_MIPS5500)
+#define ISA_HAS_BRANCHLIKELY (!ISA_MIPS1)
/* ISA has the conditional move instructions introduced in mips4. */
#define ISA_HAS_CONDMOVE ((ISA_MIPS4 \
@@ -2076,7 +2084,7 @@ extern enum reg_class mips_char_to_class[256];
`T' is for constant move_operands that cannot be safely loaded into $25.
`U' is for constant move_operands that can be safely loaded into $25.
`W' is for memory references that are based on a member of BASE_REG_CLASS.
- This is true for all non-mips16 references (although it can somtimes
+ This is true for all non-mips16 references (although it can sometimes
be indirect if !TARGET_EXPLICIT_RELOCS). For mips16, it excludes
stack and constant-pool references. */
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index d5071dd7da3..c3e4ccd7372 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -168,11 +168,12 @@
;; Note that this value does not account for the delay slot
;; instruction, whose length is added separately. If the RTL
;; pattern has no explicit delay slot, mips_adjust_insn_length
- ;; will add the length of the implicit nop.
+ ;; will add the length of the implicit nop. The values for
+ ;; forward and backward branches will be different as well.
(eq_attr "type" "branch")
- (cond [(lt (abs (minus (match_dup 1) (plus (pc) (const_int 4))))
- (const_int 131072))
- (const_int 4)
+ (cond [(and (le (minus (match_dup 1) (pc)) (const_int 131064))
+ (le (minus (pc) (match_dup 1)) (const_int 131068)))
+ (const_int 4)
(ne (symbol_ref "flag_pic") (const_int 0))
(const_int 24)
] (const_int 12))
@@ -630,6 +631,7 @@
;; Include scheduling descriptions.
+(include "4130.md")
(include "5400.md")
(include "5500.md")
(include "7000.md")
@@ -662,7 +664,7 @@
(define_expand "conditional_trap"
[(trap_if (match_operator 0 "cmp_op"
[(match_dup 2) (match_dup 3)])
- (match_operand 1 "const_int_operand" ""))]
+ (match_operand 1 "const_int_operand"))]
"ISA_HAS_COND_TRAP"
{
if (operands[1] == const0_rtx)
@@ -719,9 +721,9 @@
(set_attr "mode" "SF")])
(define_expand "addsi3"
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "arith_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (plus:SI (match_operand:SI 1 "reg_or_0_operand")
+ (match_operand:SI 2 "arith_operand")))]
""
{
/* If a large stack adjustment was forced into a register, we may be
@@ -769,7 +771,7 @@
"addu\t%$,%$,%0"
[(set_attr "type" "arith")
(set_attr "mode" "SI")
- (set (attr "length") (if_then_else (match_operand:VOID 0 "m16_simm8_8" "")
+ (set (attr "length") (if_then_else (match_operand:VOID 0 "m16_simm8_8")
(const_int 4)
(const_int 8)))])
@@ -781,7 +783,7 @@
"addu\t%0,%$,%1"
[(set_attr "type" "arith")
(set_attr "mode" "SI")
- (set (attr "length") (if_then_else (match_operand:VOID 1 "m16_uimm8_4" "")
+ (set (attr "length") (if_then_else (match_operand:VOID 1 "m16_uimm8_4")
(const_int 4)
(const_int 8)))])
@@ -811,10 +813,10 @@
[(set_attr "type" "arith")
(set_attr "mode" "SI")
(set_attr_alternative "length"
- [(if_then_else (match_operand:VOID 2 "m16_simm8_1" "")
+ [(if_then_else (match_operand:VOID 2 "m16_simm8_1")
(const_int 4)
(const_int 8))
- (if_then_else (match_operand:VOID 2 "m16_simm4_1" "")
+ (if_then_else (match_operand:VOID 2 "m16_simm4_1")
(const_int 4)
(const_int 8))
(const_int 4)])])
@@ -827,9 +829,9 @@
;; simply adding a constant to a register.
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
+ [(set (match_operand:SI 0 "register_operand")
(plus:SI (match_dup 0)
- (match_operand:SI 1 "const_int_operand" "")))]
+ (match_operand:SI 1 "const_int_operand")))]
"TARGET_MIPS16 && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[0]) == REG
&& M16_REG_P (REGNO (operands[0]))
@@ -856,9 +858,9 @@
})
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "const_int_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (plus:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "const_int_operand")))]
"TARGET_MIPS16 && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[0]) == REG
&& M16_REG_P (REGNO (operands[0]))
@@ -888,9 +890,9 @@
})
(define_expand "adddi3"
- [(parallel [(set (match_operand:DI 0 "register_operand" "")
- (plus:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "arith_operand" "")))
+ [(parallel [(set (match_operand:DI 0 "register_operand")
+ (plus:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "arith_operand")))
(clobber (match_dup 3))])]
"TARGET_64BIT || (!TARGET_DEBUG_G_MODE && !TARGET_MIPS16)"
{
@@ -942,10 +944,10 @@
(set_attr "length" "16")])
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (plus:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "register_operand" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (plus:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "register_operand")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && !WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
@@ -972,10 +974,10 @@
"")
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (plus:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "register_operand" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (plus:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "register_operand")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
@@ -1016,10 +1018,10 @@
(set_attr "length" "12,8,16")])
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (plus:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (plus:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && !WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
@@ -1040,10 +1042,10 @@
"")
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (plus:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (plus:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
@@ -1086,7 +1088,7 @@
"daddu\t%$,%$,%0"
[(set_attr "type" "arith")
(set_attr "mode" "DI")
- (set (attr "length") (if_then_else (match_operand:VOID 0 "m16_simm8_8" "")
+ (set (attr "length") (if_then_else (match_operand:VOID 0 "m16_simm8_8")
(const_int 4)
(const_int 8)))])
@@ -1098,7 +1100,7 @@
"daddu\t%0,%$,%1"
[(set_attr "type" "arith")
(set_attr "mode" "DI")
- (set (attr "length") (if_then_else (match_operand:VOID 0 "m16_uimm5_4" "")
+ (set (attr "length") (if_then_else (match_operand:VOID 0 "m16_uimm5_4")
(const_int 4)
(const_int 8)))])
@@ -1128,10 +1130,10 @@
[(set_attr "type" "arith")
(set_attr "mode" "DI")
(set_attr_alternative "length"
- [(if_then_else (match_operand:VOID 2 "m16_simm5_1" "")
+ [(if_then_else (match_operand:VOID 2 "m16_simm5_1")
(const_int 4)
(const_int 8))
- (if_then_else (match_operand:VOID 2 "m16_simm4_1" "")
+ (if_then_else (match_operand:VOID 2 "m16_simm4_1")
(const_int 4)
(const_int 8))
(const_int 4)])])
@@ -1144,9 +1146,9 @@
;; simply adding a constant to a register.
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
+ [(set (match_operand:DI 0 "register_operand")
(plus:DI (match_dup 0)
- (match_operand:DI 1 "const_int_operand" "")))]
+ (match_operand:DI 1 "const_int_operand")))]
"TARGET_MIPS16 && TARGET_64BIT && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[0]) == REG
&& M16_REG_P (REGNO (operands[0]))
@@ -1173,9 +1175,9 @@
})
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (plus:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "const_int_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (plus:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "const_int_operand")))]
"TARGET_MIPS16 && TARGET_64BIT && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[0]) == REG
&& M16_REG_P (REGNO (operands[0]))
@@ -1229,10 +1231,10 @@
[(set_attr "type" "arith")
(set_attr "mode" "SI")
(set_attr_alternative "length"
- [(if_then_else (match_operand:VOID 2 "m16_simm8_1" "")
+ [(if_then_else (match_operand:VOID 2 "m16_simm8_1")
(const_int 4)
(const_int 8))
- (if_then_else (match_operand:VOID 2 "m16_simm4_1" "")
+ (if_then_else (match_operand:VOID 2 "m16_simm4_1")
(const_int 4)
(const_int 8))
(const_int 4)])])
@@ -1264,9 +1266,9 @@
(set_attr "mode" "SF")])
(define_expand "subsi3"
- [(set (match_operand:SI 0 "register_operand" "")
- (minus:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "register_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (minus:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "register_operand")))]
""
"")
@@ -1280,9 +1282,9 @@
(set_attr "mode" "SI")])
(define_expand "subdi3"
- [(parallel [(set (match_operand:DI 0 "register_operand" "=d")
- (minus:DI (match_operand:DI 1 "register_operand" "d")
- (match_operand:DI 2 "register_operand" "d")))
+ [(parallel [(set (match_operand:DI 0 "register_operand")
+ (minus:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "register_operand")))
(clobber (match_dup 3))])]
"TARGET_64BIT || (!TARGET_DEBUG_G_MODE && !TARGET_MIPS16)"
{
@@ -1308,10 +1310,10 @@
(set_attr "length" "16")])
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (minus:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "register_operand" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (minus:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "register_operand")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && !WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
@@ -1336,10 +1338,10 @@
"")
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (minus:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "register_operand" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (minus:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "register_operand")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
@@ -1391,9 +1393,9 @@
;;
(define_expand "muldf3"
- [(set (match_operand:DF 0 "register_operand" "=f")
- (mult:DF (match_operand:DF 1 "register_operand" "f")
- (match_operand:DF 2 "register_operand" "f")))]
+ [(set (match_operand:DF 0 "register_operand")
+ (mult:DF (match_operand:DF 1 "register_operand")
+ (match_operand:DF 2 "register_operand")))]
"TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"
"")
@@ -1421,9 +1423,9 @@
(set_attr "length" "8")])
(define_expand "mulsf3"
- [(set (match_operand:SF 0 "register_operand" "=f")
- (mult:SF (match_operand:SF 1 "register_operand" "f")
- (match_operand:SF 2 "register_operand" "f")))]
+ [(set (match_operand:SF 0 "register_operand")
+ (mult:SF (match_operand:SF 1 "register_operand")
+ (match_operand:SF 2 "register_operand")))]
"TARGET_HARD_FLOAT"
"")
@@ -1496,9 +1498,9 @@
;; respectively.
(define_expand "mulsi3"
- [(set (match_operand:SI 0 "register_operand" "")
- (mult:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "register_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (mult:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "register_operand")))]
""
{
if (GENERATE_MULT3_SI || TARGET_MAD)
@@ -1546,12 +1548,12 @@
;; Operand 4: GPR (destination)
(define_peephole2
[(parallel
- [(set (match_operand:SI 0 "register_operand" "")
- (mult:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "register_operand" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))
+ [(set (match_operand:SI 0 "register_operand")
+ (mult:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "register_operand")))
+ (clobber (match_operand:SI 3 "register_operand"))
(clobber (scratch:SI))])
- (set (match_operand:SI 4 "register_operand" "")
+ (set (match_operand:SI 4 "register_operand")
(unspec [(match_dup 0) (match_dup 3)] UNSPEC_MFHILO))]
"GENERATE_MULT3_SI && peep2_reg_dead_p (2, operands[0])"
[(parallel
@@ -1583,6 +1585,37 @@
(set_attr "mode" "SI")
(set_attr "length" "8")])
+;; On the VR4120 and VR4130, it is better to use "mtlo $0; macc" instead
+;; of "mult; mflo". They have the same latency, but the first form gives
+;; us an extra cycle to compute the operands.
+
+;; Operand 0: LO
+;; Operand 1: GPR (1st multiplication operand)
+;; Operand 2: GPR (2nd multiplication operand)
+;; Operand 3: HI
+;; Operand 4: GPR (destination)
+(define_peephole2
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand")
+ (mult:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "register_operand")))
+ (clobber (match_operand:SI 3 "register_operand"))])
+ (set (match_operand:SI 4 "register_operand")
+ (unspec:SI [(match_dup 0) (match_dup 3)] UNSPEC_MFHILO))]
+ "ISA_HAS_MACC && !GENERATE_MULT3_SI"
+ [(set (match_dup 0)
+ (const_int 0))
+ (parallel
+ [(set (match_dup 0)
+ (plus:SI (mult:SI (match_dup 1)
+ (match_dup 2))
+ (match_dup 0)))
+ (set (match_dup 4)
+ (plus:SI (mult:SI (match_dup 1)
+ (match_dup 2))
+ (match_dup 0)))
+ (clobber (match_dup 3))])])
+
;; Multiply-accumulate patterns
;; For processors that can copy the output to a general register:
@@ -1620,13 +1653,13 @@
;; Split the above insn if we failed to get LO allocated.
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "register_operand" ""))
- (match_operand:SI 3 "register_operand" "")))
- (clobber (match_scratch:SI 4 ""))
- (clobber (match_scratch:SI 5 ""))
- (clobber (match_scratch:SI 6 ""))]
+ [(set (match_operand:SI 0 "register_operand")
+ (plus:SI (mult:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "register_operand"))
+ (match_operand:SI 3 "register_operand")))
+ (clobber (match_scratch:SI 4))
+ (clobber (match_scratch:SI 5))
+ (clobber (match_scratch:SI 6))]
"reload_completed && !TARGET_DEBUG_D_MODE
&& GP_REG_P (true_regnum (operands[0]))
&& GP_REG_P (true_regnum (operands[3]))"
@@ -1639,13 +1672,13 @@
;; Splitter to copy result of MADD to a general register
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "register_operand" ""))
- (match_operand:SI 3 "register_operand" "")))
- (clobber (match_scratch:SI 4 ""))
- (clobber (match_scratch:SI 5 ""))
- (clobber (match_scratch:SI 6 ""))]
+ [(set (match_operand:SI 0 "register_operand")
+ (plus:SI (mult:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "register_operand"))
+ (match_operand:SI 3 "register_operand")))
+ (clobber (match_scratch:SI 4))
+ (clobber (match_scratch:SI 5))
+ (clobber (match_scratch:SI 6))]
"reload_completed && !TARGET_DEBUG_D_MODE
&& GP_REG_P (true_regnum (operands[0]))
&& true_regnum (operands[3]) == LO_REGNUM"
@@ -1655,7 +1688,7 @@
(clobber (match_dup 4))
(clobber (match_dup 5))
(clobber (match_dup 6))])
- (set (match_dup 0) (match_dup 3))]
+ (set (match_dup 0) (unspec:SI [(match_dup 5) (match_dup 4)] UNSPEC_MFHILO))]
"")
(define_insn "*macc"
@@ -1672,7 +1705,10 @@
else if (TARGET_MIPS5500)
return "madd\t%1,%2";
else
- return "macc\t%.,%1,%2";
+ /* The VR4130 assumes that there is a two-cycle latency between a macc
+ that "writes" to $0 and an instruction that reads from it. We avoid
+ this by assigning to $1 instead. */
+ return "%[macc\t%@,%1,%2%]";
}
[(set_attr "type" "imadd")
(set_attr "mode" "SI")])
@@ -1696,6 +1732,31 @@
[(set_attr "type" "imadd")
(set_attr "mode" "SI")])
+;; An msac-like instruction implemented using negation and a macc.
+(define_insn_and_split "*msac_using_macc"
+ [(set (match_operand:SI 0 "register_operand" "=l,d")
+ (minus:SI (match_operand:SI 1 "register_operand" "0,l")
+ (mult:SI (match_operand:SI 2 "register_operand" "d,d")
+ (match_operand:SI 3 "register_operand" "d,d"))))
+ (clobber (match_scratch:SI 4 "=h,h"))
+ (clobber (match_scratch:SI 5 "=X,1"))
+ (clobber (match_scratch:SI 6 "=d,d"))]
+ "ISA_HAS_MACC && !ISA_HAS_MSAC"
+ "#"
+ "&& reload_completed"
+ [(set (match_dup 6)
+ (neg:SI (match_dup 3)))
+ (parallel
+ [(set (match_dup 0)
+ (plus:SI (mult:SI (match_dup 2)
+ (match_dup 6))
+ (match_dup 1)))
+ (clobber (match_dup 4))
+ (clobber (match_dup 5))])]
+ ""
+ [(set_attr "type" "imadd")
+ (set_attr "length" "8")])
+
;; Patterns generated by the define_peephole2 below.
(define_insn "*macc2"
@@ -1737,11 +1798,11 @@
;; Operand 3: GPR (destination)
(define_peephole2
[(parallel
- [(set (match_operand:SI 0 "register_operand" "")
- (match_operand:SI 1 "macc_msac_operand" ""))
- (clobber (match_operand:SI 2 "register_operand" ""))
+ [(set (match_operand:SI 0 "register_operand")
+ (match_operand:SI 1 "macc_msac_operand"))
+ (clobber (match_operand:SI 2 "register_operand"))
(clobber (scratch:SI))])
- (set (match_operand:SI 3 "register_operand" "")
+ (set (match_operand:SI 3 "register_operand")
(unspec:SI [(match_dup 0) (match_dup 2)] UNSPEC_MFHILO))]
""
[(parallel [(set (match_dup 0)
@@ -1768,13 +1829,13 @@
;; Operand 7: new addition/subtraction
(define_peephole2
[(match_scratch:SI 0 "d")
- (set (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "register_operand" ""))
+ (set (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "register_operand"))
(match_dup 0)
(parallel
- [(set (match_operand:SI 3 "register_operand" "")
- (match_operand:SI 4 "macc_msac_operand" ""))
- (clobber (match_operand:SI 5 "register_operand" ""))
+ [(set (match_operand:SI 3 "register_operand")
+ (match_operand:SI 4 "macc_msac_operand"))
+ (clobber (match_operand:SI 5 "register_operand"))
(clobber (match_dup 1))])]
"GENERATE_MULT3_SI
&& true_regnum (operands[1]) == LO_REGNUM
@@ -1804,16 +1865,16 @@
;; Operand 7: new addition/subtraction
(define_peephole2
[(match_scratch:SI 0 "d")
- (set (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "register_operand" ""))
+ (set (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "register_operand"))
(match_dup 0)
(parallel
[(set (match_dup 1)
- (match_operand:SI 3 "macc_msac_operand" ""))
- (clobber (match_operand:SI 4 "register_operand" ""))
+ (match_operand:SI 3 "macc_msac_operand"))
+ (clobber (match_operand:SI 4 "register_operand"))
(clobber (scratch:SI))])
(match_dup 0)
- (set (match_operand:SI 5 "register_operand" "")
+ (set (match_operand:SI 5 "register_operand")
(unspec:SI [(match_dup 1) (match_dup 4)] UNSPEC_MFHILO))]
"GENERATE_MULT3_SI && peep2_reg_dead_p (3, operands[1])"
[(parallel [(set (match_dup 0)
@@ -1847,13 +1908,13 @@
;; Split the above insn if we failed to get LO allocated.
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (minus:SI (match_operand:SI 1 "register_operand" "")
- (mult:SI (match_operand:SI 2 "register_operand" "")
- (match_operand:SI 3 "register_operand" ""))))
- (clobber (match_scratch:SI 4 ""))
- (clobber (match_scratch:SI 5 ""))
- (clobber (match_scratch:SI 6 ""))]
+ [(set (match_operand:SI 0 "register_operand")
+ (minus:SI (match_operand:SI 1 "register_operand")
+ (mult:SI (match_operand:SI 2 "register_operand")
+ (match_operand:SI 3 "register_operand"))))
+ (clobber (match_scratch:SI 4))
+ (clobber (match_scratch:SI 5))
+ (clobber (match_scratch:SI 6))]
"reload_completed && !TARGET_DEBUG_D_MODE
&& GP_REG_P (true_regnum (operands[0]))
&& GP_REG_P (true_regnum (operands[1]))"
@@ -1866,13 +1927,13 @@
;; Splitter to copy result of MSUB to a general register
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (minus:SI (match_operand:SI 1 "register_operand" "")
- (mult:SI (match_operand:SI 2 "register_operand" "")
- (match_operand:SI 3 "register_operand" ""))))
- (clobber (match_scratch:SI 4 ""))
- (clobber (match_scratch:SI 5 ""))
- (clobber (match_scratch:SI 6 ""))]
+ [(set (match_operand:SI 0 "register_operand")
+ (minus:SI (match_operand:SI 1 "register_operand")
+ (mult:SI (match_operand:SI 2 "register_operand")
+ (match_operand:SI 3 "register_operand"))))
+ (clobber (match_scratch:SI 4))
+ (clobber (match_scratch:SI 5))
+ (clobber (match_scratch:SI 6))]
"reload_completed && !TARGET_DEBUG_D_MODE
&& GP_REG_P (true_regnum (operands[0]))
&& true_regnum (operands[1]) == LO_REGNUM"
@@ -1882,7 +1943,7 @@
(clobber (match_dup 4))
(clobber (match_dup 5))
(clobber (match_dup 6))])
- (set (match_dup 0) (match_dup 1))]
+ (set (match_dup 0) (unspec:SI [(match_dup 5) (match_dup 4)] UNSPEC_MFHILO))]
"")
(define_insn "*muls"
@@ -1899,9 +1960,9 @@
(set_attr "mode" "SI")])
(define_expand "muldi3"
- [(set (match_operand:DI 0 "register_operand" "")
- (mult:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "register_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (mult:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "register_operand")))]
"TARGET_64BIT"
{
if (GENERATE_MULT3_DI)
@@ -1950,10 +2011,10 @@
(define_expand "mulsidi3"
[(parallel
- [(set (match_operand:DI 0 "register_operand" "")
+ [(set (match_operand:DI 0 "register_operand")
(mult:DI
- (sign_extend:DI (match_operand:SI 1 "register_operand" ""))
- (sign_extend:DI (match_operand:SI 2 "register_operand" ""))))
+ (sign_extend:DI (match_operand:SI 1 "register_operand"))
+ (sign_extend:DI (match_operand:SI 2 "register_operand"))))
(clobber (scratch:DI))
(clobber (scratch:DI))
(clobber (scratch:DI))])]
@@ -2068,10 +2129,10 @@
(define_expand "umulsidi3"
[(parallel
- [(set (match_operand:DI 0 "register_operand" "")
+ [(set (match_operand:DI 0 "register_operand")
(mult:DI
- (zero_extend:DI (match_operand:SI 1 "register_operand" ""))
- (zero_extend:DI (match_operand:SI 2 "register_operand" ""))))
+ (zero_extend:DI (match_operand:SI 1 "register_operand"))
+ (zero_extend:DI (match_operand:SI 2 "register_operand"))))
(clobber (scratch:DI))
(clobber (scratch:DI))
(clobber (scratch:DI))])]
@@ -2175,11 +2236,11 @@
;; _highpart patterns
(define_expand "umulsi3_highpart"
- [(set (match_operand:SI 0 "register_operand" "")
+ [(set (match_operand:SI 0 "register_operand")
(truncate:SI
(lshiftrt:DI
- (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" ""))
- (zero_extend:DI (match_operand:SI 2 "register_operand" "")))
+ (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand"))
+ (zero_extend:DI (match_operand:SI 2 "register_operand")))
(const_int 32))))]
"ISA_HAS_MULHI || !TARGET_FIX_R4000"
{
@@ -2242,11 +2303,11 @@
(set_attr "length" "4")])
(define_expand "smulsi3_highpart"
- [(set (match_operand:SI 0 "register_operand" "")
+ [(set (match_operand:SI 0 "register_operand")
(truncate:SI
(lshiftrt:DI
- (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" ""))
- (sign_extend:DI (match_operand:SI 2 "register_operand" "")))
+ (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand"))
+ (sign_extend:DI (match_operand:SI 2 "register_operand")))
(const_int 32))))]
"ISA_HAS_MULHI || !TARGET_FIX_R4000"
{
@@ -2366,7 +2427,8 @@
else if (TARGET_MIPS5500)
return "maddu\t%1,%2";
else
- return "maccu\t%.,%1,%2";
+ /* See comment in *macc. */
+ return "%[maccu\t%@,%1,%2%]";
}
[(set_attr "type" "imadd")
(set_attr "mode" "SI")])
@@ -2386,7 +2448,8 @@
else if (TARGET_MIPS5500)
return "madd\t%1,%2";
else
- return "macc\t%.,%1,%2";
+ /* See comment in *macc. */
+ return "%[macc\t%@,%1,%2%]";
}
[(set_attr "type" "imadd")
(set_attr "mode" "SI")])
@@ -2483,9 +2546,9 @@
;;
(define_expand "divdf3"
- [(set (match_operand:DF 0 "register_operand" "")
- (div:DF (match_operand:DF 1 "reg_or_const_float_1_operand" "")
- (match_operand:DF 2 "register_operand" "")))]
+ [(set (match_operand:DF 0 "register_operand")
+ (div:DF (match_operand:DF 1 "reg_or_const_float_1_operand")
+ (match_operand:DF 2 "register_operand")))]
"TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"
{
if (const_float_1_operand (operands[1], DFmode))
@@ -2533,9 +2596,9 @@
;; errata, or if working around those errata and a slight loss of
;; precision is OK (i.e., flag_unsafe_math_optimizations is set).
(define_expand "divsf3"
- [(set (match_operand:SF 0 "register_operand" "")
- (div:SF (match_operand:SF 1 "reg_or_const_float_1_operand" "")
- (match_operand:SF 2 "register_operand" "")))]
+ [(set (match_operand:SF 0 "register_operand")
+ (div:SF (match_operand:SF 1 "reg_or_const_float_1_operand")
+ (match_operand:SF 2 "register_operand")))]
"TARGET_HARD_FLOAT && (!TARGET_FIX_SB1 || flag_unsafe_math_optimizations)"
{
if (const_float_1_operand (operands[1], SFmode))
@@ -2925,8 +2988,8 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "SI")])
(define_expand "negdi2"
- [(parallel [(set (match_operand:DI 0 "register_operand" "=d")
- (neg:DI (match_operand:DI 1 "register_operand" "d")))
+ [(parallel [(set (match_operand:DI 0 "register_operand")
+ (neg:DI (match_operand:DI 1 "register_operand")))
(clobber (match_dup 2))])]
"(TARGET_64BIT || !TARGET_DEBUG_G_MODE) && !TARGET_MIPS16"
{
@@ -3011,9 +3074,9 @@ dsrl\t%3,%3,1\n\
;; want to use a different set of constraints when TARGET_MIPS16.
(define_expand "andsi3"
- [(set (match_operand:SI 0 "register_operand" "=d,d")
- (and:SI (match_operand:SI 1 "uns_arith_operand" "%d,d")
- (match_operand:SI 2 "uns_arith_operand" "d,K")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (and:SI (match_operand:SI 1 "uns_arith_operand")
+ (match_operand:SI 2 "uns_arith_operand")))]
""
{
if (TARGET_MIPS16)
@@ -3044,9 +3107,9 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "SI")])
(define_expand "anddi3"
- [(set (match_operand:DI 0 "register_operand" "")
- (and:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "uns_arith_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (and:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "uns_arith_operand")))]
"TARGET_64BIT"
{
if (TARGET_MIPS16)
@@ -3077,9 +3140,9 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "DI")])
(define_expand "iorsi3"
- [(set (match_operand:SI 0 "register_operand" "=d,d")
- (ior:SI (match_operand:SI 1 "uns_arith_operand" "%d,d")
- (match_operand:SI 2 "uns_arith_operand" "d,K")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (ior:SI (match_operand:SI 1 "uns_arith_operand")
+ (match_operand:SI 2 "uns_arith_operand")))]
""
{
if (TARGET_MIPS16)
@@ -3110,9 +3173,9 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "SI")])
(define_expand "iordi3"
- [(set (match_operand:DI 0 "register_operand" "")
- (ior:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "uns_arith_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ior:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "uns_arith_operand")))]
"TARGET_64BIT"
{
if (TARGET_MIPS16)
@@ -3143,9 +3206,9 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "DI")])
(define_expand "xorsi3"
- [(set (match_operand:SI 0 "register_operand" "=d,d")
- (xor:SI (match_operand:SI 1 "uns_arith_operand" "%d,d")
- (match_operand:SI 2 "uns_arith_operand" "d,K")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (xor:SI (match_operand:SI 1 "uns_arith_operand")
+ (match_operand:SI 2 "uns_arith_operand")))]
""
"")
@@ -3173,15 +3236,15 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "SI")
(set_attr_alternative "length"
[(const_int 4)
- (if_then_else (match_operand:VOID 2 "m16_uimm8_1" "")
+ (if_then_else (match_operand:VOID 2 "m16_uimm8_1")
(const_int 4)
(const_int 8))
(const_int 4)])])
(define_expand "xordi3"
- [(set (match_operand:DI 0 "register_operand" "")
- (xor:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "uns_arith_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (xor:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "uns_arith_operand")))]
"TARGET_64BIT"
{
if (TARGET_MIPS16)
@@ -3215,7 +3278,7 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "DI")
(set_attr_alternative "length"
[(const_int 4)
- (if_then_else (match_operand:VOID 2 "m16_uimm8_1" "")
+ (if_then_else (match_operand:VOID 2 "m16_uimm8_1")
(const_int 4)
(const_int 8))
(const_int 4)])])
@@ -3419,8 +3482,8 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "DI")])
(define_expand "zero_extendhisi2"
- [(set (match_operand:SI 0 "register_operand" "")
- (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand")))]
""
{
if (TARGET_MIPS16 && GET_CODE (operands[1]) != MEM)
@@ -3453,8 +3516,8 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "SI")])
(define_expand "zero_extendhidi2"
- [(set (match_operand:DI 0 "register_operand" "")
- (zero_extend:DI (match_operand:HI 1 "nonimmediate_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (zero_extend:DI (match_operand:HI 1 "nonimmediate_operand")))]
"TARGET_64BIT"
{
if (TARGET_MIPS16 && GET_CODE (operands[1]) != MEM)
@@ -3487,8 +3550,8 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "DI")])
(define_expand "zero_extendqihi2"
- [(set (match_operand:HI 0 "register_operand" "")
- (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")))]
+ [(set (match_operand:HI 0 "register_operand")
+ (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand")))]
""
{
if (TARGET_MIPS16 && GET_CODE (operands[1]) != MEM)
@@ -3522,8 +3585,8 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "HI")])
(define_expand "zero_extendqisi2"
- [(set (match_operand:SI 0 "register_operand" "")
- (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand")))]
""
{
if (TARGET_MIPS16 && GET_CODE (operands[1]) != MEM)
@@ -3556,8 +3619,8 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "SI")])
(define_expand "zero_extendqidi2"
- [(set (match_operand:DI 0 "register_operand" "")
- (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand")))]
"TARGET_64BIT"
{
if (TARGET_MIPS16 && GET_CODE (operands[1]) != MEM)
@@ -3618,8 +3681,8 @@ dsrl\t%3,%3,1\n\
;; all non-mem patterns after reload.
(define_expand "extendhidi2"
- [(set (match_operand:DI 0 "register_operand" "")
- (sign_extend:DI (match_operand:HI 1 "nonimmediate_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (sign_extend:DI (match_operand:HI 1 "nonimmediate_operand")))]
"TARGET_64BIT"
"")
@@ -3630,8 +3693,8 @@ dsrl\t%3,%3,1\n\
"#")
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (sign_extend:DI (match_operand:HI 1 "register_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (sign_extend:DI (match_operand:HI 1 "register_operand")))]
"TARGET_64BIT && reload_completed"
[(set (match_dup 0)
(ashift:DI (match_dup 1) (const_int 48)))
@@ -3648,8 +3711,8 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "DI")])
(define_expand "extendhisi2"
- [(set (match_operand:SI 0 "register_operand" "")
- (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand")))]
""
{
if (ISA_HAS_SEB_SEH)
@@ -3667,8 +3730,8 @@ dsrl\t%3,%3,1\n\
"#")
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (sign_extend:SI (match_operand:HI 1 "register_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (sign_extend:SI (match_operand:HI 1 "register_operand")))]
"reload_completed"
[(set (match_dup 0)
(ashift:SI (match_dup 1) (const_int 16)))
@@ -3693,8 +3756,8 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "SI")])
(define_expand "extendqihi2"
- [(set (match_operand:HI 0 "register_operand" "")
- (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")))]
+ [(set (match_operand:HI 0 "register_operand")
+ (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand")))]
""
"")
@@ -3705,8 +3768,8 @@ dsrl\t%3,%3,1\n\
"#")
(define_split
- [(set (match_operand:HI 0 "register_operand" "")
- (sign_extend:HI (match_operand:QI 1 "register_operand" "")))]
+ [(set (match_operand:HI 0 "register_operand")
+ (sign_extend:HI (match_operand:QI 1 "register_operand")))]
"reload_completed"
[(set (match_dup 0)
(ashift:SI (match_dup 1) (const_int 24)))
@@ -3725,8 +3788,8 @@ dsrl\t%3,%3,1\n\
(define_expand "extendqisi2"
- [(set (match_operand:SI 0 "register_operand" "")
- (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand")))]
""
{
if (ISA_HAS_SEB_SEH)
@@ -3744,8 +3807,8 @@ dsrl\t%3,%3,1\n\
"#")
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (sign_extend:SI (match_operand:QI 1 "register_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (sign_extend:SI (match_operand:QI 1 "register_operand")))]
"reload_completed"
[(set (match_dup 0)
(ashift:SI (match_dup 1) (const_int 24)))
@@ -3770,8 +3833,8 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "SI")])
(define_expand "extendqidi2"
- [(set (match_operand:DI 0 "register_operand" "")
- (sign_extend:DI (match_operand:QI 1 "nonimmediate_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (sign_extend:DI (match_operand:QI 1 "nonimmediate_operand")))]
"TARGET_64BIT"
"")
@@ -3782,8 +3845,8 @@ dsrl\t%3,%3,1\n\
"#")
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (sign_extend:DI (match_operand:QI 1 "register_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (sign_extend:DI (match_operand:QI 1 "register_operand")))]
"TARGET_64BIT && reload_completed"
[(set (match_dup 0)
(ashift:DI (match_dup 1) (const_int 56)))
@@ -3815,8 +3878,8 @@ dsrl\t%3,%3,1\n\
;; ....................
(define_expand "fix_truncdfsi2"
- [(set (match_operand:SI 0 "register_operand" "=f")
- (fix:SI (match_operand:DF 1 "register_operand" "f")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (fix:SI (match_operand:DF 1 "register_operand")))]
"TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"
{
if (!ISA_HAS_TRUNC_W)
@@ -3851,8 +3914,8 @@ dsrl\t%3,%3,1\n\
(set_attr "length" "36")])
(define_expand "fix_truncsfsi2"
- [(set (match_operand:SI 0 "register_operand" "=f")
- (fix:SI (match_operand:SF 1 "register_operand" "f")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (fix:SI (match_operand:SF 1 "register_operand")))]
"TARGET_HARD_FLOAT"
{
if (!ISA_HAS_TRUNC_W)
@@ -3948,8 +4011,8 @@ dsrl\t%3,%3,1\n\
(define_expand "fixuns_truncdfsi2"
- [(set (match_operand:SI 0 "register_operand" "")
- (unsigned_fix:SI (match_operand:DF 1 "register_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (unsigned_fix:SI (match_operand:DF 1 "register_operand")))]
"TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"
{
rtx reg1 = gen_reg_rtx (DFmode);
@@ -3993,8 +4056,8 @@ dsrl\t%3,%3,1\n\
(define_expand "fixuns_truncdfdi2"
- [(set (match_operand:DI 0 "register_operand" "")
- (unsigned_fix:DI (match_operand:DF 1 "register_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (unsigned_fix:DI (match_operand:DF 1 "register_operand")))]
"TARGET_HARD_FLOAT && TARGET_64BIT && TARGET_DOUBLE_FLOAT"
{
rtx reg1 = gen_reg_rtx (DFmode);
@@ -4035,8 +4098,8 @@ dsrl\t%3,%3,1\n\
(define_expand "fixuns_truncsfsi2"
- [(set (match_operand:SI 0 "register_operand" "")
- (unsigned_fix:SI (match_operand:SF 1 "register_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (unsigned_fix:SI (match_operand:SF 1 "register_operand")))]
"TARGET_HARD_FLOAT"
{
rtx reg1 = gen_reg_rtx (SFmode);
@@ -4077,8 +4140,8 @@ dsrl\t%3,%3,1\n\
(define_expand "fixuns_truncsfdi2"
- [(set (match_operand:DI 0 "register_operand" "")
- (unsigned_fix:DI (match_operand:SF 1 "register_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (unsigned_fix:DI (match_operand:SF 1 "register_operand")))]
"TARGET_HARD_FLOAT && TARGET_64BIT && TARGET_DOUBLE_FLOAT"
{
rtx reg1 = gen_reg_rtx (SFmode);
@@ -4127,10 +4190,10 @@ dsrl\t%3,%3,1\n\
;; Bit field extract patterns which use lwl/lwr or ldl/ldr.
(define_expand "extv"
- [(set (match_operand 0 "register_operand" "")
- (sign_extract (match_operand:QI 1 "memory_operand" "")
- (match_operand 2 "immediate_operand" "")
- (match_operand 3 "immediate_operand" "")))]
+ [(set (match_operand 0 "register_operand")
+ (sign_extract (match_operand:QI 1 "memory_operand")
+ (match_operand 2 "immediate_operand")
+ (match_operand 3 "immediate_operand")))]
"!TARGET_MIPS16"
{
if (mips_expand_unaligned_load (operands[0], operands[1],
@@ -4142,10 +4205,10 @@ dsrl\t%3,%3,1\n\
})
(define_expand "extzv"
- [(set (match_operand 0 "register_operand" "")
- (zero_extract (match_operand:QI 1 "memory_operand" "")
- (match_operand 2 "immediate_operand" "")
- (match_operand 3 "immediate_operand" "")))]
+ [(set (match_operand 0 "register_operand")
+ (zero_extract (match_operand:QI 1 "memory_operand")
+ (match_operand 2 "immediate_operand")
+ (match_operand 3 "immediate_operand")))]
"!TARGET_MIPS16"
{
if (mips_expand_unaligned_load (operands[0], operands[1],
@@ -4157,10 +4220,10 @@ dsrl\t%3,%3,1\n\
})
(define_expand "insv"
- [(set (zero_extract (match_operand:QI 0 "memory_operand" "")
- (match_operand 1 "immediate_operand" "")
- (match_operand 2 "immediate_operand" ""))
- (match_operand 3 "reg_or_0_operand" ""))]
+ [(set (zero_extract (match_operand:QI 0 "memory_operand")
+ (match_operand 1 "immediate_operand")
+ (match_operand 2 "immediate_operand"))
+ (match_operand 3 "reg_or_0_operand"))]
"!TARGET_MIPS16"
{
if (mips_expand_unaligned_store (operands[0], operands[3],
@@ -4519,8 +4582,8 @@ dsrl\t%3,%3,1\n\
;; the compiler, have memoized the insn number already.
(define_expand "movdi"
- [(set (match_operand:DI 0 "" "")
- (match_operand:DI 1 "" ""))]
+ [(set (match_operand:DI 0 "")
+ (match_operand:DI 1 ""))]
""
{
if (mips_legitimize_move (DImode, operands[0], operands[1]))
@@ -4585,10 +4648,10 @@ dsrl\t%3,%3,1\n\
[(const_int 4)
(const_int 4)
(const_int 4)
- (if_then_else (match_operand:VOID 1 "m16_uimm8_1" "")
+ (if_then_else (match_operand:VOID 1 "m16_uimm8_1")
(const_int 4)
(const_int 8))
- (if_then_else (match_operand:VOID 1 "m16_nuimm8_1" "")
+ (if_then_else (match_operand:VOID 1 "m16_nuimm8_1")
(const_int 8)
(const_int 12))
(const_string "*")
@@ -4601,9 +4664,9 @@ dsrl\t%3,%3,1\n\
;; load are 2 2 byte instructions.
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
+ [(set (match_operand:DI 0 "register_operand")
(mem:DI (plus:DI (match_dup 0)
- (match_operand:DI 1 "const_int_operand" ""))))]
+ (match_operand:DI 1 "const_int_operand"))))]
"TARGET_64BIT && TARGET_MIPS16 && reload_completed
&& !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[0]) == REG
@@ -4646,8 +4709,8 @@ dsrl\t%3,%3,1\n\
;; the compiler, have memoized the insn number already.
(define_expand "movsi"
- [(set (match_operand:SI 0 "" "")
- (match_operand:SI 1 "" ""))]
+ [(set (match_operand:SI 0 "")
+ (match_operand:SI 1 ""))]
""
{
if (mips_legitimize_move (SImode, operands[0], operands[1]))
@@ -4691,10 +4754,10 @@ dsrl\t%3,%3,1\n\
[(const_int 4)
(const_int 4)
(const_int 4)
- (if_then_else (match_operand:VOID 1 "m16_uimm8_1" "")
+ (if_then_else (match_operand:VOID 1 "m16_uimm8_1")
(const_int 4)
(const_int 8))
- (if_then_else (match_operand:VOID 1 "m16_nuimm8_1" "")
+ (if_then_else (match_operand:VOID 1 "m16_nuimm8_1")
(const_int 8)
(const_int 12))
(const_string "*")
@@ -4706,9 +4769,9 @@ dsrl\t%3,%3,1\n\
;; load are 2 2 byte instructions.
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
+ [(set (match_operand:SI 0 "register_operand")
(mem:SI (plus:SI (match_dup 0)
- (match_operand:SI 1 "const_int_operand" ""))))]
+ (match_operand:SI 1 "const_int_operand"))))]
"TARGET_MIPS16 && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[0]) == REG
&& M16_REG_P (REGNO (operands[0]))
@@ -4748,8 +4811,8 @@ dsrl\t%3,%3,1\n\
;; instructions.
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (match_operand:SI 1 "const_int_operand" ""))]
+ [(set (match_operand:SI 0 "register_operand")
+ (match_operand:SI 1 "const_int_operand"))]
"TARGET_MIPS16 && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[0]) == REG
&& M16_REG_P (REGNO (operands[0]))
@@ -4769,8 +4832,8 @@ dsrl\t%3,%3,1\n\
;; load and a neg. That's what mips_output_move will generate anyhow.
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (match_operand:SI 1 "const_int_operand" ""))]
+ [(set (match_operand:SI 0 "register_operand")
+ (match_operand:SI 1 "const_int_operand"))]
"TARGET_MIPS16 && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[0]) == REG
&& M16_REG_P (REGNO (operands[0]))
@@ -4930,8 +4993,8 @@ dsrl\t%3,%3,1\n\
;; Unsigned loads are used because LOAD_EXTEND_OP returns ZERO_EXTEND.
(define_expand "movhi"
- [(set (match_operand:HI 0 "" "")
- (match_operand:HI 1 "" ""))]
+ [(set (match_operand:HI 0 "")
+ (match_operand:HI 1 ""))]
""
{
if (mips_legitimize_move (HImode, operands[0], operands[1]))
@@ -4977,10 +5040,10 @@ dsrl\t%3,%3,1\n\
[(const_int 4)
(const_int 4)
(const_int 4)
- (if_then_else (match_operand:VOID 1 "m16_uimm8_1" "")
+ (if_then_else (match_operand:VOID 1 "m16_uimm8_1")
(const_int 4)
(const_int 8))
- (if_then_else (match_operand:VOID 1 "m16_nuimm8_1" "")
+ (if_then_else (match_operand:VOID 1 "m16_nuimm8_1")
(const_int 8)
(const_int 12))
(const_string "*")
@@ -4992,9 +5055,9 @@ dsrl\t%3,%3,1\n\
;; load are 2 2 byte instructions.
(define_split
- [(set (match_operand:HI 0 "register_operand" "")
+ [(set (match_operand:HI 0 "register_operand")
(mem:HI (plus:SI (match_dup 0)
- (match_operand:SI 1 "const_int_operand" ""))))]
+ (match_operand:SI 1 "const_int_operand"))))]
"TARGET_MIPS16 && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[0]) == REG
&& M16_REG_P (REGNO (operands[0]))
@@ -5037,8 +5100,8 @@ dsrl\t%3,%3,1\n\
;; Unsigned loads are used because LOAD_EXTEND_OP returns ZERO_EXTEND.
(define_expand "movqi"
- [(set (match_operand:QI 0 "" "")
- (match_operand:QI 1 "" ""))]
+ [(set (match_operand:QI 0 "")
+ (match_operand:QI 1 ""))]
""
{
if (mips_legitimize_move (QImode, operands[0], operands[1]))
@@ -5087,9 +5150,9 @@ dsrl\t%3,%3,1\n\
;; load are 2 2 byte instructions.
(define_split
- [(set (match_operand:QI 0 "register_operand" "")
+ [(set (match_operand:QI 0 "register_operand")
(mem:QI (plus:SI (match_dup 0)
- (match_operand:SI 1 "const_int_operand" ""))))]
+ (match_operand:SI 1 "const_int_operand"))))]
"TARGET_MIPS16 && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[0]) == REG
&& M16_REG_P (REGNO (operands[0]))
@@ -5115,8 +5178,8 @@ dsrl\t%3,%3,1\n\
;; 32-bit floating point moves
(define_expand "movsf"
- [(set (match_operand:SF 0 "" "")
- (match_operand:SF 1 "" ""))]
+ [(set (match_operand:SF 0 "")
+ (match_operand:SF 1 ""))]
""
{
if (mips_legitimize_move (SFmode, operands[0], operands[1]))
@@ -5160,8 +5223,8 @@ dsrl\t%3,%3,1\n\
;; 64-bit floating point moves
(define_expand "movdf"
- [(set (match_operand:DF 0 "" "")
- (match_operand:DF 1 "" ""))]
+ [(set (match_operand:DF 0 "")
+ (match_operand:DF 1 ""))]
""
{
if (mips_legitimize_move (DFmode, operands[0], operands[1]))
@@ -5213,8 +5276,8 @@ dsrl\t%3,%3,1\n\
(set_attr "length" "8,8,8,*,*")])
(define_split
- [(set (match_operand:DI 0 "nonimmediate_operand" "")
- (match_operand:DI 1 "move_operand" ""))]
+ [(set (match_operand:DI 0 "nonimmediate_operand")
+ (match_operand:DI 1 "move_operand"))]
"reload_completed && !TARGET_64BIT
&& mips_split_64bit_move_p (operands[0], operands[1])"
[(const_int 0)]
@@ -5224,8 +5287,8 @@ dsrl\t%3,%3,1\n\
})
(define_split
- [(set (match_operand:DF 0 "nonimmediate_operand" "")
- (match_operand:DF 1 "move_operand" ""))]
+ [(set (match_operand:DF 0 "nonimmediate_operand")
+ (match_operand:DF 1 "move_operand"))]
"reload_completed && !TARGET_64BIT
&& mips_split_64bit_move_p (operands[0], operands[1])"
[(const_int 0)]
@@ -5236,7 +5299,7 @@ dsrl\t%3,%3,1\n\
;; The HI and LO registers are not truly independent. If we move an mthi
;; instruction before an mflo instruction, it will make the result of the
-;; mflo unpredicatable. The same goes for mtlo and mfhi.
+;; mflo unpredictable. The same goes for mtlo and mfhi.
;;
;; We cope with this by making the mflo and mfhi patterns use both HI and LO.
;; Operand 1 is the register we want, operand 2 is the other one.
@@ -5274,8 +5337,7 @@ dsrl\t%3,%3,1\n\
return mips_output_move (operands[0], operands[1]);
}
[(set_attr "type" "xfer,fpload")
- (set_attr "mode" "SF")
- (set_attr "length" "4")])
+ (set_attr "mode" "SF")])
;; Load the high word of operand 0 from operand 1, preserving the value
;; in the low word.
@@ -5290,8 +5352,7 @@ dsrl\t%3,%3,1\n\
return mips_output_move (operands[0], operands[1]);
}
[(set_attr "type" "xfer,fpload")
- (set_attr "mode" "SF")
- (set_attr "length" "4")])
+ (set_attr "mode" "SF")])
;; Store the high word of operand 1 in operand 0. The corresponding
;; low-word move is done in the normal way.
@@ -5305,8 +5366,7 @@ dsrl\t%3,%3,1\n\
return mips_output_move (operands[0], operands[1]);
}
[(set_attr "type" "xfer,fpstore")
- (set_attr "mode" "SF")
- (set_attr "length" "4")])
+ (set_attr "mode" "SF")])
;; Insn to initialize $gp for n32/n64 abicalls. Operand 0 is the offset
;; of _gp from the start of this function. Operand 1 is the incoming
@@ -5358,10 +5418,10 @@ dsrl\t%3,%3,1\n\
;; Argument 3 is the alignment
(define_expand "movstrsi"
- [(parallel [(set (match_operand:BLK 0 "general_operand" "")
- (match_operand:BLK 1 "general_operand" ""))
- (use (match_operand:SI 2 "" ""))
- (use (match_operand:SI 3 "const_int_operand" ""))])]
+ [(parallel [(set (match_operand:BLK 0 "general_operand")
+ (match_operand:BLK 1 "general_operand"))
+ (use (match_operand:SI 2 ""))
+ (use (match_operand:SI 3 "const_int_operand"))])]
"!TARGET_MIPS16 && !TARGET_MEMCPY"
{
if (mips_expand_block_move (operands[0], operands[1], operands[2]))
@@ -5381,9 +5441,9 @@ dsrl\t%3,%3,1\n\
;; want to use a different set of constraints when TARGET_MIPS16.
(define_expand "ashlsi3"
- [(set (match_operand:SI 0 "register_operand" "=d")
- (ashift:SI (match_operand:SI 1 "register_operand" "d")
- (match_operand:SI 2 "arith_operand" "dI")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (ashift:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "arith_operand")))]
""
{
/* On the mips16, a shift of more than 8 is a four byte instruction,
@@ -5457,16 +5517,16 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "SI")
(set_attr_alternative "length"
[(const_int 4)
- (if_then_else (match_operand:VOID 2 "m16_uimm3_b" "")
+ (if_then_else (match_operand:VOID 2 "m16_uimm3_b")
(const_int 4)
(const_int 8))])])
;; On the mips16, we can split a 4 byte shift into 2 2 byte shifts.
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (ashift:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "const_int_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (ashift:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "const_int_operand")))]
"TARGET_MIPS16 && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[2]) == CONST_INT
&& INTVAL (operands[2]) > 8
@@ -5476,9 +5536,9 @@ dsrl\t%3,%3,1\n\
{ operands[2] = GEN_INT (INTVAL (operands[2]) - 8); })
(define_expand "ashldi3"
- [(parallel [(set (match_operand:DI 0 "register_operand" "")
- (ashift:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "arith_operand" "")))
+ [(parallel [(set (match_operand:DI 0 "register_operand")
+ (ashift:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "arith_operand")))
(clobber (match_dup 3))])]
"TARGET_64BIT || (!TARGET_DEBUG_G_MODE && !TARGET_MIPS16)"
{
@@ -5560,10 +5620,10 @@ sll\t%L0,%L1,%2\n\
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (ashift:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ashift:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && !WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
@@ -5577,10 +5637,10 @@ sll\t%L0,%L1,%2\n\
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (ashift:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ashift:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
@@ -5615,10 +5675,10 @@ sll\t%L0,%L1,%2\n\
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (ashift:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ashift:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && !WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
@@ -5649,10 +5709,10 @@ sll\t%L0,%L1,%2\n\
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (ashift:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ashift:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
@@ -5714,7 +5774,7 @@ sll\t%L0,%L1,%2\n\
(set_attr "mode" "DI")
(set_attr_alternative "length"
[(const_int 4)
- (if_then_else (match_operand:VOID 2 "m16_uimm3_b" "")
+ (if_then_else (match_operand:VOID 2 "m16_uimm3_b")
(const_int 4)
(const_int 8))])])
@@ -5722,9 +5782,9 @@ sll\t%L0,%L1,%2\n\
;; On the mips16, we can split a 4 byte shift into 2 2 byte shifts.
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (ashift:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "const_int_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ashift:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "const_int_operand")))]
"TARGET_MIPS16 && TARGET_64BIT && !TARGET_DEBUG_D_MODE
&& reload_completed
&& GET_CODE (operands[2]) == CONST_INT
@@ -5735,9 +5795,9 @@ sll\t%L0,%L1,%2\n\
{ operands[2] = GEN_INT (INTVAL (operands[2]) - 8); })
(define_expand "ashrsi3"
- [(set (match_operand:SI 0 "register_operand" "=d")
- (ashiftrt:SI (match_operand:SI 1 "register_operand" "d")
- (match_operand:SI 2 "arith_operand" "dI")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (ashiftrt:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "arith_operand")))]
""
{
/* On the mips16, a shift of more than 8 is a four byte instruction,
@@ -5792,7 +5852,7 @@ sll\t%L0,%L1,%2\n\
(set_attr "mode" "SI")
(set_attr_alternative "length"
[(const_int 4)
- (if_then_else (match_operand:VOID 2 "m16_uimm3_b" "")
+ (if_then_else (match_operand:VOID 2 "m16_uimm3_b")
(const_int 4)
(const_int 8))])])
@@ -5800,9 +5860,9 @@ sll\t%L0,%L1,%2\n\
;; On the mips16, we can split a 4 byte shift into 2 2 byte shifts.
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (ashiftrt:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "const_int_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (ashiftrt:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "const_int_operand")))]
"TARGET_MIPS16 && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[2]) == CONST_INT
&& INTVAL (operands[2]) > 8
@@ -5812,9 +5872,9 @@ sll\t%L0,%L1,%2\n\
{ operands[2] = GEN_INT (INTVAL (operands[2]) - 8); })
(define_expand "ashrdi3"
- [(parallel [(set (match_operand:DI 0 "register_operand" "")
- (ashiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "arith_operand" "")))
+ [(parallel [(set (match_operand:DI 0 "register_operand")
+ (ashiftrt:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "arith_operand")))
(clobber (match_dup 3))])]
"TARGET_64BIT || (!TARGET_DEBUG_G_MODE && !TARGET_MIPS16)"
{
@@ -5891,10 +5951,10 @@ sra\t%M0,%M1,%2\n\
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (ashiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ashiftrt:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && !WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
&& GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
@@ -5908,10 +5968,10 @@ sra\t%M0,%M1,%2\n\
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (ashiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ashiftrt:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
&& GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
@@ -5946,10 +6006,10 @@ sra\t%M0,%M1,%2\n\
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (ashiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ashiftrt:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && !WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
@@ -5980,10 +6040,10 @@ sra\t%M0,%M1,%2\n\
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (ashiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ashiftrt:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
@@ -6042,16 +6102,16 @@ sra\t%M0,%M1,%2\n\
(set_attr "mode" "DI")
(set_attr_alternative "length"
[(const_int 4)
- (if_then_else (match_operand:VOID 2 "m16_uimm3_b" "")
+ (if_then_else (match_operand:VOID 2 "m16_uimm3_b")
(const_int 4)
(const_int 8))])])
;; On the mips16, we can split a 4 byte shift into 2 2 byte shifts.
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (ashiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "const_int_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ashiftrt:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "const_int_operand")))]
"TARGET_MIPS16 && TARGET_64BIT && !TARGET_DEBUG_D_MODE
&& reload_completed
&& GET_CODE (operands[2]) == CONST_INT
@@ -6062,9 +6122,9 @@ sra\t%M0,%M1,%2\n\
{ operands[2] = GEN_INT (INTVAL (operands[2]) - 8); })
(define_expand "lshrsi3"
- [(set (match_operand:SI 0 "register_operand" "=d")
- (lshiftrt:SI (match_operand:SI 1 "register_operand" "d")
- (match_operand:SI 2 "arith_operand" "dI")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (lshiftrt:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "arith_operand")))]
""
{
/* On the mips16, a shift of more than 8 is a four byte instruction,
@@ -6119,7 +6179,7 @@ sra\t%M0,%M1,%2\n\
(set_attr "mode" "SI")
(set_attr_alternative "length"
[(const_int 4)
- (if_then_else (match_operand:VOID 2 "m16_uimm3_b" "")
+ (if_then_else (match_operand:VOID 2 "m16_uimm3_b")
(const_int 4)
(const_int 8))])])
@@ -6127,9 +6187,9 @@ sra\t%M0,%M1,%2\n\
;; On the mips16, we can split a 4 byte shift into 2 2 byte shifts.
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (lshiftrt:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "const_int_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (lshiftrt:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "const_int_operand")))]
"TARGET_MIPS16 && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[2]) == CONST_INT
&& INTVAL (operands[2]) > 8
@@ -6146,7 +6206,7 @@ sra\t%M0,%M1,%2\n\
;; to make it simple enough for combine to understand.
;;
;; The length here is the worst case: the length of the split version
-;; will be more accurate.
+;; will be more accurate.
(define_insn_and_split ""
[(set (match_operand:SI 0 "register_operand" "=d")
(lshiftrt:SI (match_operand:SI 1 "memory_operand" "m")
@@ -6162,9 +6222,9 @@ sra\t%M0,%M1,%2\n\
(set_attr "length" "16")])
(define_expand "lshrdi3"
- [(parallel [(set (match_operand:DI 0 "register_operand" "")
- (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "arith_operand" "")))
+ [(parallel [(set (match_operand:DI 0 "register_operand")
+ (lshiftrt:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "arith_operand")))
(clobber (match_dup 3))])]
"TARGET_64BIT || (!TARGET_DEBUG_G_MODE && !TARGET_MIPS16)"
{
@@ -6242,10 +6302,10 @@ srl\t%M0,%M1,%2\n\
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (lshiftrt:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && !WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
@@ -6259,10 +6319,10 @@ srl\t%M0,%M1,%2\n\
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (lshiftrt:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
@@ -6297,10 +6357,10 @@ srl\t%M0,%M1,%2\n\
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (lshiftrt:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && !WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
@@ -6331,10 +6391,10 @@ srl\t%M0,%M1,%2\n\
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "small_int" "")))
- (clobber (match_operand:SI 3 "register_operand" ""))]
+ [(set (match_operand:DI 0 "register_operand")
+ (lshiftrt:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "small_int")))
+ (clobber (match_operand:SI 3 "register_operand"))]
"reload_completed && WORDS_BIG_ENDIAN && !TARGET_64BIT
&& !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE && !TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
@@ -6393,7 +6453,7 @@ srl\t%M0,%M1,%2\n\
(set_attr "mode" "DI")
(set_attr_alternative "length"
[(const_int 4)
- (if_then_else (match_operand:VOID 2 "m16_uimm3_b" "")
+ (if_then_else (match_operand:VOID 2 "m16_uimm3_b")
(const_int 4)
(const_int 8))])])
@@ -6443,9 +6503,9 @@ srl\t%M0,%M1,%2\n\
;; On the mips16, we can split a 4 byte shift into 2 2 byte shifts.
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "const_int_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (lshiftrt:DI (match_operand:DI 1 "register_operand")
+ (match_operand:SI 2 "const_int_operand")))]
"TARGET_MIPS16 && reload_completed && !TARGET_DEBUG_D_MODE
&& GET_CODE (operands[2]) == CONST_INT
&& INTVAL (operands[2]) > 8
@@ -6479,8 +6539,8 @@ srl\t%M0,%M1,%2\n\
(define_expand "cmpsi"
[(set (cc0)
- (compare:CC (match_operand:SI 0 "register_operand" "")
- (match_operand:SI 1 "arith_operand" "")))]
+ (compare:CC (match_operand:SI 0 "register_operand")
+ (match_operand:SI 1 "arith_operand")))]
""
{
branch_cmp[0] = operands[0];
@@ -6491,8 +6551,8 @@ srl\t%M0,%M1,%2\n\
(define_expand "cmpdi"
[(set (cc0)
- (compare:CC (match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "arith_operand" "")))]
+ (compare:CC (match_operand:DI 0 "register_operand")
+ (match_operand:DI 1 "arith_operand")))]
"TARGET_64BIT"
{
branch_cmp[0] = operands[0];
@@ -6503,8 +6563,8 @@ srl\t%M0,%M1,%2\n\
(define_expand "cmpdf"
[(set (cc0)
- (compare:CC (match_operand:DF 0 "register_operand" "")
- (match_operand:DF 1 "register_operand" "")))]
+ (compare:CC (match_operand:DF 0 "register_operand")
+ (match_operand:DF 1 "register_operand")))]
"TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"
{
branch_cmp[0] = operands[0];
@@ -6515,8 +6575,8 @@ srl\t%M0,%M1,%2\n\
(define_expand "cmpsf"
[(set (cc0)
- (compare:CC (match_operand:SF 0 "register_operand" "")
- (match_operand:SF 1 "register_operand" "")))]
+ (compare:CC (match_operand:SF 0 "register_operand")
+ (match_operand:SF 1 "register_operand")))]
"TARGET_HARD_FLOAT"
{
branch_cmp[0] = operands[0];
@@ -6800,7 +6860,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (unordered:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6812,7 +6872,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (ordered:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6824,7 +6884,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (unlt:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6836,7 +6896,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (unge:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6848,7 +6908,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (uneq:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6860,7 +6920,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (ltgt:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6872,7 +6932,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (unle:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6884,7 +6944,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (ungt:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6896,7 +6956,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (eq:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6908,7 +6968,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (ne:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6920,7 +6980,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (gt:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6932,7 +6992,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (ge:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6944,7 +7004,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (lt:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6956,7 +7016,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (le:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6968,7 +7028,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (gtu:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6980,7 +7040,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (geu:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -6992,7 +7052,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (ltu:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -7004,7 +7064,7 @@ srl\t%M0,%M1,%2\n\
[(set (pc)
(if_then_else (leu:CC (cc0)
(const_int 0))
- (label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 0 ""))
(pc)))]
""
{
@@ -7020,7 +7080,7 @@ srl\t%M0,%M1,%2\n\
;; ....................
(define_expand "seq"
- [(set (match_operand:SI 0 "register_operand" "=d")
+ [(set (match_operand:SI 0 "register_operand")
(eq:SI (match_dup 1)
(match_dup 2)))]
""
@@ -7094,9 +7154,9 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (eq:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "uns_arith_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (eq:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "uns_arith_operand")))]
"TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE && !TARGET_MIPS16
&& (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != 0)"
[(set (match_dup 0)
@@ -7120,9 +7180,9 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (eq:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "uns_arith_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (eq:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "uns_arith_operand")))]
"TARGET_64BIT && TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE
&& !TARGET_MIPS16
&& (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != 0)"
@@ -7137,7 +7197,7 @@ srl\t%M0,%M1,%2\n\
;; On the mips16 the default code is better than using sltu.
(define_expand "sne"
- [(set (match_operand:SI 0 "register_operand" "=d")
+ [(set (match_operand:SI 0 "register_operand")
(ne:SI (match_dup 1)
(match_dup 2)))]
"!TARGET_MIPS16"
@@ -7192,9 +7252,9 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (ne:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "uns_arith_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (ne:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "uns_arith_operand")))]
"TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE && !TARGET_MIPS16
&& (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != 0)"
[(set (match_dup 0)
@@ -7218,9 +7278,9 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (ne:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "uns_arith_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ne:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "uns_arith_operand")))]
"TARGET_64BIT && TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE
&& !TARGET_MIPS16
&& (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != 0)"
@@ -7233,7 +7293,7 @@ srl\t%M0,%M1,%2\n\
"")
(define_expand "sgt"
- [(set (match_operand:SI 0 "register_operand" "=d")
+ [(set (match_operand:SI 0 "register_operand")
(gt:SI (match_dup 1)
(match_dup 2)))]
""
@@ -7294,7 +7354,7 @@ srl\t%M0,%M1,%2\n\
(set_attr "mode" "DI")])
(define_expand "sge"
- [(set (match_operand:SI 0 "register_operand" "=d")
+ [(set (match_operand:SI 0 "register_operand")
(ge:SI (match_dup 1)
(match_dup 2)))]
""
@@ -7326,9 +7386,9 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (ge:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "arith_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (ge:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "arith_operand")))]
"TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE && !TARGET_MIPS16"
[(set (match_dup 0)
(lt:SI (match_dup 1)
@@ -7349,9 +7409,9 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (ge:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "arith_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (ge:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "arith_operand")))]
"TARGET_64BIT && TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE
&& !TARGET_MIPS16"
[(set (match_dup 0)
@@ -7363,7 +7423,7 @@ srl\t%M0,%M1,%2\n\
"")
(define_expand "slt"
- [(set (match_operand:SI 0 "register_operand" "=d")
+ [(set (match_operand:SI 0 "register_operand")
(lt:SI (match_dup 1)
(match_dup 2)))]
""
@@ -7403,7 +7463,7 @@ srl\t%M0,%M1,%2\n\
(set_attr "mode" "SI")
(set_attr_alternative "length"
[(const_int 4)
- (if_then_else (match_operand:VOID 2 "m16_uimm8_1" "")
+ (if_then_else (match_operand:VOID 2 "m16_uimm8_1")
(const_int 4)
(const_int 8))])])
@@ -7426,12 +7486,12 @@ srl\t%M0,%M1,%2\n\
(set_attr "mode" "DI")
(set_attr_alternative "length"
[(const_int 4)
- (if_then_else (match_operand:VOID 2 "m16_uimm8_1" "")
+ (if_then_else (match_operand:VOID 2 "m16_uimm8_1")
(const_int 4)
(const_int 8))])])
(define_expand "sle"
- [(set (match_operand:SI 0 "register_operand" "=d")
+ [(set (match_operand:SI 0 "register_operand")
(le:SI (match_dup 1)
(match_dup 2)))]
""
@@ -7478,7 +7538,7 @@ srl\t%M0,%M1,%2\n\
}
[(set_attr "type" "slt")
(set_attr "mode" "SI")
- (set (attr "length") (if_then_else (match_operand:VOID 2 "m16_uimm8_m1_1" "")
+ (set (attr "length") (if_then_else (match_operand:VOID 2 "m16_uimm8_m1_1")
(const_int 4)
(const_int 8)))])
@@ -7505,7 +7565,7 @@ srl\t%M0,%M1,%2\n\
}
[(set_attr "type" "slt")
(set_attr "mode" "DI")
- (set (attr "length") (if_then_else (match_operand:VOID 2 "m16_uimm8_m1_1" "")
+ (set (attr "length") (if_then_else (match_operand:VOID 2 "m16_uimm8_m1_1")
(const_int 4)
(const_int 8)))])
@@ -7520,9 +7580,9 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (le:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "register_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (le:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "register_operand")))]
"TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE && !TARGET_MIPS16"
[(set (match_dup 0)
(lt:SI (match_dup 2)
@@ -7543,9 +7603,9 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (le:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "register_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (le:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "register_operand")))]
"TARGET_64BIT && TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE
&& !TARGET_MIPS16"
[(set (match_dup 0)
@@ -7557,7 +7617,7 @@ srl\t%M0,%M1,%2\n\
"")
(define_expand "sgtu"
- [(set (match_operand:SI 0 "register_operand" "=d")
+ [(set (match_operand:SI 0 "register_operand")
(gtu:SI (match_dup 1)
(match_dup 2)))]
""
@@ -7618,7 +7678,7 @@ srl\t%M0,%M1,%2\n\
(set_attr "mode" "DI")])
(define_expand "sgeu"
- [(set (match_operand:SI 0 "register_operand" "=d")
+ [(set (match_operand:SI 0 "register_operand")
(geu:SI (match_dup 1)
(match_dup 2)))]
""
@@ -7650,9 +7710,9 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (geu:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "arith_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (geu:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "arith_operand")))]
"TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE && !TARGET_MIPS16"
[(set (match_dup 0)
(ltu:SI (match_dup 1)
@@ -7673,9 +7733,9 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (geu:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "arith_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (geu:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "arith_operand")))]
"TARGET_64BIT && TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE
&& !TARGET_MIPS16"
[(set (match_dup 0)
@@ -7687,7 +7747,7 @@ srl\t%M0,%M1,%2\n\
"")
(define_expand "sltu"
- [(set (match_operand:SI 0 "register_operand" "=d")
+ [(set (match_operand:SI 0 "register_operand")
(ltu:SI (match_dup 1)
(match_dup 2)))]
""
@@ -7727,7 +7787,7 @@ srl\t%M0,%M1,%2\n\
(set_attr "mode" "SI")
(set_attr_alternative "length"
[(const_int 4)
- (if_then_else (match_operand:VOID 2 "m16_uimm8_1" "")
+ (if_then_else (match_operand:VOID 2 "m16_uimm8_1")
(const_int 4)
(const_int 8))])])
@@ -7750,12 +7810,12 @@ srl\t%M0,%M1,%2\n\
(set_attr "mode" "DI")
(set_attr_alternative "length"
[(const_int 4)
- (if_then_else (match_operand:VOID 2 "m16_uimm8_1" "")
+ (if_then_else (match_operand:VOID 2 "m16_uimm8_1")
(const_int 4)
(const_int 8))])])
(define_expand "sleu"
- [(set (match_operand:SI 0 "register_operand" "=d")
+ [(set (match_operand:SI 0 "register_operand")
(leu:SI (match_dup 1)
(match_dup 2)))]
""
@@ -7802,7 +7862,7 @@ srl\t%M0,%M1,%2\n\
}
[(set_attr "type" "slt")
(set_attr "mode" "SI")
- (set (attr "length") (if_then_else (match_operand:VOID 2 "m16_uimm8_m1_1" "")
+ (set (attr "length") (if_then_else (match_operand:VOID 2 "m16_uimm8_m1_1")
(const_int 4)
(const_int 8)))])
@@ -7829,7 +7889,7 @@ srl\t%M0,%M1,%2\n\
}
[(set_attr "type" "slt")
(set_attr "mode" "DI")
- (set (attr "length") (if_then_else (match_operand:VOID 2 "m16_uimm8_m1_1" "")
+ (set (attr "length") (if_then_else (match_operand:VOID 2 "m16_uimm8_m1_1")
(const_int 4)
(const_int 8)))])
@@ -7844,9 +7904,9 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(set (match_operand:SI 0 "register_operand" "")
- (leu:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "register_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand")
+ (leu:SI (match_operand:SI 1 "register_operand")
+ (match_operand:SI 2 "register_operand")))]
"TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE && !TARGET_MIPS16"
[(set (match_dup 0)
(ltu:SI (match_dup 2)
@@ -7867,9 +7927,9 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(set (match_operand:DI 0 "register_operand" "")
- (leu:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "register_operand" "")))]
+ [(set (match_operand:DI 0 "register_operand")
+ (leu:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "register_operand")))]
"TARGET_64BIT && TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE
&& !TARGET_MIPS16"
[(set (match_dup 0)
@@ -8102,7 +8162,7 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_expand "indirect_jump"
- [(set (pc) (match_operand 0 "register_operand" "d"))]
+ [(set (pc) (match_operand 0 "register_operand"))]
""
{
rtx dest;
@@ -8135,8 +8195,8 @@ srl\t%M0,%M1,%2\n\
(define_expand "tablejump"
[(set (pc)
- (match_operand 0 "register_operand" "d"))
- (use (label_ref (match_operand 1 "" "")))]
+ (match_operand 0 "register_operand"))
+ (use (label_ref (match_operand 1 "")))]
""
{
if (TARGET_MIPS16)
@@ -8183,9 +8243,8 @@ srl\t%M0,%M1,%2\n\
(set_attr "mode" "none")])
(define_expand "tablejump_mips161"
- [(set (pc) (plus:SI (sign_extend:SI
- (match_operand:HI 0 "register_operand" "d"))
- (label_ref:SI (match_operand 1 "" ""))))]
+ [(set (pc) (plus:SI (sign_extend:SI (match_operand:HI 0 "register_operand"))
+ (label_ref:SI (match_operand 1 ""))))]
"TARGET_MIPS16 && !(Pmode == DImode)"
{
rtx t1, t2, t3;
@@ -8201,9 +8260,8 @@ srl\t%M0,%M1,%2\n\
})
(define_expand "tablejump_mips162"
- [(set (pc) (plus:DI (sign_extend:DI
- (match_operand:HI 0 "register_operand" "d"))
- (label_ref:DI (match_operand 1 "" ""))))]
+ [(set (pc) (plus:DI (sign_extend:DI (match_operand:HI 0 "register_operand"))
+ (label_ref:DI (match_operand 1 ""))))]
"TARGET_MIPS16 && Pmode == DImode"
{
rtx t1, t2, t3;
@@ -8224,7 +8282,7 @@ srl\t%M0,%M1,%2\n\
;; it takes 3 or 4 insns to do so.
(define_expand "builtin_setjmp_setup"
- [(use (match_operand 0 "register_operand" ""))]
+ [(use (match_operand 0 "register_operand"))]
"TARGET_ABICALLS"
{
rtx addr;
@@ -8239,7 +8297,7 @@ srl\t%M0,%M1,%2\n\
;; $25 for compatibility (we lose nothing by doing so).
(define_expand "builtin_longjmp"
- [(use (match_operand 0 "register_operand" "r"))]
+ [(use (match_operand 0 "register_operand"))]
"TARGET_ABICALLS"
{
/* The elements of the buffer are, in order: */
@@ -8333,7 +8391,7 @@ srl\t%M0,%M1,%2\n\
;; This is used in compiling the unwind routines.
(define_expand "eh_return"
- [(use (match_operand 0 "general_operand" ""))]
+ [(use (match_operand 0 "general_operand"))]
""
{
enum machine_mode gpr_mode = TARGET_64BIT ? DImode : SImode;
@@ -8364,8 +8422,8 @@ srl\t%M0,%M1,%2\n\
"#")
(define_split
- [(unspec [(match_operand 0 "register_operand" "")] UNSPEC_EH_RETURN)
- (clobber (match_scratch 1 ""))]
+ [(unspec [(match_operand 0 "register_operand")] UNSPEC_EH_RETURN)
+ (clobber (match_scratch 1))]
"reload_completed && !TARGET_DEBUG_D_MODE"
[(const_int 0)]
{
@@ -8441,10 +8499,10 @@ srl\t%M0,%M1,%2\n\
;; epilogue -- we might as well use it for !TARGET_ABICALLS as well.
(define_expand "sibcall"
- [(parallel [(call (match_operand 0 "" "")
- (match_operand 1 "" ""))
- (use (match_operand 2 "" "")) ;; next_arg_reg
- (use (match_operand 3 "" ""))])] ;; struct_value_size_rtx
+ [(parallel [(call (match_operand 0 "")
+ (match_operand 1 ""))
+ (use (match_operand 2 "")) ;; next_arg_reg
+ (use (match_operand 3 ""))])] ;; struct_value_size_rtx
"TARGET_SIBCALLS"
{
mips_expand_call (0, XEXP (operands[0], 0), operands[1], operands[2], true);
@@ -8461,10 +8519,10 @@ srl\t%M0,%M1,%2\n\
[(set_attr "type" "call")])
(define_expand "sibcall_value"
- [(parallel [(set (match_operand 0 "" "")
- (call (match_operand 1 "" "")
- (match_operand 2 "" "")))
- (use (match_operand 3 "" ""))])] ;; next_arg_reg
+ [(parallel [(set (match_operand 0 "")
+ (call (match_operand 1 "")
+ (match_operand 2 "")))
+ (use (match_operand 3 ""))])] ;; next_arg_reg
"TARGET_SIBCALLS"
{
mips_expand_call (operands[0], XEXP (operands[1], 0),
@@ -8496,10 +8554,10 @@ srl\t%M0,%M1,%2\n\
[(set_attr "type" "call")])
(define_expand "call"
- [(parallel [(call (match_operand 0 "" "")
- (match_operand 1 "" ""))
- (use (match_operand 2 "" "")) ;; next_arg_reg
- (use (match_operand 3 "" ""))])] ;; struct_value_size_rtx
+ [(parallel [(call (match_operand 0 "")
+ (match_operand 1 ""))
+ (use (match_operand 2 "")) ;; next_arg_reg
+ (use (match_operand 3 ""))])] ;; struct_value_size_rtx
""
{
mips_expand_call (0, XEXP (operands[0], 0), operands[1], operands[2], false);
@@ -8570,10 +8628,10 @@ srl\t%M0,%M1,%2\n\
[(set_attr "type" "call")])
(define_expand "call_value"
- [(parallel [(set (match_operand 0 "" "")
- (call (match_operand 1 "" "")
- (match_operand 2 "" "")))
- (use (match_operand 3 "" ""))])] ;; next_arg_reg
+ [(parallel [(set (match_operand 0 "")
+ (call (match_operand 1 "")
+ (match_operand 2 "")))
+ (use (match_operand 3 ""))])] ;; next_arg_reg
""
{
mips_expand_call (operands[0], XEXP (operands[1], 0),
@@ -8650,10 +8708,10 @@ srl\t%M0,%M1,%2\n\
;; Call subroutine returning any type.
(define_expand "untyped_call"
- [(parallel [(call (match_operand 0 "" "")
+ [(parallel [(call (match_operand 0 "")
(const_int 0))
- (match_operand 1 "" "")
- (match_operand 2 "" "")])]
+ (match_operand 1 "")
+ (match_operand 2 "")])]
""
{
int i;
@@ -8680,9 +8738,9 @@ srl\t%M0,%M1,%2\n\
(define_expand "prefetch"
- [(prefetch (match_operand 0 "address_operand" "")
- (match_operand 1 "const_int_operand" "")
- (match_operand 2 "const_int_operand" ""))]
+ [(prefetch (match_operand 0 "address_operand")
+ (match_operand 1 "const_int_operand")
+ (match_operand 2 "const_int_operand"))]
"ISA_HAS_PREFETCH"
{
if (symbolic_operand (operands[0], GET_MODE (operands[0])))
@@ -8955,11 +9013,11 @@ srl\t%M0,%M1,%2\n\
;; These are the main define_expand's used to make conditional moves.
(define_expand "movsicc"
- [(set (match_dup 4) (match_operand 1 "comparison_operator" ""))
- (set (match_operand:SI 0 "register_operand" "")
+ [(set (match_dup 4) (match_operand 1 "comparison_operator"))
+ (set (match_operand:SI 0 "register_operand")
(if_then_else:SI (match_dup 5)
- (match_operand:SI 2 "reg_or_0_operand" "")
- (match_operand:SI 3 "reg_or_0_operand" "")))]
+ (match_operand:SI 2 "reg_or_0_operand")
+ (match_operand:SI 3 "reg_or_0_operand")))]
"ISA_HAS_CONDMOVE || ISA_HAS_INT_CONDMOVE"
{
gen_conditional_move (operands);
@@ -8967,11 +9025,11 @@ srl\t%M0,%M1,%2\n\
})
(define_expand "movdicc"
- [(set (match_dup 4) (match_operand 1 "comparison_operator" ""))
- (set (match_operand:DI 0 "register_operand" "")
+ [(set (match_dup 4) (match_operand 1 "comparison_operator"))
+ (set (match_operand:DI 0 "register_operand")
(if_then_else:DI (match_dup 5)
- (match_operand:DI 2 "reg_or_0_operand" "")
- (match_operand:DI 3 "reg_or_0_operand" "")))]
+ (match_operand:DI 2 "reg_or_0_operand")
+ (match_operand:DI 3 "reg_or_0_operand")))]
"(ISA_HAS_CONDMOVE || ISA_HAS_INT_CONDMOVE) && TARGET_64BIT"
{
gen_conditional_move (operands);
@@ -8979,11 +9037,11 @@ srl\t%M0,%M1,%2\n\
})
(define_expand "movsfcc"
- [(set (match_dup 4) (match_operand 1 "comparison_operator" ""))
- (set (match_operand:SF 0 "register_operand" "")
+ [(set (match_dup 4) (match_operand 1 "comparison_operator"))
+ (set (match_operand:SF 0 "register_operand")
(if_then_else:SF (match_dup 5)
- (match_operand:SF 2 "register_operand" "")
- (match_operand:SF 3 "register_operand" "")))]
+ (match_operand:SF 2 "register_operand")
+ (match_operand:SF 3 "register_operand")))]
"ISA_HAS_CONDMOVE && TARGET_HARD_FLOAT"
{
gen_conditional_move (operands);
@@ -8991,11 +9049,11 @@ srl\t%M0,%M1,%2\n\
})
(define_expand "movdfcc"
- [(set (match_dup 4) (match_operand 1 "comparison_operator" ""))
- (set (match_operand:DF 0 "register_operand" "")
+ [(set (match_dup 4) (match_operand 1 "comparison_operator"))
+ (set (match_operand:DF 0 "register_operand")
(if_then_else:DF (match_dup 5)
- (match_operand:DF 2 "register_operand" "")
- (match_operand:DF 3 "register_operand" "")))]
+ (match_operand:DF 2 "register_operand")
+ (match_operand:DF 3 "register_operand")))]
"ISA_HAS_CONDMOVE && TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"
{
gen_conditional_move (operands);
@@ -9161,7 +9219,7 @@ srl\t%M0,%M1,%2\n\
(set_attr "length" "8")])
(define_split
- [(match_operand 0 "small_data_pattern" "")]
+ [(match_operand 0 "small_data_pattern")]
"reload_completed"
[(match_dup 0)]
{ operands[0] = mips_rewrite_small_data (operands[0]); })
diff --git a/gcc/config/mips/sb1.md b/gcc/config/mips/sb1.md
index a58992be525..41cebedce4f 100644
--- a/gcc/config/mips/sb1.md
+++ b/gcc/config/mips/sb1.md
@@ -204,7 +204,7 @@
;; ??? A simple alu insn issued on an LS unit has 0 cycle latency to an EX
;; insn, to a store (for data), and to an xfer insn. It has 1 cycle latency to
;; another LS insn (excluding store data). A simple alu insn issued on an EX
-;; unit has a latency of 5 cycles when the results goes to a LS unit (exluding
+;; unit has a latency of 5 cycles when the results goes to a LS unit (excluding
;; store data), otherwise a latency of 1 cycle.
;; ??? We can not handle latencies properly for simple alu instructions
@@ -269,13 +269,13 @@
(define_insn_reservation "ir_sb1_mfhi" 1
(and (eq_attr "cpu" "sb1")
(and (eq_attr "type" "mfhilo")
- (not (match_operand 1 "lo_operand" ""))))
+ (not (match_operand 1 "lo_operand"))))
"sb1_ex1")
(define_insn_reservation "ir_sb1_mflo" 1
(and (eq_attr "cpu" "sb1")
(and (eq_attr "type" "mfhilo")
- (match_operand 1 "lo_operand" "")))
+ (match_operand 1 "lo_operand")))
"sb1_ex1")
;; mt{hi,lo} to mul/div is 4 cycles.
@@ -390,7 +390,7 @@
(define_insn_reservation "ir_sb1_mtxfer" 5
(and (eq_attr "cpu" "sb1")
(and (eq_attr "type" "xfer")
- (match_operand 0 "fp_register_operand" "")))
+ (match_operand 0 "fp_register_operand")))
"sb1_fp0")
;; mfc1 latency 1 cycle.
@@ -398,7 +398,7 @@
(define_insn_reservation "ir_sb1_mfxfer" 1
(and (eq_attr "cpu" "sb1")
(and (eq_attr "type" "xfer")
- (not (match_operand 0 "fp_register_operand" ""))))
+ (not (match_operand 0 "fp_register_operand"))))
"sb1_fp0")
;; ??? Can deliver at most 1 result per every 6 cycles because of issue
diff --git a/gcc/config/mips/sr71k.md b/gcc/config/mips/sr71k.md
index ef7e650da77..f1ce973b335 100644
--- a/gcc/config/mips/sr71k.md
+++ b/gcc/config/mips/sr71k.md
@@ -17,7 +17,7 @@
;; contrived to support published timings.
;;
;; Reference:
-;; "SR3 Microporocessor Specification, System development information,"
+;; "SR3 Microprocessor Specification, System development information,"
;; Revision 1.0, 13 December 2000.
;;
;;
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index a334473e4cd..0cc1ed7eb99 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -8416,7 +8416,7 @@ pa_reorg (void)
markers disables output of the branch table to readonly memory,
and any alignment directives that might be needed. Possibly,
the begin_brtab insn should be output before the label for the
- table. This doesn matter at the moment since the tables are
+ table. This doesn't matter at the moment since the tables are
always output in the text section. */
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
{
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index 072f60171e9..1f3e2618eb2 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -2264,9 +2264,9 @@
(define_insn ""
[(set (match_operand:SI 0 "move_dest_operand"
- "=r,r,r,r,r,r,Q,!*q,!*f,*f,T")
+ "=r,r,r,r,r,r,Q,!*q,!r,!*f,*f,T")
(match_operand:SI 1 "move_src_operand"
- "A,r,J,N,K,RQ,rM,!rM,!*fM,RT,*f"))]
+ "A,r,J,N,K,RQ,rM,!rM,!*q,!*fM,RT,*f"))]
"(register_operand (operands[0], SImode)
|| reg_or_0_operand (operands[1], SImode))
&& !TARGET_SOFT_FLOAT"
@@ -2279,12 +2279,13 @@
ldw%M1 %1,%0
stw%M0 %r1,%0
mtsar %r1
+ {mfctl|mfctl,w} %%sar,%0
fcpy,sgl %f1,%0
fldw%F1 %1,%0
fstw%F0 %1,%0"
- [(set_attr "type" "load,move,move,move,shift,load,store,move,fpalu,fpload,fpstore")
+ [(set_attr "type" "load,move,move,move,shift,load,store,move,move,fpalu,fpload,fpstore")
(set_attr "pa_combine_type" "addmove")
- (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4")])
+ (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:SI 0 "indexed_memory_operand" "=R")
@@ -2433,9 +2434,9 @@
(define_insn ""
[(set (match_operand:SI 0 "move_dest_operand"
- "=r,r,r,r,r,r,Q,!*q")
+ "=r,r,r,r,r,r,Q,!*q,!r")
(match_operand:SI 1 "move_src_operand"
- "A,r,J,N,K,RQ,rM,!rM"))]
+ "A,r,J,N,K,RQ,rM,!rM,!*q"))]
"(register_operand (operands[0], SImode)
|| reg_or_0_operand (operands[1], SImode))
&& TARGET_SOFT_FLOAT"
@@ -2447,10 +2448,11 @@
{zdepi|depwi,z} %Z1,%0
ldw%M1 %1,%0
stw%M0 %r1,%0
- mtsar %r1"
- [(set_attr "type" "load,move,move,move,move,load,store,move")
+ mtsar %r1
+ {mfctl|mfctl,w} %%sar,%0"
+ [(set_attr "type" "load,move,move,move,move,load,store,move,move")
(set_attr "pa_combine_type" "addmove")
- (set_attr "length" "4,4,4,4,4,4,4,4")])
+ (set_attr "length" "4,4,4,4,4,4,4,4,4")])
;; Load or store with base-register modification.
(define_insn ""
@@ -2865,9 +2867,9 @@
(define_insn ""
[(set (match_operand:HI 0 "move_dest_operand"
- "=r,r,r,r,r,Q,!*q,!*f")
+ "=r,r,r,r,r,Q,!*q,!r,!*f")
(match_operand:HI 1 "move_src_operand"
- "r,J,N,K,RQ,rM,!rM,!*fM"))]
+ "r,J,N,K,RQ,rM,!rM,!*q,!*fM"))]
"register_operand (operands[0], HImode)
|| reg_or_0_operand (operands[1], HImode)"
"@
@@ -2878,10 +2880,11 @@
ldh%M1 %1,%0
sth%M0 %r1,%0
mtsar %r1
+ mfctr %sar,%0
fcpy,sgl %f1,%0"
- [(set_attr "type" "move,move,move,shift,load,store,move,fpalu")
+ [(set_attr "type" "move,move,move,shift,load,store,move,move,fpalu")
(set_attr "pa_combine_type" "addmove")
- (set_attr "length" "4,4,4,4,4,4,4,4")])
+ (set_attr "length" "4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:HI 0 "register_operand" "=r")
@@ -2989,9 +2992,9 @@
(define_insn ""
[(set (match_operand:QI 0 "move_dest_operand"
- "=r,r,r,r,r,Q,!*q,!*f")
+ "=r,r,r,r,r,Q,!*q,!r,!*f")
(match_operand:QI 1 "move_src_operand"
- "r,J,N,K,RQ,rM,!rM,!*fM"))]
+ "r,J,N,K,RQ,rM,!rM,!*q,!*fM"))]
"register_operand (operands[0], QImode)
|| reg_or_0_operand (operands[1], QImode)"
"@
@@ -3002,10 +3005,11 @@
ldb%M1 %1,%0
stb%M0 %r1,%0
mtsar %r1
+ {mfctl|mfctl,w} %%sar,%0
fcpy,sgl %f1,%0"
- [(set_attr "type" "move,move,move,shift,load,store,move,fpalu")
+ [(set_attr "type" "move,move,move,shift,load,store,move,move,fpalu")
(set_attr "pa_combine_type" "addmove")
- (set_attr "length" "4,4,4,4,4,4,4,4")])
+ (set_attr "length" "4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:QI 0 "register_operand" "=r")
@@ -3956,9 +3960,9 @@
(define_insn ""
[(set (match_operand:DF 0 "move_dest_operand"
- "=!*r,*r,*r,*r,*r,Q,!*q,f,f,T")
+ "=!*r,*r,*r,*r,*r,Q,!*q,!r,f,f,T")
(match_operand:DF 1 "move_src_operand"
- "!*r,J,N,K,RQ,*rM,!*rM,fM,RT,f"))]
+ "!*r,J,N,K,RQ,*rM,!*rM,!*q,fM,RT,f"))]
"(register_operand (operands[0], DFmode)
|| reg_or_0_operand (operands[1], DFmode))
&& !TARGET_SOFT_FLOAT && TARGET_64BIT"
@@ -3970,12 +3974,13 @@
ldd%M1 %1,%0
std%M0 %r1,%0
mtsar %r1
+ {mfctl|mfctl,w} %%sar,%0
fcpy,dbl %f1,%0
fldd%F1 %1,%0
fstd%F0 %1,%0"
- [(set_attr "type" "move,move,move,shift,load,store,move,fpalu,fpload,fpstore")
+ [(set_attr "type" "move,move,move,shift,load,store,move,move,fpalu,fpload,fpstore")
(set_attr "pa_combine_type" "addmove")
- (set_attr "length" "4,4,4,4,4,4,4,4,4,4")])
+ (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4")])
(define_expand "movdi"
@@ -4080,9 +4085,9 @@
(define_insn ""
[(set (match_operand:DI 0 "move_dest_operand"
- "=r,r,r,r,r,r,Q,!*q,!*f,*f,T")
+ "=r,r,r,r,r,r,Q,!*q,!r,!*f,*f,T")
(match_operand:DI 1 "move_src_operand"
- "A,r,J,N,K,RQ,rM,!rM,!*fM,RT,*f"))]
+ "A,r,J,N,K,RQ,rM,!rM,!*q,!*fM,RT,*f"))]
"(register_operand (operands[0], DImode)
|| reg_or_0_operand (operands[1], DImode))
&& !TARGET_SOFT_FLOAT && TARGET_64BIT"
@@ -4095,12 +4100,13 @@
ldd%M1 %1,%0
std%M0 %r1,%0
mtsar %r1
+ {mfctl|mfctl,w} %%sar,%0
fcpy,dbl %f1,%0
fldd%F1 %1,%0
fstd%F0 %1,%0"
- [(set_attr "type" "load,move,move,move,shift,load,store,move,fpalu,fpload,fpstore")
+ [(set_attr "type" "load,move,move,move,shift,load,store,move,move,fpalu,fpload,fpstore")
(set_attr "pa_combine_type" "addmove")
- (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4")])
+ (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:DI 0 "indexed_memory_operand" "=R")
diff --git a/gcc/config/rs6000/altivec-defs.h b/gcc/config/rs6000/altivec-defs.h
deleted file mode 100644
index 4fa1e0d463b..00000000000
--- a/gcc/config/rs6000/altivec-defs.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Target definitions for GNU compiler for PowerPC with AltiVec.
- Copyright (C) 2001, 2003 Free Software Foundation, Inc.
- Contributed by Aldy Hernandez (aldyh@redhat.com).
-
- 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, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA. */
-
-#undef SUBSUBTARGET_OVERRIDE_OPTIONS
-#define SUBSUBTARGET_OVERRIDE_OPTIONS \
-do { \
- rs6000_altivec_abi = 1; \
- target_flags |= MASK_ALTIVEC; \
-} while (0)
diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 7610b7a7d5a..8b7edb0ece3 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -36,10 +36,17 @@
#error Use the "-maltivec" flag to enable PowerPC AltiVec support
#endif
+/* If __APPLE_ALTIVEC__ is defined, the compiler supports 'vector',
+ 'pixel' and 'bool' as context-sensitive AltiVec keywords (in
+ non-AltiVec contexts, they revert to their original meanings,
+ if any), so we do not need to define them as macros. */
+
+#if !defined(__APPLE_ALTIVEC__)
/* You are allowed to undef these for C++ compatibility. */
#define vector __vector
#define pixel __pixel
#define bool __bool
+#endif
/* Condition register codes for AltiVec predicates. */
@@ -193,11 +200,14 @@ inline void vec_dstt (const float *, int, const int) __attribute__ ((always_inli
inline vector float vec_sld (vector float, vector float, const int) __attribute__ ((always_inline));
inline vector signed int vec_sld (vector signed int, vector signed int, const int) __attribute__ ((always_inline));
inline vector unsigned int vec_sld (vector unsigned int, vector unsigned int, const int) __attribute__ ((always_inline));
+inline vector bool int vec_sld (vector bool int, vector bool int, const int) __attribute__ ((always_inline));
inline vector signed short vec_sld (vector signed short, vector signed short, const int) __attribute__ ((always_inline));
inline vector unsigned short vec_sld (vector unsigned short, vector unsigned short, const int) __attribute__ ((always_inline));
+inline vector bool short vec_sld (vector bool short, vector bool short, const int) __attribute__ ((always_inline));
inline vector pixel vec_sld (vector pixel, vector pixel, const int) __attribute__ ((always_inline));
inline vector signed char vec_sld (vector signed char, vector signed char, const int) __attribute__ ((always_inline));
inline vector unsigned char vec_sld (vector unsigned char, vector unsigned char, const int) __attribute__ ((always_inline));
+inline vector bool char vec_sld (vector bool char, vector bool char, const int) __attribute__ ((always_inline));
inline vector signed char vec_splat (vector signed char, const int) __attribute__ ((always_inline));
inline vector unsigned char vec_splat (vector unsigned char, const int) __attribute__ ((always_inline));
inline vector bool char vec_splat (vector bool char, const int) __attribute__ ((always_inline));
@@ -4189,6 +4199,12 @@ vec_sld (vector unsigned int a1, vector unsigned int a2, const int a3)
return (vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
}
+inline vector bool int
+vec_sld (vector bool int a1, vector bool int a2, const int a3)
+{
+ return (vector bool int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
+}
+
inline vector signed short
vec_sld (vector signed short a1, vector signed short a2, const int a3)
{
@@ -4201,6 +4217,12 @@ vec_sld (vector unsigned short a1, vector unsigned short a2, const int a3)
return (vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
}
+inline vector bool short
+vec_sld (vector bool short a1, vector bool short a2, const int a3)
+{
+ return (vector bool short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
+}
+
inline vector pixel
vec_sld (vector pixel a1, vector pixel a2, const int a3)
{
@@ -4219,6 +4241,12 @@ vec_sld (vector unsigned char a1, vector unsigned char a2, const int a3)
return (vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
}
+inline vector bool char
+vec_sld (vector bool char a1, vector bool char a2, const int a3)
+{
+ return (vector bool char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
+}
+
/* vec_sll */
inline vector signed int
@@ -5893,22 +5921,8 @@ vec_vsubuhs (vector unsigned short a1, vector signed short a2)
return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
}
-/* vec_vsubuhs */
-
-inline vector unsigned short
-vec_vsubsuhs (vector signed short a1, vector unsigned short a2)
-{
- return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
-}
-
-inline vector unsigned short
-vec_vsubsuhs (vector unsigned short a1, vector signed short a2)
-{
- return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
-}
-
inline vector unsigned short
-vec_vsubsuhs (vector unsigned short a1, vector unsigned short a2)
+vec_vsubuhs (vector unsigned short a1, vector unsigned short a2)
{
return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
}
@@ -5924,19 +5938,19 @@ vec_vsubsbs (vector signed char a1, vector signed char a2)
/* vec_vsububs */
inline vector unsigned char
-vec_vsubsubs (vector signed char a1, vector unsigned char a2)
+vec_vsububs (vector signed char a1, vector unsigned char a2)
{
return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
}
inline vector unsigned char
-vec_vsubsubs (vector unsigned char a1, vector signed char a2)
+vec_vsububs (vector unsigned char a1, vector signed char a2)
{
return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
}
inline vector unsigned char
-vec_vsubsubs (vector unsigned char a1, vector unsigned char a2)
+vec_vsububs (vector unsigned char a1, vector unsigned char a2)
{
return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
}
@@ -9541,17 +9555,23 @@ __ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), int, (a3
((vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), int, (a3)), \
((vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
+__ch (__tern_args_eq (vector bool int, (a1), vector bool int, (a2), int, (a3)), \
+ ((vector bool int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), int, (a3)), \
((vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), int, (a3)), \
((vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
+__ch (__tern_args_eq (vector bool short, (a1), vector bool short, (a2), int, (a3)), \
+ ((vector bool short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
__ch (__tern_args_eq (vector pixel, (a1), vector pixel, (a2), int, (a3)), \
((vector pixel) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), int, (a3)), \
((vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), int, (a3)), \
((vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
- __builtin_altivec_compiletime_error ("vec_sld")))))))))
+__ch (__tern_args_eq (vector bool char, (a1), vector bool char, (a2), int, (a3)), \
+ ((vector bool char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
+ __builtin_altivec_compiletime_error ("vec_sld"))))))))))))
#define vec_sll(a1, a2) \
__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md
index 3e27a1b86c2..eee0d179321 100644
--- a/gcc/config/rs6000/altivec.md
+++ b/gcc/config/rs6000/altivec.md
@@ -999,21 +999,21 @@
[(set (match_operand:V16QI 0 "register_operand" "=v")
(not:V16QI (match_operand:V16QI 1 "register_operand" "v")))]
"TARGET_ALTIVEC"
- "vnot %0,%1"
+ "vnor %0,%1,%1"
[(set_attr "type" "vecsimple")])
(define_insn "one_cmplv8hi2"
[(set (match_operand:V8HI 0 "register_operand" "=v")
(not:V8HI (match_operand:V8HI 1 "register_operand" "v")))]
"TARGET_ALTIVEC"
- "vnot %0,%1"
+ "vnor %0,%1,%1"
[(set_attr "type" "vecsimple")])
(define_insn "one_cmplv4si2"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(not:V4SI (match_operand:V4SI 1 "register_operand" "v")))]
"TARGET_ALTIVEC"
- "vnot %0,%1"
+ "vnor %0,%1,%1"
[(set_attr "type" "vecsimple")])
(define_insn "iorv16qi3"
@@ -1823,13 +1823,13 @@
[(set_attr "type" "vecsimple")])
(define_insn "altivec_dssall"
- [(unspec [(const_int 0)] 188)]
+ [(unspec_volatile [(const_int 0)] 188)]
"TARGET_ALTIVEC"
"dssall"
[(set_attr "type" "vecsimple")])
(define_insn "altivec_dss"
- [(unspec [(match_operand:QI 0 "immediate_operand" "i")] 189)]
+ [(unspec_volatile [(match_operand:QI 0 "immediate_operand" "i")] 189)]
"TARGET_ALTIVEC"
"dss %0"
[(set_attr "type" "vecsimple")])
diff --git a/gcc/config/rs6000/rs6000-protos.h b/gcc/config/rs6000/rs6000-protos.h
index 57e8886b391..7078c16e084 100644
--- a/gcc/config/rs6000/rs6000-protos.h
+++ b/gcc/config/rs6000/rs6000-protos.h
@@ -102,7 +102,7 @@ extern int includes_rshift_p (rtx, rtx);
extern int includes_rldic_lshift_p (rtx, rtx);
extern int includes_rldicr_lshift_p (rtx, rtx);
extern int registers_ok_for_quad_peep (rtx, rtx);
-extern int addrs_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);
@@ -201,6 +201,8 @@ extern int rs6000_memory_move_cost (enum machine_mode, enum reg_class, int);
extern bool rs6000_tls_referenced_p (rtx);
extern int rs6000_tls_symbol_ref (rtx, enum machine_mode);
extern void rs6000_output_dwarf_dtprel (FILE*, int, rtx);
+extern int rs6000_hard_regno_nregs (int, enum machine_mode);
+extern void rs6000_conditional_register_usage (void);
/* Declare functions in rs6000-c.c */
@@ -211,4 +213,5 @@ extern void rs6000_cpu_cpp_builtins (struct cpp_reader *);
char *output_call (rtx, rtx *, int, int);
#endif
+extern bool rs6000_hard_regno_mode_ok_p[][FIRST_PSEUDO_REGISTER];
#endif /* rs6000-protos.h */
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index d92de9e3256..cb11f4ba3b7 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -215,6 +215,9 @@ const char *rs6000_debug_name;
int rs6000_debug_stack; /* debug stack applications */
int rs6000_debug_arg; /* debug argument handling */
+/* Value is TRUE if register/mode pair is accepatable. */
+bool rs6000_hard_regno_mode_ok_p[NUM_MACHINE_MODES][FIRST_PSEUDO_REGISTER];
+
/* Opaque types. */
static GTY(()) tree opaque_V2SI_type_node;
static GTY(()) tree opaque_V2SF_type_node;
@@ -381,6 +384,7 @@ static void rs6000_init_libfuncs (void);
static void enable_mask_for_builtins (struct builtin_description *, int,
enum rs6000_builtins,
enum rs6000_builtins);
+static tree build_opaque_vector_type (tree, int);
static void spe_init_builtins (void);
static rtx spe_expand_builtin (tree, rtx, bool *);
static rtx spe_expand_predicate_builtin (enum insn_code, tree, rtx);
@@ -644,6 +648,58 @@ static const char alt_reg_names[][8] =
struct gcc_target targetm = TARGET_INITIALIZER;
+
+/* Value is 1 if hard register REGNO can hold a value of machine-mode
+ MODE. */
+static int
+rs6000_hard_regno_mode_ok (int regno, enum machine_mode mode)
+{
+ /* The GPRs can hold any mode, but values bigger than one register
+ cannot go past R31. */
+ if (INT_REGNO_P (regno))
+ return INT_REGNO_P (regno + HARD_REGNO_NREGS (regno, mode) - 1);
+
+ /* The float registers can only hold floating modes and DImode. */
+ if (FP_REGNO_P (regno))
+ return
+ (GET_MODE_CLASS (mode) == MODE_FLOAT
+ && FP_REGNO_P (regno + HARD_REGNO_NREGS (regno, mode) - 1))
+ || (GET_MODE_CLASS (mode) == MODE_INT
+ && GET_MODE_SIZE (mode) == UNITS_PER_FP_WORD);
+
+ /* The CR register can only hold CC modes. */
+ if (CR_REGNO_P (regno))
+ return GET_MODE_CLASS (mode) == MODE_CC;
+
+ if (XER_REGNO_P (regno))
+ return mode == PSImode;
+
+ /* AltiVec only in AldyVec registers. */
+ if (ALTIVEC_REGNO_P (regno))
+ return ALTIVEC_VECTOR_MODE (mode);
+
+ /* ...but GPRs can hold SIMD data on the SPE in one register. */
+ if (SPE_SIMD_REGNO_P (regno) && TARGET_SPE && SPE_VECTOR_MODE (mode))
+ return 1;
+
+ /* We cannot put TImode anywhere except general register and it must be
+ able to fit within the register set. */
+
+ return GET_MODE_SIZE (mode) <= UNITS_PER_WORD;
+}
+
+/* Initialize rs6000_hard_regno_mode_ok_p table. */
+static void
+rs6000_init_hard_regno_mode_ok (void)
+{
+ int r, m;
+
+ for (r = 0; r < FIRST_PSEUDO_REGISTER; ++r)
+ for (m = 0; m < NUM_MACHINE_MODES; ++m)
+ if (rs6000_hard_regno_mode_ok (r, m))
+ rs6000_hard_regno_mode_ok_p[m][r] = true;
+}
+
/* Override command line options. Mostly we process the processor
type and sometimes adjust other TARGET_ options. */
@@ -746,6 +802,9 @@ rs6000_override_options (const char *default_cpu)
| MASK_PPC_GFXOPT | MASK_POWERPC64 | MASK_ALTIVEC
| MASK_MFCRF)
};
+
+ rs6000_init_hard_regno_mode_ok ();
+
set_masks = POWER_MASKS | POWERPC_MASKS | MASK_SOFT_FLOAT;
#ifdef OS_MISSING_POWERPC64
if (OS_MISSING_POWERPC64)
@@ -1678,7 +1737,7 @@ easy_fp_constant (rtx op, enum machine_mode mode)
abort ();
}
-/* Returns the constant for the splat instrunction, if exists. */
+/* Returns the constant for the splat instruction, if exists. */
static int
easy_vector_splat_const (int cst, enum machine_mode mode)
@@ -3339,6 +3398,99 @@ rs6000_mode_dependent_address (rtx addr)
return false;
}
+
+/* Return number of consecutive hard regs needed starting at reg REGNO
+ to hold something of mode MODE.
+ This is ordinarily the length in words of a value of mode MODE
+ but can be less for certain modes in special long registers.
+
+ For the SPE, GPRs are 64 bits but only 32 bits are visible in
+ scalar instructions. The upper 32 bits are only available to the
+ SIMD instructions.
+
+ POWER and PowerPC GPRs hold 32 bits worth;
+ PowerPC64 GPRs and FPRs point register holds 64 bits worth. */
+
+int
+rs6000_hard_regno_nregs (int regno, enum machine_mode mode)
+{
+ if (FP_REGNO_P (regno))
+ return (GET_MODE_SIZE (mode) + UNITS_PER_FP_WORD - 1) / UNITS_PER_FP_WORD;
+
+ if (SPE_SIMD_REGNO_P (regno) && TARGET_SPE && SPE_VECTOR_MODE (mode))
+ return (GET_MODE_SIZE (mode) + UNITS_PER_SPE_WORD - 1) / UNITS_PER_SPE_WORD;
+
+ if (ALTIVEC_REGNO_P (regno))
+ return
+ (GET_MODE_SIZE (mode) + UNITS_PER_ALTIVEC_WORD - 1) / UNITS_PER_ALTIVEC_WORD;
+
+ return (GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
+}
+
+/* Change register usage conditional on target flags. */
+void
+rs6000_conditional_register_usage (void)
+{
+ int i;
+
+ /* Set MQ register fixed (already call_used) if not POWER
+ architecture (RIOS1, RIOS2, RSC, and PPC601) so that it will not
+ be allocated. */
+ if (! TARGET_POWER)
+ fixed_regs[64] = 1;
+
+ /* 64-bit AIX reserves GPR13 for thread-private data. */
+ if (TARGET_64BIT)
+ fixed_regs[13] = call_used_regs[13]
+ = call_really_used_regs[13] = 1;
+
+ /* Conditionally disable FPRs. */
+ if (TARGET_SOFT_FLOAT || !TARGET_FPRS)
+ for (i = 32; i < 64; i++)
+ fixed_regs[i] = call_used_regs[i]
+ = call_really_used_regs[i] = 1;
+
+ if (DEFAULT_ABI == ABI_V4
+ && PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
+ && flag_pic == 2)
+ fixed_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] = 1;
+
+ if (DEFAULT_ABI == ABI_V4
+ && PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
+ && flag_pic == 1)
+ fixed_regs[RS6000_PIC_OFFSET_TABLE_REGNUM]
+ = call_used_regs[RS6000_PIC_OFFSET_TABLE_REGNUM]
+ = call_really_used_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] = 1;
+
+ if (DEFAULT_ABI == ABI_DARWIN
+ && PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM)
+ global_regs[RS6000_PIC_OFFSET_TABLE_REGNUM]
+ = fixed_regs[RS6000_PIC_OFFSET_TABLE_REGNUM]
+ = call_used_regs[RS6000_PIC_OFFSET_TABLE_REGNUM]
+ = call_really_used_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] = 1;
+
+ if (TARGET_ALTIVEC)
+ global_regs[VSCR_REGNO] = 1;
+
+ if (TARGET_SPE)
+ {
+ global_regs[SPEFSCR_REGNO] = 1;
+ fixed_regs[FIXED_SCRATCH]
+ = call_used_regs[FIXED_SCRATCH]
+ = call_really_used_regs[FIXED_SCRATCH] = 1;
+ }
+
+ if (! TARGET_ALTIVEC)
+ {
+ for (i = FIRST_ALTIVEC_REGNO; i <= LAST_ALTIVEC_REGNO; ++i)
+ fixed_regs[i] = call_used_regs[i] = call_really_used_regs[i] = 1;
+ call_really_used_regs[VRSAVE_REGNO] = 1;
+ }
+
+ if (TARGET_ALTIVEC_ABI)
+ for (i = FIRST_ALTIVEC_REGNO; i < FIRST_ALTIVEC_REGNO + 20; ++i)
+ call_used_regs[i] = call_really_used_regs[i] = 1;
+}
/* Try to output insns to set TARGET equal to the constant C if it can
be done in less than N insns. Do all computations in MODE.
@@ -4028,11 +4180,11 @@ function_arg_padding (enum machine_mode mode, tree type)
int
function_arg_boundary (enum machine_mode mode, tree type ATTRIBUTE_UNUSED)
{
- if (DEFAULT_ABI == ABI_V4 && (mode == DImode || mode == DFmode))
+ if (DEFAULT_ABI == ABI_V4 && GET_MODE_SIZE (mode) == 8)
return 64;
- else if (SPE_VECTOR_MODE (mode))
- return 64;
- else if (TARGET_ALTIVEC_ABI && ALTIVEC_VECTOR_MODE (mode))
+ else if (SPE_VECTOR_MODE (mode))
+ return 64;
+ else if (ALTIVEC_VECTOR_MODE (mode))
return 128;
else
return PARM_BOUNDARY;
@@ -4058,7 +4210,11 @@ rs6000_arg_size (enum machine_mode mode, tree type)
/* Update the data in CUM to advance over an argument
of mode MODE and data type TYPE.
- (TYPE is null for libcalls where that information may not be available.) */
+ (TYPE is null for libcalls where that information may not be available.)
+
+ Note that for args passed by reference, function_arg will be called
+ with MODE and TYPE set to that of the pointer to the arg, not the arg
+ itself. */
void
function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
@@ -4068,6 +4224,8 @@ function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
if (TARGET_ALTIVEC_ABI && ALTIVEC_VECTOR_MODE (mode))
{
+ bool stack = false;
+
if (USE_ALTIVEC_FOR_ARG_P (cum, mode, type, named))
{
cum->vregno++;
@@ -4075,12 +4233,18 @@ function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
error ("Cannot pass argument in vector register because"
" altivec instructions are disabled, use -maltivec"
" to enable them.");
+
+ /* PowerPC64 Linux and AIX allocate GPRs for a vector argument
+ even if it is going to be passed in a vector register.
+ Darwin does the same for variable-argument functions. */
+ if ((DEFAULT_ABI == ABI_AIX && TARGET_64BIT)
+ || (cum->stdarg && DEFAULT_ABI != ABI_V4))
+ stack = true;
}
- /* PowerPC64 Linux and AIX allocates GPRs for a vector argument
- even if it is going to be passed in a vector register.
- Darwin does the same for variable-argument functions. */
- if ((DEFAULT_ABI == ABI_AIX && TARGET_64BIT)
- || (cum->stdarg && DEFAULT_ABI != ABI_V4))
+ else
+ stack = true;
+
+ if (stack)
{
int align;
@@ -4092,7 +4256,7 @@ function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
aligned. Space for GPRs is reserved even if the argument
will be passed in memory. */
if (TARGET_32BIT)
- align = ((6 - (cum->words & 3)) & 3);
+ align = (2 - cum->words) & 3;
else
align = cum->words & 1;
cum->words += align + rs6000_arg_size (mode, type);
@@ -4127,25 +4291,21 @@ function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
else
{
- int n_words;
+ int n_words = rs6000_arg_size (mode, type);
int gregno = cum->sysv_gregno;
- /* Aggregates and IEEE quad get passed by reference. */
- if ((type && AGGREGATE_TYPE_P (type))
- || mode == TFmode)
- n_words = 1;
- else
- n_words = rs6000_arg_size (mode, type);
+ /* Long long and SPE vectors are put in (r3,r4), (r5,r6),
+ (r7,r8) or (r9,r10). As does any other 2 word item such
+ as complex int due to a historical mistake. */
+ if (n_words == 2)
+ gregno += (1 - gregno) & 1;
- /* Long long and SPE vectors are put in odd registers. */
- if (n_words == 2 && (gregno & 1) == 0)
- gregno += 1;
-
- /* Long long and SPE vectors are not split between registers
- and stack. */
+ /* Multi-reg args are not split between registers and stack. */
if (gregno + n_words - 1 > GP_ARG_MAX_REG)
{
- /* Long long is aligned on the stack. */
+ /* Long long and SPE vectors are aligned on the stack.
+ So are other 2 word items such as complex int due to
+ a historical mistake. */
if (n_words == 2)
cum->words += cum->words & 1;
cum->words += n_words;
@@ -4169,10 +4329,16 @@ function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
else
{
- int align = (TARGET_32BIT && (cum->words & 1) != 0
- && function_arg_boundary (mode, type) == 64) ? 1 : 0;
+ int n_words = rs6000_arg_size (mode, type);
+ int align = function_arg_boundary (mode, type) / PARM_BOUNDARY - 1;
- cum->words += align + rs6000_arg_size (mode, type);
+ /* The simple alignment calculation here works because
+ function_arg_boundary / PARM_BOUNDARY will only be 1 or 2.
+ If we ever want to handle alignments larger than 8 bytes for
+ 32-bit or 16 bytes for 64-bit, then we'll need to take into
+ account the offset to the start of the parm save area. */
+ align &= cum->words;
+ cum->words += align + n_words;
if (GET_MODE_CLASS (mode) == MODE_FLOAT
&& TARGET_HARD_FLOAT && TARGET_FPRS)
@@ -4307,8 +4473,28 @@ rs6000_mixed_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
+ align_words),
const0_rtx)));
}
- else if (mode == BLKmode && align_words <= (GP_ARG_NUM_REG - 1))
- {
+ else if (ALTIVEC_VECTOR_MODE (mode) && align_words == GP_ARG_NUM_REG - 2)
+ {
+ /* Varargs vector regs must be saved in R9-R10. */
+ return gen_rtx_PARALLEL (mode,
+ gen_rtvec (3,
+ gen_rtx_EXPR_LIST (VOIDmode,
+ NULL_RTX, const0_rtx),
+ gen_rtx_EXPR_LIST (VOIDmode,
+ gen_rtx_REG (SImode,
+ GP_ARG_MIN_REG
+ + align_words),
+ const0_rtx),
+ gen_rtx_EXPR_LIST (VOIDmode,
+ gen_rtx_REG (SImode,
+ GP_ARG_MIN_REG
+ + align_words + 1),
+ GEN_INT (4))));
+ }
+ else if ((mode == BLKmode || ALTIVEC_VECTOR_MODE (mode))
+ && align_words <= (GP_ARG_NUM_REG - 1))
+ {
+ /* AltiVec vector regs are saved in R5-R8. */
int k;
int size = int_size_in_bytes (type);
int no_units = ((size - 1) / 4) + 1;
@@ -4325,9 +4511,8 @@ rs6000_mixed_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
+ align_words + k),
k == 0 ? const0_rtx : GEN_INT (k*4));
- return gen_rtx_PARALLEL (BLKmode, gen_rtvec_v (k, rtlvec));
- }
-
+ return gen_rtx_PARALLEL (mode, gen_rtvec_v (k, rtlvec));
+ }
return NULL_RTX;
}
@@ -4352,7 +4537,11 @@ rs6000_mixed_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
both an FP and integer register (or possibly FP reg and stack). Library
functions (when CALL_LIBCALL is set) always have the proper types for args,
so we can pass the FP value just in one register. emit_library_function
- doesn't support PARALLEL anyway. */
+ doesn't support PARALLEL anyway.
+
+ Note that for args passed by reference, function_arg will be called
+ with MODE and TYPE set to that of the pointer to the arg, not the arg
+ itself. */
struct rtx_def *
function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
@@ -4428,7 +4617,7 @@ function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
they just have to start on an even word, since the parameter
save area is 16-byte aligned. */
if (TARGET_32BIT)
- align = ((6 - (cum->words & 3)) & 3);
+ align = (2 - cum->words) & 3;
else
align = cum->words & 1;
align_words = cum->words + align;
@@ -4445,7 +4634,11 @@ function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
is either wholly in GPRs or half in GPRs and half not. */
part_mode = DImode;
- return gen_rtx_REG (part_mode, GP_ARG_MIN_REG + align_words);
+ if (TARGET_32BIT
+ && (TARGET_POWERPC64 || (align_words == GP_ARG_NUM_REG - 2)))
+ return rs6000_mixed_function_arg (cum, part_mode, type, align_words);
+ else
+ return gen_rtx_REG (part_mode, GP_ARG_MIN_REG + align_words);
}
}
else if (TARGET_SPE_ABI && TARGET_SPE && SPE_VECTOR_MODE (mode))
@@ -4462,21 +4655,16 @@ function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
else
{
- int n_words;
+ int n_words = rs6000_arg_size (mode, type);
int gregno = cum->sysv_gregno;
- /* Aggregates and IEEE quad get passed by reference. */
- if ((type && AGGREGATE_TYPE_P (type))
- || mode == TFmode)
- n_words = 1;
- else
- n_words = rs6000_arg_size (mode, type);
-
- /* Long long and SPE vectors are put in odd registers. */
- if (n_words == 2 && (gregno & 1) == 0)
- gregno += 1;
+ /* Long long and SPE vectors are put in (r3,r4), (r5,r6),
+ (r7,r8) or (r9,r10). As does any other 2 word item such
+ as complex int due to a historical mistake. */
+ if (n_words == 2)
+ gregno += (1 - gregno) & 1;
- /* Long long does not split between registers and stack. */
+ /* Multi-reg args are not split between registers and stack. */
if (gregno + n_words - 1 <= GP_ARG_MAX_REG)
return gen_rtx_REG (mode, gregno);
else
@@ -4485,16 +4673,8 @@ function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
else
{
- int align = (TARGET_32BIT && (cum->words & 1) != 0
- && function_arg_boundary (mode, type) == 64) ? 1 : 0;
- int align_words = cum->words + align;
-
- if (type && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
- return NULL_RTX;
-
- if (TARGET_32BIT && TARGET_POWERPC64
- && (mode == DImode || mode == BLKmode))
- return rs6000_mixed_function_arg (cum, mode, type, align_words);
+ int align = function_arg_boundary (mode, type) / PARM_BOUNDARY - 1;
+ int align_words = cum->words + (cum->words & align);
if (USE_FP_FOR_ARG_P (cum, mode, type))
{
@@ -4563,7 +4743,13 @@ function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
return gen_rtx_PARALLEL (mode, gen_rtvec_v (n, r));
}
else if (align_words < GP_ARG_NUM_REG)
- return gen_rtx_REG (mode, GP_ARG_MIN_REG + align_words);
+ {
+ if (TARGET_32BIT && TARGET_POWERPC64
+ && (mode == DImode || mode == BLKmode))
+ return rs6000_mixed_function_arg (cum, mode, type, align_words);
+
+ return gen_rtx_REG (mode, GP_ARG_MIN_REG + align_words);
+ }
else
return NULL_RTX;
}
@@ -4610,7 +4796,10 @@ function_arg_partial_nregs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
the argument itself. The pointer is passed in whatever way is
appropriate for passing a pointer to that type.
- Under V.4, structures and unions are passed by reference.
+ Under V.4, aggregates and long double are passed by reference.
+
+ As an extension to all 32-bit ABIs, AltiVec vectors are passed by
+ reference unless the AltiVec vector extension ABI is in force.
As an extension to all ABIs, variable sized types are passed by
reference. */
@@ -4620,16 +4809,18 @@ function_arg_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
tree type, int named ATTRIBUTE_UNUSED)
{
- if (DEFAULT_ABI == ABI_V4
- && ((type && AGGREGATE_TYPE_P (type))
- || mode == TFmode))
+ if ((DEFAULT_ABI == ABI_V4
+ && ((type && AGGREGATE_TYPE_P (type))
+ || mode == TFmode))
+ || (TARGET_32BIT && !TARGET_ALTIVEC_ABI && ALTIVEC_VECTOR_MODE (mode))
+ || (type && int_size_in_bytes (type) < 0))
{
if (TARGET_DEBUG_ARG)
- fprintf (stderr, "function_arg_pass_by_reference: aggregate\n");
+ fprintf (stderr, "function_arg_pass_by_reference\n");
return 1;
}
- return type && int_size_in_bytes (type) < 0;
+ return 0;
}
static void
@@ -4876,11 +5067,16 @@ rs6000_va_arg (tree valist, tree type)
tree gpr, fpr, ovf, sav, reg, t, u;
int indirect_p, size, rsize, n_reg, sav_ofs, sav_scale;
rtx lab_false, lab_over, addr_rtx, r;
+ int align;
if (DEFAULT_ABI != ABI_V4)
{
- /* Variable sized types are passed by reference. */
- if (int_size_in_bytes (type) < 0)
+ /* Variable sized types are passed by reference, as are AltiVec
+ vectors when 32-bit and not using the AltiVec ABI extension. */
+ if (int_size_in_bytes (type) < 0
+ || (TARGET_32BIT
+ && !TARGET_ALTIVEC_ABI
+ && ALTIVEC_VECTOR_MODE (TYPE_MODE (type))))
{
u = build_pointer_type (type);
@@ -4949,10 +5145,14 @@ rs6000_va_arg (tree valist, tree type)
size = int_size_in_bytes (type);
rsize = (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
+ align = 1;
- if (AGGREGATE_TYPE_P (type) || TYPE_MODE (type) == TFmode)
+ if (AGGREGATE_TYPE_P (type)
+ || TYPE_MODE (type) == TFmode
+ || (!TARGET_ALTIVEC_ABI && ALTIVEC_VECTOR_MODE (TYPE_MODE (type))))
{
- /* Aggregates and long doubles are passed by reference. */
+ /* Aggregates, long doubles, and AltiVec vectors are passed by
+ reference. */
indirect_p = 1;
reg = gpr;
n_reg = 1;
@@ -4961,7 +5161,8 @@ rs6000_va_arg (tree valist, tree type)
size = UNITS_PER_WORD;
rsize = 1;
}
- else if (FLOAT_TYPE_P (type) && TARGET_HARD_FLOAT && TARGET_FPRS)
+ else if (TARGET_HARD_FLOAT && TARGET_FPRS
+ && (TYPE_MODE (type) == SFmode || TYPE_MODE (type) == DFmode))
{
/* FP args go in FP registers, if present. */
indirect_p = 0;
@@ -4969,6 +5170,8 @@ rs6000_va_arg (tree valist, tree type)
n_reg = 1;
sav_ofs = 8*4;
sav_scale = 8;
+ if (TYPE_MODE (type) == DFmode)
+ align = 8;
}
else
{
@@ -4978,38 +5181,43 @@ rs6000_va_arg (tree valist, tree type)
n_reg = rsize;
sav_ofs = 0;
sav_scale = 4;
+ if (n_reg == 2)
+ align = 8;
}
/* Pull the value out of the saved registers.... */
- lab_false = gen_label_rtx ();
- lab_over = gen_label_rtx ();
+ lab_over = NULL_RTX;
addr_rtx = gen_reg_rtx (Pmode);
- /* AltiVec vectors never go in registers. */
- if (!TARGET_ALTIVEC || TREE_CODE (type) != VECTOR_TYPE)
+ /* AltiVec vectors never go in registers when -mabi=altivec. */
+ if (TARGET_ALTIVEC_ABI && ALTIVEC_VECTOR_MODE (TYPE_MODE (type)))
+ align = 16;
+ else
{
- TREE_THIS_VOLATILE (reg) = 1;
- emit_cmp_and_jump_insns
- (expand_expr (reg, NULL_RTX, QImode, EXPAND_NORMAL),
- GEN_INT (8 - n_reg + 1), GE, const1_rtx, QImode, 1,
- lab_false);
+ lab_false = gen_label_rtx ();
+ lab_over = gen_label_rtx ();
- /* Long long is aligned in the registers. */
- if (n_reg > 1)
+ /* Long long and SPE vectors are aligned in the registers.
+ As are any other 2 gpr item such as complex int due to a
+ historical mistake. */
+ u = reg;
+ if (n_reg == 2)
{
u = build (BIT_AND_EXPR, TREE_TYPE (reg), reg,
build_int_2 (n_reg - 1, 0));
- u = build (PLUS_EXPR, TREE_TYPE (reg), reg, u);
- u = build (MODIFY_EXPR, TREE_TYPE (reg), reg, u);
+ u = build (POSTINCREMENT_EXPR, TREE_TYPE (reg), reg, u);
TREE_SIDE_EFFECTS (u) = 1;
- expand_expr (u, const0_rtx, VOIDmode, EXPAND_NORMAL);
}
+ emit_cmp_and_jump_insns
+ (expand_expr (u, NULL_RTX, QImode, EXPAND_NORMAL),
+ GEN_INT (8 - n_reg + 1), GE, const1_rtx, QImode, 1,
+ lab_false);
+
+ t = sav;
if (sav_ofs)
t = build (PLUS_EXPR, ptr_type_node, sav, build_int_2 (sav_ofs, 0));
- else
- t = sav;
u = build (POSTINCREMENT_EXPR, TREE_TYPE (reg), reg,
build_int_2 (n_reg, 0));
@@ -5030,40 +5238,18 @@ rs6000_va_arg (tree valist, tree type)
emit_jump_insn (gen_jump (lab_over));
emit_barrier ();
- }
- emit_label (lab_false);
+ emit_label (lab_false);
+ }
/* ... otherwise out of the overflow area. */
- /* Make sure we don't find reg 7 for the next int arg.
-
- All AltiVec vectors go in the overflow area. So in the AltiVec
- case we need to get the vectors from the overflow area, but
- remember where the GPRs and FPRs are. */
- if (n_reg > 1 && (TREE_CODE (type) != VECTOR_TYPE
- || !TARGET_ALTIVEC))
- {
- t = build (MODIFY_EXPR, TREE_TYPE (reg), reg, build_int_2 (8, 0));
- TREE_SIDE_EFFECTS (t) = 1;
- expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
- }
-
/* Care for on-stack alignment if needed. */
- if (rsize <= 1)
- t = ovf;
- else
+ t = ovf;
+ if (align != 1)
{
- int align;
-
- /* AltiVec vectors are 16 byte aligned. */
- if (TARGET_ALTIVEC && TREE_CODE (type) == VECTOR_TYPE)
- align = 15;
- else
- align = 7;
-
- t = build (PLUS_EXPR, TREE_TYPE (ovf), ovf, build_int_2 (align, 0));
- t = build (BIT_AND_EXPR, TREE_TYPE (t), t, build_int_2 (-align-1, -1));
+ t = build (PLUS_EXPR, TREE_TYPE (t), t, build_int_2 (align - 1, 0));
+ t = build (BIT_AND_EXPR, TREE_TYPE (t), t, build_int_2 (-align, -1));
}
t = save_expr (t);
@@ -5076,7 +5262,8 @@ rs6000_va_arg (tree valist, tree type)
TREE_SIDE_EFFECTS (t) = 1;
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
- emit_label (lab_over);
+ if (lab_over)
+ emit_label (lab_over);
if (indirect_p)
{
@@ -6623,6 +6810,14 @@ rs6000_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
return NULL_RTX;
}
+static tree
+build_opaque_vector_type (tree node, int nunits)
+{
+ node = copy_node (node);
+ TYPE_MAIN_VARIANT (node) = node;
+ return build_vector_type (node, nunits);
+}
+
static void
rs6000_init_builtins (void)
{
@@ -6638,8 +6833,8 @@ rs6000_init_builtins (void)
unsigned_V8HI_type_node = build_vector_type (unsigned_intHI_type_node, 8);
unsigned_V4SI_type_node = build_vector_type (unsigned_intSI_type_node, 4);
- opaque_V2SI_type_node = copy_node (V2SI_type_node);
- opaque_V2SF_type_node = copy_node (V2SF_type_node);
+ opaque_V2SF_type_node = build_opaque_vector_type (float_type_node, 2);
+ opaque_V2SI_type_node = build_opaque_vector_type (intSI_type_node, 2);
opaque_p_V2SI_type_node = build_pointer_type (opaque_V2SI_type_node);
/* The 'vector bool ...' types must be kept distinct from 'vector unsigned ...'
@@ -8586,10 +8781,7 @@ includes_rldicr_lshift_p (rtx shiftop, rtx andop)
}
/* Return 1 if REGNO (reg1) == REGNO (reg2) - 1 making them candidates
- for lfq and stfq insns.
-
- Note reg1 and reg2 *must* be hard registers. To be sure we will
- abort if we are passed pseudo registers. */
+ for lfq and stfq insns iff the registers are hard registers. */
int
registers_ok_for_quad_peep (rtx reg1, rtx reg2)
@@ -8597,6 +8789,11 @@ registers_ok_for_quad_peep (rtx reg1, rtx reg2)
/* We might have been passed a SUBREG. */
if (GET_CODE (reg1) != REG || GET_CODE (reg2) != REG)
return 0;
+
+ /* We might have been passed non floating point registers. */
+ if (!FP_REGNO_P (REGNO (reg1))
+ || !FP_REGNO_P (REGNO (reg2)))
+ return 0;
return (REGNO (reg1) == REGNO (reg2) - 1);
}
@@ -8606,11 +8803,19 @@ registers_ok_for_quad_peep (rtx reg1, rtx reg2)
(addr2 == addr1 + 8). */
int
-addrs_ok_for_quad_peep (rtx addr1, rtx addr2)
+mems_ok_for_quad_peep (rtx mem1, rtx mem2)
{
+ rtx addr1, addr2;
unsigned int reg1;
int offset1;
+ /* The mems cannot be volatile. */
+ if (MEM_VOLATILE_P (mem1) || MEM_VOLATILE_P (mem2))
+ return 0;
+
+ addr1 = XEXP (mem1, 0);
+ addr2 = XEXP (mem2, 0);
+
/* Extract an offset (if used) from the first addr. */
if (GET_CODE (addr1) == PLUS)
{
@@ -16145,7 +16350,7 @@ rs6000_complex_function_value (enum machine_mode mode)
enum machine_mode inner = GET_MODE_INNER (mode);
unsigned int inner_bytes = GET_MODE_SIZE (inner);
- if (FLOAT_MODE_P (mode))
+ if (FLOAT_MODE_P (mode) && TARGET_HARD_FLOAT && TARGET_FPRS)
regno = FP_ARG_RETURN;
else
{
@@ -16203,10 +16408,9 @@ rs6000_function_value (tree valtype, tree func ATTRIBUTE_UNUSED)
else
mode = TYPE_MODE (valtype);
- if (TREE_CODE (valtype) == REAL_TYPE && TARGET_HARD_FLOAT && TARGET_FPRS)
+ if (SCALAR_FLOAT_TYPE_P (valtype) && TARGET_HARD_FLOAT && TARGET_FPRS)
regno = FP_ARG_RETURN;
else if (TREE_CODE (valtype) == COMPLEX_TYPE
- && TARGET_HARD_FLOAT
&& targetm.calls.split_complex_arg)
return rs6000_complex_function_value (mode);
else if (TREE_CODE (valtype) == VECTOR_TYPE
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index f3d449377e5..d08aca9b888 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -718,7 +718,8 @@ extern const char *rs6000_warn_altivec_long_switch;
#define PARM_BOUNDARY (TARGET_32BIT ? 32 : 64)
/* Boundary (in *bits*) on which stack pointer should be aligned. */
-#define STACK_BOUNDARY ((TARGET_32BIT && !TARGET_ALTIVEC_ABI) ? 64 : 128)
+#define STACK_BOUNDARY \
+ ((TARGET_32BIT && !TARGET_ALTIVEC && !TARGET_ALTIVEC_ABI) ? 64 : 128)
/* Allocation boundary (in *bits*) for the code of a function. */
#define FUNCTION_BOUNDARY 32
@@ -997,25 +998,9 @@ extern const char *rs6000_warn_altivec_long_switch;
#define ALTIVEC_REGNO_P(N) ((N) >= FIRST_ALTIVEC_REGNO && (N) <= LAST_ALTIVEC_REGNO)
/* Return number of consecutive hard regs needed starting at reg REGNO
- to hold something of mode MODE.
- This is ordinarily the length in words of a value of mode MODE
- but can be less for certain modes in special long registers.
-
- For the SPE, GPRs are 64 bits but only 32 bits are visible in
- scalar instructions. The upper 32 bits are only available to the
- SIMD instructions.
-
- POWER and PowerPC GPRs hold 32 bits worth;
- PowerPC64 GPRs and FPRs point register holds 64 bits worth. */
-
-#define HARD_REGNO_NREGS(REGNO, MODE) \
- (FP_REGNO_P (REGNO) \
- ? ((GET_MODE_SIZE (MODE) + UNITS_PER_FP_WORD - 1) / UNITS_PER_FP_WORD) \
- : (SPE_SIMD_REGNO_P (REGNO) && TARGET_SPE && SPE_VECTOR_MODE (MODE)) \
- ? ((GET_MODE_SIZE (MODE) + UNITS_PER_SPE_WORD - 1) / UNITS_PER_SPE_WORD) \
- : ALTIVEC_REGNO_P (REGNO) \
- ? ((GET_MODE_SIZE (MODE) + UNITS_PER_ALTIVEC_WORD - 1) / UNITS_PER_ALTIVEC_WORD) \
- : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
+ to hold something of mode MODE. */
+
+#define HARD_REGNO_NREGS(REGNO, MODE) rs6000_hard_regno_nregs ((REGNO), (MODE))
#define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE) \
((TARGET_32BIT && TARGET_POWERPC64 \
@@ -1042,26 +1027,10 @@ extern const char *rs6000_warn_altivec_long_switch;
((TARGET_SPE && SPE_VECTOR_MODE (MODE)) \
|| (TARGET_ALTIVEC && ALTIVEC_VECTOR_MODE (MODE)))
-/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
- For POWER and PowerPC, the GPRs can hold any mode, but values bigger
- than one register cannot go past R31. The float
- registers only can hold floating modes and DImode, and CR register only
- can hold CC modes. We cannot put TImode anywhere except general
- register and it must be able to fit within the register set. */
-
-#define HARD_REGNO_MODE_OK(REGNO, MODE) \
- (INT_REGNO_P (REGNO) ? \
- INT_REGNO_P (REGNO + HARD_REGNO_NREGS (REGNO, MODE) - 1) \
- : FP_REGNO_P (REGNO) ? \
- ((GET_MODE_CLASS (MODE) == MODE_FLOAT \
- && FP_REGNO_P (REGNO + HARD_REGNO_NREGS (REGNO, MODE) - 1)) \
- || (GET_MODE_CLASS (MODE) == MODE_INT \
- && GET_MODE_SIZE (MODE) == UNITS_PER_FP_WORD)) \
- : ALTIVEC_REGNO_P (REGNO) ? ALTIVEC_VECTOR_MODE (MODE) \
- : SPE_SIMD_REGNO_P (REGNO) && TARGET_SPE && SPE_VECTOR_MODE (MODE) ? 1 \
- : CR_REGNO_P (REGNO) ? GET_MODE_CLASS (MODE) == MODE_CC \
- : XER_REGNO_P (REGNO) ? (MODE) == PSImode \
- : GET_MODE_SIZE (MODE) <= UNITS_PER_WORD)
+/* Value is TRUE if hard register REGNO can hold a value of
+ machine-mode MODE. */
+#define HARD_REGNO_MODE_OK(REGNO, MODE) \
+ rs6000_hard_regno_mode_ok_p[(int)(MODE)][REGNO]
/* Value is 1 if it is a good idea to tie two pseudo registers
when one has mode MODE1 and one has mode MODE2.
@@ -1128,59 +1097,10 @@ extern const char *rs6000_warn_altivec_long_switch;
#define FIXED_SCRATCH (TARGET_SPE ? 14 : 11)
-/* Define this macro to change register usage conditional on target flags.
- Set MQ register fixed (already call_used) if not POWER architecture
- (RIOS1, RIOS2, RSC, and PPC601) so that it will not be allocated.
- 64-bit AIX reserves GPR13 for thread-private data.
- Conditionally disable FPRs. */
+/* Define this macro to change register usage conditional on target
+ flags. */
-#define CONDITIONAL_REGISTER_USAGE \
-{ \
- int i; \
- if (! TARGET_POWER) \
- fixed_regs[64] = 1; \
- if (TARGET_64BIT) \
- fixed_regs[13] = call_used_regs[13] \
- = call_really_used_regs[13] = 1; \
- if (TARGET_SOFT_FLOAT || !TARGET_FPRS) \
- for (i = 32; i < 64; i++) \
- fixed_regs[i] = call_used_regs[i] \
- = call_really_used_regs[i] = 1; \
- if (DEFAULT_ABI == ABI_V4 \
- && PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM \
- && flag_pic == 2) \
- fixed_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] = 1; \
- if (DEFAULT_ABI == ABI_V4 \
- && PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM \
- && flag_pic == 1) \
- fixed_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] \
- = call_used_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] \
- = call_really_used_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] = 1; \
- if (DEFAULT_ABI == ABI_DARWIN \
- && PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM) \
- global_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] \
- = fixed_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] \
- = call_used_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] \
- = call_really_used_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] = 1; \
- if (TARGET_ALTIVEC) \
- global_regs[VSCR_REGNO] = 1; \
- if (TARGET_SPE) \
- { \
- global_regs[SPEFSCR_REGNO] = 1; \
- fixed_regs[FIXED_SCRATCH] \
- = call_used_regs[FIXED_SCRATCH] \
- = call_really_used_regs[FIXED_SCRATCH] = 1; \
- } \
- if (! TARGET_ALTIVEC) \
- { \
- for (i = FIRST_ALTIVEC_REGNO; i <= LAST_ALTIVEC_REGNO; ++i) \
- fixed_regs[i] = call_used_regs[i] = call_really_used_regs[i] = 1; \
- call_really_used_regs[VRSAVE_REGNO] = 1; \
- } \
- if (TARGET_ALTIVEC_ABI) \
- for (i = FIRST_ALTIVEC_REGNO; i < FIRST_ALTIVEC_REGNO + 20; ++i) \
- call_used_regs[i] = call_really_used_regs[i] = 1; \
-}
+#define CONDITIONAL_REGISTER_USAGE rs6000_conditional_register_usage ()
/* Specify the registers used for certain standard purposes.
The values of these macros are register numbers. */
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index c1dabf888b3..d93b80a8456 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -9608,29 +9608,48 @@
;; Peephole to convert two consecutive FP loads or stores into lfq/stfq.
-(define_peephole
- [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
+(define_insn "*lfq_power2"
+ [(set (match_operand:TF 0 "gpc_reg_operand" "=f")
+ (match_operand:TF 1 "memory_operand" ""))]
+ "TARGET_POWER2
+ && TARGET_HARD_FLOAT && TARGET_FPRS"
+ "lfq%U1%X1 %0,%1")
+
+(define_peephole2
+ [(set (match_operand:DF 0 "gpc_reg_operand" "")
(match_operand:DF 1 "memory_operand" ""))
- (set (match_operand:DF 2 "gpc_reg_operand" "=f")
+ (set (match_operand:DF 2 "gpc_reg_operand" "")
(match_operand:DF 3 "memory_operand" ""))]
"TARGET_POWER2
&& TARGET_HARD_FLOAT && TARGET_FPRS
&& registers_ok_for_quad_peep (operands[0], operands[2])
- && ! MEM_VOLATILE_P (operands[1]) && ! MEM_VOLATILE_P (operands[3])
- && addrs_ok_for_quad_peep (XEXP (operands[1], 0), XEXP (operands[3], 0))"
- "lfq%U1%X1 %0,%1")
+ && mems_ok_for_quad_peep (operands[1], operands[3])"
+ [(set (match_dup 0)
+ (match_dup 1))]
+ "operands[1] = widen_memory_access (operands[1], TFmode, 0);
+ operands[0] = gen_rtx_REG (TFmode, REGNO (operands[0]));")
-(define_peephole
+(define_insn "*stfq_power2"
+ [(set (match_operand:TF 0 "memory_operand" "")
+ (match_operand:TF 1 "gpc_reg_operand" "f"))]
+ "TARGET_POWER2
+ && TARGET_HARD_FLOAT && TARGET_FPRS"
+ "stfq%U0%X0 %1,%0")
+
+
+(define_peephole2
[(set (match_operand:DF 0 "memory_operand" "")
- (match_operand:DF 1 "gpc_reg_operand" "f"))
+ (match_operand:DF 1 "gpc_reg_operand" ""))
(set (match_operand:DF 2 "memory_operand" "")
- (match_operand:DF 3 "gpc_reg_operand" "f"))]
+ (match_operand:DF 3 "gpc_reg_operand" ""))]
"TARGET_POWER2
&& TARGET_HARD_FLOAT && TARGET_FPRS
&& registers_ok_for_quad_peep (operands[1], operands[3])
- && ! MEM_VOLATILE_P (operands[0]) && ! MEM_VOLATILE_P (operands[2])
- && addrs_ok_for_quad_peep (XEXP (operands[0], 0), XEXP (operands[2], 0))"
- "stfq%U0%X0 %1,%0")
+ && mems_ok_for_quad_peep (operands[0], operands[2])"
+ [(set (match_dup 0)
+ (match_dup 1))]
+ "operands[0] = widen_memory_access (operands[0], TFmode, 0);
+ operands[1] = gen_rtx_REG (TFmode, REGNO (operands[1]));")
;; TLS support.
diff --git a/gcc/config/rs6000/spe.md b/gcc/config/rs6000/spe.md
index 7e765753655..f8f6c0af7a4 100644
--- a/gcc/config/rs6000/spe.md
+++ b/gcc/config/rs6000/spe.md
@@ -2546,7 +2546,7 @@
(unspec:CCFP
[(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r")
(match_operand:SF 2 "gpc_reg_operand" "r"))]
- 1004))]
+ 1005))]
"TARGET_HARD_FLOAT && !TARGET_FPRS && flag_unsafe_math_optimizations"
"efststlt %0,%1,%2"
[(set_attr "type" "veccmpsimple")])
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index 1e0ac3707f6..ea149f01a32 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -385,12 +385,6 @@ do { \
#undef STRICT_ALIGNMENT
#define STRICT_ALIGNMENT (TARGET_STRICT_ALIGN)
-/* Alignment in bits of the stack boundary. Note, in order to allow building
- one set of libraries with -mno-eabi instead of eabi libraries and non-eabi
- versions, just use 64 as the stack boundary. */
-#undef STACK_BOUNDARY
-#define STACK_BOUNDARY (TARGET_ALTIVEC_ABI ? 128 : 64)
-
/* Define this macro if you wish to preserve a certain alignment for
the stack pointer, greater than what the hardware enforces. The
definition is a C expression for the desired alignment (measured
@@ -407,7 +401,8 @@ do { \
#define PREFERRED_STACK_BOUNDARY 128
/* Real stack boundary as mandated by the appropriate ABI. */
-#define ABI_STACK_BOUNDARY ((TARGET_EABI && !TARGET_ALTIVEC_ABI) ? 64 : 128)
+#define ABI_STACK_BOUNDARY \
+ ((TARGET_EABI && !TARGET_ALTIVEC && !TARGET_ALTIVEC_ABI) ? 64 : 128)
/* An expression for the alignment of a structure field FIELD if the
alignment computed in the usual way is COMPUTED. */
diff --git a/gcc/config/s390/s390-protos.h b/gcc/config/s390/s390-protos.h
index 49dad24b5e7..07295ec9369 100644
--- a/gcc/config/s390/s390-protos.h
+++ b/gcc/config/s390/s390-protos.h
@@ -26,8 +26,9 @@ extern void override_options (void);
extern HOST_WIDE_INT s390_arg_frame_offset (void);
extern void s390_load_got (int);
extern void s390_emit_prologue (void);
-extern void s390_emit_epilogue (void);
+extern void s390_emit_epilogue (bool);
extern void s390_function_profiler (FILE *, int);
+extern void s390_conditional_register_usage (void);
#ifdef RTX_CODE
extern int s390_extra_constraint_str (rtx, int, const char *);
@@ -53,7 +54,6 @@ extern int s390_alc_comparison (rtx op, enum machine_mode mode);
extern int s390_slb_comparison (rtx op, enum machine_mode mode);
extern int symbolic_reference_mentioned_p (rtx);
extern int tls_symbolic_reference_mentioned_p (rtx);
-extern rtx s390_tls_get_offset (void);
extern int legitimate_la_operand_p (rtx);
extern int preferred_la_operand_p (rtx);
extern int legitimate_pic_operand_p (rtx);
@@ -77,6 +77,7 @@ extern void s390_expand_movstr (rtx, rtx, rtx);
extern void s390_expand_clrstr (rtx, rtx);
extern void s390_expand_cmpmem (rtx, rtx, rtx, rtx);
extern rtx s390_return_addr_rtx (int, rtx);
+extern rtx s390_emit_call (rtx, rtx, rtx, rtx);
extern bool s390_output_addr_const_extra (FILE*, rtx);
extern void print_operand_address (FILE *, rtx);
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 5d5d5736286..9e786bfdf70 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -78,6 +78,8 @@ static int s390_address_cost (rtx);
static void s390_reorg (void);
static bool s390_valid_pointer_mode (enum machine_mode);
static tree s390_build_builtin_va_list (void);
+static bool s390_function_ok_for_sibcall (tree, tree);
+static bool s390_call_saved_register_used (tree);
#undef TARGET_ASM_ALIGNED_HI_OP
#define TARGET_ASM_ALIGNED_HI_OP "\t.word\t"
@@ -151,6 +153,9 @@ static tree s390_build_builtin_va_list (void);
#undef TARGET_PROMOTE_FUNCTION_RETURN
#define TARGET_PROMOTE_FUNCTION_RETURN hook_bool_tree_true
+#undef TARGET_FUNCTION_OK_FOR_SIBCALL
+#define TARGET_FUNCTION_OK_FOR_SIBCALL s390_function_ok_for_sibcall
+
struct gcc_target targetm = TARGET_INITIALIZER;
extern int reload_completed;
@@ -763,7 +768,7 @@ s390_branch_condition_mnemonic (rtx code, int inv)
/* Return the part of op which has a value different from def.
The size of the part is determined by mode.
- Use this function only if you already know that op really
+ Use this function only if you already know that op really
contains such a part. */
unsigned HOST_WIDE_INT
@@ -774,18 +779,18 @@ s390_extract_part (rtx op, enum machine_mode mode, int def)
int part_bits = GET_MODE_BITSIZE (mode);
unsigned HOST_WIDE_INT part_mask = (1 << part_bits) - 1;
int i;
-
+
for (i = 0; i < max_parts; i++)
{
if (i == 0)
value = (unsigned HOST_WIDE_INT) INTVAL (op);
else
value >>= part_bits;
-
+
if ((value & part_mask) != (def & part_mask))
return value & part_mask;
}
-
+
abort ();
}
@@ -794,8 +799,8 @@ s390_extract_part (rtx op, enum machine_mode mode, int def)
part. Otherwise, return -1. */
int
-s390_single_part (rtx op,
- enum machine_mode mode,
+s390_single_part (rtx op,
+ enum machine_mode mode,
enum machine_mode part_mode,
int def)
{
@@ -806,14 +811,14 @@ s390_single_part (rtx op,
if (GET_CODE (op) != CONST_INT)
return -1;
-
+
for (i = 0; i < n_parts; i++)
{
if (i == 0)
value = (unsigned HOST_WIDE_INT) INTVAL (op);
else
value >>= GET_MODE_BITSIZE (part_mode);
-
+
if ((value & part_mask) != (def & part_mask))
{
if (part != -1)
@@ -1118,10 +1123,10 @@ general_s_operand (register rtx op, enum machine_mode mode,
return 0;
if (addr.indx)
return 0;
- /* Do not allow literal pool references unless ALLOW_IMMEDIATE
- is true. This prevents compares between two literal pool
+ /* Do not allow literal pool references unless ALLOW_IMMEDIATE
+ is true. This prevents compares between two literal pool
entries from being accepted. */
- if (!allow_immediate
+ if (!allow_immediate
&& addr.base && REGNO (addr.base) == BASE_REGISTER)
return 0;
return 1;
@@ -1342,8 +1347,8 @@ s390_const_ok_for_constraint_p (HOST_WIDE_INT value,
return value >= -32768 && value < 32768;
case 'L':
- return (TARGET_LONG_DISPLACEMENT ?
- (value >= -524288 && value <= 524287)
+ return (TARGET_LONG_DISPLACEMENT ?
+ (value >= -524288 && value <= 524287)
: (value >= 0 && value <= 4095));
case 'M':
return value == 2147483647;
@@ -1357,7 +1362,7 @@ s390_const_ok_for_constraint_p (HOST_WIDE_INT value,
case 'Q': part_mode = QImode; break;
default: return 0;
}
-
+
switch (str[3])
{
case 'H': mode = HImode; break;
@@ -2610,16 +2615,29 @@ get_thread_pointer (void)
return tp;
}
-/* Construct the SYMBOL_REF for the tls_get_offset function. */
+/* Emit a tls call insn. The call target is the SYMBOL_REF stored
+ in s390_tls_symbol which always refers to __tls_get_offset.
+ The returned offset is written to RESULT_REG and an USE rtx is
+ generated for TLS_CALL. */
static GTY(()) rtx s390_tls_symbol;
-rtx
-s390_tls_get_offset (void)
+
+static void
+s390_emit_tls_call_insn (rtx result_reg, rtx tls_call)
{
+ rtx insn;
+
+ if (!flag_pic)
+ abort ();
+
if (!s390_tls_symbol)
s390_tls_symbol = gen_rtx_SYMBOL_REF (Pmode, "__tls_get_offset");
- return s390_tls_symbol;
+ insn = s390_emit_call (s390_tls_symbol, tls_call, result_reg,
+ gen_rtx_REG (Pmode, RETURN_REGNUM));
+
+ use_reg (&CALL_INSN_FUNCTION_USAGE (insn), result_reg);
+ CONST_OR_PURE_CALL_P (insn) = 1;
}
/* ADDR contains a thread-local SYMBOL_REF. Generate code to compute
@@ -2640,7 +2658,7 @@ legitimize_tls_address (rtx addr, rtx reg)
new = gen_rtx_CONST (Pmode, tls_call);
new = force_const_mem (Pmode, new);
emit_move_insn (r2, new);
- emit_call_insn (gen_call_value_tls (r2, tls_call));
+ s390_emit_tls_call_insn (r2, tls_call);
insn = get_insns ();
end_sequence ();
@@ -2663,7 +2681,7 @@ legitimize_tls_address (rtx addr, rtx reg)
new = gen_rtx_CONST (Pmode, tls_call);
new = force_const_mem (Pmode, new);
emit_move_insn (r2, new);
- emit_call_insn (gen_call_value_tls (r2, tls_call));
+ s390_emit_tls_call_insn (r2, tls_call);
insn = get_insns ();
end_sequence ();
@@ -2987,7 +3005,7 @@ s390_expand_movstr (rtx dst, rtx src, rtx len)
expand_end_loop ();
emit_label (loop_end_label);
- emit_insn (gen_movstr_short (dst, src,
+ emit_insn (gen_movstr_short (dst, src,
convert_to_mode (Pmode, count, 1)));
emit_label (end_label);
}
@@ -3153,7 +3171,7 @@ s390_expand_cmpmem (rtx target, rtx op0, rtx op1, rtx len)
expand_end_loop ();
emit_label (loop_end_label);
- emit_insn (gen_cmpmem_short (op0, op1,
+ emit_insn (gen_cmpmem_short (op0, op1,
convert_to_mode (Pmode, count, 1)));
emit_label (end_label);
@@ -3294,7 +3312,7 @@ get_some_local_dynamic_name_1 (rtx *px, void *data ATTRIBUTE_UNUSED)
return 0;
}
-/* Output machine-dependent UNSPECs occurring in address constant X
+/* Output machine-dependent UNSPECs occurring in address constant X
in assembler syntax to stdio stream FILE. Returns true if the
constant X could be recognized, false otherwise. */
@@ -3512,11 +3530,11 @@ print_operand (FILE *file, rtx x, int code)
else if (code == 'h')
fprintf (file, HOST_WIDE_INT_PRINT_DEC, ((INTVAL (x) & 0xffff) ^ 0x8000) - 0x8000);
else if (code == 'i')
- fprintf (file, HOST_WIDE_INT_PRINT_DEC,
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC,
s390_extract_part (x, HImode, 0));
else if (code == 'j')
- fprintf (file, HOST_WIDE_INT_PRINT_DEC,
- s390_extract_part (x, HImode, -1));
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC,
+ s390_extract_part (x, HImode, -1));
else
fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x));
break;
@@ -4258,7 +4276,7 @@ s390_dump_pool (struct constant_pool *pool, bool remote_label)
insn = emit_label_after (c->label, insn);
INSN_ADDRESSES_NEW (insn, -1);
- value = gen_rtx_UNSPEC_VOLATILE (constant_modes[i],
+ value = gen_rtx_UNSPEC_VOLATILE (constant_modes[i],
gen_rtvec (1, value),
UNSPECV_POOL_ENTRY);
insn = emit_insn_after (value, insn);
@@ -4406,8 +4424,8 @@ s390_mainpool_finish (struct constant_pool *pool, rtx base_reg)
insn = emit_insn_after (insn, pool->pool_insn);
INSN_ADDRESSES_NEW (insn, -1);
remove_insn (pool->pool_insn);
-
- insn = get_last_insn ();
+
+ insn = get_last_insn ();
pool->pool_insn = emit_insn_after (gen_pool (const0_rtx), insn);
INSN_ADDRESSES_NEW (pool->pool_insn, -1);
@@ -5107,7 +5125,7 @@ s390_reorg (void)
/* Install the main literal pool and the associated base
register load insns.
- In addition, there are two problematic situations we need
+ In addition, there are two problematic situations we need
to correct:
- the literal pool might be > 4096 bytes in size, so that
@@ -5213,7 +5231,7 @@ s390_return_addr_rtx (int count, rtx frame)
return gen_rtx_MEM (Pmode, addr);
}
-/* Find first call clobbered register unsused in a function.
+/* Find first call clobbered register unused in a function.
This could be used as base register in a leaf function
or for holding the return address before epilogue. */
@@ -5659,18 +5677,8 @@ s390_emit_prologue (void)
{
/* Generate a BAS instruction to serve as a function
entry intercept to facilitate the use of tracing
- algorithms located at the branch target.
-
- This must use register 1. */
- rtx addr;
- rtx unkn;
- rtx link;
-
- addr = GEN_INT (0xfe0);
- unkn = CONST0_RTX (SImode);
- link = gen_rtx_REG (Pmode, 1);
-
- emit_call_insn (gen_call_exp (gen_rtx_MEM (QImode, addr), unkn, link));
+ algorithms located at the branch target. */
+ emit_insn (gen_prologue_tpf ());
/* Emit a blockage here so that all code
lies between the profiling mechanisms. */
@@ -5681,7 +5689,7 @@ s390_emit_prologue (void)
/* Expand the epilogue into a bunch of separate insns. */
void
-s390_emit_epilogue (void)
+s390_emit_epilogue (bool sibcall)
{
rtx frame_pointer, return_reg;
int area_bottom, area_top, offset = 0;
@@ -5693,23 +5701,13 @@ s390_emit_epilogue (void)
/* Generate a BAS instruction to serve as a function
entry intercept to facilitate the use of tracing
- algorithms located at the branch target.
-
- This must use register 1. */
-
- rtx addr;
- rtx unkn;
- rtx link;
-
- addr = GEN_INT (0xfe6);
- unkn = CONST0_RTX (SImode);
- link = gen_rtx_REG (Pmode, 1);
+ algorithms located at the branch target. */
/* Emit a blockage here so that all code
lies between the profiling mechanisms. */
emit_insn (gen_blockage ());
- emit_call_insn (gen_call_exp (gen_rtx_MEM (QImode, addr), unkn, link));
+ emit_insn (gen_epilogue_tpf ());
}
/* Check whether to use frame or stack pointer for restore. */
@@ -5749,7 +5747,7 @@ s390_emit_epilogue (void)
area_bottom = 16*UNITS_PER_WORD + 8*(i-16);
if (area_top < 16*UNITS_PER_WORD + 8*(i-16) + 8)
area_top = 16*UNITS_PER_WORD + 8*(i-16) + 8;
- }
+ }
}
/* Check whether we can access the register save area.
@@ -5801,7 +5799,7 @@ s390_emit_epilogue (void)
{
for (i = 18; i < 20; i++)
if (regs_ever_live[i] && !global_regs[i])
- restore_fpr (frame_pointer,
+ restore_fpr (frame_pointer,
offset + 16*UNITS_PER_WORD + 8*(i-16), i);
}
@@ -5841,23 +5839,26 @@ s390_emit_epilogue (void)
}
}
- /* Fetch return address from stack before load multiple,
- this will do good for scheduling. */
-
- if (cfun->machine->save_return_addr_p
- || (cfun->machine->first_restore_gpr < BASE_REGISTER
- && cfun->machine->last_save_gpr > RETURN_REGNUM))
+ if (! sibcall)
{
- int return_regnum = find_unused_clobbered_reg();
- if (!return_regnum)
- return_regnum = 4;
- return_reg = gen_rtx_REG (Pmode, return_regnum);
-
- addr = plus_constant (frame_pointer,
- offset + RETURN_REGNUM * UNITS_PER_WORD);
- addr = gen_rtx_MEM (Pmode, addr);
- set_mem_alias_set (addr, s390_sr_alias_set);
- emit_move_insn (return_reg, addr);
+ /* Fetch return address from stack before load multiple,
+ this will do good for scheduling. */
+
+ if (cfun->machine->save_return_addr_p
+ || (cfun->machine->first_restore_gpr < BASE_REGISTER
+ && cfun->machine->last_save_gpr > RETURN_REGNUM))
+ {
+ int return_regnum = find_unused_clobbered_reg();
+ if (!return_regnum)
+ return_regnum = 4;
+ return_reg = gen_rtx_REG (Pmode, return_regnum);
+
+ addr = plus_constant (frame_pointer,
+ offset + RETURN_REGNUM * UNITS_PER_WORD);
+ addr = gen_rtx_MEM (Pmode, addr);
+ set_mem_alias_set (addr, s390_sr_alias_set);
+ emit_move_insn (return_reg, addr);
+ }
}
/* ??? As references to the base register are not made
@@ -5872,13 +5873,17 @@ s390_emit_epilogue (void)
emit_insn (insn);
}
- /* Return to caller. */
+ if (! sibcall)
+ {
+
+ /* Return to caller. */
- p = rtvec_alloc (2);
+ p = rtvec_alloc (2);
- RTVEC_ELT (p, 0) = gen_rtx_RETURN (VOIDmode);
- RTVEC_ELT (p, 1) = gen_rtx_USE (VOIDmode, return_reg);
- emit_jump_insn (gen_rtx_PARALLEL (VOIDmode, p));
+ RTVEC_ELT (p, 0) = gen_rtx_RETURN (VOIDmode);
+ RTVEC_ELT (p, 1) = gen_rtx_USE (VOIDmode, return_reg);
+ emit_jump_insn (gen_rtx_PARALLEL (VOIDmode, p));
+ }
}
@@ -5962,13 +5967,13 @@ s390_function_arg_integer (enum machine_mode mode, tree type)
/* We accept small integral (and similar) types. */
if (INTEGRAL_TYPE_P (type)
- || POINTER_TYPE_P (type)
+ || POINTER_TYPE_P (type)
|| TREE_CODE (type) == OFFSET_TYPE
|| (TARGET_SOFT_FLOAT && TREE_CODE (type) == REAL_TYPE))
return true;
/* We also accept structs of size 1, 2, 4, 8 that are not
- passed in floating-point registers. */
+ passed in floating-point registers. */
if (AGGREGATE_TYPE_P (type)
&& exact_log2 (size) >= 0
&& !s390_function_arg_float (mode, type))
@@ -6094,7 +6099,7 @@ s390_return_in_memory (tree type, tree fundecl ATTRIBUTE_UNUSED)
{
/* We accept small integral (and similar) types. */
if (INTEGRAL_TYPE_P (type)
- || POINTER_TYPE_P (type)
+ || POINTER_TYPE_P (type)
|| TREE_CODE (type) == OFFSET_TYPE
|| TREE_CODE (type) == REAL_TYPE)
return int_size_in_bytes (type) > 8;
@@ -6125,7 +6130,7 @@ s390_function_value (tree type, enum machine_mode mode)
mode = promote_mode (type, TYPE_MODE (type), &unsignedp, 1);
}
- if (GET_MODE_CLASS (mode) != MODE_INT
+ if (GET_MODE_CLASS (mode) != MODE_INT
&& GET_MODE_CLASS (mode) != MODE_FLOAT)
abort ();
if (GET_MODE_SIZE (mode) > 8)
@@ -6993,4 +6998,209 @@ s390_init_machine_status (void)
return ggc_alloc_cleared (sizeof (struct machine_function));
}
+/* Checks whether the given ARGUMENT_LIST would use a caller
+ saved register. This is used to decide whether sibling call
+ optimization could be performed on the respective function
+ call. */
+
+static bool
+s390_call_saved_register_used (tree argument_list)
+{
+ CUMULATIVE_ARGS cum;
+ tree parameter;
+ enum machine_mode mode;
+ tree type;
+ rtx parm_rtx;
+ int reg;
+
+ INIT_CUMULATIVE_ARGS (cum, NULL, NULL, 0, 0);
+
+ while (argument_list)
+ {
+ parameter = TREE_VALUE (argument_list);
+ argument_list = TREE_CHAIN (argument_list);
+
+ if (!parameter)
+ abort();
+
+ /* For an undeclared variable passed as parameter we will get
+ an ERROR_MARK node here. */
+ if (TREE_CODE (parameter) == ERROR_MARK)
+ return true;
+
+ if (! (type = TREE_TYPE (parameter)))
+ abort();
+
+ if (! (mode = TYPE_MODE (TREE_TYPE (parameter))))
+ abort();
+
+ if (s390_function_arg_pass_by_reference (mode, type))
+ {
+ mode = Pmode;
+ type = build_pointer_type (type);
+ }
+
+ parm_rtx = s390_function_arg (&cum, mode, type, 0);
+
+ s390_function_arg_advance (&cum, mode, type, 0);
+
+ if (parm_rtx && REG_P (parm_rtx))
+ {
+ for (reg = 0;
+ reg < HARD_REGNO_NREGS (REGNO (parm_rtx), GET_MODE (parm_rtx));
+ reg++)
+ if (! call_used_regs[reg + REGNO (parm_rtx)])
+ return true;
+ }
+ }
+ return false;
+}
+
+/* Return true if the given call expression can be
+ turned into a sibling call.
+ DECL holds the declaration of the function to be called whereas
+ EXP is the call expression itself. */
+
+static bool
+s390_function_ok_for_sibcall (tree decl, tree exp)
+{
+ /* The TPF epilogue uses register 1. */
+ if (TARGET_TPF)
+ return false;
+
+ /* The 31 bit PLT code uses register 12 (GOT pointer - caller saved)
+ which would have to be restored before the sibcall. */
+ if (!TARGET_64BIT && flag_pic && decl && TREE_PUBLIC (decl))
+ return false;
+
+ /* Register 6 on s390 is available as an argument register but unfortunately
+ "caller saved". This makes functions needing this register for arguments
+ not suitable for sibcalls. */
+ if (TREE_OPERAND (exp, 1)
+ && s390_call_saved_register_used (TREE_OPERAND (exp, 1)))
+ return false;
+
+ return true;
+}
+
+/* This function is used by the call expanders of the machine description.
+ It emits the call insn itself together with the necessary operations
+ to adjust the target address and returns the emitted insn.
+ ADDR_LOCATION is the target address rtx
+ TLS_CALL the location of the thread-local symbol
+ RESULT_REG the register where the result of the call should be stored
+ RETADDR_REG the register where the return address should be stored
+ If this parameter is NULL_RTX the call is considered
+ to be a sibling call. */
+
+rtx
+s390_emit_call (rtx addr_location, rtx tls_call, rtx result_reg,
+ rtx retaddr_reg)
+{
+ bool plt_call = false;
+ rtx insn;
+ rtx call;
+ rtx clobber;
+ rtvec vec;
+
+ /* Direct function calls need special treatment. */
+ if (GET_CODE (addr_location) == SYMBOL_REF)
+ {
+ /* When calling a global routine in PIC mode, we must
+ replace the symbol itself with the PLT stub. */
+ if (flag_pic && !SYMBOL_REF_LOCAL_P (addr_location))
+ {
+ addr_location = gen_rtx_UNSPEC (Pmode,
+ gen_rtvec (1, addr_location),
+ UNSPEC_PLT);
+ addr_location = gen_rtx_CONST (Pmode, addr_location);
+ plt_call = true;
+ }
+
+ /* Unless we can use the bras(l) insn, force the
+ routine address into a register. */
+ if (!TARGET_SMALL_EXEC && !TARGET_CPU_ZARCH)
+ {
+ if (flag_pic)
+ addr_location = legitimize_pic_address (addr_location, 0);
+ else
+ addr_location = force_reg (Pmode, addr_location);
+ }
+ }
+
+ /* If it is already an indirect call or the code above moved the
+ SYMBOL_REF to somewhere else make sure the address can be found in
+ register 1. */
+ if (retaddr_reg == NULL_RTX
+ && GET_CODE (addr_location) != SYMBOL_REF
+ && !plt_call)
+ {
+ emit_move_insn (gen_rtx_REG (Pmode, SIBCALL_REGNUM), addr_location);
+ addr_location = gen_rtx_REG (Pmode, SIBCALL_REGNUM);
+ }
+
+ addr_location = gen_rtx_MEM (QImode, addr_location);
+ call = gen_rtx_CALL (VOIDmode, addr_location, const0_rtx);
+
+ if (result_reg != NULL_RTX)
+ call = gen_rtx_SET (VOIDmode, result_reg, call);
+
+ if (retaddr_reg != NULL_RTX)
+ {
+ clobber = gen_rtx_CLOBBER (VOIDmode, retaddr_reg);
+
+ if (tls_call != NULL_RTX)
+ vec = gen_rtvec (3, call, clobber,
+ gen_rtx_USE (VOIDmode, tls_call));
+ else
+ vec = gen_rtvec (2, call, clobber);
+
+ call = gen_rtx_PARALLEL (VOIDmode, vec);
+ }
+
+ insn = emit_call_insn (call);
+
+ /* 31-bit PLT stubs and tls calls use the GOT register implicitly. */
+ if ((!TARGET_64BIT && plt_call) || tls_call != NULL_RTX)
+ {
+ /* s390_function_ok_for_sibcall should
+ have denied sibcalls in this case. */
+ if (retaddr_reg == NULL_RTX)
+ abort ();
+
+ use_reg (&CALL_INSN_FUNCTION_USAGE (insn), pic_offset_table_rtx);
+ }
+ return insn;
+}
+
+/* Implement CONDITIONAL_REGISTER_USAGE. */
+
+void
+s390_conditional_register_usage (void)
+{
+ int i;
+
+ if (flag_pic)
+ {
+ fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
+ call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
+ }
+ if (TARGET_CPU_ZARCH)
+ {
+ fixed_regs[RETURN_REGNUM] = 0;
+ call_used_regs[RETURN_REGNUM] = 0;
+ }
+ if (TARGET_64BIT)
+ {
+ for (i = 24; i < 32; i++)
+ call_used_regs[i] = call_really_used_regs[i] = 0;
+ }
+ else
+ {
+ for (i = 18; i < 20; i++)
+ call_used_regs[i] = call_really_used_regs[i] = 0;
+ }
+}
+
+
#include "gt-s390.h"
diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h
index 3354f45beed..9c35632d8a5 100644
--- a/gcc/config/s390/s390.h
+++ b/gcc/config/s390/s390.h
@@ -299,6 +299,7 @@ if (INTEGRAL_MODE_P (MODE) && \
#define CC_REG_P(X) (REG_P (X) && CC_REGNO_P (REGNO (X)))
#define FRAME_REG_P(X) (REG_P (X) && FRAME_REGNO_P (REGNO (X)))
+#define SIBCALL_REGNUM 1
#define BASE_REGISTER 13
#define RETURN_REGNUM 14
#define CC_REGNUM 33
@@ -350,32 +351,7 @@ if (INTEGRAL_MODE_P (MODE) && \
1, 1, 1, 1, \
1, 1, 1 }
-#define CONDITIONAL_REGISTER_USAGE \
-do \
- { \
- int i; \
- \
- if (flag_pic) \
- { \
- fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
- call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
- } \
- if (TARGET_CPU_ZARCH) \
- { \
- fixed_regs[RETURN_REGNUM] = 0; \
- call_used_regs[RETURN_REGNUM] = 0; \
- } \
- if (TARGET_64BIT) \
- { \
- for (i = 24; i < 32; i++) \
- call_used_regs[i] = call_really_used_regs[i] = 0; \
- } \
- else \
- { \
- for (i = 18; i < 20; i++) \
- call_used_regs[i] = call_really_used_regs[i] = 0; \
- } \
- } while (0)
+#define CONDITIONAL_REGISTER_USAGE s390_conditional_register_usage ()
/* Preferred register allocation order. */
#define REG_ALLOC_ORDER \
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index f6aeefbc175..151b5b48419 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -29,7 +29,7 @@
;; I -- An 8-bit constant (0..255).
;; J -- A 12-bit constant (0..4095).
;; K -- A 16-bit constant (-32768..32767).
-;; L -- Value appropriate as displacement.
+;; L -- Value appropriate as displacement.
;; (0..4095) for short displacement
;; (-524288..524287) for long displacement
;; M -- Constant integer with a value of 0x7fffffff.
@@ -38,7 +38,7 @@
;; H,Q: mode of the part
;; D,S,H: mode of the containing operand
;; 0,F: value of the other parts (F - all bits set)
-;;
+;;
;; The constraint matches if the specified part of a constant
;; has a value different from its other parts.
;; Q -- Memory reference without index register and with short displacement.
@@ -118,6 +118,10 @@
[; Blockage
(UNSPECV_BLOCKAGE 0)
+ ; TPF Support
+ (UNSPECV_TPF_PROLOGUE 20)
+ (UNSPECV_TPF_EPILOGUE 21)
+
; Literal pool
(UNSPECV_POOL 200)
(UNSPECV_POOL_START 201)
@@ -537,7 +541,7 @@
(define_insn "*tmdi_reg"
[(set (reg 33)
(compare (and:DI (match_operand:DI 0 "nonimmediate_operand" "d,d,d,d")
- (match_operand:DI 1 "immediate_operand"
+ (match_operand:DI 1 "immediate_operand"
"N0HD0,N1HD0,N2HD0,N3HD0"))
(match_operand:DI 2 "immediate_operand" "n,n,n,n")))]
"TARGET_64BIT
@@ -1082,9 +1086,9 @@
(set_attr "type" "larl")])
(define_insn "*movdi_64"
- [(set (match_operand:DI 0 "nonimmediate_operand"
+ [(set (match_operand:DI 0 "nonimmediate_operand"
"=d,d,d,d,d,d,d,d,m,!*f,!*f,!*f,!R,!T,?Q")
- (match_operand:DI 1 "general_operand"
+ (match_operand:DI 1 "general_operand"
"K,N0HD0,N1HD0,N2HD0,N3HD0,L,d,m,d,*f,R,T,*f,*f,?Q"))]
"TARGET_64BIT"
"@
@@ -1281,9 +1285,9 @@
(set_attr "type" "larl")])
(define_insn "*movsi_zarch"
- [(set (match_operand:SI 0 "nonimmediate_operand"
+ [(set (match_operand:SI 0 "nonimmediate_operand"
"=d,d,d,d,d,d,d,R,T,!*f,!*f,!*f,!R,!T,?Q")
- (match_operand:SI 1 "general_operand"
+ (match_operand:SI 1 "general_operand"
"K,N0HS0,N1HS0,L,d,R,T,d,d,*f,R,T,*f,*f,?Q"))]
"TARGET_ZARCH"
"@
@@ -1423,7 +1427,7 @@
(match_operand:HI 1 "general_operand" ""))]
""
{
- /* Make it explicit that loading a register from memory
+ /* Make it explicit that loading a register from memory
always sign-extends (at least) to SImode. */
if (optimize && !no_new_pseudos
&& register_operand (operands[0], VOIDmode)
@@ -1893,7 +1897,7 @@
(define_expand "strlendi"
[(set (reg:QI 0) (match_operand:QI 2 "immediate_operand" ""))
- (parallel
+ (parallel
[(set (match_dup 4)
(unspec:DI [(const_int 0)
(match_operand:BLK 1 "memory_operand" "")
@@ -1929,7 +1933,7 @@
(define_expand "strlensi"
[(set (reg:QI 0) (match_operand:QI 2 "immediate_operand" ""))
- (parallel
+ (parallel
[(set (match_dup 4)
(unspec:SI [(const_int 0)
(match_operand:BLK 1 "memory_operand" "")
@@ -1956,7 +1960,7 @@
(reg:QI 0)
(match_operand 4 "immediate_operand" "")] UNSPEC_SRST))
(clobber (match_scratch:SI 1 "=a"))
- (clobber (reg:CC 33))]
+ (clobber (reg:CC 33))]
"!TARGET_64BIT"
"srst\t%0,%1\;jo\t.-4"
[(set_attr "op_type" "NN")
@@ -2746,14 +2750,14 @@
(define_insn_and_split "*llgt_sidi_split"
[(set (match_operand:DI 0 "register_operand" "=d")
- (and:DI (subreg:DI (match_operand:SI 1 "memory_operand" "m") 0)
+ (and:DI (subreg:DI (match_operand:SI 1 "memory_operand" "m") 0)
(const_int 2147483647)))
(clobber (reg:CC 33))]
"TARGET_64BIT"
"#"
"&& reload_completed"
[(set (match_dup 0)
- (and:DI (subreg:DI (match_dup 1) 0)
+ (and:DI (subreg:DI (match_dup 1) 0)
(const_int 2147483647)))]
"")
@@ -4282,7 +4286,7 @@
;
(define_insn "*adddi3_alc_cc"
- [(set (reg 33)
+ [(set (reg 33)
(compare
(plus:DI (plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0")
(match_operand:DI 2 "general_operand" "d,m"))
@@ -4290,7 +4294,7 @@
(const_int 0)))
(set (match_operand:DI 0 "register_operand" "=d,d")
(plus:DI (plus:DI (match_dup 1) (match_dup 2)) (match_dup 3)))]
- "s390_match_ccmode (insn, CCLmode) && TARGET_64BIT"
+ "s390_match_ccmode (insn, CCLmode) && TARGET_64BIT"
"@
alcgr\\t%0,%2
alcg\\t%0,%2"
@@ -4301,15 +4305,15 @@
(plus:DI (plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0")
(match_operand:DI 2 "general_operand" "d,m"))
(match_operand:DI 3 "s390_alc_comparison" "")))
- (clobber (reg:CC 33))]
- "TARGET_64BIT"
+ (clobber (reg:CC 33))]
+ "TARGET_64BIT"
"@
alcgr\\t%0,%2
alcg\\t%0,%2"
[(set_attr "op_type" "RRE,RXY")])
(define_insn "*subdi3_slb_cc"
- [(set (reg 33)
+ [(set (reg 33)
(compare
(minus:DI (minus:DI (match_operand:DI 1 "nonimmediate_operand" "0,0")
(match_operand:DI 2 "general_operand" "d,m"))
@@ -4317,7 +4321,7 @@
(const_int 0)))
(set (match_operand:DI 0 "register_operand" "=d,d")
(minus:DI (minus:DI (match_dup 1) (match_dup 2)) (match_dup 3)))]
- "s390_match_ccmode (insn, CCLmode) && TARGET_64BIT"
+ "s390_match_ccmode (insn, CCLmode) && TARGET_64BIT"
"@
slbgr\\t%0,%2
slbg\\t%0,%2"
@@ -4328,8 +4332,8 @@
(minus:DI (minus:DI (match_operand:DI 1 "nonimmediate_operand" "0,0")
(match_operand:DI 2 "general_operand" "d,m"))
(match_operand:DI 3 "s390_slb_comparison" "")))
- (clobber (reg:CC 33))]
- "TARGET_64BIT"
+ (clobber (reg:CC 33))]
+ "TARGET_64BIT"
"@
slbgr\\t%0,%2
slbg\\t%0,%2"
@@ -4340,7 +4344,7 @@
;
(define_insn "*addsi3_alc_cc"
- [(set (reg 33)
+ [(set (reg 33)
(compare
(plus:SI (plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0")
(match_operand:SI 2 "general_operand" "d,m"))
@@ -4348,7 +4352,7 @@
(const_int 0)))
(set (match_operand:SI 0 "register_operand" "=d,d")
(plus:SI (plus:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
- "s390_match_ccmode (insn, CCLmode) && TARGET_CPU_ZARCH"
+ "s390_match_ccmode (insn, CCLmode) && TARGET_CPU_ZARCH"
"@
alcr\\t%0,%2
alc\\t%0,%2"
@@ -4360,14 +4364,14 @@
(match_operand:SI 2 "general_operand" "d,m"))
(match_operand:SI 3 "s390_alc_comparison" "")))
(clobber (reg:CC 33))]
- "TARGET_CPU_ZARCH"
+ "TARGET_CPU_ZARCH"
"@
alcr\\t%0,%2
alc\\t%0,%2"
[(set_attr "op_type" "RRE,RXY")])
(define_insn "*subsi3_slb_cc"
- [(set (reg 33)
+ [(set (reg 33)
(compare
(minus:SI (minus:SI (match_operand:SI 1 "nonimmediate_operand" "0,0")
(match_operand:SI 2 "general_operand" "d,m"))
@@ -4375,7 +4379,7 @@
(const_int 0)))
(set (match_operand:SI 0 "register_operand" "=d,d")
(minus:SI (minus:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
- "s390_match_ccmode (insn, CCLmode) && TARGET_CPU_ZARCH"
+ "s390_match_ccmode (insn, CCLmode) && TARGET_CPU_ZARCH"
"@
slbr\\t%0,%2
slb\\t%0,%2"
@@ -4386,8 +4390,8 @@
(minus:SI (minus:SI (match_operand:SI 1 "nonimmediate_operand" "0,0")
(match_operand:SI 2 "general_operand" "d,m"))
(match_operand:SI 3 "s390_slb_comparison" "")))
- (clobber (reg:CC 33))]
- "TARGET_CPU_ZARCH"
+ (clobber (reg:CC 33))]
+ "TARGET_CPU_ZARCH"
"@
slbr\\t%0,%2
slb\\t%0,%2"
@@ -4657,7 +4661,7 @@
(ashift:TI
(zero_extend:TI
(mod:DI (match_operand:DI 1 "register_operand" "0,0")
- (sign_extend:DI
+ (sign_extend:DI
(match_operand:SI 2 "nonimmediate_operand" "d,m"))))
(const_int 64))
(zero_extend:TI
@@ -4713,12 +4717,12 @@
(define_insn "udivmodtidi3"
[(set (match_operand:TI 0 "register_operand" "=d,d")
- (ior:TI
+ (ior:TI
(ashift:TI
(zero_extend:TI
(truncate:DI
- (umod:TI (match_operand:TI 1 "register_operand" "0,0")
- (zero_extend:TI
+ (umod:TI (match_operand:TI 1 "register_operand" "0,0")
+ (zero_extend:TI
(match_operand:DI 2 "nonimmediate_operand" "d,m")))))
(const_int 64))
(zero_extend:TI
@@ -4773,12 +4777,12 @@
(define_insn "divmoddisi3"
[(set (match_operand:DI 0 "register_operand" "=d,d")
- (ior:DI
+ (ior:DI
(ashift:DI
(zero_extend:DI
(truncate:SI
- (mod:DI (match_operand:DI 1 "register_operand" "0,0")
- (sign_extend:DI
+ (mod:DI (match_operand:DI 1 "register_operand" "0,0")
+ (sign_extend:DI
(match_operand:SI 2 "nonimmediate_operand" "d,R")))))
(const_int 32))
(zero_extend:DI
@@ -4835,12 +4839,12 @@
(define_insn "udivmoddisi3"
[(set (match_operand:DI 0 "register_operand" "=d,d")
- (ior:DI
+ (ior:DI
(ashift:DI
(zero_extend:DI
(truncate:SI
- (umod:DI (match_operand:DI 1 "register_operand" "0,0")
- (zero_extend:DI
+ (umod:DI (match_operand:DI 1 "register_operand" "0,0")
+ (zero_extend:DI
(match_operand:SI 2 "nonimmediate_operand" "d,m")))))
(const_int 32))
(zero_extend:DI
@@ -5138,7 +5142,7 @@
(define_insn "anddi3"
[(set (match_operand:DI 0 "register_operand" "=d,d,d,d,d,d,d,d")
(and:DI (match_operand:DI 1 "nonimmediate_operand" "d,o,0,0,0,0,0,0")
- (match_operand:DI 2 "general_operand"
+ (match_operand:DI 2 "general_operand"
"M,M,N0HDF,N1HDF,N2HDF,N3HDF,d,m")))
(clobber (reg:CC 33))]
"TARGET_64BIT"
@@ -5203,7 +5207,7 @@
[(set_attr "op_type" "RR,RX,RXY")])
(define_expand "andsi3"
- [(parallel
+ [(parallel
[(set (match_operand:SI 0 "register_operand" "")
(and:SI (match_operand:SI 1 "nonimmediate_operand" "")
(match_operand:SI 2 "general_operand" "")))
@@ -5221,7 +5225,7 @@
#
#
nilh\t%0,%j2
- nill\t%0,%j2
+ nill\t%0,%j2
nr\t%0,%2
n\t%0,%2
ny\t%0,%2"
@@ -5445,7 +5449,7 @@
[(set_attr "op_type" "RR,RX,RXY")])
(define_expand "iorsi3"
- [(parallel
+ [(parallel
[(set (match_operand:SI 0 "register_operand" "")
(ior:SI (match_operand:SI 1 "nonimmediate_operand" "")
(match_operand:SI 2 "general_operand" "")))
@@ -6970,71 +6974,111 @@
[(set_attr "type" "none")
(set_attr "length" "0")])
-
-
;
-; call instruction pattern(s).
+; sibcall patterns
;
-(define_expand "call"
+(define_expand "sibcall"
[(call (match_operand 0 "" "")
- (match_operand 1 "" ""))
- (use (match_operand 2 "" ""))]
+ (match_operand 1 "" ""))]
""
{
- bool plt_call = false;
- rtx insn;
-
- /* Direct function calls need special treatment. */
- if (GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
- {
- rtx sym = XEXP (operands[0], 0);
+ s390_emit_call (XEXP (operands[0], 0), NULL_RTX, NULL_RTX, NULL_RTX);
+ DONE;
+})
- /* When calling a global routine in PIC mode, we must
- replace the symbol itself with the PLT stub. */
- if (flag_pic && !SYMBOL_REF_LOCAL_P (sym))
- {
- sym = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, sym), UNSPEC_PLT);
- sym = gen_rtx_CONST (Pmode, sym);
- plt_call = true;
- }
+(define_insn "*sibcall_br"
+ [(call (mem:QI (reg 1))
+ (match_operand 0 "const_int_operand" "n"))]
+ "SIBLING_CALL_P (insn)
+ && GET_MODE (XEXP (XEXP (PATTERN (insn), 0), 0)) == Pmode"
+ "br\t%%r1"
+ [(set_attr "op_type" "RR")
+ (set_attr "type" "branch")
+ (set_attr "atype" "agen")])
- /* Unless we can use the bras(l) insn, force the
- routine address into a register. */
- if (!TARGET_SMALL_EXEC && !TARGET_CPU_ZARCH)
- {
- if (flag_pic)
- sym = legitimize_pic_address (sym, 0);
- else
- sym = force_reg (Pmode, sym);
- }
+(define_insn "*sibcall_brc"
+ [(call (mem:QI (match_operand 0 "bras_sym_operand" "X"))
+ (match_operand 1 "const_int_operand" "n"))]
+ "SIBLING_CALL_P (insn) && TARGET_SMALL_EXEC"
+ "j\t%0"
+ [(set_attr "op_type" "RI")
+ (set_attr "type" "branch")])
- operands[0] = gen_rtx_MEM (QImode, sym);
- }
+(define_insn "*sibcall_brcl"
+ [(call (mem:QI (match_operand 0 "bras_sym_operand" "X"))
+ (match_operand 1 "const_int_operand" "n"))]
+ "SIBLING_CALL_P (insn) && TARGET_CPU_ZARCH"
+ "jg\t%0"
+ [(set_attr "op_type" "RIL")
+ (set_attr "type" "branch")])
- /* Emit insn. */
- insn = emit_call_insn (gen_call_exp (operands[0], operands[1],
- gen_rtx_REG (Pmode, RETURN_REGNUM)));
+;
+; sibcall_value patterns
+;
- /* 31-bit PLT stubs use the GOT register implicitly. */
- if (!TARGET_64BIT && plt_call)
- use_reg (&CALL_INSN_FUNCTION_USAGE (insn), pic_offset_table_rtx);
-
+(define_expand "sibcall_value"
+ [(set (match_operand 0 "" "")
+ (call (match_operand 1 "" "")
+ (match_operand 2 "" "")))]
+ ""
+{
+ s390_emit_call (XEXP (operands[1], 0), NULL_RTX, operands[0], NULL_RTX);
DONE;
})
-(define_expand "call_exp"
- [(parallel [(call (match_operand 0 "" "")
- (match_operand 1 "" ""))
- (clobber (match_operand 2 "" ""))])]
+(define_insn "*sibcall_value_br"
+ [(set (match_operand 0 "" "")
+ (call (mem:QI (reg 1))
+ (match_operand 1 "const_int_operand" "n")))]
+ "SIBLING_CALL_P (insn)
+ && GET_MODE (XEXP (XEXP (XEXP (PATTERN (insn), 1), 0), 0)) == Pmode"
+ "br\t%%r1"
+ [(set_attr "op_type" "RR")
+ (set_attr "type" "branch")
+ (set_attr "atype" "agen")])
+
+(define_insn "*sibcall_value_brc"
+ [(set (match_operand 0 "" "")
+ (call (mem:QI (match_operand 1 "bras_sym_operand" "X"))
+ (match_operand 2 "const_int_operand" "n")))]
+ "SIBLING_CALL_P (insn) && TARGET_SMALL_EXEC"
+ "j\t%1"
+ [(set_attr "op_type" "RI")
+ (set_attr "type" "branch")])
+
+(define_insn "*sibcall_value_brcl"
+ [(set (match_operand 0 "" "")
+ (call (mem:QI (match_operand 1 "bras_sym_operand" "X"))
+ (match_operand 2 "const_int_operand" "n")))]
+ "SIBLING_CALL_P (insn) && TARGET_CPU_ZARCH"
+ "jg\t%1"
+ [(set_attr "op_type" "RIL")
+ (set_attr "type" "branch")])
+
+
+;
+; call instruction pattern(s).
+;
+
+(define_expand "call"
+ [(call (match_operand 0 "" "")
+ (match_operand 1 "" ""))
+ (use (match_operand 2 "" ""))]
""
- "")
+{
+ s390_emit_call (XEXP (operands[0], 0), NULL_RTX, NULL_RTX,
+ gen_rtx_REG (Pmode, RETURN_REGNUM));
+ DONE;
+})
(define_insn "*bras"
[(call (mem:QI (match_operand 0 "bras_sym_operand" "X"))
(match_operand 1 "const_int_operand" "n"))
(clobber (match_operand 2 "register_operand" "=r"))]
- "TARGET_SMALL_EXEC && GET_MODE (operands[2]) == Pmode"
+ "!SIBLING_CALL_P (insn)
+ && TARGET_SMALL_EXEC
+ && GET_MODE (operands[2]) == Pmode"
"bras\t%2,%0"
[(set_attr "op_type" "RI")
(set_attr "type" "jsr")])
@@ -7043,7 +7087,9 @@
[(call (mem:QI (match_operand 0 "bras_sym_operand" "X"))
(match_operand 1 "const_int_operand" "n"))
(clobber (match_operand 2 "register_operand" "=r"))]
- "TARGET_CPU_ZARCH && GET_MODE (operands[2]) == Pmode"
+ "!SIBLING_CALL_P (insn)
+ && TARGET_CPU_ZARCH
+ && GET_MODE (operands[2]) == Pmode"
"brasl\t%2,%0"
[(set_attr "op_type" "RIL")
(set_attr "type" "jsr")])
@@ -7052,7 +7098,7 @@
[(call (mem:QI (match_operand 0 "address_operand" "U"))
(match_operand 1 "const_int_operand" "n"))
(clobber (match_operand 2 "register_operand" "=r"))]
- "GET_MODE (operands[2]) == Pmode"
+ "!SIBLING_CALL_P (insn) && GET_MODE (operands[2]) == Pmode"
{
if (get_attr_op_type (insn) == OP_TYPE_RR)
return "basr\t%2,%0";
@@ -7076,62 +7122,19 @@
(use (match_operand 3 "" ""))]
""
{
- bool plt_call = false;
- rtx insn;
-
- /* Direct function calls need special treatment. */
- if (GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
- {
- rtx sym = XEXP (operands[1], 0);
-
- /* When calling a global routine in PIC mode, we must
- replace the symbol itself with the PLT stub. */
- if (flag_pic && !SYMBOL_REF_LOCAL_P (sym))
- {
- sym = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, sym), UNSPEC_PLT);
- sym = gen_rtx_CONST (Pmode, sym);
- plt_call = true;
- }
-
- /* Unless we can use the bras(l) insn, force the
- routine address into a register. */
- if (!TARGET_SMALL_EXEC && !TARGET_CPU_ZARCH)
- {
- if (flag_pic)
- sym = legitimize_pic_address (sym, 0);
- else
- sym = force_reg (Pmode, sym);
- }
-
- operands[1] = gen_rtx_MEM (QImode, sym);
- }
-
- /* Emit insn. */
- insn = emit_call_insn (
- gen_call_value_exp (operands[0], operands[1], operands[2],
- gen_rtx_REG (Pmode, RETURN_REGNUM)));
-
- /* 31-bit PLT stubs use the GOT register implicitly. */
- if (!TARGET_64BIT && plt_call)
- use_reg (&CALL_INSN_FUNCTION_USAGE (insn), pic_offset_table_rtx);
-
+ s390_emit_call (XEXP (operands[1], 0), NULL_RTX, operands[0],
+ gen_rtx_REG (Pmode, RETURN_REGNUM));
DONE;
})
-(define_expand "call_value_exp"
- [(parallel [(set (match_operand 0 "" "")
- (call (match_operand 1 "" "")
- (match_operand 2 "" "")))
- (clobber (match_operand 3 "" ""))])]
- ""
- "")
-
(define_insn "*bras_r"
[(set (match_operand 0 "" "")
(call (mem:QI (match_operand 1 "bras_sym_operand" "X"))
(match_operand:SI 2 "const_int_operand" "n")))
(clobber (match_operand 3 "register_operand" "=r"))]
- "TARGET_SMALL_EXEC && GET_MODE (operands[3]) == Pmode"
+ "!SIBLING_CALL_P (insn)
+ && TARGET_SMALL_EXEC
+ && GET_MODE (operands[3]) == Pmode"
"bras\t%3,%1"
[(set_attr "op_type" "RI")
(set_attr "type" "jsr")])
@@ -7141,7 +7144,9 @@
(call (mem:QI (match_operand 1 "bras_sym_operand" "X"))
(match_operand 2 "const_int_operand" "n")))
(clobber (match_operand 3 "register_operand" "=r"))]
- "TARGET_CPU_ZARCH && GET_MODE (operands[3]) == Pmode"
+ "!SIBLING_CALL_P (insn)
+ && TARGET_CPU_ZARCH
+ && GET_MODE (operands[3]) == Pmode"
"brasl\t%3,%1"
[(set_attr "op_type" "RIL")
(set_attr "type" "jsr")])
@@ -7151,7 +7156,7 @@
(call (mem:QI (match_operand 1 "address_operand" "U"))
(match_operand 2 "const_int_operand" "n")))
(clobber (match_operand 3 "register_operand" "=r"))]
- "GET_MODE (operands[3]) == Pmode"
+ "!SIBLING_CALL_P (insn) && GET_MODE (operands[3]) == Pmode"
{
if (get_attr_op_type (insn) == OP_TYPE_RR)
return "basr\t%3,%1";
@@ -7229,64 +7234,15 @@
ly\t%0,%1%J2"
[(set_attr "op_type" "RX,RXY")])
-(define_expand "call_value_tls"
- [(set (match_operand 0 "" "")
- (call (const_int 0) (const_int 0)))
- (use (match_operand 1 "" ""))]
- ""
-{
- rtx insn, sym;
-
- if (!flag_pic)
- abort ();
-
- sym = s390_tls_get_offset ();
- sym = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, sym), UNSPEC_PLT);
- sym = gen_rtx_CONST (Pmode, sym);
-
- /* Unless we can use the bras(l) insn, force the
- routine address into a register. */
- if (!TARGET_SMALL_EXEC && !TARGET_CPU_ZARCH)
- {
- if (flag_pic)
- sym = legitimize_pic_address (sym, 0);
- else
- sym = force_reg (Pmode, sym);
- }
-
- sym = gen_rtx_MEM (QImode, sym);
-
- /* Emit insn. */
- insn = emit_call_insn (
- gen_call_value_tls_exp (operands[0], sym, const0_rtx,
- gen_rtx_REG (Pmode, RETURN_REGNUM),
- operands[1]));
-
- /* The calling convention of __tls_get_offset uses the
- GOT register implicitly. */
- use_reg (&CALL_INSN_FUNCTION_USAGE (insn), pic_offset_table_rtx);
- use_reg (&CALL_INSN_FUNCTION_USAGE (insn), operands[0]);
- CONST_OR_PURE_CALL_P (insn) = 1;
-
- DONE;
-})
-
-(define_expand "call_value_tls_exp"
- [(parallel [(set (match_operand 0 "" "")
- (call (match_operand 1 "" "")
- (match_operand 2 "" "")))
- (clobber (match_operand 3 "" ""))
- (use (match_operand 4 "" ""))])]
- ""
- "")
-
(define_insn "*bras_tls"
[(set (match_operand 0 "" "")
(call (mem:QI (match_operand 1 "bras_sym_operand" "X"))
(match_operand 2 "const_int_operand" "n")))
(clobber (match_operand 3 "register_operand" "=r"))
(use (match_operand 4 "" ""))]
- "TARGET_SMALL_EXEC && GET_MODE (operands[3]) == Pmode"
+ "!SIBLING_CALL_P (insn)
+ && TARGET_SMALL_EXEC
+ && GET_MODE (operands[3]) == Pmode"
"bras\t%3,%1%J4"
[(set_attr "op_type" "RI")
(set_attr "type" "jsr")])
@@ -7297,7 +7253,9 @@
(match_operand 2 "const_int_operand" "n")))
(clobber (match_operand 3 "register_operand" "=r"))
(use (match_operand 4 "" ""))]
- "TARGET_CPU_ZARCH && GET_MODE (operands[3]) == Pmode"
+ "!SIBLING_CALL_P (insn)
+ && TARGET_CPU_ZARCH
+ && GET_MODE (operands[3]) == Pmode"
"brasl\t%3,%1%J4"
[(set_attr "op_type" "RIL")
(set_attr "type" "jsr")])
@@ -7308,7 +7266,7 @@
(match_operand 2 "const_int_operand" "n")))
(clobber (match_operand 3 "register_operand" "=r"))
(use (match_operand 4 "" ""))]
- "GET_MODE (operands[3]) == Pmode"
+ "!SIBLING_CALL_P (insn) && GET_MODE (operands[3]) == Pmode"
{
if (get_attr_op_type (insn) == OP_TYPE_RR)
return "basr\t%3,%1%J4";
@@ -7473,7 +7431,7 @@
return "";
}
[(set_attr "op_type" "NN")
- (set (attr "length")
+ (set (attr "length")
(symbol_ref "GET_MODE_SIZE (GET_MODE (PATTERN (insn)))"))])
(define_insn "pool_start_31"
@@ -7568,10 +7526,32 @@
""
"s390_emit_prologue (); DONE;")
+(define_insn "prologue_tpf"
+ [(unspec_volatile [(const_int 0)] UNSPECV_TPF_PROLOGUE)
+ (clobber (reg:DI 1))]
+ "TARGET_TPF"
+ "bas\t%%r1,4064"
+ [(set_attr "type" "jsr")
+ (set_attr "op_type" "RX")])
+
(define_expand "epilogue"
[(use (const_int 1))]
""
- "s390_emit_epilogue (); DONE;")
+ "s390_emit_epilogue (false); DONE;")
+
+(define_insn "epilogue_tpf"
+ [(unspec_volatile [(const_int 0)] UNSPECV_TPF_EPILOGUE)
+ (clobber (reg:DI 1))]
+ "TARGET_TPF"
+ "bas\t%%r1,4070"
+ [(set_attr "type" "jsr")
+ (set_attr "op_type" "RX")])
+
+
+(define_expand "sibcall_epilogue"
+ [(use (const_int 0))]
+ ""
+ "s390_emit_epilogue (true); DONE;")
(define_insn "*return"
[(return)
diff --git a/gcc/config/s390/t-tpf b/gcc/config/s390/t-tpf
index c04d5622d6c..2a3421c479d 100644
--- a/gcc/config/s390/t-tpf
+++ b/gcc/config/s390/t-tpf
@@ -10,4 +10,4 @@ SHLIB_MAPFILES += $(srcdir)/config/s390/libgcc-glibc.ver
# Use unwind-dw2-fde-glibc
LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
$(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
-LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c gthr-gnat.c
+LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c
diff --git a/gcc/config/sh/elf.h b/gcc/config/sh/elf.h
index 964d88596c3..f5cfcb667b0 100644
--- a/gcc/config/sh/elf.h
+++ b/gcc/config/sh/elf.h
@@ -95,7 +95,7 @@ while (0)
#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \
do { \
text_section (); \
- fprintf ((FILE), "\t.stabs \"\",%d,0,0,Letext\nLetext:\n", N_SO); \
+ asm_fprintf ((FILE), "\t.stabs \"\",%d,0,0,%LLetext\n%LLetext:\n", N_SO); \
} while (0)
#undef STARTFILE_SPEC
diff --git a/gcc/config/sh/sh-protos.h b/gcc/config/sh/sh-protos.h
index b00ebde2cb0..7abdac48922 100644
--- a/gcc/config/sh/sh-protos.h
+++ b/gcc/config/sh/sh-protos.h
@@ -109,7 +109,7 @@ extern int sh_handle_pragma (int (*)(void), void (*)(int), const char *);
extern struct rtx_def *get_fpscr_rtx (void);
extern int sh_media_register_for_return (void);
extern void sh_expand_prologue (void);
-extern void sh_expand_epilogue (void);
+extern void sh_expand_epilogue (bool);
extern int sh_need_epilogue (void);
extern void sh_set_return_address (rtx, rtx);
extern int initial_elimination_offset (int, int);
@@ -141,5 +141,6 @@ extern rtx sh_function_arg (CUMULATIVE_ARGS *, enum machine_mode, tree, int);
extern void sh_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode, tree, int);
extern int sh_pass_in_reg_p (CUMULATIVE_ARGS *, enum machine_mode, tree);
extern const char *sh_pch_valid_p (const void *data_p, size_t sz);
+extern bool sh_promote_prototypes (tree);
#endif /* ! GCC_SH_PROTOS_H */
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index e8bc4b36e8b..30526c2e694 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -272,7 +272,6 @@ struct save_schedule_s;
static struct save_entry_s *sh5_schedule_saves (HARD_REG_SET *,
struct save_schedule_s *, int);
-static bool sh_promote_prototypes (tree);
static rtx sh_struct_value_rtx (tree, int);
static bool sh_return_in_memory (tree, tree);
static rtx sh_builtin_saveregs (void);
@@ -339,7 +338,7 @@ static tree sh_build_builtin_va_list (void);
TARGET_SCHED_INIT_GLOBAL: Added a new target hook in the generic
scheduler; it is called inside the sched_init function just after
find_insn_reg_weights function call. It is used to calculate the SImode
- and SFmode weights of insns of basic blocks; much similiar to what
+ and SFmode weights of insns of basic blocks; much similar to what
find_insn_reg_weights does.
TARGET_SCHED_FINISH_GLOBAL: Corresponding cleanup hook.
@@ -4631,8 +4630,9 @@ static int extra_push;
/* Adjust the stack by SIZE bytes. REG holds the rtl of the register to be
adjusted. If epilogue_p is zero, this is for a prologue; otherwise, it's
- for an epilogue. If LIVE_REGS_MASK is nonzero, it points to a HARD_REG_SET
- of all the registers that are about to be restored, and hence dead. */
+ for an epilogue and a negative value means that it's for a sibcall
+ epilogue. If LIVE_REGS_MASK is nonzero, it points to a HARD_REG_SET of
+ all the registers that are about to be restored, and hence dead. */
static void
output_stack_adjust (int size, rtx reg, int epilogue_p,
@@ -4667,17 +4667,27 @@ output_stack_adjust (int size, rtx reg, int epilogue_p,
/* If TEMP is invalid, we could temporarily save a general
register to MACL. However, there is currently no need
to handle this case, so just abort when we see it. */
- if (current_function_interrupt
+ if (epilogue_p < 0
+ || current_function_interrupt
|| ! call_used_regs[temp] || fixed_regs[temp])
temp = -1;
- if (temp < 0 && ! current_function_interrupt)
+ if (temp < 0 && ! current_function_interrupt
+ && (TARGET_SHMEDIA || epilogue_p >= 0))
{
HARD_REG_SET temps;
COPY_HARD_REG_SET (temps, call_used_reg_set);
AND_COMPL_HARD_REG_SET (temps, call_fixed_reg_set);
- if (epilogue_p)
+ if (epilogue_p > 0)
{
- for (i = 0; i < HARD_REGNO_NREGS (FIRST_RET_REG, DImode); i++)
+ int nreg = 0;
+ if (current_function_return_rtx)
+ {
+ enum machine_mode mode;
+ mode = GET_MODE (current_function_return_rtx);
+ if (BASE_RETURN_VALUE_REG (mode) == FIRST_RET_REG)
+ nreg = HARD_REGNO_NREGS (FIRST_RET_REG, mode);
+ }
+ for (i = 0; i < nreg; i++)
CLEAR_HARD_REG_BIT (temps, FIRST_RET_REG + i);
if (current_function_calls_eh_return)
{
@@ -4686,7 +4696,10 @@ output_stack_adjust (int size, rtx reg, int epilogue_p,
CLEAR_HARD_REG_BIT (temps, EH_RETURN_DATA_REGNO (i));
}
}
- else
+ if (TARGET_SHMEDIA && epilogue_p < 0)
+ for (i = FIRST_TARGET_REG; i <= LAST_TARGET_REG; i++)
+ CLEAR_HARD_REG_BIT (temps, i);
+ if (epilogue_p <= 0)
{
for (i = FIRST_PARM_REG;
i < FIRST_PARM_REG + NPARM_REGS (SImode); i++)
@@ -4699,7 +4712,55 @@ output_stack_adjust (int size, rtx reg, int epilogue_p,
if (temp < 0 && live_regs_mask)
temp = scavenge_reg (live_regs_mask);
if (temp < 0)
- abort ();
+ {
+ /* If we reached here, the most likely case is the (sibcall)
+ epilogue for non SHmedia. Put a special push/pop sequence
+ for such case as the last resort. This looks lengthy but
+ would not be problem because it seems to be very rare. */
+ if (! TARGET_SHMEDIA && epilogue_p)
+ {
+ rtx adj_reg, tmp_reg, mem;
+
+ /* ??? There is still the slight possibility that r4 or r5
+ have been reserved as fixed registers or assigned as
+ global registers, and they change during an interrupt.
+ There are possible ways to handle this:
+ - If we are adjusting the frame pointer (r14), we can do
+ with a single temp register and an ordinary push / pop
+ on the stack.
+ - Grab any call-used or call-saved registers (i.e. not
+ fixed or globals) for the temps we need. We might
+ also grab r14 if we are adjusting the stack pointer.
+ If we can't find enough available registers, issue
+ a diagnostic and abort - the user must have reserved
+ way too many registers.
+ But since all this is rather unlikely to happen and
+ would require extra testing, we just abort if r4 / r5
+ are not available. */
+ if (fixed_regs[4] || fixed_regs[5]
+ || global_regs[4] || global_regs[5])
+ abort ();
+
+ adj_reg = gen_rtx_REG (GET_MODE (reg), 4);
+ tmp_reg = gen_rtx_REG (GET_MODE (reg), 5);
+ emit_move_insn (gen_rtx_MEM (Pmode, reg), adj_reg);
+ emit_insn (GEN_MOV (adj_reg, GEN_INT (size)));
+ emit_insn (GEN_ADD3 (adj_reg, adj_reg, reg));
+ mem = gen_rtx_MEM (Pmode, gen_rtx_PRE_DEC (Pmode, adj_reg));
+ emit_move_insn (mem, tmp_reg);
+ emit_move_insn (tmp_reg, gen_rtx_MEM (Pmode, reg));
+ mem = gen_rtx_MEM (Pmode, gen_rtx_PRE_DEC (Pmode, adj_reg));
+ emit_move_insn (mem, tmp_reg);
+ emit_move_insn (reg, adj_reg);
+ mem = gen_rtx_MEM (Pmode, gen_rtx_POST_INC (Pmode, reg));
+ emit_move_insn (adj_reg, mem);
+ mem = gen_rtx_MEM (Pmode, gen_rtx_POST_INC (Pmode, reg));
+ emit_move_insn (tmp_reg, mem);
+ return;
+ }
+ else
+ abort ();
+ }
const_reg = gen_rtx_REG (GET_MODE (reg), temp);
/* If SIZE is negative, subtract the positive value.
@@ -5539,7 +5600,7 @@ sh_expand_prologue (void)
}
void
-sh_expand_epilogue (void)
+sh_expand_epilogue (bool sibcall_p)
{
HARD_REG_SET live_regs_mask;
int d, i;
@@ -5548,6 +5609,7 @@ sh_expand_epilogue (void)
int save_flags = target_flags;
int frame_size, save_size;
int fpscr_deferred = 0;
+ int e = sibcall_p ? -1 : 1;
d = calc_live_regs (&live_regs_mask);
@@ -5582,7 +5644,7 @@ sh_expand_epilogue (void)
if (frame_pointer_needed)
{
- output_stack_adjust (frame_size, frame_pointer_rtx, 1, &live_regs_mask);
+ output_stack_adjust (frame_size, frame_pointer_rtx, e, &live_regs_mask);
/* We must avoid moving the stack pointer adjustment past code
which reads from the local frame, else an interrupt could
@@ -5598,7 +5660,7 @@ sh_expand_epilogue (void)
occur after the SP adjustment and clobber data in the local
frame. */
emit_insn (gen_blockage ());
- output_stack_adjust (frame_size, stack_pointer_rtx, 1, &live_regs_mask);
+ output_stack_adjust (frame_size, stack_pointer_rtx, e, &live_regs_mask);
}
if (SHMEDIA_REGS_STACK_ADJUST ())
@@ -5771,7 +5833,7 @@ sh_expand_epilogue (void)
output_stack_adjust (extra_push + current_function_pretend_args_size
+ save_size + d_rounding
+ current_function_args_info.stack_regs * 8,
- stack_pointer_rtx, 1, NULL);
+ stack_pointer_rtx, e, NULL);
if (current_function_calls_eh_return)
emit_insn (GEN_ADD3 (stack_pointer_rtx, stack_pointer_rtx,
@@ -5799,7 +5861,7 @@ sh_need_epilogue (void)
rtx epilogue;
start_sequence ();
- sh_expand_epilogue ();
+ sh_expand_epilogue (0);
epilogue = get_insns ();
end_sequence ();
sh_need_epilogue_known = (epilogue == NULL ? -1 : 1);
@@ -6352,7 +6414,7 @@ sh_va_arg (tree valist, tree type)
return result;
}
-static bool
+bool
sh_promote_prototypes (tree type)
{
if (TARGET_HITACHI)
@@ -9483,7 +9545,7 @@ sh_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
if (optimize > 0 && flag_schedule_insns_after_reload)
{
/* Release all memory allocated by flow. */
- free_basic_block_vars (0);
+ free_basic_block_vars ();
/* Release all memory held by regsets now. */
regset_release_memory ();
diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h
index 6bdfefe7932..32cbb2c2438 100644
--- a/gcc/config/sh/sh.h
+++ b/gcc/config/sh/sh.h
@@ -1644,6 +1644,7 @@ extern enum reg_class reg_class_from_letter[];
|| TREE_CODE (VALTYPE) == CHAR_TYPE \
|| TREE_CODE (VALTYPE) == REAL_TYPE \
|| TREE_CODE (VALTYPE) == OFFSET_TYPE)) \
+ && sh_promote_prototypes (VALTYPE) \
? (TARGET_SHMEDIA ? DImode : SImode) : TYPE_MODE (VALTYPE)), \
BASE_RETURN_VALUE_REG (TYPE_MODE (VALTYPE)))
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index a31e8b125c1..d3b4c9466ed 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -6467,7 +6467,7 @@
""
"
{
- sh_expand_epilogue ();
+ sh_expand_epilogue (1);
if (TARGET_SHCOMPACT)
{
rtx insn, set;
@@ -7348,7 +7348,7 @@ mov.l\\t1f,r0\\n\\
""
"
{
- sh_expand_epilogue ();
+ sh_expand_epilogue (0);
emit_jump_insn (gen_return ());
DONE;
}")
diff --git a/gcc/config/sparc/freebsd.h b/gcc/config/sparc/freebsd.h
index 7cc596d02c9..d8dfbf0ca47 100644
--- a/gcc/config/sparc/freebsd.h
+++ b/gcc/config/sparc/freebsd.h
@@ -19,6 +19,7 @@ along with GCC; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }
diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h
index 09d14ae537a..991975a26ad 100644
--- a/gcc/config/sparc/linux64.h
+++ b/gcc/config/sparc/linux64.h
@@ -39,7 +39,9 @@ Boston, MA 02111-1307, USA. */
#undef MD_EXEC_PREFIX
#undef MD_STARTFILE_PREFIX
-#if TARGET_CPU_DEFAULT == TARGET_CPU_v9 || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc
+#if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
+ || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
+ || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc3
/* A 64 bit v9 compiler with stack-bias,
in a Medium/Low code model environment. */
diff --git a/gcc/config/sparc/sol2-bi.h b/gcc/config/sparc/sol2-bi.h
index eab3a1abc5e..6371acc9d7e 100644
--- a/gcc/config/sparc/sol2-bi.h
+++ b/gcc/config/sparc/sol2-bi.h
@@ -215,10 +215,3 @@
#else
#define MULTILIB_DEFAULTS { "m64" }
#endif
-
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
-
-#if defined(HAVE_AS_GDWARF2_DEBUG_FLAG) && defined(HAVE_AS_GSTABS_DEBUG_FLAG)
-# define ASM_DEBUG_SPEC "%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}"
-#endif
diff --git a/gcc/config/sparc/sparc-protos.h b/gcc/config/sparc/sparc-protos.h
index 0908aaa5ea5..4b1f9f0d3be 100644
--- a/gcc/config/sparc/sparc-protos.h
+++ b/gcc/config/sparc/sparc-protos.h
@@ -25,6 +25,7 @@ Boston, MA 02111-1307, USA. */
#define __SPARC_PROTOS_H__
extern bool sparc_emitting_epilogue;
+extern bool sparc_skip_caller_unimp;
#ifdef TREE_CODE
extern struct rtx_def *function_value (tree, enum machine_mode, int);
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 82dd7e8ba65..278ca9a26b0 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -48,17 +48,6 @@ Boston, MA 02111-1307, USA. */
#include "target-def.h"
#include "cfglayout.h"
-/* 1 if the caller has placed an "unimp" insn immediately after the call.
- This is used in v8 code when calling a function that returns a structure.
- v9 doesn't have this. Be careful to have this test be the same as that
- used on the call. */
-
-#define SKIP_CALLERS_UNIMP_P \
-(!TARGET_ARCH64 && current_function_returns_struct \
- && ! integer_zerop (DECL_SIZE (DECL_RESULT (current_function_decl))) \
- && (TREE_CODE (DECL_SIZE (DECL_RESULT (current_function_decl))) \
- == INTEGER_CST))
-
/* Global variables for machine-dependent things. */
/* Size of frame. Need to know this to emit return insns from leaf procedures.
@@ -81,6 +70,7 @@ rtx sparc_compare_op0, sparc_compare_op1;
/* Coordinate with the md file wrt special insns created by
sparc_function_epilogue. */
bool sparc_emitting_epilogue;
+bool sparc_skip_caller_unimp;
/* Vector to say how input registers are mapped to output registers.
HARD_FRAME_POINTER_REGNUM cannot be remapped by this function to
@@ -4494,6 +4484,17 @@ sparc_function_epilogue (FILE *file,
{
const char *ret;
+ /* True if the caller has placed an "unimp" insn immediately after the call.
+ This insn is used in the 32-bit ABI when calling a function that returns
+ a non zero-sized structure. The 64-bit ABI doesn't have it. Be careful
+ to have this test be the same as that used on the call. */
+ sparc_skip_caller_unimp =
+ ! TARGET_ARCH64
+ && current_function_returns_struct
+ && (TREE_CODE (DECL_SIZE (DECL_RESULT (current_function_decl)))
+ == INTEGER_CST)
+ && ! integer_zerop (DECL_SIZE (DECL_RESULT (current_function_decl)));
+
if (current_function_epilogue_delay_list == 0)
{
/* If code does not drop into the epilogue, we need
@@ -4528,9 +4529,9 @@ sparc_function_epilogue (FILE *file,
/* Work out how to skip the caller's unimp instruction if required. */
if (leaf_function)
- ret = (SKIP_CALLERS_UNIMP_P ? "jmp\t%o7+12" : "retl");
+ ret = (sparc_skip_caller_unimp ? "jmp\t%o7+12" : "retl");
else
- ret = (SKIP_CALLERS_UNIMP_P ? "jmp\t%i7+12" : "ret");
+ ret = (sparc_skip_caller_unimp ? "jmp\t%i7+12" : "ret");
if (! leaf_function)
{
@@ -4538,7 +4539,7 @@ sparc_function_epilogue (FILE *file,
{
if (current_function_epilogue_delay_list)
abort ();
- if (SKIP_CALLERS_UNIMP_P)
+ if (sparc_skip_caller_unimp)
abort ();
fputs ("\trestore\n\tretl\n\tadd\t%sp, %g1, %sp\n", file);
@@ -4551,7 +4552,7 @@ sparc_function_epilogue (FILE *file,
if (TARGET_V9 && ! epilogue_renumber (&delay, 1))
{
epilogue_renumber (&delay, 0);
- fputs (SKIP_CALLERS_UNIMP_P
+ fputs (sparc_skip_caller_unimp
? "\treturn\t%i7+12\n"
: "\treturn\t%i7+8\n", file);
final_scan_insn (XEXP (current_function_epilogue_delay_list, 0),
@@ -4584,7 +4585,7 @@ sparc_function_epilogue (FILE *file,
sparc_emitting_epilogue = false;
}
}
- else if (TARGET_V9 && ! SKIP_CALLERS_UNIMP_P)
+ else if (TARGET_V9 && ! sparc_skip_caller_unimp)
fputs ("\treturn\t%i7+8\n\tnop\n", file);
else
fprintf (file, "\t%s\n\trestore\n", ret);
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md
index 2c388f99c8a..130d58c84f8 100644
--- a/gcc/config/sparc/sparc.md
+++ b/gcc/config/sparc/sparc.md
@@ -7321,9 +7321,12 @@
{
rtx fn_rtx;
- if (GET_MODE (operands[0]) != FUNCTION_MODE)
+ if (GET_MODE (operands[0]) != FUNCTION_MODE)
abort ();
+ if (GET_CODE (operands[3]) != CONST_INT)
+ abort();
+
if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF)
{
/* This is really a PIC sequence. We want to represent
@@ -7333,6 +7336,7 @@
call-clobbered registers? We lose this if it is a JUMP_INSN.
Why cannot we have delay slots filled if it were a CALL? */
+ /* We accept negative sizes for untyped calls. */
if (! TARGET_ARCH64 && INTVAL (operands[3]) != 0)
emit_jump_insn
(gen_rtx_PARALLEL
@@ -7353,6 +7357,7 @@
fn_rtx = operands[0];
+ /* We accept negative sizes for untyped calls. */
if (! TARGET_ARCH64 && INTVAL (operands[3]) != 0)
emit_call_insn
(gen_rtx_PARALLEL
@@ -7419,7 +7424,7 @@
(match_operand 2 "immediate_operand" "")
(clobber (reg:SI 15))]
;;- Do not use operand 1 for most machines.
- "! TARGET_ARCH64 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0"
+ "! TARGET_ARCH64 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 0"
"call\t%a0, %1\n\tnop\n\tunimp\t%2"
[(set_attr "type" "call_no_delay_slot")
(set_attr "length" "3")])
@@ -7432,7 +7437,7 @@
(match_operand 2 "immediate_operand" "")
(clobber (reg:SI 15))]
;;- Do not use operand 1 for most machines.
- "! TARGET_ARCH64 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0"
+ "! TARGET_ARCH64 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 0"
"call\t%a0, %1\n\tnop\n\tunimp\t%2"
[(set_attr "type" "call_no_delay_slot")
(set_attr "length" "3")])
@@ -7450,7 +7455,8 @@
[(set_attr "type" "call_no_delay_slot")
(set_attr "length" "3")])
-;; This is a call that wants a structure value.
+;; This is a call that may want a structure value. This is used for
+;; untyped_calls.
(define_insn "*call_symbolic_untyped_struct_value_sp32"
[(call (mem:SI (match_operand:SI 0 "symbolic_operand" "s"))
(match_operand 1 "" ""))
@@ -8083,7 +8089,7 @@
(return)]
"sparc_emitting_epilogue"
{
- if (! TARGET_ARCH64 && current_function_returns_struct)
+ if (sparc_skip_caller_unimp)
return "jmp\t%%i7+12\n\trestore %%g0, %1, %Y0";
else if (TARGET_V9 && (GET_CODE (operands[1]) == CONST_INT
|| IN_OR_GLOBAL_P (operands[1])))
@@ -8100,7 +8106,7 @@
(return)]
"sparc_emitting_epilogue"
{
- if (! TARGET_ARCH64 && current_function_returns_struct)
+ if (sparc_skip_caller_unimp)
return "jmp\t%%i7+12\n\trestore %%g0, %1, %Y0";
else if (TARGET_V9 && (GET_CODE (operands[1]) == CONST_INT
|| IN_OR_GLOBAL_P (operands[1])))
@@ -8117,7 +8123,7 @@
(return)]
"sparc_emitting_epilogue"
{
- if (! TARGET_ARCH64 && current_function_returns_struct)
+ if (sparc_skip_caller_unimp)
return "jmp\t%%i7+12\n\trestore %%g0, %1, %Y0";
else if (TARGET_V9 && (GET_CODE (operands[1]) == CONST_INT
|| IN_OR_GLOBAL_P (operands[1])))
@@ -8134,7 +8140,7 @@
(return)]
"sparc_emitting_epilogue"
{
- if (! TARGET_ARCH64 && current_function_returns_struct)
+ if (sparc_skip_caller_unimp)
return "jmp\t%%i7+12\n\trestore %%g0, %1, %Y0";
else if (TARGET_V9 && IN_OR_GLOBAL_P (operands[1]))
return "return\t%%i7+8\n\tmov\t%Y1, %Y0";
@@ -8165,7 +8171,7 @@
(return)]
"sparc_emitting_epilogue"
{
- if (! TARGET_ARCH64 && current_function_returns_struct)
+ if (sparc_skip_caller_unimp)
return "jmp\t%%i7+12\n\trestore %r1, %2, %Y0";
/* If operands are global or in registers, can use return */
else if (TARGET_V9 && IN_OR_GLOBAL_P (operands[1])
@@ -8185,7 +8191,7 @@
(return)]
"sparc_emitting_epilogue && ! TARGET_CM_MEDMID"
{
- if (! TARGET_ARCH64 && current_function_returns_struct)
+ if (sparc_skip_caller_unimp)
return "jmp\t%%i7+12\n\trestore %r1, %%lo(%a2), %Y0";
/* If operands are global or in registers, can use return */
else if (TARGET_V9 && IN_OR_GLOBAL_P (operands[1]))
diff --git a/gcc/config/t-linux b/gcc/config/t-linux
index f25ab6430e9..f3e792bcc01 100644
--- a/gcc/config/t-linux
+++ b/gcc/config/t-linux
@@ -10,4 +10,4 @@ SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
# Use unwind-dw2-fde-glibc
LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
$(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
-LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c gthr-gnat.c
+LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c
diff --git a/gcc/configure b/gcc/configure
index c65cc290c2d..92d222c4276 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -1706,8 +1706,9 @@ if test "${with_ld+set}" = set; then
fi;
if test x"${DEFAULT_LINKER+set}" = x"set"; then
if test ! -x "$DEFAULT_LINKER"; then
- { echo "$as_me:$LINENO: WARNING: cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" >&5
-echo "$as_me: WARNING: cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" >&2;}
+ { { echo "$as_me:$LINENO: error: cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" >&5
+echo "$as_me: error: cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" >&2;}
+ { (exit 1); exit 1; }; }
elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
gnu_ld_flag=yes
fi
@@ -1755,8 +1756,9 @@ if test "${with_as+set}" = set; then
fi;
if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
if test ! -x "$DEFAULT_ASSEMBLER"; then
- { echo "$as_me:$LINENO: WARNING: cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER" >&5
-echo "$as_me: WARNING: cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER" >&2;}
+ { { echo "$as_me:$LINENO: error: cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER" >&5
+echo "$as_me: error: cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER" >&2;}
+ { (exit 1); exit 1; }; }
elif $DEFAULT_ASSEMBLER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
gas_flag=yes
fi
@@ -5305,7 +5307,7 @@ if test "${gcc_cv_prog_makeinfo_modern+set}" = set; then
else
ac_prog_version=`$MAKEINFO --version 2>&1 |
sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
- echo "configure:5308: version of makeinfo is $ac_prog_version" >&5
+ echo "configure:5310: version of makeinfo is $ac_prog_version" >&5
case $ac_prog_version in
'') gcc_cv_prog_makeinfo_modern=no;;
4.[2-9]*)
@@ -5348,7 +5350,7 @@ echo "${ECHO_T}no" >&6
fi
# How about lex?
-if test -f $srcdir/../flex/skel.c; then
+if test x${build} = x${host} && test -f $srcdir/../flex/skel.c; then
FLEX='$(objdir)/../flex/flex'
else
# Extract the first word of "flex", so it can be a program name with args.
@@ -5391,7 +5393,7 @@ fi
# Bison?
# The -L switch is so bison can find its skeleton file.
-if test -f $srcdir/../bison/bison.simple; then
+if test x${build} = x${host} && test -f $srcdir/../bison/bison.simple; then
BISON='$(objdir)/../bison/bison -L $(srcdir)/../bison/'
else
# Extract the first word of "bison", so it can be a program name with args.
@@ -11487,6 +11489,55 @@ fi
;;
i[34567]86-*-* | x86_64-*-*)
+ case $target_os in
+ cygwin* | pe | mingw32*)
+ # Used for DWARF 2 in PE
+ echo "$as_me:$LINENO: checking assembler for .secrel32 relocs" >&5
+echo $ECHO_N "checking assembler for .secrel32 relocs... $ECHO_C" >&6
+if test "${gcc_cv_as_ix86_pe_secrel32+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ gcc_cv_as_ix86_pe_secrel32=no
+ if test $in_tree_gas = yes; then
+ if test $gcc_cv_gas_vers -ge `expr \( \( 2 \* 1000 \) + 15 \) \* 1000 + 91`
+ then gcc_cv_as_ix86_pe_secrel32=yes
+fi
+ elif test x$gcc_cv_as != x; then
+ echo '.text
+foo: nop
+.data
+ .secrel32 foo' > 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
+ if test x$gcc_cv_ld != x \
+ && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1; then
+ gcc_cv_as_ix86_pe_secrel32=yes
+ fi
+ rm -f conftest
+ 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_ix86_pe_secrel32" >&5
+echo "${ECHO_T}$gcc_cv_as_ix86_pe_secrel32" >&6
+if test $gcc_cv_as_ix86_pe_secrel32 = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GAS_PE_SECREL32_RELOC 1
+_ACEOF
+
+fi
+ ;;
+ esac
+
echo "$as_me:$LINENO: checking assembler for filds and fists mnemonics" >&5
echo $ECHO_N "checking assembler for filds and fists mnemonics... $ECHO_C" >&6
if test "${gcc_cv_as_ix86_filds_fists+set}" = set; then
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 9fd6f14beeb..33a9f0bc0a0 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -192,7 +192,7 @@ AC_ARG_WITH(ld,
DEFAULT_LINKER="$with_ld")
if test x"${DEFAULT_LINKER+set}" = x"set"; then
if test ! -x "$DEFAULT_LINKER"; then
- AC_MSG_WARN([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER])
+ AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER])
elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
gnu_ld_flag=yes
fi
@@ -226,7 +226,7 @@ AC_ARG_WITH(as,
DEFAULT_ASSEMBLER="$with_as")
if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
if test ! -x "$DEFAULT_ASSEMBLER"; then
- AC_MSG_WARN([cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER])
+ AC_MSG_ERROR([cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER])
elif $DEFAULT_ASSEMBLER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
gas_flag=yes
fi
@@ -768,7 +768,7 @@ fi
# How about lex?
dnl Don't use AC_PROG_LEX; we insist on flex.
dnl LEXLIB is not useful in gcc.
-if test -f $srcdir/../flex/skel.c; then
+if test x${build} = x${host} && test -f $srcdir/../flex/skel.c; then
FLEX='$(objdir)/../flex/flex'
else
AC_CHECK_PROG(FLEX, flex, flex, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing flex)
@@ -776,7 +776,7 @@ fi
# Bison?
# The -L switch is so bison can find its skeleton file.
-if test -f $srcdir/../bison/bison.simple; then
+if test x${build} = x${host} && test -f $srcdir/../bison/bison.simple; then
BISON='$(objdir)/../bison/bison -L $(srcdir)/../bison/'
else
AC_CHECK_PROG(BISON, bison, bison, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing bison)
@@ -2547,6 +2547,26 @@ foo:
changequote(,)dnl
i[34567]86-*-* | x86_64-*-*)
changequote([,])dnl
+ case $target_os in
+ cygwin* | pe | mingw32*)
+ # Used for DWARF 2 in PE
+ gcc_GAS_CHECK_FEATURE([.secrel32 relocs],
+ gcc_cv_as_ix86_pe_secrel32,
+ [2,15,91],,
+[.text
+foo: nop
+.data
+ .secrel32 foo],
+ [if test x$gcc_cv_ld != x \
+ && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1; then
+ gcc_cv_as_ix86_pe_secrel32=yes
+ fi
+ rm -f conftest],
+ [AC_DEFINE(HAVE_GAS_PE_SECREL32_RELOC, 1,
+ [Define if your assembler and linker support 32-bit section relative relocs via '.secrel32 label'.])])
+ ;;
+ esac
+
gcc_GAS_CHECK_FEATURE([filds and fists mnemonics],
gcc_cv_as_ix86_filds_fists,
[2,9,0],, [filds mem; fists mem],,
diff --git a/gcc/convert.c b/gcc/convert.c
index dcab84a9aa9..5f5d50e0f3b 100644
--- a/gcc/convert.c
+++ b/gcc/convert.c
@@ -332,6 +332,53 @@ convert_to_integer (tree type, tree expr)
return error_mark_node;
}
+ /* Convert e.g. (long)round(d) -> lround(d). */
+ /* If we're converting to char, we may encounter differing behavior
+ between converting from double->char vs double->long->char.
+ We're in "undefined" territory but we prefer to be conservative,
+ so only proceed in "unsafe" math mode. */
+ if (optimize
+ && (flag_unsafe_math_optimizations
+ || (long_integer_type_node
+ && outprec >= TYPE_PRECISION (long_integer_type_node))))
+ {
+ tree s_expr = strip_float_extensions (expr);
+ tree s_intype = TREE_TYPE (s_expr);
+ const enum built_in_function fcode = builtin_mathfn_code (s_expr);
+ tree fn = 0;
+
+ switch (fcode)
+ {
+ case BUILT_IN_ROUND: case BUILT_IN_ROUNDF: case BUILT_IN_ROUNDL:
+ if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (long_long_integer_type_node))
+ fn = mathfn_built_in (s_intype, BUILT_IN_LLROUND);
+ else
+ fn = mathfn_built_in (s_intype, BUILT_IN_LROUND);
+ break;
+
+ case BUILT_IN_RINT: case BUILT_IN_RINTF: case BUILT_IN_RINTL:
+ /* Only convert rint* if we can ignore math exceptions. */
+ if (flag_trapping_math)
+ break;
+ /* ... Fall through ... */
+ case BUILT_IN_NEARBYINT: case BUILT_IN_NEARBYINTF: case BUILT_IN_NEARBYINTL:
+ if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (long_long_integer_type_node))
+ fn = mathfn_built_in (s_intype, BUILT_IN_LLRINT);
+ else
+ fn = mathfn_built_in (s_intype, BUILT_IN_LRINT);
+ break;
+ default:
+ break;
+ }
+
+ if (fn)
+ {
+ tree arglist = TREE_OPERAND (s_expr, 1);
+ tree newexpr = build_function_call_expr (fn, arglist);
+ return convert_to_integer (type, newexpr);
+ }
+ }
+
switch (TREE_CODE (intype))
{
case POINTER_TYPE:
diff --git a/gcc/coverage.c b/gcc/coverage.c
index 9f1c3fbb5fa..8e952831acb 100644
--- a/gcc/coverage.c
+++ b/gcc/coverage.c
@@ -176,8 +176,8 @@ read_counts_file (void)
GCOV_UNSIGNED2STRING (v, tag);
GCOV_UNSIGNED2STRING (e, GCOV_VERSION);
- warning ("`%s' is version `%.4s', expected version `%.4s'",
- da_file_name, v, e);
+ warning ("`%s' is version `%.*s', expected version `%.*s'",
+ da_file_name, 4, v, 4, e);
gcov_close ();
return;
}
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index dcd268dce29..27fc85f79ec 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,18 @@
+2004-05-03 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/14389
+ * decl2.c (check_classfn): For member templates, compare also the
+ template parameters to match the declaration.
+ * cp-tree.h: Adjust declaration of check_classfn.
+ * decl.c (start_decl, grokfndecl): Adjust callers of check_classfn.
+ * friend.c (do_friend): Likewise.
+ * pt.c (tsubst_friend_function): Likewise.
+
+2004-05-01 Zack Weinberg <zack@codesourcery.com>
+
+ * decl.c (reshape_init): Do not apply TYPE_DOMAIN to a VECTOR_TYPE.
+ Instead, dig into the representation type to find the array bound.
+
2004-04-30 Jason Merrill <jason@redhat.com>
Refer to base members using COMPONENT_REFs where possible.
@@ -8,6 +23,11 @@
* cp-tree.h (IS_FAKE_BASE_TYPE): New macro.
* cp-lang.c (cxx_get_alias_set): Use it.
+2004-04-30 Kazu Hirata <kazu@cs.umass.edu>
+
+ * class.c, cp-tree.h, decl.c, decl2.c, pt.c, rtti.c: Fix
+ comment typos.
+
2004-04-23 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/15064
@@ -18,7 +38,7 @@
* init.c (build_aggr_init): Fix accidental use of C99 construct in
previous change.
-
+
* class.c (initialize_array): Don't set TREE_HAS_CONSTRUCTOR on
braced initializer.
* cp-tree.h (BRACE_ENCLOSED_INITIALIZER_P): New macro.
@@ -37,7 +57,7 @@
(class_initializer): Likewise.
(get_pseudo_ti_init): Likewise.
* typeck2.c (digest_init): Use BRACE_ENCLOSED_INITIALIZER_P.
-
+
2004-04-22 Alan Modra <amodra@bigpond.net.au>
* name-lookup.c (anonymous_namespace_name): Make static.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 3f46720bf88..c4892e949e4 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -660,8 +660,7 @@ standard_conversion (tree to, tree from, tree expr)
else if (tcode == POINTER_TYPE && fcode == POINTER_TYPE
&& TREE_CODE (TREE_TYPE (to)) == VECTOR_TYPE
&& TREE_CODE (TREE_TYPE (from)) == VECTOR_TYPE
- && ((*targetm.vector_opaque_p) (TREE_TYPE (to))
- || (*targetm.vector_opaque_p) (TREE_TYPE (from))))
+ && vector_types_convertible_p (TREE_TYPE (to), TREE_TYPE (from)))
conv = build_conv (ck_std, to, conv);
else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
|| (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
@@ -820,8 +819,7 @@ standard_conversion (tree to, tree from, tree expr)
conv->rank = cr_promotion;
}
else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
- && ((*targetm.vector_opaque_p) (from)
- || (*targetm.vector_opaque_p) (to)))
+ && vector_types_convertible_p (from, to))
return build_conv (ck_std, to, conv);
else if (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
&& is_properly_derived_from (from, to))
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 942fd542e19..6d2fef50205 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -4252,7 +4252,7 @@ create_vtable_ptr (tree t, tree* virtuals_p)
{
/* We build this decl with vtbl_ptr_type_node, which is a
`vtable_entry_type*'. It might seem more precise to use
- `vtable_entry_type (*)[N]' where N is the number of firtual
+ `vtable_entry_type (*)[N]' where N is the number of virtual
functions. However, that would require the vtable pointer in
base classes to have a different type than the vtable pointer
in derived classes. We could make that happen, but that
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 11ebf5b8220..7efe55d8061 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -1401,7 +1401,7 @@ struct lang_type GTY(())
way or the other. */
#define CLASSTYPE_INTERFACE_KNOWN(NODE) \
(LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown == 0)
-/* The opposite of CLASSTYPE_INTERFANCE_KNOWN. */
+/* The opposite of CLASSTYPE_INTERFACE_KNOWN. */
#define CLASSTYPE_INTERFACE_UNKNOWN(NODE) \
(LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown)
@@ -3719,7 +3719,7 @@ extern void maybe_make_one_only (tree);
extern void grokclassfn (tree, tree, enum overload_flags, tree);
extern tree grok_array_decl (tree, tree);
extern tree delete_sanity (tree, tree, bool, int);
-extern tree check_classfn (tree, tree, bool);
+extern tree check_classfn (tree, tree, tree);
extern void check_member_template (tree);
extern tree grokfield (tree, tree, tree, tree, tree);
extern tree grokbitfield (tree, tree, tree);
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 15b16745af4..21f82548eaa 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -3077,7 +3077,7 @@ cp_fname_init (const char* name, tree *type_p)
decl, NAME is the initialization string and TYPE_DEP indicates whether
NAME depended on the type of the function. We make use of that to detect
__PRETTY_FUNCTION__ inside a template fn. This is being done
- lazily at the point of first use, so we musn't push the decl now. */
+ lazily at the point of first use, so we mustn't push the decl now. */
static tree
cp_make_fname_decl (tree id, int type_dep)
@@ -3705,8 +3705,10 @@ start_decl (tree declarator,
else
{
tree field = check_classfn (context, decl,
- processing_template_decl
- > template_class_depth (context));
+ (processing_template_decl
+ > template_class_depth (context))
+ ? current_template_parms
+ : NULL_TREE);
if (field && duplicate_decls (decl, field))
decl = field;
}
@@ -4267,8 +4269,22 @@ reshape_init (tree type, tree *initp)
/* If the bound of the array is known, take no more initializers
than are allowed. */
- max_index = ((TYPE_DOMAIN (type) && (TREE_CODE (type) == ARRAY_TYPE))
- ? array_type_nelts (type) : NULL_TREE);
+ max_index = NULL_TREE;
+ if (TREE_CODE (type) == ARRAY_TYPE)
+ {
+ if (TYPE_DOMAIN (type))
+ max_index = array_type_nelts (type);
+ }
+ else
+ {
+ /* For a vector, the representation type is a struct
+ containing a single member which is an array of the
+ appropriate size. */
+ tree rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
+ if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
+ max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
+ }
+
/* Loop through the array elements, gathering initializers. */
for (index = size_zero_node;
*initp && (!max_index || !tree_int_cst_lt (max_index, index));
@@ -5655,8 +5671,10 @@ grokfndecl (tree ctype,
tree old_decl;
old_decl = check_classfn (ctype, decl,
- processing_template_decl
- > template_class_depth (ctype));
+ (processing_template_decl
+ > template_class_depth (ctype))
+ ? current_template_parms
+ : NULL_TREE);
if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
/* Because grokfndecl is always supposed to return a
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index c354279a733..4c36eb5549c 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -614,15 +614,19 @@ check_java_method (tree method)
/* Sanity check: report error if this function FUNCTION is not
really a member of the class (CTYPE) it is supposed to belong to.
- CNAME is the same here as it is for grokclassfn above.
- TEMPLATE_HEADER_P is true when this declaration comes with a
- template header. */
+ TEMPLATE_PARMS is used to specifiy the template parameters of a member
+ template passed as FUNCTION_DECL. If the member template is passed as a
+ TEMPLATE_DECL, it can be NULL since the parameters can be extracted
+ from the declaration. If the function is not a function template, it
+ must be NULL.
+ It returns the original declaration for the function, or NULL_TREE
+ if no declaration was found (and an error was emitted). */
tree
-check_classfn (tree ctype, tree function, bool template_header_p)
+check_classfn (tree ctype, tree function, tree template_parms)
{
int ix;
- int is_template;
+ bool is_template;
if (DECL_USE_TEMPLATE (function)
&& !(TREE_CODE (function) == TEMPLATE_DECL
@@ -640,9 +644,20 @@ check_classfn (tree ctype, tree function, bool template_header_p)
find the method, but we don't complain. */
return NULL_TREE;
+ /* Basic sanity check: for a template function, the template parameters
+ either were not passed, or they are the same of DECL_TEMPLATE_PARMS. */
+ if (TREE_CODE (function) == TEMPLATE_DECL)
+ {
+ my_friendly_assert (!template_parms
+ || comp_template_parms
+ (template_parms,
+ DECL_TEMPLATE_PARMS (function)),
+ 20040303);
+ template_parms = DECL_TEMPLATE_PARMS (function);
+ }
+
/* OK, is this a definition of a member template? */
- is_template = (TREE_CODE (function) == TEMPLATE_DECL
- || template_header_p);
+ is_template = (template_parms != NULL_TREE);
ix = lookup_fnfields_1 (complete_type (ctype),
DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
@@ -686,6 +701,9 @@ check_classfn (tree ctype, tree function, bool template_header_p)
if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
TREE_TYPE (TREE_TYPE (fndecl)))
&& compparms (p1, p2)
+ && (!is_template
+ || comp_template_parms (template_parms,
+ DECL_TEMPLATE_PARMS (fndecl)))
&& (DECL_TEMPLATE_SPECIALIZATION (function)
== DECL_TEMPLATE_SPECIALIZATION (fndecl))
&& (!DECL_TEMPLATE_SPECIALIZATION (function)
@@ -2294,7 +2312,7 @@ do_static_initialization (tree decl, tree init)
if (flag_use_cxa_atexit)
register_dtor_fn (decl);
- /* Finsh up. */
+ /* Finish up. */
finish_static_initialization_or_destruction (guard_if_stmt);
}
diff --git a/gcc/cp/friend.c b/gcc/cp/friend.c
index c81bd934e0a..e55adaa8bc0 100644
--- a/gcc/cp/friend.c
+++ b/gcc/cp/friend.c
@@ -397,7 +397,10 @@ do_friend (tree ctype, tree declarator, tree decl,
validity of the declaration later. */
decl = push_template_decl_real (decl, /*is_friend=*/1);
else
- decl = check_classfn (ctype, decl, template_member_p);
+ decl = check_classfn (ctype, decl,
+ template_member_p
+ ? current_template_parms
+ : NULL_TREE);
if (template_member_p && decl && TREE_CODE (decl) == FUNCTION_DECL)
decl = DECL_TI_TEMPLATE (decl);
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 72209856028..043e3e467c2 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -3016,7 +3016,7 @@ push_template_decl_real (tree decl, int is_friend)
}
}
- /* The DECL_TI_ARGS of DECL contains full set of arguments refering
+ /* The DECL_TI_ARGS of DECL contains full set of arguments referring
back to its most general template. If TMPL is a specialization,
ARGS may only have the innermost set of arguments. Add the missing
argument levels if necessary. */
@@ -5151,8 +5151,8 @@ tsubst_friend_function (tree decl, tree args)
{
/* Check to see that the declaration is really present, and,
possibly obtain an improved declaration. */
- tree fn = check_classfn (DECL_CONTEXT (new_friend),
- new_friend, false);
+ tree fn = check_classfn (DECL_CONTEXT (new_friend),
+ new_friend, NULL_TREE);
if (fn)
new_friend = fn;
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index 47aacbf943d..ac149c8c91b 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -1253,7 +1253,7 @@ get_pseudo_ti_desc (tree type)
}
/* Make sure the required builtin types exist for generating the type_info
- varable definitions. */
+ variable definitions. */
static void
create_tinfo_types (void)
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index d394c643d6a..2bfd743e090 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -1058,6 +1058,11 @@ comptypes (tree t1, tree t2, int strict)
case COMPLEX_TYPE:
return same_type_p (TREE_TYPE (t1), TREE_TYPE (t2));
+ case VECTOR_TYPE:
+ return TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
+ && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2));
+ break;
+
default:
break;
}
@@ -5579,8 +5584,7 @@ convert_for_assignment (tree type, tree rhs,
coder = TREE_CODE (rhstype);
if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
- && ((*targetm.vector_opaque_p) (type)
- || (*targetm.vector_opaque_p) (rhstype)))
+ && vector_types_convertible_p (type, rhstype))
return convert (type, rhs);
if (rhs == error_mark_node || rhstype == error_mark_node)
diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c
index bdfaa3f9ac6..65db6db5d57 100644
--- a/gcc/cppfiles.c
+++ b/gcc/cppfiles.c
@@ -362,7 +362,7 @@ search_path_exhausted (cpp_reader *pfile, const char *header, _cpp_file *file)
if (func
&& file->dir == NULL)
{
- if ((file->path = func (pfile, header)) != NULL)
+ if ((file->path = func (pfile, header, &file->dir)) != NULL)
{
if (open_file (file))
return true;
@@ -382,7 +382,7 @@ _cpp_find_failed (_cpp_file *file)
/* Given a filename FNAME search for such a file in the include path
starting from START_DIR. If FNAME is the empty string it is
- interpreted as STDIN if START_DIR is PFILE->no_seach_path.
+ interpreted as STDIN if START_DIR is PFILE->no_search_path.
If the file is not found in the file cache fall back to the O/S and
add the result to our cache.
@@ -1316,6 +1316,14 @@ cpp_get_path (struct _cpp_file *f)
return f->path;
}
+/* Get the directory associated with the _cpp_file F. */
+
+cpp_dir *
+cpp_get_dir (struct _cpp_file *f)
+{
+ return f->dir;
+}
+
/* Get the cpp_buffer currently associated with the cpp_reader
PFILE. */
@@ -1342,7 +1350,7 @@ cpp_get_prev (cpp_buffer *b)
return b->prev;
}
-/* This datastructure holds the list of header files that were seen
+/* This data structure holds the list of header files that were seen
while the PCH was being built. The 'entries' field is kept sorted
in memcmp() order; yes, this means that on little-endian systems,
it's sorted initially by the least-significant byte of 'size', but
@@ -1398,7 +1406,8 @@ pchf_adder (void **slot, void *data)
return 1;
d->entries[count].once_only = f->once_only;
- d->have_once_only |= f->once_only;
+ /* |= is avoided in the next line because of an HP C compiler bug */
+ d->have_once_only = d->have_once_only | f->once_only;
if (f->buffer_valid)
md5_buffer ((const char *)f->buffer,
f->st.st_size, d->entries[count].sum);
diff --git a/gcc/cpplib.h b/gcc/cpplib.h
index 905ca5d5e0e..5ac0a19bec9 100644
--- a/gcc/cpplib.h
+++ b/gcc/cpplib.h
@@ -385,7 +385,7 @@ struct cpp_options
The return value is the malloced name of a header to try and open,
if any, or NULL otherwise. This callback is called only if the
header is otherwise unfound. */
-typedef const char *(*missing_header_cb)(cpp_reader *, const char *header);
+typedef const char *(*missing_header_cb)(cpp_reader *, const char *header, cpp_dir **);
/* Call backs to cpplib client. */
struct cpp_callbacks
@@ -744,6 +744,7 @@ extern void cpp_make_system_header (cpp_reader *, int, int);
extern bool cpp_push_include (cpp_reader *, const char *);
extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *);
extern const char *cpp_get_path (struct _cpp_file *);
+extern cpp_dir *cpp_get_dir (struct _cpp_file *);
extern cpp_buffer *cpp_get_buffer (cpp_reader *);
extern struct _cpp_file *cpp_get_file (cpp_buffer *);
extern cpp_buffer *cpp_get_prev (cpp_buffer *);
diff --git a/gcc/cse.c b/gcc/cse.c
index 62256145b03..6d3c53f7635 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -3924,21 +3924,11 @@ fold_rtx (rtx x, rtx insn)
}
}
- new = simplify_relational_operation (code, mode,
- (mode_arg0 != VOIDmode
- ? mode_arg0
- : (GET_MODE (const_arg0
- ? const_arg0
- : folded_arg0)
- != VOIDmode)
- ? GET_MODE (const_arg0
- ? const_arg0
- : folded_arg0)
- : GET_MODE (const_arg1
- ? const_arg1
- : folded_arg1)),
- const_arg0 ? const_arg0 : folded_arg0,
- const_arg1 ? const_arg1 : folded_arg1);
+ {
+ rtx op0 = const_arg0 ? const_arg0 : folded_arg0;
+ rtx op1 = const_arg1 ? const_arg1 : folded_arg1;
+ new = simplify_relational_operation (code, mode, mode_arg0, op0, op1);
+ }
break;
case RTX_BIN_ARITH:
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index b495d6451c3..16afddc1b4b 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -67,6 +67,7 @@ diagnostic_context *global_dc = &global_diagnostic_context;
with preprocessed source if appropriate.\n\
See %s for instructions.\n"
+int flag_fatal_errors = 0;
/* Return a malloc'd string containing MSG formatted a la printf. The
caller is responsible for freeing the memory. */
@@ -264,6 +265,11 @@ diagnostic_action_after_output (diagnostic_context *context,
case DK_SORRY:
if (context->abort_on_error)
real_abort ();
+ if (flag_fatal_errors)
+ {
+ fnotice (stderr, "compilation terminated due to -Wfatal-errors.\n");
+ exit (FATAL_EXIT_CODE);
+ }
break;
case DK_ICE:
diff --git a/gcc/doc/cpp.texi b/gcc/doc/cpp.texi
index 5d1cb9b3029..399658256d6 100644
--- a/gcc/doc/cpp.texi
+++ b/gcc/doc/cpp.texi
@@ -759,9 +759,11 @@ named @var{file} in a standard list of system directories. You can prepend
directories to this list with the @option{-I} option (@pxref{Invocation}).
@item #include "@var{file}"
-This variant is used for header files of your own program. It searches
-for a file named @var{file} first in the directory containing the
-current file, then in the same directories used for @code{<@var{file}>}.
+This variant is used for header files of your own program. It
+searches for a file named @var{file} first in the directory containing
+the current file, then in the quote directories and then the same
+directories used for @code{<@var{file}>}. You can prepend directories
+to the list of quote directories with the @option{-iquote} option.
@end table
The argument of @samp{#include}, whether delimited with quote marks or
@@ -883,9 +885,10 @@ standard C library facilities, or the standard C library itself.
@option{-nostdinc} is in effect.
GCC looks for headers requested with @code{@w{#include "@var{file}"}}
-first in the directory containing the current file, then in the same
-places it would have looked for a header requested with angle brackets.
-For example, if @file{/usr/include/sys/stat.h} contains
+first in the directory containing the current file, then in the
+directories as specified by @option{-iquote} options, then in the same
+places it would have looked for a header requested with angle
+brackets. For example, if @file{/usr/include/sys/stat.h} contains
@code{@w{#include "types.h"}}, GCC looks for @file{types.h} first in
@file{/usr/include/sys}, then in its usual search path.
@@ -898,7 +901,8 @@ This has two effects. First, directories appearing before the
quote marks. Directories after @option{-I-} are searched for all
headers. Second, the directory containing the current file is not
searched for anything, unless it happens to be one of the directories
-named by an @option{-I} switch.
+named by an @option{-I} switch. @option{-I-} is deprecated, -iquote
+should be used instead.
@option{-I. -I-} is not the same as no @option{-I} options at all, and does
not cause the same behavior for @samp{<>} includes that @samp{""}
@@ -4039,6 +4043,11 @@ they generally represent bugs in the snapshots.
@itemize @bullet
+@item -I- deprecated
+
+This option has been deprecated in 3.5. @option{-iquote} is meant to
+replace the need for this option.
+
@item Order of evaluation of @samp{#} and @samp{##} operators
The standard does not specify the order of evaluation of a chain of
@@ -4131,7 +4140,8 @@ without notice.
@ignore
@c man begin SYNOPSIS
cpp [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
- [@option{-I}@var{dir}@dots{}] [@option{-W}@var{warn}@dots{}]
+ [@option{-I}@var{dir}@dots{}] [@option{-iquote}@var{dir}@dots{}]
+ [@option{-W}@var{warn}@dots{}]
[@option{-M}|@option{-MM}] [@option{-MG}] [@option{-MF} @var{filename}]
[@option{-MP}] [@option{-MQ} @var{target}@dots{}]
[@option{-MT} @var{target}@dots{}]
diff --git a/gcc/doc/cppopts.texi b/gcc/doc/cppopts.texi
index 686de1dd2ad..468f17f13fc 100644
--- a/gcc/doc/cppopts.texi
+++ b/gcc/doc/cppopts.texi
@@ -400,6 +400,7 @@ file directory as the first search directory for @code{@w{#include
@ifset cppmanual
@xref{Search Path}.
@end ifset
+This option has been deprecated.
@item -nostdinc
@opindex nostdinc
@@ -466,6 +467,16 @@ is applied to the standard system directories.
@xref{System Headers}.
@end ifset
+@item -iquote @var{dir}
+@opindex iquote
+Search @var{dir} only for header files requested with
+@code{@w{#include "@var{file}"}}; they are not searched for
+@code{@w{#include <@var{file}>}}, before all directories specified by
+@option{-I} and before the standard system directories.
+@ifset cppmanual
+@xref{Search Path}.
+@end ifset
+
@item -fdollars-in-identifiers
@opindex fdollars-in-identifiers
@anchor{fdollars-in-identifiers}
diff --git a/gcc/doc/hostconfig.texi b/gcc/doc/hostconfig.texi
index e5387e148a7..c97b41b7c2e 100644
--- a/gcc/doc/hostconfig.texi
+++ b/gcc/doc/hostconfig.texi
@@ -147,6 +147,15 @@ unique to each dump file kind, e.g. @samp{rtl}.
If you do not define this macro, GCC will use @samp{.%02d.}. You should
define this macro if using the default will create an invalid file name.
+
+@item DELETE_IF_ORDINARY
+Define this macro to be a C statement (sans semicolon) that performs
+host-dependent removal of ordinary temp files in the compilation driver.
+
+If you do not define this macro, GCC will use the default version. You
+should define this macro if the default version does not reliably remove
+the temp file as, for example, on VMS which allows multiple versions
+of a file.
@end ftable
@node Host Misc
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index a1d3dd6b36b..599b9172c77 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -3460,6 +3460,13 @@ that supports only 32-bit binaries, one must configure with
@option{--disable-multilib}, since we will not be able to build the
64-bit target libraries.
+GCC 3.3 and GCC 3.4 trigger code generation bugs in earlier versions of
+the GNU compiler (especially GCC 3.0.x versions), which lead to the
+miscompilation of the stage1 compiler and the subsequent failure of the
+bootstrap process. A workaround is to use GCC 3.2.3 as an intermediary
+stage, i.e. to bootstrap that compiler with the base compiler and then
+use it to bootstrap the final compiler.
+
GCC 3.4 triggers a code generation bug in versions 5.4 (Sun ONE Studio 7)
and 5.5 (Sun ONE Studio 8) of the Sun compiler, which causes a bootstrap
failure in form of a miscompilation of the stage1 compiler by the Sun
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index ff3ffabada4..3144fd1fcb4 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -214,7 +214,7 @@ in the following sections.
-Wconversion -Wno-deprecated-declarations @gol
-Wdisabled-optimization -Wno-div-by-zero -Wendif-labels @gol
-Werror -Werror-implicit-function-declaration @gol
--Wfloat-equal -Wformat -Wformat=2 @gol
+-Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol
-Wno-format-extra-args -Wformat-nonliteral @gol
-Wformat-security -Wformat-y2k @gol
-Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol
@@ -284,8 +284,8 @@ in the following sections.
-fdelayed-branch -fdelete-null-pointer-checks @gol
-fexpensive-optimizations -ffast-math -ffloat-store @gol
-fforce-addr -fforce-mem -ffunction-sections @gol
--fgcse -fgcse-lm -fgcse-sm -fgcse-las -floop-optimize @gol
--fcrossjumping -fif-conversion -fif-conversion2 @gol
+-fgcse -fgcse-lm -fgcse-sm -fgcse-las -fgcse-after-reload @gol
+-floop-optimize -fcrossjumping -fif-conversion -fif-conversion2 @gol
-finline-functions -finline-limit=@var{n} -fkeep-inline-functions @gol
-fkeep-static-consts -fmerge-constants -fmerge-all-constants @gol
-fmove-all-movables -fnew-ra -fno-branch-count-reg @gol
@@ -345,7 +345,7 @@ in the following sections.
@item Directory Options
@xref{Directory Options,,Options for Directory Search}.
-@gccoptlist{-B@var{prefix} -I@var{dir} -I- -L@var{dir} -specs=@var{file}}
+@gccoptlist{-B@var{prefix} -I@var{dir} -iquote@var{dir} -L@var{dir} -specs=@var{file} -I-}
@item Target Options
@c I wrote this xref this way to avoid overfull hbox. -- rms
@@ -479,7 +479,7 @@ in the following sections.
-single_module -static -sub_library -sub_umbrella @gol
-twolevel_namespace -umbrella -undefined @gol
-unexported_symbols_list -weak_reference_mismatches @gol
--whatsloaded}
+-whatsloaded -F}
@emph{MIPS Options}
@gccoptlist{-EL -EB -march=@var{arch} -mtune=@var{arch} @gol
@@ -500,7 +500,8 @@ in the following sections.
-mfix-vr4120 -mno-fix-vr4120 -mfix-sb1 -mno-fix-sb1 @gol
-mflush-func=@var{func} -mno-flush-func @gol
-mbranch-likely -mno-branch-likely @gol
--mfp-exceptions -mno-fp-exceptions}
+-mfp-exceptions -mno-fp-exceptions @gol
+-mvr4130-align -mno-vr4130-align}
@emph{i386 and x86-64 Options}
@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol
@@ -1786,7 +1787,7 @@ for NeXT-based systems, including Darwin and Mac OS X@. The macro
used.
@item -fno-nil-receivers
-@opindex -fno-nil-receivers
+@opindex fno-nil-receivers
Assume that all Objective-C message dispatches (e.g.,
@code{[receiver message:arg]}) in this translation unit ensure that the receiver
is not @code{nil}. This allows for more efficient entry points in the runtime to be
@@ -1794,7 +1795,7 @@ used. Currently, this option is only available in conjunction with
the NeXT runtime on Mac OS X 10.3 and later.
@item -fobjc-exceptions
-@opindex -fobjc-exceptions
+@opindex fobjc-exceptions
Enable syntactic support for structured exception handling in Objective-C,
similar to what is offered by C++ and Java. Currently, this option is only
available in conjunction with the NeXT runtime on Mac OS X 10.3 and later.
@@ -1886,7 +1887,7 @@ Unlike Java, Objective-C does not allow for entire methods to be marked
to be unlocked properly.
@item -freplace-objc-classes
-@opindex -freplace-objc-classes
+@opindex freplace-objc-classes
Emit a special marker instructing @command{ld(1)} not to statically link in
the resulting object file, and allow @command{dyld(1)} to load it in at
run time instead. This is used in conjunction with the Fix-and-Continue
@@ -1897,7 +1898,7 @@ is only available in conjunction with the NeXT runtime on Mac OS X 10.3
and later.
@item -fzero-link
-@opindex -fzero-link
+@opindex fzero-link
When compiling for the NeXT runtime, the compiler ordinarily replaces calls
to @code{objc_getClass("@dots{}")} (when the name of the class is known at
compile time) with static class references that get initialized at load time,
@@ -1948,7 +1949,7 @@ compilation. This also enforces the coding style convention
that methods and selectors must be declared before being used.
@item -print-objc-runtime-info
-@opindex -print-objc-runtime-info
+@opindex print-objc-runtime-info
Generate C header describing the largest structure that is passed by
value, if any.
@@ -2087,6 +2088,12 @@ machines.
Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
+@item -Wfatal-errors
+@opindex Wfatal-errors
+This option causes the compiler to abort compilation on the first error
+occurred rather than trying to keep going and printing further error
+messages.
+
@item -Wformat
@opindex Wformat
Check calls to @code{printf} and @code{scanf}, etc., to make sure that
@@ -3816,7 +3823,8 @@ invoking @option{-O2} on programs that use computed gotos.
@opindex O3
Optimize yet more. @option{-O3} turns on all optimizations specified by
@option{-O2} and also turns on the @option{-finline-functions},
-@option{-fweb} and @option{-frename-registers} options.
+@option{-fweb}, @option{-frename-registers}
+and @option{-fgcse-after-reload} options.
@item -O0
@opindex O0
@@ -4160,6 +4168,12 @@ same memory location (both partial and full redundancies).
Enabled by default when gcse is enabled.
+@item -fgcse-after-reload
+@opindex fgcse-after-reload
+When @option{-fgcse-after-reload} is enabled, a redundant load elimination
+pass is performed after reload. The purpose of this pass is to cleanup
+redundant spilling.
+
@item -floop-optimize
@opindex floop-optimize
Perform loop optimizations: move constant expressions out of loops, simplify
@@ -5543,28 +5557,12 @@ the ordering for the include_next directive are not inadvertently changed.
If you really need to change the search order for system directories,
use the @option{-nostdinc} and/or @option{-isystem} options.
-@item -I-
-@opindex I-
-Any directories you specify with @option{-I} options before the @option{-I-}
-option are searched only for the case of @samp{#include "@var{file}"};
-they are not searched for @samp{#include <@var{file}>}.
-
-If additional directories are specified with @option{-I} options after
-the @option{-I-}, these directories are searched for all @samp{#include}
-directives. (Ordinarily @emph{all} @option{-I} directories are used
-this way.)
-
-In addition, the @option{-I-} option inhibits the use of the current
-directory (where the current input file came from) as the first search
-directory for @samp{#include "@var{file}"}. There is no way to
-override this effect of @option{-I-}. With @option{-I.} you can specify
-searching the directory which was current when the compiler was
-invoked. That is not exactly the same as what the preprocessor does
-by default, but it is often satisfactory.
-
-@option{-I-} does not inhibit the use of the standard system directories
-for header files. Thus, @option{-I-} and @option{-nostdinc} are
-independent.
+@item -iquote@var{dir}
+@opindex iquote
+Add the directory @var{dir} to the head of the list of directories to
+be searched for header files only for the case of @samp{#include
+"@var{file}"}; they are not searched for @samp{#include <@var{file}>},
+otherwise just like @option{-I}.
@item -L@var{dir}
@opindex L
@@ -5622,6 +5620,31 @@ program uses when determining what switches to pass to @file{cc1},
@file{cc1plus}, @file{as}, @file{ld}, etc. More than one
@option{-specs=@var{file}} can be specified on the command line, and they
are processed in order, from left to right.
+
+@item -I-
+@opindex I-
+This option has been deprecated. Please use @option{-iquote} instead for
+@option{-I} directories before the @option{-I-} and remove the @option{-I-}.
+Any directories you specify with @option{-I} options before the @option{-I-}
+option are searched only for the case of @samp{#include "@var{file}"};
+they are not searched for @samp{#include <@var{file}>}.
+
+If additional directories are specified with @option{-I} options after
+the @option{-I-}, these directories are searched for all @samp{#include}
+directives. (Ordinarily @emph{all} @option{-I} directories are used
+this way.)
+
+In addition, the @option{-I-} option inhibits the use of the current
+directory (where the current input file came from) as the first search
+directory for @samp{#include "@var{file}"}. There is no way to
+override this effect of @option{-I-}. With @option{-I.} you can specify
+searching the directory which was current when the compiler was
+invoked. That is not exactly the same as what the preprocessor does
+by default, but it is often satisfactory.
+
+@option{-I-} does not inhibit the use of the standard system directories
+for header files. Thus, @option{-I-} and @option{-nostdinc} are
+independent.
@end table
@c man end
@@ -5955,13 +5978,6 @@ the last object files that will be passed to the linker.
Process the @code{cpp} spec. This is used to construct the arguments
to be passed to the C preprocessor.
-@item %c
-Process the @code{signed_char} spec. This is intended to be used
-to tell cpp whether a char is signed. It typically has the definition:
-@smallexample
-%@{funsigned-char:-D__CHAR_UNSIGNED__@}
-@end smallexample
-
@item %1
Process the @code{cc1} spec. This is used to construct the options to be
passed to the actual C compiler (@samp{cc1}).
@@ -6679,8 +6695,8 @@ that select a particular cpu implementation. Those are @samp{cypress},
@item -mv8plus
@itemx -mno-v8plus
-@opindex -mv8plus
-@opindex -mno-v8plus
+@opindex mv8plus
+@opindex mno-v8plus
With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI. The
difference from the V8 ABI is that the global and out registers are
considered 64-bit wide. This is enabled by default on Solaris in 32-bit
@@ -6688,8 +6704,8 @@ mode for all SPARC-V9 processors.
@item -mvis
@itemx -mno-vis
-@opindex -mvis
-@opindex -mno-vis
+@opindex mvis
+@opindex mno-vis
With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
Visual Instruction Set extensions. The default is @option{-mno-vis}.
@end table
@@ -7233,7 +7249,7 @@ doesn't the linker will give an error message---incorrect code will not be
generated.
@item -mdebug
-@opindex -mdebug
+@opindex mdebug
Makes the M32R specific code in the compiler display some statistics
that might help in debugging programs.
@@ -7934,6 +7950,34 @@ These options are defined for all architectures running the Darwin operating
system. They are useful for compatibility with other Mac OS compilers.
@table @gcctabopt
+@item -F@var{dir}
+@opindex F
+Add the framework directory @var{dir} to the head of the list of
+directories to be searched for header files. These directories are
+interleaved with those specified by @option{-I} options and are
+scanned in a left-to-right order.
+
+A framework directory is a directory with frameworks in it. A
+framework is a directory with a @samp{"Headers"} and/or
+@samp{"PrivateHeaders"} directory contained directly in it that ends
+in @samp{".framework"}. The name of a framework is the name of this
+directory excluding the @samp{".framework"}. Headers associated with
+the framework are found in one of those two directories, with
+@samp{"Headers"} being searched first. A subframework is a framework
+directory that is in a framework's @samp{"Frameworks"} directory.
+Includes of subframework headers can only appear in a header of a
+framework that contains the subframework, or in a sibling subframework
+header. Two subframeworks are siblings if they occur in the same
+framework. A subframework should not have the same name as a
+framework, a warning will be issued if this is violated. Currently a
+subframework cannot have subframeworks, in the future, the mechanism
+may be extended to support this. The standard frameworks can be found
+in @samp{"/System/Library/Frameworks"}, @samp{"/Library/Frameworks"}
+and @samp{"/Local/Library/Frameworks"}. An example include looks like
+@code{#include <Framework/header.h>}, where @samp{Framework} denotes
+the name of the framework and header.h is found in the
+@samp{"PrivateHeaders"} or @samp{"Headers"} directory.
+
@item -all_load
@opindex all_load
Loads all members of static archive libraries.
@@ -8495,6 +8539,18 @@ enabled.
For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
64-bit code, then we can use both FP pipes. Otherwise, we can only use one
FP pipe.
+
+@item -mvr4130-align
+@itemx -mno-vr4130-align
+@opindex mvr4130-align
+The VR4130 pipeline is two-way superscalar, but can only issue two
+instructions together if the first one is 8-byte aligned. When this
+option is enabled, GCC will align pairs of instructions that it
+thinks should execute in parallel.
+
+This option only has an effect when optimizing for the VR4130.
+It normally makes code faster, but at the expense of making it bigger.
+It is enabled by default at optimization level @option{-O3}.
@end table
@node i386 and x86-64 Options
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi
index 5cff95bd2c2..b29f8b55fbc 100644
--- a/gcc/doc/md.texi
+++ b/gcc/doc/md.texi
@@ -1363,6 +1363,9 @@ A symbol in the text segment of the current file
@item Uv
A memory reference suitable for VFP load/store insns (reg+constant offset)
+@item Uy
+A memory reference suitable for iWMMXt load/store instructions.
+
@item Uq
A memory reference suitable for for the ARMv4 ldrsb instruction.
diff --git a/gcc/dojump.c b/gcc/dojump.c
index eb98e76e4a8..7f76c5e752f 100644
--- a/gcc/dojump.c
+++ b/gcc/dojump.c
@@ -820,7 +820,6 @@ rtx
compare_from_rtx (rtx op0, rtx op1, enum rtx_code code, int unsignedp,
enum machine_mode mode, rtx size)
{
- enum rtx_code ucode;
rtx tem;
/* If one operand is constant, make it the second one. Only do this
@@ -842,32 +841,19 @@ compare_from_rtx (rtx op0, rtx op1, enum rtx_code code, int unsignedp,
do_pending_stack_adjust ();
- ucode = unsignedp ? unsigned_condition (code) : code;
- tem = simplify_const_relational_operation (ucode, mode, op0, op1);
- if (tem != 0)
- return tem;
-
-#if 0
- /* There's no need to do this now that combine.c can eliminate lots of
- sign extensions. This can be less efficient in certain cases on other
- machines. */
-
- /* If this is a signed equality comparison, we can do it as an
- unsigned comparison since zero-extension is cheaper than sign
- extension and comparisons with zero are done as unsigned. This is
- the case even on machines that can do fast sign extension, since
- zero-extension is easier to combine with other operations than
- sign-extension is. If we are comparing against a constant, we must
- convert it to what it would look like unsigned. */
- if ((code == EQ || code == NE) && ! unsignedp
- && GET_MODE_BITSIZE (GET_MODE (op0)) <= HOST_BITS_PER_WIDE_INT)
+ code = unsignedp ? unsigned_condition (code) : code;
+ if (0 != (tem = simplify_relational_operation (code, mode, VOIDmode,
+ op0, op1)))
{
- if (GET_CODE (op1) == CONST_INT
- && (INTVAL (op1) & GET_MODE_MASK (GET_MODE (op0))) != INTVAL (op1))
- op1 = GEN_INT (INTVAL (op1) & GET_MODE_MASK (GET_MODE (op0)));
- unsignedp = 1;
+ if (CONSTANT_P (tem))
+ return tem;
+
+ code = GET_CODE (tem);
+ mode = GET_MODE (tem);
+ op0 = XEXP (tem, 0);
+ op1 = XEXP (tem, 1);
+ unsignedp = (code == GTU || code == LTU || code == GEU || code == LEU);
}
-#endif
emit_cmp_insn (op0, op1, code, size, mode, unsignedp);
@@ -889,7 +875,6 @@ do_compare_rtx_and_jump (rtx op0, rtx op1, enum rtx_code code, int unsignedp,
enum machine_mode mode, rtx size, rtx if_false_label,
rtx if_true_label)
{
- enum rtx_code ucode;
rtx tem;
int dummy_true_label = 0;
@@ -921,44 +906,25 @@ do_compare_rtx_and_jump (rtx op0, rtx op1, enum rtx_code code, int unsignedp,
do_pending_stack_adjust ();
- ucode = unsignedp ? unsigned_condition (code) : code;
- tem = simplify_const_relational_operation (ucode, mode, op0, op1);
- if (tem != 0)
+ code = unsignedp ? unsigned_condition (code) : code;
+ if (0 != (tem = simplify_relational_operation (code, mode, VOIDmode,
+ op0, op1)))
{
- if (tem == const_true_rtx)
- {
- if (if_true_label)
- emit_jump (if_true_label);
- }
- else
- {
- if (if_false_label)
- emit_jump (if_false_label);
- }
- return;
- }
+ if (CONSTANT_P (tem))
+ {
+ rtx label = (tem == const0_rtx || tem == CONST0_RTX (mode))
+ ? if_false_label : if_true_label;
+ if (label)
+ emit_jump (label);
+ return;
+ }
-#if 0
- /* There's no need to do this now that combine.c can eliminate lots of
- sign extensions. This can be less efficient in certain cases on other
- machines. */
-
- /* If this is a signed equality comparison, we can do it as an
- unsigned comparison since zero-extension is cheaper than sign
- extension and comparisons with zero are done as unsigned. This is
- the case even on machines that can do fast sign extension, since
- zero-extension is easier to combine with other operations than
- sign-extension is. If we are comparing against a constant, we must
- convert it to what it would look like unsigned. */
- if ((code == EQ || code == NE) && ! unsignedp
- && GET_MODE_BITSIZE (GET_MODE (op0)) <= HOST_BITS_PER_WIDE_INT)
- {
- if (GET_CODE (op1) == CONST_INT
- && (INTVAL (op1) & GET_MODE_MASK (GET_MODE (op0))) != INTVAL (op1))
- op1 = GEN_INT (INTVAL (op1) & GET_MODE_MASK (GET_MODE (op0)));
- unsignedp = 1;
+ code = GET_CODE (tem);
+ mode = GET_MODE (tem);
+ op0 = XEXP (tem, 0);
+ op1 = XEXP (tem, 1);
+ unsignedp = (code == GTU || code == LTU || code == GEU || code == LEU);
}
-#endif
if (! if_true_label)
{
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 159b320f0a5..cfedd13bd28 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -12791,8 +12791,8 @@ dwarf2out_imported_module_or_decl (tree decl, tree context)
else
scope_die = force_decl_die (context);
- /* For TYPE_DECL, lookup TREE_TYPE. */
- if (TREE_CODE (decl) == TYPE_DECL)
+ /* For TYPE_DECL or CONST_DECL, lookup TREE_TYPE. */
+ if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
at_import_die = force_type_die (TREE_TYPE (decl));
else
at_import_die = force_decl_die (decl);
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 3830ed24e5b..ba8a3d6cf24 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -2971,8 +2971,7 @@ next_real_insn (rtx insn)
while (insn)
{
insn = NEXT_INSN (insn);
- if (insn == 0 || GET_CODE (insn) == INSN
- || GET_CODE (insn) == CALL_INSN || GET_CODE (insn) == JUMP_INSN)
+ if (insn == 0 || INSN_P (insn))
break;
}
@@ -2989,8 +2988,7 @@ prev_real_insn (rtx insn)
while (insn)
{
insn = PREV_INSN (insn);
- if (insn == 0 || GET_CODE (insn) == INSN || GET_CODE (insn) == CALL_INSN
- || GET_CODE (insn) == JUMP_INSN)
+ if (insn == 0 || INSN_P (insn))
break;
}
diff --git a/gcc/expr.c b/gcc/expr.c
index 33fc7c7d8be..23e128d4704 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -4590,7 +4590,10 @@ store_constructor_field (rtx target, unsigned HOST_WIDE_INT bitsize,
tree exp, tree type, int cleared, int alias_set)
{
if (TREE_CODE (exp) == CONSTRUCTOR
+ /* We can only call store_constructor recursively if the size and
+ bit position are on a byte boundary. */
&& bitpos % BITS_PER_UNIT == 0
+ && (bitsize > 0 && bitsize % BITS_PER_UNIT == 0)
/* If we have a nonzero bitpos for a register target, then we just
let store_field do the bitfield handling. This is unlikely to
generate unnecessary clear instructions anyways. */
@@ -4814,7 +4817,7 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size)
tree elt;
int i;
int need_to_clear;
- tree domain = TYPE_DOMAIN (type);
+ tree domain;
tree elttype = TREE_TYPE (type);
int const_bounds_p;
HOST_WIDE_INT minelt = 0;
@@ -4824,13 +4827,14 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size)
int elt_size = 0;
unsigned n_elts = 0;
- /* Vectors are like arrays, but the domain is stored via an array
- type indirectly. */
- if (TREE_CODE (type) == VECTOR_TYPE)
+ if (TREE_CODE (type) == ARRAY_TYPE)
+ domain = TYPE_DOMAIN (type);
+ else
+ /* Vectors do not have domains; look up the domain of
+ the array embedded in the debug representation type.
+ FIXME Would probably be more efficient to treat vectors
+ separately from arrays. */
{
- /* Note that although TYPE_DEBUG_REPRESENTATION_TYPE uses
- the same field as TYPE_DOMAIN, we are not guaranteed that
- it always will. */
domain = TYPE_DEBUG_REPRESENTATION_TYPE (type);
domain = TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (domain)));
if (REG_P (target) && VECTOR_MODE_P (GET_MODE (target)))
@@ -8802,8 +8806,6 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
else
{
target = assign_temp (type, 2, 0, 1);
- /* All temp slots at this level must not conflict. */
- preserve_temp_slots (target);
SET_DECL_RTL (slot, target);
if (TREE_ADDRESSABLE (slot))
put_var_into_stack (slot, /*rescan=*/false);
diff --git a/gcc/final.c b/gcc/final.c
index 7e1a8b16e1e..96a7a5bfcdb 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -1711,7 +1711,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
case NOTE_INSN_BASIC_BLOCK:
- /* If we are performing the optimization that paritions
+ /* If we are performing the optimization that partitions
basic blocks into hot & cold sections of the .o file,
then at the start of each new basic block, before
beginning to write code for the basic block, we need to
diff --git a/gcc/fixinc/fixincl.x b/gcc/fixinc/fixincl.x
index efd41f300e8..a1b650e5dc6 100644
--- a/gcc/fixinc/fixincl.x
+++ b/gcc/fixinc/fixincl.x
@@ -2,11 +2,11 @@
*
* DO NOT EDIT THIS FILE (fixincl.x)
*
- * It has been AutoGen-ed Friday April 23, 2004 at 06:53:51 AM MDT
+ * It has been AutoGen-ed Monday May 3, 2004 at 05:17:48 PM MEST
* From the definitions inclhack.def
* and the template file fixincl
*/
-/* DO NOT CVS-MERGE THIS FILE, EITHER Fri Apr 23 06:53:51 MDT 2004
+/* DO NOT CVS-MERGE THIS FILE, EITHER Mon May 3 17:17:49 MEST 2004
*
* You must regenerate it. Use the ./genfixes script.
*
@@ -5382,8 +5382,15 @@ tSCC zSvr4_ProfilList[] =
tSCC zSvr4_ProfilSelect0[] =
"profil\\(unsigned short \\*, unsigned int, unsigned int, unsigned int\\)";
-#define SVR4_PROFIL_TEST_CT 1
+/*
+ * content bypass pattern - skip fix if pattern found
+ */
+tSCC zSvr4_ProfilBypass0[] =
+ "Silicon Graphics";
+
+#define SVR4_PROFIL_TEST_CT 2
static tTestDesc aSvr4_ProfilTests[] = {
+ { TT_NEGREP, zSvr4_ProfilBypass0, (regex_t*)NULL },
{ TT_EGREP, zSvr4_ProfilSelect0, (regex_t*)NULL }, };
/*
@@ -6929,7 +6936,7 @@ static const char* apzX11_SprintfPatch[] = {
*
* List of all fixes
*/
-#define REGEX_COUNT 196
+#define REGEX_COUNT 197
#define MACH_LIST_SIZE_LIMIT 261
#define FIX_COUNT 175
diff --git a/gcc/fixinc/inclhack.def b/gcc/fixinc/inclhack.def
index 2e57d0f0e5c..aa26ff7c013 100644
--- a/gcc/fixinc/inclhack.def
+++ b/gcc/fixinc/inclhack.def
@@ -3161,6 +3161,9 @@ fix = {
select =
'profil\(unsigned short \*, unsigned int, unsigned int, unsigned int\)';
+ /* The fix is wrong on IRIX 5/6 and creates a conflict with another
+ prototype in <sys/profil.h>. */
+ bypass = 'Silicon Graphics';
c_fix = format;
c_fix_arg = 'profil(unsigned short *, size_t, int, unsigned int)';
diff --git a/gcc/flags.h b/gcc/flags.h
index fe74a51066a..8778b635392 100644
--- a/gcc/flags.h
+++ b/gcc/flags.h
@@ -244,7 +244,8 @@ extern int flag_print_asm_name;
extern int flag_signed_char;
-/* Nonzero means give an enum type only as many bytes as it needs. */
+/* Nonzero means give an enum type only as many bytes as it needs. A value
+ of 2 means it has not yet been initialized. */
extern int flag_short_enums;
@@ -407,6 +408,10 @@ extern int flag_really_no_inline;
extern int flag_syntax_only;
extern int rtl_dump_and_exit;
+/* Nonzero if we are exiting on the first error occurred. */
+
+extern int flag_fatal_errors;
+
/* Nonzero means we should save auxiliary info into a .X file. */
extern int flag_gen_aux_info;
diff --git a/gcc/flow.c b/gcc/flow.c
index 02e843dbe2f..fa47f2d24a0 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -442,8 +442,6 @@ life_analysis (rtx f, FILE *file, int flags)
if (file)
dump_flow_info (file);
- free_basic_block_vars (1);
-
/* Removing dead insns should have made jumptables really dead. */
delete_dead_jumptables ();
}
@@ -762,28 +760,23 @@ update_life_info_in_dirty_blocks (enum update_life_extent extent, int prop_flags
return retval;
}
-/* Free the variables allocated by find_basic_blocks.
-
- KEEP_HEAD_END_P is nonzero if basic_block_info is not to be freed. */
+/* Free the variables allocated by find_basic_blocks. */
void
-free_basic_block_vars (int keep_head_end_p)
+free_basic_block_vars (void)
{
- if (! keep_head_end_p)
+ if (basic_block_info)
{
- if (basic_block_info)
- {
- clear_edges ();
- basic_block_info = NULL;
- }
- n_basic_blocks = 0;
- last_basic_block = 0;
-
- ENTRY_BLOCK_PTR->aux = NULL;
- ENTRY_BLOCK_PTR->global_live_at_end = NULL;
- EXIT_BLOCK_PTR->aux = NULL;
- EXIT_BLOCK_PTR->global_live_at_start = NULL;
+ clear_edges ();
+ basic_block_info = NULL;
}
+ n_basic_blocks = 0;
+ last_basic_block = 0;
+
+ ENTRY_BLOCK_PTR->aux = NULL;
+ ENTRY_BLOCK_PTR->global_live_at_end = NULL;
+ EXIT_BLOCK_PTR->aux = NULL;
+ EXIT_BLOCK_PTR->global_live_at_start = NULL;
}
/* Delete any insns that copy a register to itself. */
@@ -1660,12 +1653,18 @@ propagate_one_insn (struct propagate_block_info *pbi, rtx insn)
&& GET_CODE (SET_SRC (PATTERN (insn))) == PLUS
&& XEXP (SET_SRC (PATTERN (insn)), 0) == stack_pointer_rtx
&& GET_CODE (XEXP (SET_SRC (PATTERN (insn)), 1)) == CONST_INT)
- /* We have an insn to pop a constant amount off the stack.
- (Such insns use PLUS regardless of the direction of the stack,
- and any insn to adjust the stack by a constant is always a pop.)
- These insns, if not dead stores, have no effect on life, though
- they do have an effect on the memory stores we are tracking. */
- invalidate_mems_from_set (pbi, stack_pointer_rtx);
+ {
+ /* We have an insn to pop a constant amount off the stack.
+ (Such insns use PLUS regardless of the direction of the stack,
+ and any insn to adjust the stack by a constant is always a pop
+ or part of a push.)
+ These insns, if not dead stores, have no effect on life, though
+ they do have an effect on the memory stores we are tracking. */
+ invalidate_mems_from_set (pbi, stack_pointer_rtx);
+ /* Still, we need to update local_set, lest ifcvt.c:dead_or_predicable
+ concludes that the stack pointer is not modified. */
+ mark_set_regs (pbi, PATTERN (insn), insn);
+ }
else
{
rtx note;
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 26967544ae8..ed54ee93bb6 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -108,6 +108,7 @@ static bool fold_real_zero_addition_p (tree, tree, int);
static tree fold_mathfn_compare (enum built_in_function, enum tree_code,
tree, tree, tree);
static tree fold_inf_compare (enum tree_code, tree, tree, tree);
+static tree fold_div_compare (enum tree_code, tree, tree, tree);
static bool reorder_operands_p (tree, tree);
static bool tree_swap_operands_p (tree, tree, bool);
@@ -1788,6 +1789,10 @@ fold_convert_const (enum tree_code code, tree type, tree arg1)
real_floor (&r, VOIDmode, &x);
break;
+ case FIX_ROUND_EXPR:
+ real_round (&r, VOIDmode, &x);
+ break;
+
default:
abort ();
}
@@ -4812,7 +4817,7 @@ count_cond (tree expr, int lim)
expression, and ARG to `a'. If COND_FIRST_P is nonzero, then the
COND is the first argument to CODE; otherwise (as in the example
given here), it is the second argument. TYPE is the type of the
- original expression. Return NULL_TREE if no simplication is
+ original expression. Return NULL_TREE if no simplification is
possible. */
static tree
@@ -5217,6 +5222,156 @@ fold_inf_compare (enum tree_code code, tree type, tree arg0, tree arg1)
return NULL_TREE;
}
+/* Subroutine of fold() that optimizes comparisons of a division by
+ a non-zero integer constant against an integer constant, i.e.
+ X/C1 op C2.
+
+ CODE is the comparison operator: EQ_EXPR, NE_EXPR, GT_EXPR, LT_EXPR,
+ GE_EXPR or LE_EXPR. TYPE is the type of the result and ARG0 and ARG1
+ are the operands of the comparison. ARG1 must be a TREE_REAL_CST.
+
+ The function returns the constant folded tree if a simplification
+ can be made, and NULL_TREE otherwise. */
+
+static tree
+fold_div_compare (enum tree_code code, tree type, tree arg0, tree arg1)
+{
+ tree prod, tmp, hi, lo;
+ tree arg00 = TREE_OPERAND (arg0, 0);
+ tree arg01 = TREE_OPERAND (arg0, 1);
+ unsigned HOST_WIDE_INT lpart;
+ HOST_WIDE_INT hpart;
+ int overflow;
+
+ /* We have to do this the hard way to detect unsigned overflow.
+ prod = int_const_binop (MULT_EXPR, arg01, arg1, 0); */
+ overflow = mul_double (TREE_INT_CST_LOW (arg01),
+ TREE_INT_CST_HIGH (arg01),
+ TREE_INT_CST_LOW (arg1),
+ TREE_INT_CST_HIGH (arg1), &lpart, &hpart);
+ prod = build_int_2 (lpart, hpart);
+ TREE_TYPE (prod) = TREE_TYPE (arg00);
+ TREE_OVERFLOW (prod) = force_fit_type (prod, overflow)
+ || TREE_INT_CST_HIGH (prod) != hpart
+ || TREE_INT_CST_LOW (prod) != lpart;
+ TREE_CONSTANT_OVERFLOW (prod) = TREE_OVERFLOW (prod);
+
+ if (TYPE_UNSIGNED (TREE_TYPE (arg0)))
+ {
+ tmp = int_const_binop (MINUS_EXPR, arg01, integer_one_node, 0);
+ lo = prod;
+
+ /* Likewise hi = int_const_binop (PLUS_EXPR, prod, tmp, 0). */
+ overflow = add_double (TREE_INT_CST_LOW (prod),
+ TREE_INT_CST_HIGH (prod),
+ TREE_INT_CST_LOW (tmp),
+ TREE_INT_CST_HIGH (tmp),
+ &lpart, &hpart);
+ hi = build_int_2 (lpart, hpart);
+ TREE_TYPE (hi) = TREE_TYPE (arg00);
+ TREE_OVERFLOW (hi) = force_fit_type (hi, overflow)
+ || TREE_INT_CST_HIGH (hi) != hpart
+ || TREE_INT_CST_LOW (hi) != lpart
+ || TREE_OVERFLOW (prod);
+ TREE_CONSTANT_OVERFLOW (hi) = TREE_OVERFLOW (hi);
+ }
+ else if (tree_int_cst_sgn (arg01) >= 0)
+ {
+ tmp = int_const_binop (MINUS_EXPR, arg01, integer_one_node, 0);
+ switch (tree_int_cst_sgn (arg1))
+ {
+ case -1:
+ lo = int_const_binop (MINUS_EXPR, prod, tmp, 0);
+ hi = prod;
+ break;
+
+ case 0:
+ lo = fold_negate_const (tmp, TREE_TYPE (arg0));
+ hi = tmp;
+ break;
+
+ case 1:
+ hi = int_const_binop (PLUS_EXPR, prod, tmp, 0);
+ lo = prod;
+ break;
+
+ default:
+ abort ();
+ }
+ }
+ else
+ {
+ tmp = int_const_binop (PLUS_EXPR, arg01, integer_one_node, 0);
+ switch (tree_int_cst_sgn (arg1))
+ {
+ case -1:
+ hi = int_const_binop (MINUS_EXPR, prod, tmp, 0);
+ lo = prod;
+ break;
+
+ case 0:
+ hi = fold_negate_const (tmp, TREE_TYPE (arg0));
+ lo = tmp;
+ break;
+
+ case 1:
+ lo = int_const_binop (PLUS_EXPR, prod, tmp, 0);
+ hi = prod;
+ break;
+
+ default:
+ abort ();
+ }
+ }
+
+ switch (code)
+ {
+ case EQ_EXPR:
+ if (TREE_OVERFLOW (lo) && TREE_OVERFLOW (hi))
+ return omit_one_operand (type, integer_zero_node, arg00);
+ if (TREE_OVERFLOW (hi))
+ return fold (build2 (GE_EXPR, type, arg00, lo));
+ if (TREE_OVERFLOW (lo))
+ return fold (build2 (LE_EXPR, type, arg00, hi));
+ return build_range_check (type, arg00, 1, lo, hi);
+
+ case NE_EXPR:
+ if (TREE_OVERFLOW (lo) && TREE_OVERFLOW (hi))
+ return omit_one_operand (type, integer_one_node, arg00);
+ if (TREE_OVERFLOW (hi))
+ return fold (build2 (LT_EXPR, type, arg00, lo));
+ if (TREE_OVERFLOW (lo))
+ return fold (build2 (GT_EXPR, type, arg00, hi));
+ return build_range_check (type, arg00, 0, lo, hi);
+
+ case LT_EXPR:
+ if (TREE_OVERFLOW (lo))
+ return omit_one_operand (type, integer_zero_node, arg00);
+ return fold (build2 (LT_EXPR, type, arg00, lo));
+
+ case LE_EXPR:
+ if (TREE_OVERFLOW (hi))
+ return omit_one_operand (type, integer_one_node, arg00);
+ return fold (build2 (LE_EXPR, type, arg00, hi));
+
+ case GT_EXPR:
+ if (TREE_OVERFLOW (hi))
+ return omit_one_operand (type, integer_zero_node, arg00);
+ return fold (build2 (GT_EXPR, type, arg00, hi));
+
+ case GE_EXPR:
+ if (TREE_OVERFLOW (lo))
+ return omit_one_operand (type, integer_one_node, arg00);
+ return fold (build2 (GE_EXPR, type, arg00, lo));
+
+ default:
+ break;
+ }
+
+ return NULL_TREE;
+}
+
+
/* If CODE with arguments ARG0 and ARG1 represents a single bit
equality/inequality test, then return a simplified form of
the test using shifts and logical operations. Otherwise return
@@ -5656,6 +5811,7 @@ fold (tree expr)
case FIX_TRUNC_EXPR:
case FIX_CEIL_EXPR:
case FIX_FLOOR_EXPR:
+ case FIX_ROUND_EXPR:
if (TREE_TYPE (TREE_OPERAND (t, 0)) == type)
return TREE_OPERAND (t, 0);
@@ -7952,6 +8108,20 @@ fold (tree expr)
integer_zero_node));
}
+ /* We can fold X/C1 op C2 where C1 and C2 are integer constants
+ into a single range test. */
+ if (TREE_CODE (arg0) == TRUNC_DIV_EXPR
+ && TREE_CODE (arg1) == INTEGER_CST
+ && TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST
+ && !integer_zerop (TREE_OPERAND (arg0, 1))
+ && !TREE_OVERFLOW (TREE_OPERAND (arg0, 1))
+ && !TREE_OVERFLOW (arg1))
+ {
+ t1 = fold_div_compare (code, type, arg0, arg1);
+ if (t1 != NULL_TREE)
+ return t1;
+ }
+
/* Both ARG0 and ARG1 are known to be constants at this point. */
t1 = fold_relational_const (code, type, arg0, arg1);
return (t1 == NULL_TREE ? t : t1);
@@ -8938,7 +9108,7 @@ tree_expr_nonzero_p (tree t)
{
tree type = TREE_TYPE (t);
- /* Doing something usefull for floating point would need more work. */
+ /* Doing something useful for floating point would need more work. */
if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
return false;
diff --git a/gcc/function.c b/gcc/function.c
index 34b8d867220..322227bc495 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -226,7 +226,7 @@ static rtx assign_stack_local_1 (enum machine_mode, HOST_WIDE_INT, int,
struct function *);
static struct temp_slot *find_temp_slot_from_address (rtx);
static void put_reg_into_stack (struct function *, rtx, tree, enum machine_mode,
- enum machine_mode, int, unsigned int, int, htab_t);
+ unsigned int, bool, bool, bool, htab_t);
static void schedule_fixup_var_refs (struct function *, rtx, tree, enum machine_mode,
htab_t);
static void fixup_var_refs (rtx, enum machine_mode, int, rtx, htab_t);
@@ -485,6 +485,7 @@ get_frame_size (void)
ALIGN controls the amount of alignment for the address of the slot:
0 means according to MODE,
-1 means use BIGGEST_ALIGNMENT and round size to multiple of that,
+ -2 means use BITS_PER_UNIT,
positive specifies alignment boundary in bits.
We do not round to stack_boundary here.
@@ -522,6 +523,8 @@ assign_stack_local_1 (enum machine_mode mode, HOST_WIDE_INT size, int align,
alignment = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
size = CEIL_ROUND (size, alignment);
}
+ else if (align == -2)
+ alignment = 1; /* BITS_PER_UNIT / BITS_PER_UNIT */
else
alignment = align / BITS_PER_UNIT;
@@ -759,7 +762,7 @@ assign_stack_temp_for_type (enum machine_mode mode, HOST_WIDE_INT size, int keep
if (keep == 2)
{
p->level = target_temp_slot_level;
- p->keep = 0;
+ p->keep = 1;
}
else if (keep == 3)
{
@@ -1270,9 +1273,9 @@ put_var_into_stack (tree decl, int rescan)
enum machine_mode promoted_mode, decl_mode;
struct function *function = 0;
tree context;
- int can_use_addressof;
- int volatilep = TREE_CODE (decl) != SAVE_EXPR && TREE_THIS_VOLATILE (decl);
- int usedp = (TREE_USED (decl)
+ bool can_use_addressof_p;
+ bool volatile_p = TREE_CODE (decl) != SAVE_EXPR && TREE_THIS_VOLATILE (decl);
+ bool used_p = (TREE_USED (decl)
|| (TREE_CODE (decl) != SAVE_EXPR && DECL_INITIAL (decl) != 0));
context = decl_function_context (decl);
@@ -1319,7 +1322,7 @@ put_var_into_stack (tree decl, int rescan)
/* If this variable lives in the current function and we don't need to put it
in the stack for the sake of setjmp or the non-locality, try to keep it in
a register until we know we actually need the address. */
- can_use_addressof
+ can_use_addressof_p
= (function == 0
&& ! (TREE_CODE (decl) != SAVE_EXPR && DECL_NONLOCAL (decl))
&& optimize > 0
@@ -1332,7 +1335,8 @@ put_var_into_stack (tree decl, int rescan)
/* If we can't use ADDRESSOF, make sure we see through one we already
generated. */
- if (! can_use_addressof && GET_CODE (reg) == MEM
+ if (! can_use_addressof_p
+ && GET_CODE (reg) == MEM
&& GET_CODE (XEXP (reg, 0)) == ADDRESSOF)
reg = XEXP (XEXP (reg, 0), 0);
@@ -1340,11 +1344,11 @@ put_var_into_stack (tree decl, int rescan)
if (GET_CODE (reg) == REG)
{
- if (can_use_addressof)
+ if (can_use_addressof_p)
gen_mem_addressof (reg, decl, rescan);
else
- put_reg_into_stack (function, reg, TREE_TYPE (decl), promoted_mode,
- decl_mode, volatilep, 0, usedp, 0);
+ put_reg_into_stack (function, reg, TREE_TYPE (decl), decl_mode,
+ 0, volatile_p, used_p, false, 0);
/* If this was previously a MEM but we've removed the ADDRESSOF,
set this address into that MEM so we always use the same
@@ -1366,14 +1370,14 @@ put_var_into_stack (tree decl, int rescan)
#ifdef FRAME_GROWS_DOWNWARD
/* Since part 0 should have a lower address, do it second. */
put_reg_into_stack (function, hipart, part_type, part_mode,
- part_mode, volatilep, 0, 0, 0);
+ 0, volatile_p, false, false, 0);
put_reg_into_stack (function, lopart, part_type, part_mode,
- part_mode, volatilep, 0, 0, 0);
+ 0, volatile_p, false, true, 0);
#else
put_reg_into_stack (function, lopart, part_type, part_mode,
- part_mode, volatilep, 0, 0, 0);
+ 0, volatile_p, false, false, 0);
put_reg_into_stack (function, hipart, part_type, part_mode,
- part_mode, volatilep, 0, 0, 0);
+ 0, volatile_p, false, true, 0);
#endif
/* Change the CONCAT into a combined MEM for both parts. */
@@ -1394,7 +1398,7 @@ put_var_into_stack (tree decl, int rescan)
/* Prevent sharing of rtl that might lose. */
if (GET_CODE (XEXP (reg, 0)) == PLUS)
XEXP (reg, 0) = copy_rtx (XEXP (reg, 0));
- if (usedp && rescan)
+ if (used_p && rescan)
{
schedule_fixup_var_refs (function, reg, TREE_TYPE (decl),
promoted_mode, 0);
@@ -1408,20 +1412,24 @@ put_var_into_stack (tree decl, int rescan)
/* Subroutine of put_var_into_stack. This puts a single pseudo reg REG
into the stack frame of FUNCTION (0 means the current function).
+ TYPE is the user-level data type of the value hold in the register.
DECL_MODE is the machine mode of the user-level data type.
- PROMOTED_MODE is the machine mode of the register.
- VOLATILE_P is nonzero if this is for a "volatile" decl.
- USED_P is nonzero if this reg might have already been used in an insn. */
+ ORIGINAL_REGNO must be set if the real regno is not visible in REG.
+ VOLATILE_P is true if this is for a "volatile" decl.
+ USED_P is true if this reg might have already been used in an insn.
+ CONSECUTIVE_P is true if the stack slot assigned to reg must be
+ consecutive with the previous stack slot. */
static void
put_reg_into_stack (struct function *function, rtx reg, tree type,
- enum machine_mode promoted_mode,
- enum machine_mode decl_mode, int volatile_p,
- unsigned int original_regno, int used_p, htab_t ht)
+ enum machine_mode decl_mode, unsigned int original_regno,
+ bool volatile_p, bool used_p, bool consecutive_p,
+ htab_t ht)
{
struct function *func = function ? function : cfun;
- rtx new = 0;
+ enum machine_mode mode = GET_MODE (reg);
unsigned int regno = original_regno;
+ rtx new = 0;
if (regno == 0)
regno = REGNO (reg);
@@ -1434,7 +1442,8 @@ put_reg_into_stack (struct function *function, rtx reg, tree type,
}
if (new == 0)
- new = assign_stack_local_1 (decl_mode, GET_MODE_SIZE (decl_mode), 0, func);
+ new = assign_stack_local_1 (decl_mode, GET_MODE_SIZE (decl_mode),
+ consecutive_p ? -2 : 0, func);
PUT_CODE (reg, MEM);
PUT_MODE (reg, decl_mode);
@@ -1456,7 +1465,7 @@ put_reg_into_stack (struct function *function, rtx reg, tree type,
}
if (used_p)
- schedule_fixup_var_refs (function, reg, type, promoted_mode, ht);
+ schedule_fixup_var_refs (function, reg, type, mode, ht);
}
/* Make sure that all refs to the variable, previously made
@@ -2897,7 +2906,7 @@ static void
put_addressof_into_stack (rtx r, htab_t ht)
{
tree decl, type;
- int volatile_p, used_p;
+ bool volatile_p, used_p;
rtx reg = XEXP (r, 0);
@@ -2916,12 +2925,12 @@ put_addressof_into_stack (rtx r, htab_t ht)
else
{
type = NULL_TREE;
- volatile_p = 0;
- used_p = 1;
+ volatile_p = false;
+ used_p = true;
}
- put_reg_into_stack (0, reg, type, GET_MODE (reg), GET_MODE (reg),
- volatile_p, ADDRESSOF_REGNO (r), used_p, ht);
+ put_reg_into_stack (0, reg, type, GET_MODE (reg), ADDRESSOF_REGNO (r),
+ volatile_p, used_p, false, ht);
}
/* List of replacements made below in purge_addressof_1 when creating
@@ -6595,6 +6604,21 @@ use_return_register (void)
diddle_return_value (do_use_return_reg, NULL);
}
+/* Possibly warn about unused parameters. */
+void
+do_warn_unused_parameter (tree fn)
+{
+ tree decl;
+
+ for (decl = DECL_ARGUMENTS (fn);
+ decl; decl = TREE_CHAIN (decl))
+ if (!TREE_USED (decl) && TREE_CODE (decl) == PARM_DECL
+ && DECL_NAME (decl) && !DECL_ARTIFICIAL (decl))
+ warning ("%Junused parameter '%D'", decl, decl);
+}
+
+static GTY(()) rtx initial_trampoline;
+
/* Generate RTL for the end of the current function. */
void
@@ -6641,17 +6665,12 @@ expand_function_end (void)
}
}
- /* Possibly warn about unused parameters. */
- if (warn_unused_parameter)
- {
- tree decl;
-
- for (decl = DECL_ARGUMENTS (current_function_decl);
- decl; decl = TREE_CHAIN (decl))
- if (! TREE_USED (decl) && TREE_CODE (decl) == PARM_DECL
- && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
- warning ("%Junused parameter '%D'", decl, decl);
- }
+ /* Possibly warn about unused parameters.
+ When frontend does unit-at-a-time, the warning is already
+ issued at finalization time. */
+ if (warn_unused_parameter
+ && !lang_hooks.callgraph.expand_function)
+ do_warn_unused_parameter (current_function_decl);
/* End any sequences that failed to be closed due to syntax errors. */
while (in_sequence_p ())
diff --git a/gcc/function.h b/gcc/function.h
index bf25f169524..4c7537eba6d 100644
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -626,4 +626,6 @@ extern const char *current_function_name (void);
/* Called once, at initialization, to initialize function.c. */
extern void init_function_once (void);
+extern void do_warn_unused_parameter (tree);
+
#endif /* GCC_FUNCTION_H */
diff --git a/gcc/gcc.c b/gcc/gcc.c
index a681c9e01f9..0c61555e00c 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -2269,6 +2269,17 @@ record_temp_file (const char *filename, int always_delete, int fail_delete)
/* Delete all the temporary files whose names we previously recorded. */
+#ifndef DELETE_IF_ORDINARY
+#define DELETE_IF_ORDINARY(NAME,ST,VERBOSE_FLAG) \
+do \
+ { \
+ if (stat (NAME, &ST) >= 0 && S_ISREG (ST.st_mode)) \
+ if (unlink (NAME) < 0) \
+ if (VERBOSE_FLAG) \
+ perror_with_name (NAME); \
+ } while (0)
+#endif
+
static void
delete_if_ordinary (const char *name)
{
@@ -2285,10 +2296,7 @@ delete_if_ordinary (const char *name)
if (i == 'y' || i == 'Y')
#endif /* DEBUG */
- if (stat (name, &st) >= 0 && S_ISREG (st.st_mode))
- if (unlink (name) < 0)
- if (verbose_flag)
- perror_with_name (name);
+ DELETE_IF_ORDINARY (name, st, verbose_flag);
}
static void
diff --git a/gcc/gcc.h b/gcc/gcc.h
index 9df9ffd1252..f5a04d3a136 100644
--- a/gcc/gcc.h
+++ b/gcc/gcc.h
@@ -48,8 +48,8 @@ struct spec_function
|| !strcmp (STR, "imacros") || !strcmp (STR, "aux-info") \
|| !strcmp (STR, "idirafter") || !strcmp (STR, "iprefix") \
|| !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \
- || !strcmp (STR, "isystem") || !strcmp (STR, "-param") \
- || !strcmp (STR, "specs") \
+ || !strcmp (STR, "iquote") || !strcmp (STR, "isystem") \
+ || !strcmp (STR, "-param") || !strcmp (STR, "specs") \
|| !strcmp (STR, "MF") || !strcmp (STR, "MT") || !strcmp (STR, "MQ"))
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 46bac2da2fc..9e6ced54dd1 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -7793,8 +7793,7 @@ remove_reachable_equiv_notes (basic_block bb, struct ls_expr *smexpr)
bb = act->dest;
if (bb == EXIT_BLOCK_PTR
- || TEST_BIT (visited, bb->index)
- || TEST_BIT (ae_kill[bb->index], smexpr->index))
+ || TEST_BIT (visited, bb->index))
{
act = act->succ_next;
continue;
@@ -8398,14 +8397,14 @@ eliminate_partially_redundant_loads (basic_block bb, rtx insn,
if (npred_ok == 0 /* No load can be replaced by copy. */
|| (optimize_size && npred_ok > 1)) /* Prevent exploding the code. */
- return;
+ goto cleanup;
/* Check if it's worth applying the partial redundancy elimination. */
if (ok_count < GCSE_AFTER_RELOAD_PARTIAL_FRACTION * not_ok_count)
- return;
+ goto cleanup;
if (ok_count < GCSE_AFTER_RELOAD_CRITICAL_FRACTION * critical_count)
- return;
+ goto cleanup;
/* Generate moves to the loaded register from where
the memory is available. */
@@ -8458,6 +8457,22 @@ eliminate_partially_redundant_loads (basic_block bb, rtx insn,
delete_insn (insn);
else
a_occr->deleted_p = 1;
+
+cleanup:
+
+ while (unavail_occrs)
+ {
+ struct unoccr *temp = unavail_occrs->next;
+ free (unavail_occrs);
+ unavail_occrs = temp;
+ }
+
+ while (avail_occrs)
+ {
+ struct unoccr *temp = avail_occrs->next;
+ free (avail_occrs);
+ avail_occrs = temp;
+ }
}
/* Performing the redundancy elimination as described before. */
diff --git a/gcc/genopinit.c b/gcc/genopinit.c
index 95d53107ae2..a7c9f7e5628 100644
--- a/gcc/genopinit.c
+++ b/gcc/genopinit.c
@@ -91,6 +91,8 @@ static const char * const optabs[] =
"udivmod_optab->handlers[$A].insn_code = CODE_FOR_$(udivmod$a4$)",
"smod_optab->handlers[$A].insn_code = CODE_FOR_$(mod$a3$)",
"umod_optab->handlers[$A].insn_code = CODE_FOR_$(umod$a3$)",
+ "fmod_optab->handlers[$A].insn_code = CODE_FOR_$(fmod$a3$)",
+ "drem_optab->handlers[$A].insn_code = CODE_FOR_$(drem$a3$)",
"ftrunc_optab->handlers[$A].insn_code = CODE_FOR_$(ftrunc$F$a2$)",
"and_optab->handlers[$A].insn_code = CODE_FOR_$(and$a3$)",
"ior_optab->handlers[$A].insn_code = CODE_FOR_$(ior$a3$)",
@@ -130,11 +132,13 @@ static const char * const optabs[] =
"exp_optab->handlers[$A].insn_code = CODE_FOR_$(exp$a2$)",
"exp10_optab->handlers[$A].insn_code = CODE_FOR_$(exp10$a2$)",
"exp2_optab->handlers[$A].insn_code = CODE_FOR_$(exp2$a2$)",
+ "expm1_optab->handlers[$A].insn_code = CODE_FOR_$(expm1$a2$)",
"logb_optab->handlers[$A].insn_code = CODE_FOR_$(logb$a2$)",
"ilogb_optab->handlers[$A].insn_code = CODE_FOR_$(ilogb$a2$)",
"log_optab->handlers[$A].insn_code = CODE_FOR_$(log$a2$)",
"log10_optab->handlers[$A].insn_code = CODE_FOR_$(log10$a2$)",
"log2_optab->handlers[$A].insn_code = CODE_FOR_$(log2$a2$)",
+ "log1p_optab->handlers[$A].insn_code = CODE_FOR_$(log1p$a2$)",
"tan_optab->handlers[$A].insn_code = CODE_FOR_$(tan$a2$)",
"atan_optab->handlers[$A].insn_code = CODE_FOR_$(atan$a2$)",
"strlen_optab->handlers[$A].insn_code = CODE_FOR_$(strlen$a$)",
diff --git a/gcc/ggc-zone.c b/gcc/ggc-zone.c
index 51fb1f938cf..da58116fabb 100644
--- a/gcc/ggc-zone.c
+++ b/gcc/ggc-zone.c
@@ -327,7 +327,7 @@ static void free_chunk (struct alloc_chunk *, size_t, struct alloc_zone *);
static void free_page (struct page_entry *);
static void release_pages (struct alloc_zone *);
static void sweep_pages (struct alloc_zone *);
-static void * ggc_alloc_zone_1 (size_t, struct alloc_zone *, short);
+static void * ggc_alloc_zone_1 (size_t, struct alloc_zone *, short MEM_STAT_DECL);
static bool ggc_collect_1 (struct alloc_zone *, bool);
static void check_cookies (void);
@@ -569,7 +569,8 @@ free_chunk (struct alloc_chunk *chunk, size_t size, struct alloc_zone *zone)
/* Allocate a chunk of memory of SIZE bytes. */
static void *
-ggc_alloc_zone_1 (size_t size, struct alloc_zone *zone, short type)
+ggc_alloc_zone_1 (size_t size, struct alloc_zone *zone, short type
+ MEM_STAT_DECL)
{
size_t bin = 0;
size_t lsize = 0;
@@ -659,7 +660,12 @@ ggc_alloc_zone_1 (size_t size, struct alloc_zone *zone, short type)
lchunk->size = lsize;
lchunk->large = 0;
free_chunk (lchunk, lsize, zone);
+ lsize = 0;
}
+#ifdef GATHER_STATISTICS
+ ggc_record_overhead (size, lsize PASS_MEM_STAT);
+#endif
+
/* Calculate the object's address. */
found:
#ifdef COOKIE_CHECKING
@@ -701,38 +707,39 @@ ggc_alloc_zone_1 (size_t size, struct alloc_zone *zone, short type)
for that type. */
void *
-ggc_alloc_typed (enum gt_types_enum gte, size_t size)
+ggc_alloc_typed_stat (enum gt_types_enum gte, size_t size
+ MEM_STAT_DECL)
{
switch (gte)
{
case gt_ggc_e_14lang_tree_node:
- return ggc_alloc_zone_1 (size, tree_zone, gte);
+ return ggc_alloc_zone_1 (size, tree_zone, gte PASS_MEM_STAT);
case gt_ggc_e_7rtx_def:
- return ggc_alloc_zone_1 (size, rtl_zone, gte);
+ return ggc_alloc_zone_1 (size, rtl_zone, gte PASS_MEM_STAT);
case gt_ggc_e_9rtvec_def:
- return ggc_alloc_zone_1 (size, rtl_zone, gte);
+ return ggc_alloc_zone_1 (size, rtl_zone, gte PASS_MEM_STAT);
default:
- return ggc_alloc_zone_1 (size, &main_zone, gte);
+ return ggc_alloc_zone_1 (size, &main_zone, gte PASS_MEM_STAT);
}
}
/* Normal ggc_alloc simply allocates into the main zone. */
void *
-ggc_alloc (size_t size)
+ggc_alloc_stat (size_t size MEM_STAT_DECL)
{
- return ggc_alloc_zone_1 (size, &main_zone, -1);
+ return ggc_alloc_zone_1 (size, &main_zone, -1 PASS_MEM_STAT);
}
/* Zone allocation allocates into the specified zone. */
void *
-ggc_alloc_zone (size_t size, struct alloc_zone *zone)
+ggc_alloc_zone_stat (size_t size, struct alloc_zone *zone MEM_STAT_DECL)
{
- return ggc_alloc_zone_1 (size, zone, -1);
+ return ggc_alloc_zone_1 (size, zone, -1 PASS_MEM_STAT);
}
/* Poison the chunk. */
@@ -1293,7 +1300,7 @@ struct ggc_pch_data
size_t written;
};
-/* Initialize the PCH datastructure. */
+/* Initialize the PCH data structure. */
struct ggc_pch_data *
init_ggc_pch (void)
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index 363bbea6fe0..a6066da2151 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -3291,10 +3291,6 @@ if_convert (int x_life_data_ok)
&& (!flag_reorder_blocks_and_partition || !no_new_pseudos))
mark_loop_exit_edges ();
- /* Free up basic_block_for_insn so that we don't have to keep it
- up to date, either here or in merge_blocks. */
- free_basic_block_vars (1);
-
/* Compute postdominators if we think we'll use them. */
if (HAVE_conditional_execution || life_data_ok)
calculate_dominance_info (CDI_POST_DOMINATORS);
diff --git a/gcc/integrate.c b/gcc/integrate.c
index ff1f2abde33..de897176ea0 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -992,6 +992,7 @@ subst_constants (rtx *loc, rtx insn, struct inline_remap *map, int memonly)
if (op_mode == VOIDmode)
op_mode = GET_MODE (XEXP (x, 1));
+
new = simplify_relational_operation (code, GET_MODE (x), op_mode,
XEXP (x, 0), XEXP (x, 1));
break;
@@ -1020,15 +1021,18 @@ subst_constants (rtx *loc, rtx insn, struct inline_remap *map, int memonly)
{
/* We have compare of two VOIDmode constants for which
we recorded the comparison mode. */
- rtx temp =
- simplify_const_relational_operation (GET_CODE (op0),
- map->compare_mode,
- XEXP (op0, 0),
- XEXP (op0, 1));
-
- if (temp == const0_rtx)
+ rtx tem =
+ simplify_gen_relational (GET_CODE (op0), GET_MODE (op0),
+ map->compare_mode, XEXP (op0, 0),
+ XEXP (op0, 1));
+
+ if (GET_CODE (tem) != CONST_INT)
+ new = simplify_ternary_operation (code, GET_MODE (x),
+ op0_mode, tem, XEXP (x, 1),
+ XEXP (x, 2));
+ else if (tem == const0_rtx)
new = XEXP (x, 2);
- else if (temp == const1_rtx)
+ else
new = XEXP (x, 1);
}
}
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index cec01036680..25594a31db1 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,11 +1,64 @@
2004-05-10 Andrew Haley <aph@redhat.com>
- * java-gimplify.c (java_gimplify_expr): Copy the LHS of a binary
- expression into a temporary variable.
+ * parse.y (create_class): Set TYPE_VFIELD.
+ * decl.c (java_init_decl_processing): Likewise.
+
+ * expr.c (build_invokevirtual): Remove DECL_VINDEX offset adjustment.
+ * class.c (make_method_value): Replace DECL_VINDEX with call to
+ get_method_index().
+ (get_dispatch_vector): Likewise.
+ (layout_class_method): Likewise.
+ Replace set of DECL_VINDEX with call to set_method_index().
+ (set_method_index): New function.
+ (get_method_index): New function.
+ * java-tree.h (set_method_index): New function decl.
+ (get_method_index): New function decl.
+
+2004-05-10 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * parse.y (check_pkg_class_access): Add new argument
+ and use it when cl is NULL to call lookup_cl on it.
+ (parser_check_super_interface): Do not call lookup_cl.
+ Pass this_decl to check_pkg_class_access and NULL
+ instead of lookup_cl.
+ (parser_check_super): Update for change in
+ check_pkg_class_access.
+ (do_resolve_class): Likewise.
+ (process_imports): Likewise.
+ (find_in_imports_on_demand): Likewise.
+ (resolve_qualified_expression_name): Likewise.
+
+2004-05-06 Ranjit Mathew <rmathew@hotmail.com>
+
+ Fixes PR java/9685, PR java/15073
+ * parse.y (accessibility_string): New method.
+ (not_accessible_field_error): Use accessibility_string()
+ instead of java_accstring_lookup().
+ (resolve_qualified_expression_name): Check with
+ check_pkg_class_access() before allowing access using
+ qualified names.
+ Fix comment typo.
+ Use check_pkg_class_access() instead of not_accessible_p()
+ for unqualified types.
+ (not_accessible_p): Use DECL_CONTEXT (member) instead of
+ REFERENCE for package-private access checking.
+ (patch_method_invocation): Use accessibility_string() instead
+ of java_accstring_lookup().
+
+2004-04-30 Ranjit Mathew <rmathew@hotmail.com>
+
+ Fixes PR java/15133
+ * gjavah.c (struct method_name): Add member is_native.
+ (overloaded_jni_method_exists_p): Match candidate method only if
+ it is native.
+ (print_method_info): Initialise is_native flag from the method's
+ access flags.
+
+2004-04-30 Roger Sayle <roger@eyesopen.com>
+
+ * builtins.c (java_builtins): Add acos, asin, ceil and floor.
+ (initialize_builtins): Likewise, define acos, asin, ceil and floor.
- (java_gimplify_new_array_init): Set the DECL_CONTEXT of array and
- tmp to current_function_decl.
-
2004-04-22 Roger Sayle <roger@eyesopen.com>
* resource.c (write_resource_constructor): Guard call to possibly
diff --git a/gcc/java/ChangeLog.tree-ssa b/gcc/java/ChangeLog.tree-ssa
index b2cbf8e1e4b..81081a52860 100644
--- a/gcc/java/ChangeLog.tree-ssa
+++ b/gcc/java/ChangeLog.tree-ssa
@@ -1,3 +1,11 @@
+2004-05-10 Andrew Haley <aph@redhat.com>
+
+ * java-gimplify.c (java_gimplify_expr): Copy the LHS of a binary
+ expression into a temporary variable.
+
+ (java_gimplify_new_array_init): Set the DECL_CONTEXT of array and
+ tmp to current_function_decl.
+
2004-04-13 Diego Novillo <dnovillo@redhat.com>
* expr.c (build_expr_wfl): Don't check type nodes for
diff --git a/gcc/java/builtins.c b/gcc/java/builtins.c
index 8208892fa5e..77f0c582105 100644
--- a/gcc/java/builtins.c
+++ b/gcc/java/builtins.c
@@ -74,10 +74,14 @@ static GTY(()) struct builtin_record java_builtins[] =
{ { "java.lang.Math" }, { "min" }, min_builtin, 0 },
{ { "java.lang.Math" }, { "max" }, max_builtin, 0 },
{ { "java.lang.Math" }, { "abs" }, abs_builtin, 0 },
+ { { "java.lang.Math" }, { "acos" }, NULL, BUILT_IN_ACOS },
+ { { "java.lang.Math" }, { "asin" }, NULL, BUILT_IN_ASIN },
{ { "java.lang.Math" }, { "atan" }, NULL, BUILT_IN_ATAN },
{ { "java.lang.Math" }, { "atan2" }, NULL, BUILT_IN_ATAN2 },
+ { { "java.lang.Math" }, { "ceil" }, NULL, BUILT_IN_CEIL },
{ { "java.lang.Math" }, { "cos" }, NULL, BUILT_IN_COS },
{ { "java.lang.Math" }, { "exp" }, NULL, BUILT_IN_EXP },
+ { { "java.lang.Math" }, { "floor" }, NULL, BUILT_IN_FLOOR },
{ { "java.lang.Math" }, { "log" }, NULL, BUILT_IN_LOG },
{ { "java.lang.Math" }, { "pow" }, NULL, BUILT_IN_POW },
{ { "java.lang.Math" }, { "sin" }, NULL, BUILT_IN_SIN },
@@ -186,14 +190,22 @@ initialize_builtins (void)
define_builtin (BUILT_IN_FMODF, "__builtin_fmodf",
float_ftype_float_float, "fmodf");
+ define_builtin (BUILT_IN_ACOS, "__builtin_acos",
+ double_ftype_double, "_ZN4java4lang4Math4acosEd");
+ define_builtin (BUILT_IN_ASIN, "__builtin_asin",
+ double_ftype_double, "_ZN4java4lang4Math4asinEd");
define_builtin (BUILT_IN_ATAN, "__builtin_atan",
double_ftype_double, "_ZN4java4lang4Math4atanEd");
define_builtin (BUILT_IN_ATAN2, "__builtin_atan2",
double_ftype_double_double, "_ZN4java4lang4Math5atan2Edd");
+ define_builtin (BUILT_IN_CEIL, "__builtin_ceil",
+ double_ftype_double, "_ZN4java4lang4Math4ceilEd");
define_builtin (BUILT_IN_COS, "__builtin_cos",
double_ftype_double, "_ZN4java4lang4Math3cosEd");
define_builtin (BUILT_IN_EXP, "__builtin_exp",
double_ftype_double, "_ZN4java4lang4Math3expEd");
+ define_builtin (BUILT_IN_FLOOR, "__builtin_floor",
+ double_ftype_double, "_ZN4java4lang4Math5floorEd");
define_builtin (BUILT_IN_LOG, "__builtin_log",
double_ftype_double, "_ZN4java4lang4Math3logEd");
define_builtin (BUILT_IN_POW, "__builtin_pow",
diff --git a/gcc/java/class.c b/gcc/java/class.c
index cc24cb65118..137b647d191 100644
--- a/gcc/java/class.c
+++ b/gcc/java/class.c
@@ -476,6 +476,7 @@ set_super_info (int access_flags, tree this_class,
if (super_class)
total_supers++;
+ TYPE_VFIELD (this_class) = TYPE_VFIELD (object_type_node);
TYPE_BINFO_BASETYPES (this_class) = make_tree_vec (total_supers);
if (super_class)
{
@@ -1249,13 +1250,13 @@ make_method_value (tree mdecl)
tree class_decl;
#define ACC_TRANSLATED 0x4000
int accflags = get_access_flags_from_decl (mdecl) | ACC_TRANSLATED;
-
+
class_decl = DECL_CONTEXT (mdecl);
/* For interfaces, the index field contains the dispatch index. */
if (CLASS_INTERFACE (TYPE_NAME (class_decl)))
index = build_int_2 (get_interface_method_index (mdecl, class_decl), 0);
- else if (!flag_indirect_dispatch && DECL_VINDEX (mdecl) != NULL_TREE)
- index = DECL_VINDEX (mdecl);
+ else if (!flag_indirect_dispatch && get_method_index (mdecl) != NULL_TREE)
+ index = get_method_index (mdecl);
else
index = integer_minus_one_node;
@@ -1343,10 +1344,12 @@ get_dispatch_vector (tree type)
for (method = TYPE_METHODS (type); method != NULL_TREE;
method = TREE_CHAIN (method))
- if (DECL_VINDEX (method) != NULL_TREE
- && host_integerp (DECL_VINDEX (method), 0))
- TREE_VEC_ELT (vtable, tree_low_cst (DECL_VINDEX (method), 0))
- = method;
+ {
+ tree method_index = get_method_index (method);
+ if (method_index != NULL_TREE
+ && host_integerp (method_index, 0))
+ TREE_VEC_ELT (vtable, tree_low_cst (method_index, 0)) = method;
+ }
}
return vtable;
@@ -1426,6 +1429,42 @@ get_dispatch_table (tree type, tree this_class_addr)
arraysize), list);
}
+
+/* Set the method_index for a method decl. */
+void
+set_method_index (tree decl, tree method_index)
+{
+ method_index = fold (convert (sizetype, method_index));
+
+ if (TARGET_VTABLE_USES_DESCRIPTORS)
+ /* Add one to skip bogus descriptor for class and GC descriptor. */
+ method_index = size_binop (PLUS_EXPR, method_index, size_int (1));
+ else
+ /* Add 1 to skip "class" field of dtable, and 1 to skip GC descriptor. */
+ method_index = size_binop (PLUS_EXPR, method_index, size_int (2));
+
+ DECL_VINDEX (decl) = method_index;
+}
+
+/* Get the method_index for a method decl. */
+tree
+get_method_index (tree decl)
+{
+ tree method_index = DECL_VINDEX (decl);
+
+ if (! method_index)
+ return NULL;
+
+ if (TARGET_VTABLE_USES_DESCRIPTORS)
+ /* Sub one to skip bogus descriptor for class and GC descriptor. */
+ method_index = size_binop (MINUS_EXPR, method_index, size_int (1));
+ else
+ /* Sub 1 to skip "class" field of dtable, and 1 to skip GC descriptor. */
+ method_index = size_binop (MINUS_EXPR, method_index, size_int (2));
+
+ return method_index;
+}
+
static int
supers_all_compiled (tree type)
{
@@ -2173,8 +2212,9 @@ layout_class_method (tree this_class, tree super_class,
method_sig);
if (super_method != NULL_TREE && ! METHOD_PRIVATE (super_method))
{
- DECL_VINDEX (method_decl) = DECL_VINDEX (super_method);
- if (DECL_VINDEX (method_decl) == NULL_TREE
+ tree method_index = get_method_index (super_method);
+ set_method_index (method_decl, method_index);
+ if (method_index == NULL_TREE
&& !CLASS_FROM_SOURCE_P (this_class))
error ("%Jnon-static method '%D' overrides static method",
method_decl, method_decl);
@@ -2184,7 +2224,7 @@ layout_class_method (tree this_class, tree super_class,
&& ! CLASS_FINAL (TYPE_NAME (this_class))
&& dtable_count)
{
- DECL_VINDEX (method_decl) = dtable_count;
+ set_method_index (method_decl, dtable_count);
dtable_count = fold (build (PLUS_EXPR, integer_type_node,
dtable_count, integer_one_node));
}
diff --git a/gcc/java/decl.c b/gcc/java/decl.c
index 80c459c4023..7a36e54ffb9 100644
--- a/gcc/java/decl.c
+++ b/gcc/java/decl.c
@@ -681,6 +681,9 @@ java_init_decl_processing (void)
otable_ptr_type = build_pointer_type (otable_type);
PUSH_FIELD (object_type_node, field, "vtable", dtable_ptr_type);
+ DECL_FCONTEXT (field) = object_type_node;
+ TYPE_VFIELD (object_type_node) = field;
+
/* This isn't exactly true, but it is what we have in the source.
There is an unresolved issue here, which is whether the vtable
should be marked by the GC. */
diff --git a/gcc/java/expr.c b/gcc/java/expr.c
index eacae53989f..a63309ec9a4 100644
--- a/gcc/java/expr.c
+++ b/gcc/java/expr.c
@@ -1955,18 +1955,13 @@ build_invokevirtual (tree dtable, tree method)
}
else
{
- method_index = convert (sizetype, DECL_VINDEX (method));
-
- if (TARGET_VTABLE_USES_DESCRIPTORS)
- /* Add one to skip bogus descriptor for class and GC descriptor. */
- method_index = size_binop (PLUS_EXPR, method_index, size_int (1));
- else
- /* Add 1 to skip "class" field of dtable, and 1 to skip GC descriptor. */
- method_index = size_binop (PLUS_EXPR, method_index, size_int (2));
-
+ /* We fetch the DECL_VINDEX field directly here, rather than
+ using get_method_index(). DECL_VINDEX is the true offset
+ from the vtable base to a method, regrdless of any extra
+ words inserted at the start of the vtable. */
+ method_index = DECL_VINDEX (method);
method_index = size_binop (MULT_EXPR, method_index,
TYPE_SIZE_UNIT (nativecode_ptr_ptr_type_node));
-
if (TARGET_VTABLE_USES_DESCRIPTORS)
method_index = size_binop (MULT_EXPR, method_index,
size_int (TARGET_VTABLE_USES_DESCRIPTORS));
diff --git a/gcc/java/gjavah.c b/gcc/java/gjavah.c
index 0a09ab6c137..45e5f251b9f 100644
--- a/gcc/java/gjavah.c
+++ b/gcc/java/gjavah.c
@@ -119,6 +119,7 @@ struct method_name
int length;
unsigned char *signature;
int sig_length;
+ int is_native;
struct method_name *next;
};
@@ -634,7 +635,7 @@ name_is_method_p (const unsigned char *name, int length)
return 0;
}
-/* If there is already a method named NAME, whose signature is not
+/* If there is already a native method named NAME, whose signature is not
SIGNATURE, then return true. Otherwise return false. */
static int
overloaded_jni_method_exists_p (const unsigned char *name, int length,
@@ -644,7 +645,8 @@ overloaded_jni_method_exists_p (const unsigned char *name, int length,
for (p = method_name_list; p != NULL; p = p->next)
{
- if (p->length == length
+ if (p->is_native
+ && p->length == length
&& ! memcmp (p->name, name, length)
&& (p->sig_length != sig_length
|| memcmp (p->signature, signature, sig_length)))
@@ -851,6 +853,7 @@ print_method_info (FILE *stream, JCF* jcf, int name_index, int sig_index,
nn->next = method_name_list;
nn->sig_length = JPOOL_UTF_LENGTH (jcf, sig_index);
nn->signature = xmalloc (nn->sig_length);
+ nn->is_native = METHOD_IS_NATIVE (flags);
memcpy (nn->signature, JPOOL_UTF_DATA (jcf, sig_index),
nn->sig_length);
method_name_list = nn;
diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h
index e0508b82935..b04ee4b0a95 100644
--- a/gcc/java/java-tree.h
+++ b/gcc/java/java-tree.h
@@ -1235,6 +1235,8 @@ extern int common_enclosing_context_p (tree, tree);
extern int enclosing_context_p (tree, tree);
extern tree build_result_decl (tree);
extern void emit_handlers (void);
+extern void set_method_index (tree decl, tree method_index);
+extern tree get_method_index (tree decl);
extern void make_class_data (tree);
extern void register_class (void);
extern int alloc_name_constant (int, tree);
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index ad2b7491cdd..d6c597f4a52 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -76,6 +76,7 @@ definitions and other extensions. */
/* Local function prototypes */
static char *java_accstring_lookup (int);
+static const char *accessibility_string (int);
static void classitf_redefinition_error (const char *,tree, tree, tree);
static void variable_redefinition_error (tree, tree, tree, int);
static tree create_class (int, tree, tree, tree);
@@ -106,7 +107,7 @@ static void read_import_dir (tree);
static int find_in_imports_on_demand (tree, tree);
static void find_in_imports (tree, tree);
static void check_inner_class_access (tree, tree, tree);
-static int check_pkg_class_access (tree, tree, bool);
+static int check_pkg_class_access (tree, tree, bool, tree);
static void register_package (tree);
static tree resolve_package (tree, tree *, tree *);
static tree resolve_class (tree, tree, tree, tree);
@@ -3182,7 +3183,7 @@ not_accessible_field_error (tree wfl, tree decl)
{
parse_error_context
(wfl, "Can't access %s field `%s.%s' from `%s'",
- java_accstring_lookup (get_access_flags_from_decl (decl)),
+ accessibility_string (get_access_flags_from_decl (decl)),
GET_TYPE_NAME (DECL_CONTEXT (decl)),
IDENTIFIER_POINTER (DECL_NAME (decl)),
IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class))));
@@ -3228,6 +3229,22 @@ java_accstring_lookup (int flags)
#undef COPY_RETURN
}
+/* Returns a string denoting the accessibility of a class or a member as
+ indicated by FLAGS. We need a separate function from
+ java_accstring_lookup, as the latter can return spurious "static", etc.
+ if package-private access is defined (in which case none of the
+ relevant access control bits in FLAGS is set). */
+
+static const char *
+accessibility_string (int flags)
+{
+ if (flags & ACC_PRIVATE) return "private";
+ if (flags & ACC_PROTECTED) return "protected";
+ if (flags & ACC_PUBLIC) return "public";
+
+ return "package-private";
+}
+
/* Issuing error messages upon redefinition of classes, interfaces or
variables. */
@@ -4020,6 +4037,11 @@ create_class (int flags, tree id, tree super, tree interfaces)
CLASS_COMPLETE_P (decl) = 1;
add_superinterfaces (decl, interfaces);
+ /* TYPE_VFIELD' is a compiler-generated field used to point to
+ virtual function tables. In gcj, every class has a common base
+ virtual function table in java.lang.object. */
+ TYPE_VFIELD (TREE_TYPE (decl)) = TYPE_VFIELD (object_type_node);
+
/* Add the private this$<n> field, Replicate final locals still in
scope as private final fields mangled like val$<local_name>.
This doesn't not occur for top level (static) inner classes. */
@@ -5062,7 +5084,7 @@ parser_check_super_interface (tree super_decl, tree this_decl, tree this_wfl)
access rules (6.6.1). */
if (! INNER_CLASS_P (super_type)
&& check_pkg_class_access (DECL_NAME (super_decl),
- lookup_cl (this_decl), true))
+ NULL_TREE, true, this_decl))
return 1;
SOURCE_FRONTEND_DEBUG (("Completing interface %s with %s",
@@ -5100,7 +5122,7 @@ parser_check_super (tree super_decl, tree this_decl, tree wfl)
/* Check top-level class scope. Inner classes are subject to member access
rules (6.6.1). */
if (! INNER_CLASS_P (super_type)
- && (check_pkg_class_access (DECL_NAME (super_decl), wfl, true)))
+ && (check_pkg_class_access (DECL_NAME (super_decl), wfl, true, NULL_TREE)))
return 1;
SOURCE_FRONTEND_DEBUG (("Completing class %s with %s",
@@ -5840,7 +5862,7 @@ do_resolve_class (tree enclosing, tree class_type, tree decl, tree cl)
by the caller. */
if (cl)
{
- if (check_pkg_class_access (TYPE_NAME (class_type), cl, true))
+ if (check_pkg_class_access (TYPE_NAME (class_type), cl, true, NULL_TREE))
return NULL_TREE;
}
@@ -6800,7 +6822,7 @@ process_imports (void)
QUALIFIED_P (to_be_found) = 1;
load_class (to_be_found, 0);
error_found =
- check_pkg_class_access (to_be_found, TREE_PURPOSE (import), true);
+ check_pkg_class_access (to_be_found, TREE_PURPOSE (import), true, NULL_TREE);
/* We found it, we can bail out */
if (IDENTIFIER_CLASS_VALUE (to_be_found))
@@ -7044,7 +7066,7 @@ find_in_imports_on_demand (tree enclosing_type, tree class_type)
}
if (decl && ! INNER_CLASS_P (TREE_TYPE (decl)))
access_check = check_pkg_class_access (node, TREE_PURPOSE (import),
- false);
+ false, NULL_TREE);
else
/* 6.6.1: Inner classes are subject to member access rules. */
access_check = 0;
@@ -7230,10 +7252,11 @@ check_inner_class_access (tree decl, tree enclosing_decl, tree cl)
/* Accessibility check for top-level classes. If CLASS_NAME is in a
foreign package, it must be PUBLIC. Return 0 if no access
violations were found, 1 otherwise. If VERBOSE is true and an error
- was found, it is reported and accounted for. */
+ was found, it is reported and accounted for. If CL is NULL then
+ look it up with THIS_DECL. */
static int
-check_pkg_class_access (tree class_name, tree cl, bool verbose)
+check_pkg_class_access (tree class_name, tree cl, bool verbose, tree this_decl)
{
tree type;
@@ -7258,7 +7281,8 @@ check_pkg_class_access (tree class_name, tree cl, bool verbose)
if (verbose)
parse_error_context
- (cl, "Can't access %s `%s'. Only public classes and interfaces in other packages can be accessed",
+ (cl == NULL ? lookup_cl (this_decl): cl,
+ "Can't access %s `%s'. Only public classes and interfaces in other packages can be accessed",
(CLASS_INTERFACE (TYPE_NAME (type)) ? "interface" : "class"),
IDENTIFIER_POINTER (class_name));
return 1;
@@ -9762,6 +9786,8 @@ resolve_qualified_expression_name (tree wfl, tree *found_decl,
tree list;
*where_found = decl;
+ check_pkg_class_access (DECL_NAME (decl), qual_wfl, true, NULL);
+
/* We want to be absolutely sure that the class is laid
out. We're going to search something inside it. */
*type_found = type = TREE_TYPE (decl);
@@ -9802,8 +9828,8 @@ resolve_qualified_expression_name (tree wfl, tree *found_decl,
decl = QUAL_RESOLUTION (q);
/* Sneak preview. If next we see a `new', we're facing a
- qualification with resulted in a type being selected
- instead of a field. Report the error */
+ qualification which resulted in a type being selected
+ instead of a field. Report the error. */
if(TREE_CHAIN (q)
&& TREE_CODE (TREE_PURPOSE (TREE_CHAIN (q))) == NEW_CLASS_EXPR)
{
@@ -9812,15 +9838,8 @@ resolve_qualified_expression_name (tree wfl, tree *found_decl,
return 1;
}
- if (not_accessible_p (TREE_TYPE (decl), decl, type, 0))
- {
- parse_error_context
- (qual_wfl, "Can't access %s class '%s' from '%s'",
- java_accstring_lookup (get_access_flags_from_decl (decl)),
- IDENTIFIER_POINTER (DECL_NAME (decl)),
- IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class))));
- return 1;
- }
+ check_pkg_class_access (DECL_NAME (decl), qual_wfl, true, NULL);
+
check_deprecation (qual_wfl, decl);
type = TREE_TYPE (decl);
@@ -10083,14 +10102,9 @@ not_accessible_p (tree reference, tree member, tree where, int from_super)
return 1;
}
- /* Default access are permitted only when occurring within the
- package in which the type (REFERENCE) is declared. In other words,
- REFERENCE is defined in the current package */
- if (ctxp->package)
- return !class_in_current_package (reference);
-
- /* Otherwise, access is granted */
- return 0;
+ /* Default access is permitted only when occurring from within the
+ package in which the context (MEMBER) is declared. */
+ return !class_in_current_package (DECL_CONTEXT (member));
}
/* Test deprecated decl access. */
@@ -10483,7 +10497,7 @@ patch_method_invocation (tree patch, tree primary, tree where, int from_super,
{
const char *const fct_name = IDENTIFIER_POINTER (DECL_NAME (list));
const char *const access =
- java_accstring_lookup (get_access_flags_from_decl (list));
+ accessibility_string (get_access_flags_from_decl (list));
const char *const klass =
IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (list))));
const char *const refklass =
diff --git a/gcc/loop-doloop.c b/gcc/loop-doloop.c
index 0396957c0f1..d8d3edf500e 100644
--- a/gcc/loop-doloop.c
+++ b/gcc/loop-doloop.c
@@ -129,7 +129,7 @@ doloop_condition_get (rtx pattern)
return condition;
/* ??? If a machine uses a funny comparison, we could return a
- canonicalised form here. */
+ canonicalized form here. */
return 0;
}
@@ -144,6 +144,7 @@ doloop_valid_p (struct loop *loop, struct niter_desc *desc)
basic_block *body = get_loop_body (loop), bb;
rtx insn;
unsigned i;
+ bool result = true;
/* Check for loops that may not terminate under special conditions. */
if (!desc->simple_p
@@ -174,7 +175,8 @@ doloop_valid_p (struct loop *loop, struct niter_desc *desc)
enable count-register loops in this case. */
if (dump_file)
fprintf (dump_file, "Doloop: Possible infinite iteration case.\n");
- return false;
+ result = false;
+ goto cleanup;
}
for (i = 0; i < loop->num_nodes; i++)
@@ -191,7 +193,8 @@ doloop_valid_p (struct loop *loop, struct niter_desc *desc)
{
if (dump_file)
fprintf (dump_file, "Doloop: Function call in loop.\n");
- return false;
+ result = false;
+ goto cleanup;
}
/* Some targets (eg, PPC) use the count register for branch on table
@@ -202,13 +205,17 @@ doloop_valid_p (struct loop *loop, struct niter_desc *desc)
{
if (dump_file)
fprintf (dump_file, "Doloop: Computed branch in the loop.\n");
- return false;
+ result = false;
+ goto cleanup;
}
}
}
+ result = true;
+
+cleanup:
free (body);
- return true;
+ return result;
}
/* Adds test of COND jumping to DEST to the end of BB. */
diff --git a/gcc/optabs.c b/gcc/optabs.c
index b32315ba463..f89e053c456 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -1089,7 +1089,7 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1,
/* If TARGET is the same as one of the operands, the REG_EQUAL note
won't be accurate, so use a new target. Do this also if target is not
a REG, first because having a register instead may open optimization
- oportunities, and second because if target and op0 happen to be MEMs
+ opportunities, and second because if target and op0 happen to be MEMs
designating the same location, we would risk clobbering it too early
in the code sequence we generate below. */
if (target == 0 || target == op0 || target == op1 || ! REG_P (target))
@@ -5328,6 +5328,8 @@ init_optabs (void)
udivmod_optab = init_optab (UNKNOWN);
smod_optab = init_optab (MOD);
umod_optab = init_optab (UMOD);
+ fmod_optab = init_optab (UNKNOWN);
+ drem_optab = init_optab (UNKNOWN);
ftrunc_optab = init_optab (UNKNOWN);
and_optab = init_optab (AND);
ior_optab = init_optab (IOR);
@@ -5386,11 +5388,13 @@ init_optabs (void)
exp_optab = init_optab (UNKNOWN);
exp10_optab = init_optab (UNKNOWN);
exp2_optab = init_optab (UNKNOWN);
+ expm1_optab = init_optab (UNKNOWN);
logb_optab = init_optab (UNKNOWN);
ilogb_optab = init_optab (UNKNOWN);
log_optab = init_optab (UNKNOWN);
log10_optab = init_optab (UNKNOWN);
log2_optab = init_optab (UNKNOWN);
+ log1p_optab = init_optab (UNKNOWN);
tan_optab = init_optab (UNKNOWN);
atan_optab = init_optab (UNKNOWN);
strlen_optab = init_optab (UNKNOWN);
diff --git a/gcc/optabs.h b/gcc/optabs.h
index 2e0a47ab9e9..6fc6c1779e1 100644
--- a/gcc/optabs.h
+++ b/gcc/optabs.h
@@ -93,6 +93,9 @@ enum optab_index
/* Signed remainder */
OTI_smod,
OTI_umod,
+ /* Floating point remainder functions */
+ OTI_fmod,
+ OTI_drem,
/* Convert float to integer in float fmt */
OTI_ftrunc,
@@ -164,6 +167,8 @@ enum optab_index
OTI_exp10,
/* Base-2 Exponential */
OTI_exp2,
+ /* Exponential - 1*/
+ OTI_expm1,
/* Radix-independent exponent */
OTI_logb,
OTI_ilogb,
@@ -173,6 +178,8 @@ enum optab_index
OTI_log10,
/* Base-2 Logarithm */
OTI_log2,
+ /* logarithm of 1 plus argument */
+ OTI_log1p,
/* Rounding functions */
OTI_floor,
OTI_ceil,
@@ -243,6 +250,8 @@ extern GTY(()) optab optab_table[OTI_MAX];
#define udivmod_optab (optab_table[OTI_udivmod])
#define smod_optab (optab_table[OTI_smod])
#define umod_optab (optab_table[OTI_umod])
+#define fmod_optab (optab_table[OTI_fmod])
+#define drem_optab (optab_table[OTI_drem])
#define ftrunc_optab (optab_table[OTI_ftrunc])
#define and_optab (optab_table[OTI_and])
#define ior_optab (optab_table[OTI_ior])
@@ -281,11 +290,13 @@ extern GTY(()) optab optab_table[OTI_MAX];
#define exp_optab (optab_table[OTI_exp])
#define exp10_optab (optab_table[OTI_exp10])
#define exp2_optab (optab_table[OTI_exp2])
+#define expm1_optab (optab_table[OTI_expm1])
#define logb_optab (optab_table[OTI_logb])
#define ilogb_optab (optab_table[OTI_ilogb])
#define log_optab (optab_table[OTI_log])
#define log10_optab (optab_table[OTI_log10])
#define log2_optab (optab_table[OTI_log2])
+#define log1p_optab (optab_table[OTI_log1p])
#define floor_optab (optab_table[OTI_floor])
#define ceil_optab (optab_table[OTI_ceil])
#define btrunc_optab (optab_table[OTI_trunc])
diff --git a/gcc/opts.c b/gcc/opts.c
index 08414364321..c8a488f5d45 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -622,8 +622,9 @@ decode_options (unsigned int argc, const char **argv)
/* Initialize whether `char' is signed. */
flag_signed_char = DEFAULT_SIGNED_CHAR;
- /* Initialize how much space enums occupy, by default. */
- flag_short_enums = targetm.default_short_enums ();
+ /* Set this to a special "uninitialized" value. The actual default is set
+ after target options have been processed. */
+ flag_short_enums = 2;
/* Initialize target_flags before OPTIMIZATION_OPTIONS so the latter can
modify it. */
@@ -760,6 +761,10 @@ common_handle_option (size_t scode, const char *arg,
set_Wextra (value);
break;
+ case OPT_Wfatal_errors:
+ flag_fatal_errors = value;
+ break;
+
case OPT_Winline:
warn_inline = value;
break;
diff --git a/gcc/passes.c b/gcc/passes.c
index ecdb75567f5..43b46e2cae7 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -466,7 +466,7 @@ rest_of_handle_final (tree decl, rtx insns)
fflush (asm_out_file);
/* Release all memory allocated by flow. */
- free_basic_block_vars (0);
+ free_basic_block_vars ();
/* Release all memory held by regsets now. */
regset_release_memory ();
@@ -1917,7 +1917,7 @@ rest_of_compilation (tree decl)
/* Show no temporary slots allocated. */
init_temp_slots ();
- free_basic_block_vars (0);
+ free_basic_block_vars ();
free_bb_for_insn ();
timevar_pop (TV_FINAL);
diff --git a/gcc/pretty-print.c b/gcc/pretty-print.c
index 38b0bcb309d..46cae27504c 100644
--- a/gcc/pretty-print.c
+++ b/gcc/pretty-print.c
@@ -178,7 +178,7 @@ pp_base_indent (pretty_printer *pp)
%p: pointer.
%m: strerror(text->err_no) - does not consume a value from args_ptr.
%%: `%'.
- %*.s: a substring the length of which is specified by an integer.
+ %.*s: a substring the length of which is specified by an integer.
%H: location_t. */
void
pp_base_format_text (pretty_printer *pp, text_info *text)
diff --git a/gcc/read-rtl.c b/gcc/read-rtl.c
index 21ad6dea418..d17235f5f61 100644
--- a/gcc/read-rtl.c
+++ b/gcc/read-rtl.c
@@ -651,26 +651,28 @@ again:
break;
case 'S':
- /* 'S' is an optional string: if a closeparen follows,
- just store NULL for this element. */
- c = read_skip_spaces (infile);
- ungetc (c, infile);
- if (c == ')')
- {
- XSTR (return_rtx, i) = 0;
- break;
- }
-
case 'T':
case 's':
{
char *stringbuf;
+ int star_if_braced;
+
+ c = read_skip_spaces (infile);
+ ungetc (c, infile);
+ if (c == ')')
+ {
+ /* 'S' fields are optional and should be NULL if no string
+ was given. Also allow normal 's' and 'T' strings to be
+ omitted, treating them in the same way as empty strings. */
+ XSTR (return_rtx, i) = (format_ptr[-1] == 'S' ? NULL : "");
+ break;
+ }
/* The output template slot of a DEFINE_INSN,
DEFINE_INSN_AND_SPLIT, or DEFINE_PEEPHOLE automatically
gets a star inserted as its first character, if it is
written with a brace block instead of a string constant. */
- int star_if_braced = (format_ptr[-1] == 'T');
+ star_if_braced = (format_ptr[-1] == 'T');
stringbuf = read_string (&rtl_obstack, infile, star_if_braced);
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c
index c3279d0206f..8314b21ce35 100644
--- a/gcc/reg-stack.c
+++ b/gcc/reg-stack.c
@@ -249,6 +249,7 @@ static void remove_regno_note (rtx, enum reg_note, unsigned int);
static int get_hard_regnum (stack, rtx);
static rtx emit_pop_insn (rtx, stack, rtx, enum emit_where);
static void emit_swap_insn (rtx, stack, rtx);
+static void swap_to_top(rtx, stack, rtx, rtx);
static bool move_for_stack_reg (rtx, stack, rtx);
static int swap_rtx_condition_1 (rtx);
static int swap_rtx_condition (rtx);
@@ -1034,6 +1035,54 @@ emit_swap_insn (rtx insn, stack regstack, rtx reg)
emit_insn_before (swap_rtx, insn);
}
+/* Emit an insns before INSN to swap virtual register SRC1 with
+ the top of stack and virtual register SRC2 with second stack
+ slot. REGSTACK is the stack state before the swaps, and
+ is updated to reflect the swaps. A swap insn is represented as a
+ PARALLEL of two patterns: each pattern moves one reg to the other.
+
+ If SRC1 and/or SRC2 are already at the right place, no swap insn
+ is emitted. */
+
+static void
+swap_to_top (rtx insn, stack regstack, rtx src1, rtx src2)
+{
+ struct stack_def temp_stack;
+ int regno, j, k, temp;
+
+ temp_stack = *regstack;
+
+ /* Place operand 1 at the top of stack. */
+ regno = get_hard_regnum (&temp_stack, src1);
+ if (regno < 0)
+ abort ();
+ if (regno != FIRST_STACK_REG)
+ {
+ k = temp_stack.top - (regno - FIRST_STACK_REG);
+ j = temp_stack.top;
+
+ temp = temp_stack.reg[k];
+ temp_stack.reg[k] = temp_stack.reg[j];
+ temp_stack.reg[j] = temp;
+ }
+
+ /* Place operand 2 next on the stack. */
+ regno = get_hard_regnum (&temp_stack, src2);
+ if (regno < 0)
+ abort ();
+ if (regno != FIRST_STACK_REG + 1)
+ {
+ k = temp_stack.top - (regno - FIRST_STACK_REG);
+ j = temp_stack.top - 1;
+
+ temp = temp_stack.reg[k];
+ temp_stack.reg[k] = temp_stack.reg[j];
+ temp_stack.reg[j] = temp;
+ }
+
+ change_stack (insn, regstack, &temp_stack, EMIT_BEFORE);
+}
+
/* Handle a move to or from a stack register in PAT, which is in INSN.
REGSTACK is the current stack. Return whether a control flow insn
was deleted in the process. */
@@ -1684,24 +1733,21 @@ subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
emit_swap_insn (insn, regstack, *src1);
+ /* Input should never die, it is
+ replaced with output. */
src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
+ if (src1_note)
+ abort();
if (STACK_REG_P (*dest))
replace_reg (dest, FIRST_STACK_REG);
- if (src1_note)
- {
- replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG);
- regstack->top--;
- CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (*src1));
- }
-
replace_reg (src1, FIRST_STACK_REG);
break;
case UNSPEC_FPATAN:
case UNSPEC_FYL2X:
- case UNSPEC_FSCALE:
+ case UNSPEC_FYL2XP1:
/* These insns operate on the top two stack slots. */
src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
@@ -1710,42 +1756,7 @@ subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
- {
- struct stack_def temp_stack;
- int regno, j, k, temp;
-
- temp_stack = *regstack;
-
- /* Place operand 1 at the top of stack. */
- regno = get_hard_regnum (&temp_stack, *src1);
- if (regno < 0)
- abort ();
- if (regno != FIRST_STACK_REG)
- {
- k = temp_stack.top - (regno - FIRST_STACK_REG);
- j = temp_stack.top;
-
- temp = temp_stack.reg[k];
- temp_stack.reg[k] = temp_stack.reg[j];
- temp_stack.reg[j] = temp;
- }
-
- /* Place operand 2 next on the stack. */
- regno = get_hard_regnum (&temp_stack, *src2);
- if (regno < 0)
- abort ();
- if (regno != FIRST_STACK_REG + 1)
- {
- k = temp_stack.top - (regno - FIRST_STACK_REG);
- j = temp_stack.top - 1;
-
- temp = temp_stack.reg[k];
- temp_stack.reg[k] = temp_stack.reg[j];
- temp_stack.reg[j] = temp;
- }
-
- change_stack (insn, regstack, &temp_stack, EMIT_BEFORE);
- }
+ swap_to_top (insn, regstack, *src1, *src2);
replace_reg (src1, FIRST_STACK_REG);
replace_reg (src2, FIRST_STACK_REG + 1);
@@ -1768,6 +1779,68 @@ subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
replace_reg (dest, FIRST_STACK_REG);
break;
+ case UNSPEC_FSCALE_FRACT:
+ case UNSPEC_FPREM_F:
+ case UNSPEC_FPREM1_F:
+ /* These insns operate on the top two stack slots.
+ first part of double input, double output insn. */
+
+ src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
+ src2 = get_true_reg (&XVECEXP (pat_src, 0, 1));
+
+ src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
+ src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
+
+ /* Inputs should never die, they are
+ replaced with outputs. */
+ if ((src1_note) || (src2_note))
+ abort();
+
+ swap_to_top (insn, regstack, *src1, *src2);
+
+ /* Push the result back onto stack. Empty stack slot
+ will be filled in second part of insn. */
+ if (STACK_REG_P (*dest)) {
+ regstack->reg[regstack->top] = REGNO (*dest);
+ SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
+ replace_reg (dest, FIRST_STACK_REG);
+ }
+
+ replace_reg (src1, FIRST_STACK_REG);
+ replace_reg (src2, FIRST_STACK_REG + 1);
+ break;
+
+ case UNSPEC_FSCALE_EXP:
+ case UNSPEC_FPREM_U:
+ case UNSPEC_FPREM1_U:
+ /* These insns operate on the top two stack slots./
+ second part of double input, double output insn. */
+
+ src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
+ src2 = get_true_reg (&XVECEXP (pat_src, 0, 1));
+
+ src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
+ src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
+
+ /* Inputs should never die, they are
+ replaced with outputs. */
+ if ((src1_note) || (src2_note))
+ abort();
+
+ swap_to_top (insn, regstack, *src1, *src2);
+
+ /* Push the result back onto stack. Fill empty slot from
+ first part of insn and fix top of stack pointer. */
+ if (STACK_REG_P (*dest)) {
+ regstack->reg[regstack->top - 1] = REGNO (*dest);
+ SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
+ replace_reg (dest, FIRST_STACK_REG + 1);
+ }
+
+ replace_reg (src1, FIRST_STACK_REG);
+ replace_reg (src2, FIRST_STACK_REG + 1);
+ break;
+
case UNSPEC_SINCOS_COS:
case UNSPEC_TAN_ONE:
case UNSPEC_XTRACT_FRACT:
@@ -1778,7 +1851,11 @@ subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
emit_swap_insn (insn, regstack, *src1);
+ /* Input should never die, it is
+ replaced with output. */
src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
+ if (src1_note)
+ abort();
/* Push the result back onto stack. Empty stack slot
will be filled in second part of insn. */
@@ -1788,12 +1865,6 @@ subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
replace_reg (dest, FIRST_STACK_REG);
}
- if (src1_note)
- {
- replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG);
- regstack->top--;
- CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (*src1));
- }
replace_reg (src1, FIRST_STACK_REG);
break;
@@ -1807,7 +1878,11 @@ subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
emit_swap_insn (insn, regstack, *src1);
+ /* Input should never die, it is
+ replaced with output. */
src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
+ if (src1_note)
+ abort();
/* Push the result back onto stack. Fill empty slot from
first part of insn and fix top of stack pointer. */
@@ -1819,13 +1894,6 @@ subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
regstack->top++;
}
- if (src1_note)
- {
- replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG);
- regstack->top--;
- CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (*src1));
- }
-
replace_reg (src1, FIRST_STACK_REG);
break;
@@ -2982,7 +3050,7 @@ convert_regs (FILE *file)
/* ??? Future: process inner loops first, and give them arbitrary
initial stacks which emit_swap_insn can modify. This ought to
- prevent double fxch that aften appears at the head of a loop. */
+ prevent double fxch that often appears at the head of a loop. */
/* Process all blocks reachable from all entry points. */
for (e = ENTRY_BLOCK_PTR->succ; e ; e = e->succ_next)
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 56f02c97acd..c848ce67101 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -417,6 +417,7 @@ static void emit_output_reload_insns (struct insn_chain *, struct reload *,
int);
static void do_input_reload (struct insn_chain *, struct reload *, int);
static void do_output_reload (struct insn_chain *, struct reload *, int);
+static bool inherit_piecemeal_p (int, int);
static void emit_reload_insns (struct insn_chain *);
static void delete_output_reload (rtx, int, int);
static void delete_address_reloads (rtx, rtx);
@@ -6956,6 +6957,27 @@ do_output_reload (struct insn_chain *chain, struct reload *rl, int j)
emit_output_reload_insns (chain, rld + j, j);
}
+/* Reload number R reloads from or to a group of hard registers starting at
+ register REGNO. Return true if it can be treated for inheritance purposes
+ like a group of reloads, each one reloading a single hard register.
+ The caller has already checked that the spill register and REGNO use
+ the same number of registers to store the reload value. */
+
+static bool
+inherit_piecemeal_p (int r ATTRIBUTE_UNUSED, int regno ATTRIBUTE_UNUSED)
+{
+#ifdef CANNOT_CHANGE_MODE_CLASS
+ return (!REG_CANNOT_CHANGE_MODE_P (reload_spill_index[r],
+ GET_MODE (rld[r].reg_rtx),
+ reg_raw_mode[reload_spill_index[r]])
+ && !REG_CANNOT_CHANGE_MODE_P (regno,
+ GET_MODE (rld[r].reg_rtx),
+ reg_raw_mode[regno]));
+#else
+ return true;
+#endif
+}
+
/* Output insns to reload values in and out of the chosen reload regs. */
static void
@@ -7137,11 +7159,16 @@ emit_reload_insns (struct insn_chain *chain)
int nnr = (nregno >= FIRST_PSEUDO_REGISTER ? 1
: hard_regno_nregs[nregno]
[GET_MODE (rld[r].reg_rtx)]);
+ bool piecemeal;
spill_reg_store[i] = new_spill_reg_store[i];
spill_reg_stored_to[i] = out;
reg_last_reload_reg[nregno] = rld[r].reg_rtx;
+ piecemeal = (nregno < FIRST_PSEUDO_REGISTER
+ && nr == nnr
+ && inherit_piecemeal_p (r, nregno));
+
/* If NREGNO is a hard register, it may occupy more than
one register. If it does, say what is in the
rest of the registers assuming that both registers
@@ -7151,7 +7178,7 @@ emit_reload_insns (struct insn_chain *chain)
if (nregno < FIRST_PSEUDO_REGISTER)
for (k = 1; k < nnr; k++)
reg_last_reload_reg[nregno + k]
- = (nr == nnr
+ = (piecemeal
? regno_reg_rtx[REGNO (rld[r].reg_rtx) + k]
: 0);
@@ -7160,7 +7187,7 @@ emit_reload_insns (struct insn_chain *chain)
{
CLEAR_HARD_REG_BIT (reg_reloaded_dead, i + k);
reg_reloaded_contents[i + k]
- = (nregno >= FIRST_PSEUDO_REGISTER || nr != nnr
+ = (nregno >= FIRST_PSEUDO_REGISTER || !piecemeal
? nregno
: nregno + k);
reg_reloaded_insn[i + k] = insn;
@@ -7185,6 +7212,7 @@ emit_reload_insns (struct insn_chain *chain)
int nregno;
int nnr;
rtx in;
+ bool piecemeal;
if (GET_CODE (rld[r].in) == REG
&& REGNO (rld[r].in) >= FIRST_PSEUDO_REGISTER)
@@ -7201,10 +7229,14 @@ emit_reload_insns (struct insn_chain *chain)
reg_last_reload_reg[nregno] = rld[r].reg_rtx;
+ piecemeal = (nregno < FIRST_PSEUDO_REGISTER
+ && nr == nnr
+ && inherit_piecemeal_p (r, nregno));
+
if (nregno < FIRST_PSEUDO_REGISTER)
for (k = 1; k < nnr; k++)
reg_last_reload_reg[nregno + k]
- = (nr == nnr
+ = (piecemeal
? regno_reg_rtx[REGNO (rld[r].reg_rtx) + k]
: 0);
@@ -7220,7 +7252,7 @@ emit_reload_insns (struct insn_chain *chain)
{
CLEAR_HARD_REG_BIT (reg_reloaded_dead, i + k);
reg_reloaded_contents[i + k]
- = (nregno >= FIRST_PSEUDO_REGISTER || nr != nnr
+ = (nregno >= FIRST_PSEUDO_REGISTER || !piecemeal
? nregno
: nregno + k);
reg_reloaded_insn[i + k] = insn;
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 9a58d34b29f..2ae0a8f2259 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -2349,7 +2349,9 @@ fill_simple_delay_slots (int non_jumps_p)
&& eligible_for_delay (insn, slots_filled, next_trial, flags)
&& ! can_throw_internal (trial))
{
- rtx new_label = next_active_insn (next_trial);
+ /* See comment in relax_delay_slots about necessity of using
+ next_real_insn here. */
+ rtx new_label = next_real_insn (next_trial);
if (new_label != 0)
new_label = get_label_before (new_label);
@@ -3074,7 +3076,9 @@ relax_delay_slots (rtx first)
&& (target_label = JUMP_LABEL (insn)) != 0)
{
target_label = follow_jumps (target_label);
- target_label = prev_label (next_active_insn (target_label));
+ /* See comment further down why we must use next_real_insn here,
+ instead of next_active_insn. */
+ target_label = prev_label (next_real_insn (target_label));
if (target_label == 0)
target_label = find_end_label ();
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 558abd271be..d5f7a1ec644 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1533,12 +1533,6 @@ do { \
#ifndef USE_STORE_PRE_DECREMENT
#define USE_STORE_PRE_DECREMENT(MODE) HAVE_PRE_DECREMENT
#endif
-
-/* Determine if the insn is a PHI node. */
-#define PHI_NODE_P(X) \
- ((X) && GET_CODE (X) == INSN \
- && GET_CODE (PATTERN (X)) == SET \
- && GET_CODE (SET_SRC (PATTERN (X))) == PHI)
/* Nonzero if we need to distinguish between the return value of this function
and the return value of a function called by this function. This helps
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index c52ecc1b599..680ecafc21a 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -58,6 +58,8 @@ static rtx simplify_immed_subreg (enum machine_mode, rtx, enum machine_mode,
unsigned int);
static rtx simplify_associative_operation (enum rtx_code, enum machine_mode,
rtx, rtx);
+static rtx simplify_relational_operation_1 (enum rtx_code, enum machine_mode,
+ enum machine_mode, rtx, rtx);
/* Negate a CONST_INT rtx, truncating (because a conversion from a
maximally negative number can overflow). */
@@ -221,10 +223,9 @@ simplify_gen_ternary (enum rtx_code code, enum machine_mode mode,
return gen_rtx_fmt_eee (code, mode, op0, op1, op2);
}
-
+
/* Likewise, for relational operations.
- CMP_MODE specifies mode comparison is done in.
- */
+ CMP_MODE specifies mode comparison is done in. */
rtx
simplify_gen_relational (enum rtx_code code, enum machine_mode mode,
@@ -232,46 +233,9 @@ simplify_gen_relational (enum rtx_code code, enum machine_mode mode,
{
rtx tem;
- if (cmp_mode == VOIDmode)
- cmp_mode = GET_MODE (op0);
- if (cmp_mode == VOIDmode)
- cmp_mode = GET_MODE (op1);
-
- if (cmp_mode != VOIDmode)
- {
- tem = simplify_relational_operation (code, mode, cmp_mode, op0, op1);
- if (tem)
- return tem;
- }
-
- /* For the following tests, ensure const0_rtx is op1. */
- if (swap_commutative_operands_p (op0, op1)
- || (op0 == const0_rtx && op1 != const0_rtx))
- tem = op0, op0 = op1, op1 = tem, code = swap_condition (code);
-
- /* If op0 is a compare, extract the comparison arguments from it. */
- if (GET_CODE (op0) == COMPARE && op1 == const0_rtx)
- return simplify_gen_relational (code, mode, VOIDmode,
- XEXP (op0, 0), XEXP (op0, 1));
-
- /* If op0 is a comparison, extract the comparison arguments form it. */
- if (COMPARISON_P (op0) && op1 == const0_rtx)
- {
- if (code == NE)
- {
- if (GET_MODE (op0) == mode)
- return op0;
- return simplify_gen_relational (GET_CODE (op0), mode, VOIDmode,
- XEXP (op0, 0), XEXP (op0, 1));
- }
- else if (code == EQ)
- {
- enum rtx_code new = reversed_comparison_code (op0, NULL_RTX);
- if (new != UNKNOWN)
- return simplify_gen_relational (new, mode, VOIDmode,
- XEXP (op0, 0), XEXP (op0, 1));
- }
- }
+ if (0 != (tem = simplify_relational_operation (code, mode, cmp_mode,
+ op0, op1)))
+ return tem;
return gen_rtx_fmt_ee (code, mode, op0, op1);
}
@@ -1201,7 +1165,6 @@ simplify_associative_operation (enum rtx_code code, enum machine_mode mode,
Don't use this for relational operations such as EQ or LT.
Use simplify_relational_operation instead. */
-
rtx
simplify_binary_operation (enum rtx_code code, enum machine_mode mode,
rtx op0, rtx op1)
@@ -2662,10 +2625,102 @@ simplify_plus_minus (enum rtx_code code, enum machine_mode mode, rtx op0,
}
/* Like simplify_binary_operation except used for relational operators.
- MODE is the mode of the operands, not that of the result. If MODE
- is VOIDmode, both operands must also be VOIDmode and we compare the
- operands in "infinite precision".
+ MODE is the mode of the result. If MODE is VOIDmode, both operands must
+ also be VOIDmode.
+
+ CMP_MODE specifies in which mode the comparison is done in, so it is
+ the mode of the operands. If CMP_MODE is VOIDmode, it is taken from
+ the operands or, if both are VOIDmode, the operands are compared in
+ "infinite precision". */
+rtx
+simplify_relational_operation (enum rtx_code code, enum machine_mode mode,
+ enum machine_mode cmp_mode, rtx op0, rtx op1)
+{
+ rtx tem, trueop0, trueop1;
+
+ if (cmp_mode == VOIDmode)
+ cmp_mode = GET_MODE (op0);
+ if (cmp_mode == VOIDmode)
+ cmp_mode = GET_MODE (op1);
+
+ tem = simplify_const_relational_operation (code, cmp_mode, op0, op1);
+ if (tem)
+ {
+#ifdef FLOAT_STORE_FLAG_VALUE
+ if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+ {
+ if (tem == const0_rtx)
+ return CONST0_RTX (mode);
+ else if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+ {
+ REAL_VALUE_TYPE val;
+ val = FLOAT_STORE_FLAG_VALUE (mode);
+ return CONST_DOUBLE_FROM_REAL_VALUE (val, mode);
+ }
+ }
+#endif
+
+ return tem;
+ }
+
+ /* For the following tests, ensure const0_rtx is op1. */
+ if (swap_commutative_operands_p (op0, op1)
+ || (op0 == const0_rtx && op1 != const0_rtx))
+ tem = op0, op0 = op1, op1 = tem, code = swap_condition (code);
+
+ /* If op0 is a compare, extract the comparison arguments from it. */
+ if (GET_CODE (op0) == COMPARE && op1 == const0_rtx)
+ return simplify_relational_operation (code, mode, VOIDmode,
+ XEXP (op0, 0), XEXP (op0, 1));
+
+ if (mode == VOIDmode
+ || GET_MODE_CLASS (cmp_mode) == MODE_CC
+ || CC0_P (op0))
+ return NULL_RTX;
+
+ trueop0 = avoid_constant_pool_reference (op0);
+ trueop1 = avoid_constant_pool_reference (op1);
+ return simplify_relational_operation_1 (code, mode, cmp_mode,
+ trueop0, trueop1);
+}
+
+/* This part of simplify_relational_operation is only used when CMP_MODE
+ is not in class MODE_CC (i.e. it is a real comparison).
+
+ MODE is the mode of the result, while CMP_MODE specifies in which
+ mode the comparison is done in, so it is the mode of the operands. */
+rtx
+simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
+ enum machine_mode cmp_mode, rtx op0, rtx op1)
+{
+ if (GET_CODE (op1) == CONST_INT)
+ {
+ if (INTVAL (op1) == 0 && COMPARISON_P (op0))
+ {
+ /* If op0 is a comparison, extract the comparison arguments form it. */
+ if (code == NE)
+ {
+ if (GET_MODE (op0) == cmp_mode)
+ return simplify_rtx (op0);
+ else
+ return simplify_gen_relational (GET_CODE (op0), mode, VOIDmode,
+ XEXP (op0, 0), XEXP (op0, 1));
+ }
+ else if (code == EQ)
+ {
+ enum rtx_code new = reversed_comparison_code (op0, NULL_RTX);
+ if (new != UNKNOWN)
+ return simplify_gen_relational (new, mode, VOIDmode,
+ XEXP (op0, 0), XEXP (op0, 1));
+ }
+ }
+ }
+ return NULL_RTX;
+}
+
+/* Check if the given comparison (done in the given MODE) is actually a
+ tautology or a contradiction.
If no simplification is possible, this function returns zero.
Otherwise, it returns either const_true_rtx or const0_rtx. */
@@ -2954,36 +3009,6 @@ simplify_const_relational_operation (enum rtx_code code,
abort ();
}
}
-
-/* Like simplify_binary_operation except used for relational operators.
- MODE is the mode of the result, and CMP_MODE is the mode of the operands.
- If CMP_MODE is VOIDmode, both operands must also be VOIDmode and we
- compare the operands in "infinite precision". */
-
-rtx
-simplify_relational_operation (enum rtx_code code,
- enum machine_mode mode ATTRIBUTE_UNUSED,
- enum machine_mode cmp_mode, rtx op0, rtx op1)
-{
- rtx tmp;
-
- tmp = simplify_const_relational_operation (code, cmp_mode, op0, op1);
- if (tmp)
- {
-#ifdef FLOAT_STORE_FLAG_VALUE
- if (GET_MODE_CLASS (mode) == MODE_FLOAT)
- {
- if (tmp == const0_rtx)
- return CONST0_RTX (mode);
- return CONST_DOUBLE_FROM_REAL_VALUE (FLOAT_STORE_FLAG_VALUE (mode),
- mode);
- }
-#endif
- return tmp;
- }
-
- return NULL_RTX;
-}
/* Simplify CODE, an operation with result mode MODE and three operands,
OP0, OP1, and OP2. OP0_MODE was the mode of OP0 before it became
@@ -3078,20 +3103,6 @@ simplify_ternary_operation (enum rtx_code code, enum machine_mode mode,
? GET_MODE (XEXP (op0, 1))
: GET_MODE (XEXP (op0, 0)));
rtx temp;
- if (cmp_mode == VOIDmode)
- cmp_mode = op0_mode;
- temp = simplify_const_relational_operation (GET_CODE (op0),
- cmp_mode,
- XEXP (op0, 0),
- XEXP (op0, 1));
-
- /* See if any simplifications were possible. */
- if (temp == const0_rtx)
- return op2;
- else if (temp == const_true_rtx)
- return op1;
- else if (temp)
- abort ();
/* Look for happy constants in op1 and op2. */
if (GET_CODE (op1) == CONST_INT && GET_CODE (op2) == CONST_INT)
@@ -3112,7 +3123,23 @@ simplify_ternary_operation (enum rtx_code code, enum machine_mode mode,
else
break;
- return gen_rtx_fmt_ee (code, mode, XEXP (op0, 0), XEXP (op0, 1));
+ return simplify_gen_relational (code, mode, cmp_mode,
+ XEXP (op0, 0), XEXP (op0, 1));
+ }
+
+ if (cmp_mode == VOIDmode)
+ cmp_mode = op0_mode;
+ temp = simplify_relational_operation (GET_CODE (op0), op0_mode,
+ cmp_mode, XEXP (op0, 0),
+ XEXP (op0, 1));
+
+ /* See if any simplifications were possible. */
+ if (temp)
+ {
+ if (GET_CODE (temp) == CONST_INT)
+ return temp == const0_rtx ? op2 : op1;
+ else if (temp)
+ return gen_rtx_IF_THEN_ELSE (mode, temp, op1, op2);
}
}
break;
@@ -3721,7 +3748,6 @@ simplify_rtx (rtx x)
{
enum rtx_code code = GET_CODE (x);
enum machine_mode mode = GET_MODE (x);
- rtx temp;
switch (GET_RTX_CLASS (code))
{
@@ -3745,13 +3771,13 @@ simplify_rtx (rtx x)
case RTX_COMPARE:
case RTX_COMM_COMPARE:
- temp = simplify_relational_operation (code, mode,
- ((GET_MODE (XEXP (x, 0))
- != VOIDmode)
- ? GET_MODE (XEXP (x, 0))
- : GET_MODE (XEXP (x, 1))),
- XEXP (x, 0), XEXP (x, 1));
- return temp;
+ return simplify_relational_operation (code, mode,
+ ((GET_MODE (XEXP (x, 0))
+ != VOIDmode)
+ ? GET_MODE (XEXP (x, 0))
+ : GET_MODE (XEXP (x, 1))),
+ XEXP (x, 0),
+ XEXP (x, 1));
case RTX_EXTRA:
if (code == SUBREG)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 47fdd8aad44..4df7b75d051 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,131 @@
+2004-05-11 Paul Brook <paul@codesourcery.com>
+
+ * gcc.c-torture/compile/20010518-1.c: Force enum size.
+
+2004-05-10 Eric Christopher <echristo@redhat.com>
+
+ * gcc.dg/sibcall-3.c: Remove xfail for mips*-*-elf.
+ * gcc.dg/sibcall-4.c: Ditto.
+
+2004-05-10 Ziemowit Laski <zlaski@apple.com>
+
+ * g++.dg/ext/altivec-8.C: New test case.
+ * gcc.dg/altivec-13.c: New test case.
+
+2004-05-08 Roger Sayle <roger@eyesopen.com>
+
+ * gcc.c-torture/execute/divcmp-1.c: New test case.
+ * gcc.c-torture/execute/divcmp-2.c: New test case.
+ * gcc.c-torture/execute/divcmp-3.c: New test case.
+
+2004-05-07 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * g++.dg/other/pragma-re-2.C: New test.
+
+2004-05-07 Uros Bizjak <uros@kss-loka.si>
+
+ * gcc.dg/i386-387-1.c: Add new test for __builtin_fmod.
+ * gcc.dg/i386-387-2.c: Likewise.
+
+ * gcc.dg/i386-387-5.c: Add new tests for __builtin_log1p and
+ __builtin_drem.
+ * gcc.dg/i386-387-6.c: Likewise.
+
+2004-05-07 Uros Bizjak <uros@kss-loka.si>
+
+ * gcc.dg/builtins-33.c: Also check log1p*.
+
+2004-05-07 Hans-Peter Nilsson <hp@axis.com>
+
+ PR optimization/15296
+ * gcc.c-torture/execute/pr15296.c: New test.
+
+2004-05-05 Uros Bizjak <uros@kss-loka.si>
+
+ * gcc.dg/builtins-40.c: New test.
+
+2004-05-05 Richard Sandiford <rsandifo@redhat.com>
+
+ * gcc.dg/torture/mips-hilo-2.c: Provide dummy __mips16 version.
+
+2004-05-04 Paolo Bonzini <bonzini@gnu.org>
+
+ * g++.dg/ext/spe1.C: New testcase.
+
+2004-05-04 Ziemowit Laski <zlaski@apple.com>
+
+ * objc.dg/image-info.m: Allow additional attributes
+ for __image_info section.
+
+2004-05-04 Richard Sandiford <rsandifo@redhat.com>
+
+ * gcc.dg/torture/mips-hilo-2.c: New test.
+
+2004-05-03 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/14389
+ * g++.dg/template/member5.C: New test.
+
+2004-05-03 Uros Bizjak <uros@kss-loka.si>
+
+ * gcc.dg/builtins-34.c: Also check expm1*.
+
+2004-05-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/torture/builtin-integral-1.c: Reorg and add more cases.
+ * gcc.dg/torture/builtin-convert-3.c: New test.
+
+2004-05-01 Ulrich Weigand <uweigand@de.ibm.com>
+
+ PR middle-end/15054
+ * g++.dg/opt/pr15054.C: New test.
+
+2004-04-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/torture/builtin-rounding-1.c: New test.
+ * gcc.dg/builtins-25.c: Delete.
+ * gcc.dg/builtins-29.c: Delete.
+
+2004-04-29 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ * gcc.dg/sibcall-3.c: Delete s390 from expected fail list.
+ * gcc.dg/sibcall-4.c: Likewise.
+ * gcc.dg/sibcall-6.c: Enable s390 as test platform.
+
+2004-04-30 Kazu Hirata <kazu@cs.umass.edu>
+
+ * gcc.c-torture/execute/20040331-1.c: Don't use too wide a
+ bit-field on 16-bit targets.
+
+2004-04-30 Kazu Hirata <kazu@cs.umass.edu>
+
+ * gcc.c-torture/execute/20040409-2.c: Fix constants used on
+ 16-bit targets.
+
+2004-04-30 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * gcc.dg/rs6000-power2-1.c: Change to compile only.
+ * gcc.dg/rs6000-power2-2.c: Likewise.
+
+2004-04-29 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * gcc.dg/rs6000-power2-1.c: Change the options to be more correct.
+ * gcc.dg/rs6000-power2-2.c: Change the options to be more correct.
+ Change the asm registers to be in form of frN instead of fN.
+
+2004-04-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/torture/builtin-convert-2.c: New test.
+
+2004-04-28 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * gcc.dg/rs6000-power2-1.c: New test.
+ * gcc.dg/rs6000-power2-2.c: New test.
+
+2004-04-28 Jan Hubicka <jh@suse.cz>
+
+ * gcc.dg/unused-6.c: New test.
+
2004-04-24 Laurent GUERBY <laurent@guerby.net>
Ulrich Weigand <uweigand@de.ibm.com>
@@ -7,7 +135,7 @@
PR c++/15119
* g++.dg/other/vararg-1.C: New test.
-
+
PR c++/4794
* g++.dg/eh/cleanup3.C: New test.
@@ -17,7 +145,7 @@
and ad8011a (target_insn).
* ada/acats/support/macro.dfs: Likewise.
* ada/acats/support/impbit.adb: New file.
-
+
2004-04-23 Ulrich Weigand <uweigand@de.ibm.com>
* gcc.dg/const-elim-1.c: XFAIL on s390*-*-*.
diff --git a/gcc/testsuite/g++.dg/ext/altivec-8.C b/gcc/testsuite/g++.dg/ext/altivec-8.C
index 9f4892df860..298e6100559 100644
--- a/gcc/testsuite/g++.dg/ext/altivec-8.C
+++ b/gcc/testsuite/g++.dg/ext/altivec-8.C
@@ -1,19 +1,15 @@
/* { dg-do compile { target powerpc*-*-* } } */
-/* { dg-options "-maltivec" } */
+/* { dg-options "-faltivec" } */
/* Author: Ziemowit Laski <zlaski@apple.com> */
/* This test case exercises intrinsic/argument combinations that,
while not in the Motorola AltiVec PIM, have nevertheless crept
into the AltiVec vernacular over the years. */
-#include <altivec.h>
-
-void foo (void)
-{
+void foo() {
vector bool int boolVec1 = (vector bool int) vec_splat_u32(3);
vector bool short boolVec2 = (vector bool short) vec_splat_u16(3);
vector bool char boolVec3 = (vector bool char) vec_splat_u8(3);
-
boolVec1 = vec_sld( boolVec1, boolVec1, 4 );
boolVec2 = vec_sld( boolVec2, boolVec2, 2 );
boolVec3 = vec_sld( boolVec3, boolVec3, 1 );
diff --git a/gcc/testsuite/gcc.c-torture/compile/20010518-1.c b/gcc/testsuite/gcc.c-torture/compile/20010518-1.c
index 4ab40d8e226..0a1b284b447 100644
--- a/gcc/testsuite/gcc.c-torture/compile/20010518-1.c
+++ b/gcc/testsuite/gcc.c-torture/compile/20010518-1.c
@@ -25,7 +25,7 @@ enum rtx_code
UNKNOWN,
NIL,
REG,
- LAST_AND_UNUSED_RTX_CODE
+ LAST_AND_UNUSED_RTX_CODE = 256
};
typedef struct
diff --git a/gcc/testsuite/gcc.c-torture/execute/20040331-1.c b/gcc/testsuite/gcc.c-torture/execute/20040331-1.c
index 67b3e3a2e0c..2e8f9e86748 100644
--- a/gcc/testsuite/gcc.c-torture/execute/20040331-1.c
+++ b/gcc/testsuite/gcc.c-torture/execute/20040331-1.c
@@ -5,8 +5,16 @@ extern void exit (int);
int
main (void)
{
+#if __INT_MAX__ >= 2147483647
struct { int count: 31; } s = { 0 };
while (s.count--)
abort ();
+#elif __INT_MAX__ >= 32767
+ struct { int count: 15; } s = { 0 };
+ while (s.count--)
+ abort ();
+#else
+ /* Don't bother because __INT_MAX__ is too small. */
+#endif
exit (0);
}
diff --git a/gcc/testsuite/gcc.c-torture/execute/20040409-2.c b/gcc/testsuite/gcc.c-torture/execute/20040409-2.c
index 5bec7ee9218..c83ff1adf5e 100644
--- a/gcc/testsuite/gcc.c-torture/execute/20040409-2.c
+++ b/gcc/testsuite/gcc.c-torture/execute/20040409-2.c
@@ -227,13 +227,13 @@ int main()
test(0x1234,0x8000);
test(0x8000,0x1234);
test(0x9234,0x0000);
- test(0x7fff,0xffff);
- test(0xffff,0x7fff);
+ test(0x7fff,0xedcb);
+ test(0xffff,0x6dcb);
- testu(0x0000,0x8000);
- testu(0x8000,0x0000);
- testu(0x1234,0x9234);
- testu(0x9234,0x1234);
+ testu(0x0000,0x9234);
+ testu(0x8000,0x1234);
+ testu(0x1234,0x8000);
+ testu(0x9234,0x0000);
testu(0x7fff,0xedcb);
testu(0xffff,0x6dcb);
#endif
diff --git a/gcc/testsuite/gcc.dg/altivec-13.c b/gcc/testsuite/gcc.dg/altivec-13.c
index c377442196b..298e6100559 100644
--- a/gcc/testsuite/gcc.dg/altivec-13.c
+++ b/gcc/testsuite/gcc.dg/altivec-13.c
@@ -1,19 +1,15 @@
/* { dg-do compile { target powerpc*-*-* } } */
-/* { dg-options "-maltivec" } */
+/* { dg-options "-faltivec" } */
/* Author: Ziemowit Laski <zlaski@apple.com> */
/* This test case exercises intrinsic/argument combinations that,
while not in the Motorola AltiVec PIM, have nevertheless crept
into the AltiVec vernacular over the years. */
-#include <altivec.h>
-
-void foo (void)
-{
+void foo() {
vector bool int boolVec1 = (vector bool int) vec_splat_u32(3);
vector bool short boolVec2 = (vector bool short) vec_splat_u16(3);
vector bool char boolVec3 = (vector bool char) vec_splat_u8(3);
-
boolVec1 = vec_sld( boolVec1, boolVec1, 4 );
boolVec2 = vec_sld( boolVec2, boolVec2, 2 );
boolVec3 = vec_sld( boolVec3, boolVec3, 1 );
diff --git a/gcc/testsuite/gcc.dg/builtins-25.c b/gcc/testsuite/gcc.dg/builtins-25.c
deleted file mode 100644
index 495056615ca..00000000000
--- a/gcc/testsuite/gcc.dg/builtins-25.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation.
-
- Check that constant folding of built-in math functions doesn't
- break anything and produces the expected results.
-
- Written by Roger Sayle, 28th June 2003. */
-
-/* { dg-do link } */
-/* { dg-options "-O2" } */
-
-extern void link_error(void);
-
-extern double trunc(double);
-extern double floor(double);
-extern double ceil(double);
-
-extern float truncf(float);
-extern float floorf(float);
-extern float ceilf(float);
-
-extern long double truncl(long double);
-extern long double floorl(long double);
-extern long double ceill(long double);
-
-void test()
-{
- if (trunc (0.0) != 0.0)
- link_error ();
- if (floor (0.0) != 0.0)
- link_error ();
- if (ceil (0.0) != 0.0)
- link_error ();
-
- if (trunc (6.0) != 6.0)
- link_error ();
- if (floor (6.0) != 6.0)
- link_error ();
- if (ceil (6.0) != 6.0)
- link_error ();
-
- if (trunc (-8.0) != -8.0)
- link_error ();
- if (floor (-8.0) != -8.0)
- link_error ();
- if (ceil (-8.0) != -8.0)
- link_error ();
-
- if (trunc (3.2) != 3.0)
- link_error ();
- if (floor (3.2) != 3.0)
- link_error ();
- if (ceil (3.2) != 4.0)
- link_error ();
-
- if (trunc (-2.8) != -2.0)
- link_error ();
- if (floor (-2.8) != -3.0)
- link_error ();
- if (ceil (-2.8) != -2.0)
- link_error ();
-
- if (trunc (0.01) != 0.0)
- link_error ();
- if (floor (0.01) != 0.0)
- link_error ();
- if (ceil (0.01) != 1.0)
- link_error ();
-
- if (trunc (-0.7) != 0.0)
- link_error ();
- if (floor (-0.7) != -1.0)
- link_error ();
- if (ceil (-0.7) != 0.0)
- link_error ();
-}
-
-void testf()
-{
- if (truncf (0.0f) != 0.0f)
- link_error ();
- if (floorf (0.0f) != 0.0f)
- link_error ();
- if (ceilf (0.0f) != 0.0f)
- link_error ();
-
- if (truncf (6.0f) != 6.0f)
- link_error ();
- if (floorf (6.0f) != 6.0f)
- link_error ();
- if (ceilf (6.0f) != 6.0f)
- link_error ();
-
- if (truncf (-8.0f) != -8.0f)
- link_error ();
- if (floorf (-8.0f) != -8.0f)
- link_error ();
- if (ceilf (-8.0f) != -8.0f)
- link_error ();
-
- if (truncf (3.2f) != 3.0f)
- link_error ();
- if (floorf (3.2f) != 3.0f)
- link_error ();
- if (ceilf (3.2f) != 4.0f)
- link_error ();
-
- if (truncf (-2.8f) != -2.0f)
- link_error ();
- if (floorf (-2.8f) != -3.0f)
- link_error ();
- if (ceilf (-2.8f) != -2.0f)
- link_error ();
-
- if (truncf (0.01f) != 0.0f)
- link_error ();
- if (floorf (0.01f) != 0.0f)
- link_error ();
- if (ceilf (0.01f) != 1.0f)
- link_error ();
-
- if (truncf (-0.7f) != 0.0f)
- link_error ();
- if (floorf (-0.7f) != -1.0f)
- link_error ();
- if (ceilf (-0.7f) != 0.0f)
- link_error ();
-}
-
-void testl()
-{
- if (truncl (0.0l) != 0.0l)
- link_error ();
- if (floorl (0.0l) != 0.0l)
- link_error ();
- if (ceill (0.0l) != 0.0l)
- link_error ();
-
- if (truncl (6.0l) != 6.0l)
- link_error ();
- if (floorl (6.0l) != 6.0l)
- link_error ();
- if (ceill (6.0l) != 6.0l)
- link_error ();
-
- if (truncl (-8.0l) != -8.0l)
- link_error ();
- if (floorl (-8.0l) != -8.0l)
- link_error ();
- if (ceill (-8.0l) != -8.0l)
- link_error ();
-
- if (truncl (3.2l) != 3.0l)
- link_error ();
- if (floorl (3.2l) != 3.0l)
- link_error ();
- if (ceill (3.2l) != 4.0l)
- link_error ();
-
- if (truncl (-2.8l) != -2.0l)
- link_error ();
- if (floorl (-2.8l) != -3.0l)
- link_error ();
- if (ceill (-2.8l) != -2.0l)
- link_error ();
-
- if (truncl (0.01l) != 0.0l)
- link_error ();
- if (floorl (0.01l) != 0.0l)
- link_error ();
- if (ceill (0.01l) != 1.0l)
- link_error ();
-
- if (truncl (-0.7l) != 0.0l)
- link_error ();
- if (floorl (-0.7l) != -1.0l)
- link_error ();
- if (ceill (-0.7l) != 0.0l)
- link_error ();
-}
-
-int main()
-{
- test ();
- testf ();
- testl ();
- return 0;
-}
-
diff --git a/gcc/testsuite/gcc.dg/builtins-29.c b/gcc/testsuite/gcc.dg/builtins-29.c
deleted file mode 100644
index 30f9bad4ef7..00000000000
--- a/gcc/testsuite/gcc.dg/builtins-29.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation.
-
- Check that constant folding of round, roundf and roundl math functions
- doesn't break anything and produces the expected results.
-
- Written by Roger Sayle, 22nd January 2004. */
-
-/* { dg-do link } */
-/* { dg-options "-O2" } */
-
-extern void link_error(void);
-
-extern double round(double);
-extern float roundf(float);
-extern long double roundl(long double);
-
-void test()
-{
- if (round (0.0) != 0.0)
- link_error ();
- if (round (6.0) != 6.0)
- link_error ();
- if (round (-8.0) != -8.0)
- link_error ();
-
- if (round (3.2) != 3.0)
- link_error ();
- if (round (-2.8) != -3.0)
- link_error ();
- if (round (0.01) != 0.0)
- link_error ();
- if (round (-0.7) != -1.0)
- link_error ();
-
- if (round (2.5) != 3.0)
- link_error ();
- if (round (-1.5) != -2.0)
- link_error ();
-}
-
-void testf()
-{
- if (roundf (0.0f) != 0.0f)
- link_error ();
- if (roundf (6.0f) != 6.0f)
- link_error ();
- if (roundf (-8.0f) != -8.0f)
- link_error ();
-
- if (roundf (3.2f) != 3.0f)
- link_error ();
- if (roundf (-2.8f) != -3.0f)
- link_error ();
- if (roundf (0.01f) != 0.0f)
- link_error ();
- if (roundf (-0.7f) != -1.0f)
- link_error ();
-
- if (roundf (2.5f) != 3.0f)
- link_error ();
- if (roundf (-1.5f) != -2.0f)
- link_error ();
-}
-
-void testl()
-{
- if (roundl (0.0l) != 0.0l)
- link_error ();
- if (roundl (6.0l) != 6.0l)
- link_error ();
- if (roundl (-8.0l) != -8.0l)
- link_error ();
-
- if (roundl (3.2l) != 3.0l)
- link_error ();
- if (roundl (-2.8l) != -3.0l)
- link_error ();
- if (roundl (0.01l) != 0.0l)
- link_error ();
- if (roundl (-0.7l) != -1.0l)
- link_error ();
-
- if (roundl (2.5l) != 3.0l)
- link_error ();
- if (roundl (-1.5l) != -2.0l)
- link_error ();
-}
-
-int main()
-{
- test ();
- testf ();
- testl ();
- return 0;
-}
-
diff --git a/gcc/testsuite/gcc.dg/builtins-33.c b/gcc/testsuite/gcc.dg/builtins-33.c
index 758978f0600..11393e30089 100644
--- a/gcc/testsuite/gcc.dg/builtins-33.c
+++ b/gcc/testsuite/gcc.dg/builtins-33.c
@@ -10,10 +10,13 @@
extern double log10(double);
extern double log2(double);
+extern double log1p(double);
extern float log10f(float);
extern float log2f(float);
+extern float log1pf(float);
extern long double log10l(long double);
extern long double log2l(long double);
+extern long double log1pl(long double);
double test1(double x)
@@ -26,6 +29,11 @@ double test2(double x)
return log2(x);
}
+double test3(double x)
+{
+ return log1p(x);
+}
+
float test1f(float x)
{
return log10f(x);
@@ -36,6 +44,11 @@ float test2f(float x)
return log2f(x);
}
+float test3f(float x)
+{
+ return log1pf(x);
+}
+
long double test1l(long double x)
{
return log10l(x);
@@ -46,3 +59,7 @@ long double test2l(long double x)
return log2l(x);
}
+long double test3l(long double x)
+{
+ return log1pl(x);
+}
diff --git a/gcc/testsuite/gcc.dg/builtins-34.c b/gcc/testsuite/gcc.dg/builtins-34.c
index d2bf4d41219..0055f329dd5 100644
--- a/gcc/testsuite/gcc.dg/builtins-34.c
+++ b/gcc/testsuite/gcc.dg/builtins-34.c
@@ -1,7 +1,7 @@
/* Copyright (C) 2004 Free Software Foundation.
- Check that exp10, exp10f, exp10l, exp2, exp2f, exp2l, pow10, pow10f
- and pow10l built-in functions compile.
+ Check that exp10, exp10f, exp10l, exp2, exp2f, exp2l, pow10, pow10f,
+ pow10l, expm1, expm1f and expm1l built-in functions compile.
Written by Uros Bizjak, 13th February 2004. */
@@ -11,12 +11,15 @@
extern double exp10(double);
extern double exp2(double);
extern double pow10(double);
+extern double expm1(double);
extern float exp10f(float);
extern float exp2f(float);
extern float pow10f(float);
+extern float expm1f(float);
extern long double exp10l(long double);
extern long double exp2l(long double);
extern long double pow10l(long double);
+extern long double expm1l(long double);
double test1(double x)
@@ -34,6 +37,11 @@ double test3(double x)
return pow10(x);
}
+double test4(double x)
+{
+ return expm1(x);
+}
+
float test1f(float x)
{
return exp10f(x);
@@ -49,6 +57,11 @@ float test3f(float x)
return pow10f(x);
}
+float test4f(float x)
+{
+ return expm1f(x);
+}
+
long double test1l(long double x)
{
return exp10l(x);
@@ -64,3 +77,8 @@ long double test3l(long double x)
return pow10l(x);
}
+long double test4l(long double x)
+{
+ return expm1l(x);
+}
+
diff --git a/gcc/testsuite/gcc.dg/i386-387-1.c b/gcc/testsuite/gcc.dg/i386-387-1.c
index c196f2dc3e5..92b671bf99c 100644
--- a/gcc/testsuite/gcc.dg/i386-387-1.c
+++ b/gcc/testsuite/gcc.dg/i386-387-1.c
@@ -8,6 +8,7 @@
/* { dg-final { scan-assembler "call\t_?log" } } */
/* { dg-final { scan-assembler "call\t_?exp" } } */
/* { dg-final { scan-assembler "call\t_?tan" } } */
+/* { dg-final { scan-assembler "call\t_?fmod" } } */
double f1(double x) { return __builtin_sin(x); }
double f2(double x) { return __builtin_cos(x); }
@@ -16,3 +17,4 @@ double f4(double x, double y) { return __builtin_atan2(x,y); }
double f5(double x) { return __builtin_log(x); }
double f6(double x) { return __builtin_exp(x); }
double f7(double x) { return __builtin_tan(x); }
+double f8(double x, double y) { return __builtin_fmod(x,y); }
diff --git a/gcc/testsuite/gcc.dg/i386-387-2.c b/gcc/testsuite/gcc.dg/i386-387-2.c
index f98e04accd1..11eb0cc9aa5 100644
--- a/gcc/testsuite/gcc.dg/i386-387-2.c
+++ b/gcc/testsuite/gcc.dg/i386-387-2.c
@@ -8,6 +8,7 @@
/* { dg-final { scan-assembler "fyl2x" } } */
/* { dg-final { scan-assembler "f2xm1" } } */
/* { dg-final { scan-assembler "fptan" } } */
+/* { dg-final { scan-assembler "fprem" } } */
double f1(double x) { return __builtin_sin(x); }
double f2(double x) { return __builtin_cos(x); }
@@ -16,3 +17,4 @@ double f4(double x, double y) { return __builtin_atan2(x,y); }
double f5(double x) { return __builtin_log(x); }
double f6(double x) { return __builtin_exp(x); }
double f7(double x) { return __builtin_tan(x); }
+double f8(double x, double y) { return __builtin_fmod(x,y); }
diff --git a/gcc/testsuite/gcc.dg/i386-387-5.c b/gcc/testsuite/gcc.dg/i386-387-5.c
index 2c86dd0869a..7c512977420 100644
--- a/gcc/testsuite/gcc.dg/i386-387-5.c
+++ b/gcc/testsuite/gcc.dg/i386-387-5.c
@@ -2,6 +2,9 @@
/* { dg-do compile { target "i?86-*-*" } } */
/* { dg-options "-O -ffast-math -mfpmath=387 -mno-fancy-math-387 -march=i386" } */
/* { dg-final { scan-assembler "call\t_?atan" } } */
+/* { dg-final { scan-assembler "call\t_?log1p" } } */
+/* { dg-final { scan-assembler "call\t_?drem" } } */
double f1(double x) { return __builtin_atan(x); }
-
+double f2(double x) { return __builtin_log1p(x); }
+double f3(double x, double y) { return __builtin_drem(x,y); }
diff --git a/gcc/testsuite/gcc.dg/i386-387-6.c b/gcc/testsuite/gcc.dg/i386-387-6.c
index 8eb29a11320..c8e5311c091 100644
--- a/gcc/testsuite/gcc.dg/i386-387-6.c
+++ b/gcc/testsuite/gcc.dg/i386-387-6.c
@@ -2,5 +2,9 @@
/* { dg-do compile { target "i?86-*-*" } } */
/* { dg-options "-O -ffast-math -mfpmath=387 -march=i686 -mno-fancy-math-387" } */
/* { dg-final { scan-assembler "fpatan" } } */
+/* { dg-final { scan-assembler "fyl2xp1" } } */
+/* { dg-final { scan-assembler "fprem1" } } */
double f1(double x) { return __builtin_atan(x); }
+double f2(double x) { return __builtin_log1p(x); }
+double f3(double x, double y) { return __builtin_drem(x,y); }
diff --git a/gcc/testsuite/gcc.dg/sibcall-3.c b/gcc/testsuite/gcc.dg/sibcall-3.c
index d0908a2289c..37637e70270 100644
--- a/gcc/testsuite/gcc.dg/sibcall-3.c
+++ b/gcc/testsuite/gcc.dg/sibcall-3.c
@@ -5,7 +5,7 @@
Copyright (C) 2002 Free Software Foundation Inc.
Contributed by Hans-Peter Nilsson <hp@bitrange.com> */
-/* { dg-do run { xfail arc-*-* avr-*-* c4x-*-* cris-*-* h8300-*-* ip2k-*-* m32r-*-* m68hc1?-*-* m681?-*-* m680*-*-* m68k-*-* mcore-*-* mips*-*-* mn10300-*-* ns32k-*-* s390*-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa-*-* } } */
+/* { dg-do run { xfail arc-*-* avr-*-* c4x-*-* cris-*-* h8300-*-* ip2k-*-* m32r-*-* m68hc1?-*-* m681?-*-* m680*-*-* m68k-*-* mcore-*-* mips*-*-irix* mips*-*-linux-gnu mn10300-*-* ns32k-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa-*-* } } */
/* { dg-options "-O2 -foptimize-sibling-calls" } */
/* The option -foptimize-sibling-calls is the default, but serves as
diff --git a/gcc/testsuite/gcc.dg/sibcall-4.c b/gcc/testsuite/gcc.dg/sibcall-4.c
index 3980879536c..15d235c471f 100644
--- a/gcc/testsuite/gcc.dg/sibcall-4.c
+++ b/gcc/testsuite/gcc.dg/sibcall-4.c
@@ -5,7 +5,7 @@
Copyright (C) 2002 Free Software Foundation Inc.
Contributed by Hans-Peter Nilsson <hp@bitrange.com> */
-/* { dg-do run { xfail arc-*-* avr-*-* c4x-*-* cris-*-* h8300-*-* ip2k-*-* m32r-*-* m68hc1?-*-* m681?-*-* m680*-*-* m68k-*-* mcore-*-* mips*-*-* mn10300-*-* ns32k-*-* s390*-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa-*-* } } */
+/* { dg-do run { xfail arc-*-* avr-*-* c4x-*-* cris-*-* h8300-*-* ip2k-*-* m32r-*-* m68hc1?-*-* m681?-*-* m680*-*-* m68k-*-* mcore-*-* mips*-*-irix* mips*-*-linux-gnu mn10300-*-* ns32k-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa-*-* } } */
/* { dg-options "-O2 -foptimize-sibling-calls" } */
/* The option -foptimize-sibling-calls is the default, but serves as
diff --git a/gcc/testsuite/gcc.dg/sibcall-6.c b/gcc/testsuite/gcc.dg/sibcall-6.c
index 771a14e8b56..4b0d299f5b7 100644
--- a/gcc/testsuite/gcc.dg/sibcall-6.c
+++ b/gcc/testsuite/gcc.dg/sibcall-6.c
@@ -6,7 +6,7 @@
Copyright (C) 2002 Free Software Foundation Inc.
Contributed by Andreas Bauer <baueran@in.tum.de> */
-/* { dg-do run { target i?86-*-* x86_64-*-*} } */
+/* { dg-do run { target i?86-*-* s390*-*-* x86_64-*-*} } */
/* { dg-options "-O2 -foptimize-sibling-calls" } */
int foo (int);
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-integral-1.c b/gcc/testsuite/gcc.dg/torture/builtin-integral-1.c
index 1f2990dd2f0..0aeb7ff7bdb 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-integral-1.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-integral-1.c
@@ -9,33 +9,57 @@
#define PROTOTYPE1(FN) extern double FN(double); extern float FN##f(float); \
extern long double FN##l(long double);
+#define PROTOTYPE1_RET(FN, RET) extern RET FN(double); extern RET FN##f(float); \
+ extern RET FN##l(long double);
+#define PROTOTYPE_LINK_FAILURE(FN) extern void link_failure_##FN(void); \
+ extern void link_failure_##FN##f(void); \
+ extern void link_failure_##FN##l(void); \
PROTOTYPE1(fabs)
+PROTOTYPE1(ceil)
+PROTOTYPE1(floor)
+PROTOTYPE1(nearbyint)
+PROTOTYPE1(rint)
+PROTOTYPE1(round)
+PROTOTYPE1(trunc)
+PROTOTYPE1_RET(lround, long)
+PROTOTYPE1_RET(llround, long long)
+PROTOTYPE1_RET(lrint, long)
+PROTOTYPE1_RET(llrint, long long)
-void test(int i1, int i2)
-{
- /* Test that the various FP truncation builtins detect integral
- arguments. */
+/* Test that the various FP truncation builtins detect integral
+ arguments. */
#define CHECK_FN(MATHFN) \
- PROTOTYPE1 (MATHFN) \
- extern void link_failure_##MATHFN(void); \
- extern void link_failure_##MATHFN##f(void); \
- extern void link_failure_##MATHFN##l(void); \
+ PROTOTYPE_LINK_FAILURE(MATHFN); \
if (MATHFN(i1) != i1) link_failure_##MATHFN(); \
if (MATHFN##f(i1) != i1) link_failure_##MATHFN##f(); \
- if (MATHFN##l(i1) != i1) link_failure_##MATHFN##l(); \
+ if (MATHFN##l(i1) != i1) link_failure_##MATHFN##l();
+
+#define CHECK_FN_RET(MATHFN, RET) \
+ PROTOTYPE_LINK_FAILURE(MATHFN); \
+ if (MATHFN(i1) != (RET)(double)i1) link_failure_##MATHFN(); \
+ if (MATHFN##f(i1) != (RET)(float)i1) link_failure_##MATHFN##f(); \
+ if (MATHFN##l(i1) != (RET)(long double)i1) link_failure_##MATHFN##l();
+
+ /* Check that various other integral expressions are detected. */
+#define CHECK_EXPR(EXPR,NAME) \
+ extern void link_failure_FP_##NAME(void); \
+ extern void link_failure_fixed_##NAME(void); \
+ if (ceill(EXPR) != (EXPR)) link_failure_FP_##NAME(); \
+ if (lroundl(EXPR) != (long)(long double)(EXPR)) link_failure_fixed_##NAME();
+void __attribute__ ((__noinline__)) test (int i1, int i2)
+{
CHECK_FN(ceil);
CHECK_FN(floor);
CHECK_FN(nearbyint);
CHECK_FN(rint);
CHECK_FN(round);
CHECK_FN(trunc);
-
- /* Check that various other integral expressions are detected. */
-#define CHECK_EXPR(EXPR,NAME) \
- extern void link_failure_##NAME(void); \
- if (ceill(EXPR) != (EXPR)) link_failure_##NAME(); \
+ CHECK_FN_RET(lround, long);
+ CHECK_FN_RET(llround, long long);
+ CHECK_FN_RET(lrint, long);
+ CHECK_FN_RET(llrint, long long);
CHECK_EXPR (5.0, REAL_CST);
CHECK_EXPR (5.0F, REAL_CSTf);
@@ -54,5 +78,6 @@ void test(int i1, int i2)
int main (void)
{
+ test (1, 2);
return 0;
}
diff --git a/gcc/testsuite/objc.dg/image-info.m b/gcc/testsuite/objc.dg/image-info.m
index 5ba3fa4f904..02511bc4b82 100644
--- a/gcc/testsuite/objc.dg/image-info.m
+++ b/gcc/testsuite/objc.dg/image-info.m
@@ -35,4 +35,4 @@ extern void abort(void);
}
@end
-/* { dg-final { scan-assembler "\n.data\n.section __OBJC, __image_info\n\t.align.*\nL_OBJC_IMAGE_INFO.*:\n\t.long\t0\n\t.long\t1\n.data\n.objc_module_info\n" } } */
+/* { dg-final { scan-assembler "\n.data\n.section __OBJC, __image_info.*\n\t.align.*\nL_OBJC_IMAGE_INFO.*:\n\t.long\t0\n\t.long\t1\n.data\n.objc_module_info\n" } } */
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 668d7b12124..c15ab99f910 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -320,7 +320,8 @@ unsigned local_tick;
int flag_signed_char;
-/* Nonzero means give an enum type only as many bytes as it needs. */
+/* Nonzero means give an enum type only as many bytes as it needs. A value
+ of 2 means it has not yet been initialized. */
int flag_short_enums;
@@ -2285,6 +2286,9 @@ process_options (void)
OVERRIDE_OPTIONS;
#endif
+ if (flag_short_enums == 2)
+ flag_short_enums = targetm.default_short_enums ();
+
/* Set aux_base_name if not already set. */
if (aux_base_name)
;
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 9f9815eb3e2..26954e4bd01 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -2549,7 +2549,7 @@ delete_tree_cfg (void)
if (n_basic_blocks > 0)
free_blocks_annotations ();
- free_basic_block_vars (0);
+ free_basic_block_vars ();
basic_block_info = NULL;
label_to_block_map = NULL;
free_rbi_pool ();
diff --git a/gcc/tree.c b/gcc/tree.c
index 2e2c7686a20..33c696ef166 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5250,6 +5250,27 @@ finish_vector_type (tree t)
}
}
+static tree
+make_or_reuse_type (unsigned size, int unsignedp)
+{
+ if (size == INT_TYPE_SIZE)
+ return unsignedp ? unsigned_type_node : integer_type_node;
+ if (size == CHAR_TYPE_SIZE)
+ return unsignedp ? unsigned_char_type_node : signed_char_type_node;
+ if (size == SHORT_TYPE_SIZE)
+ return unsignedp ? short_unsigned_type_node : short_integer_type_node;
+ if (size == LONG_TYPE_SIZE)
+ return unsignedp ? long_unsigned_type_node : long_integer_type_node;
+ if (size == LONG_LONG_TYPE_SIZE)
+ return (unsignedp ? long_long_unsigned_type_node
+ : long_long_integer_type_node);
+
+ if (unsignedp)
+ return make_unsigned_type (size);
+ else
+ return make_signed_type (size);
+}
+
/* Create nodes for all integer types (and error_mark_node) using the sizes
of C datatypes. The caller should call set_sizetype soon after calling
this function to select one of the types as sizetype. */
@@ -5292,17 +5313,19 @@ build_common_tree_nodes (int signed_char)
TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
TYPE_PRECISION (boolean_type_node) = 1;
- intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
- intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
- intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
- intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
- intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
-
- unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
- unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
- unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
- unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
- unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
+ /* Fill in the rest of the sized types. Reuse existing type nodes
+ when possible. */
+ intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
+ intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
+ intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
+ intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
+ intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
+
+ unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
+ unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
+ unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
+ unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
+ unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
access_public_node = get_identifier ("public");
access_protected_node = get_identifier ("protected");
diff --git a/gcc/tree.h b/gcc/tree.h
index c7d6ce64b52..efc8691a0d0 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -546,8 +546,8 @@ extern void tree_operand_check_failed (int, enum tree_code,
#define FUNC_OR_METHOD_CHECK(T) TREE_CHECK2 (T, FUNCTION_TYPE, METHOD_TYPE)
#define PTR_OR_REF_CHECK(T) TREE_CHECK2 (T, POINTER_TYPE, REFERENCE_TYPE)
-#define SET_ARRAY_OR_VECTOR_CHECK(T) \
- TREE_CHECK3 (T, ARRAY_TYPE, SET_TYPE, VECTOR_TYPE)
+#define SET_OR_ARRAY_CHECK(T) \
+ TREE_CHECK2 (T, ARRAY_TYPE, SET_TYPE)
#define REC_OR_UNION_CHECK(T) \
TREE_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
@@ -1459,7 +1459,7 @@ struct tree_block GTY(())
#define TYPE_MODE(NODE) (TYPE_CHECK (NODE)->type.mode)
#define TYPE_ORIG_SIZE_TYPE(NODE) (INTEGER_TYPE_CHECK (NODE)->type.values)
#define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type.values)
-#define TYPE_DOMAIN(NODE) (SET_ARRAY_OR_VECTOR_CHECK (NODE)->type.values)
+#define TYPE_DOMAIN(NODE) (SET_OR_ARRAY_CHECK (NODE)->type.values)
#define TYPE_FIELDS(NODE) (REC_OR_UNION_CHECK (NODE)->type.values)
#define TYPE_METHODS(NODE) (REC_OR_UNION_CHECK (NODE)->type.maxval)
#define TYPE_VFIELD(NODE) (REC_OR_UNION_CHECK (NODE)->type.minval)
@@ -1485,7 +1485,7 @@ struct tree_block GTY(())
/* For a VECTOR_TYPE node, this describes a different type which is emitted
in the debugging output. We use this to describe a vector as a
structure containing an array. */
-#define TYPE_DEBUG_REPRESENTATION_TYPE(NODE) (TYPE_CHECK (NODE)->type.values)
+#define TYPE_DEBUG_REPRESENTATION_TYPE(NODE) (VECTOR_TYPE_CHECK (NODE)->type.values)
/* For aggregate types, information about this type, as a base type
for itself. Used in a language-dependent way for types that are
diff --git a/gcc/varasm.c b/gcc/varasm.c
index be91b6e5fcd..4b59129b0f6 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -233,7 +233,7 @@ unlikely_text_section (void)
current_function_name ());
unlikely_section_label_printed = true;
- /* Make sure that we have approprate alignment for instructions
+ /* Make sure that we have appropriate alignment for instructions
in this section. */
assemble_align (FUNCTION_BOUNDARY);
}
diff --git a/gcc/version.c b/gcc/version.c
index 99fd8053b8e..f9231b8ecdd 100644
--- a/gcc/version.c
+++ b/gcc/version.c
@@ -5,7 +5,7 @@
please modify this string to indicate that, e.g. by putting your
organization's name in parentheses at the end of the string. */
-const char version_string[] = "3.5-tree-ssa 20040512 (merged 20040428)";
+const char version_string[] = "3.5-tree-ssa 20040512 (merged 20040511)";
/* This is the location of the online document giving instructions for
reporting bugs. If you distribute a modified version of GCC,
diff --git a/gcc/vmsdbgout.c b/gcc/vmsdbgout.c
index 64562518e9d..e32564946b7 100644
--- a/gcc/vmsdbgout.c
+++ b/gcc/vmsdbgout.c
@@ -2,6 +2,7 @@
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Contributed by Douglas B. Rupp (rupp@gnat.com).
+ Updated by Bernard W. Giroud (bgiroud@users.sourceforge.net).
This file is part of GCC.
@@ -102,11 +103,26 @@ static unsigned int file_info_table_in_use;
table. */
#define FILE_TABLE_INCREMENT 64
-static char **func_table;
+/* A structure to hold basic information for the VMS end
+ routine. */
+
+typedef struct vms_func_struct
+{
+ const char *vms_func_name;
+ unsigned funcdef_number;
+}
+vms_func_node;
+
+typedef struct vms_func_struct *vms_func_ref;
+
static unsigned int func_table_allocated;
static unsigned int func_table_in_use;
#define FUNC_TABLE_INCREMENT 256
+/* A pointer to the base of a table that contains frame description
+ information for each routine. */
+static vms_func_ref func_table;
+
/* Local pointer to the name of the main input file. Initialized in
avmdbgout_init. */
static const char *primary_filename;
@@ -778,8 +794,9 @@ write_rtnbeg (int rtnnum, int dosizeonly)
char label[MAX_ARTIFICIAL_LABEL_BYTES];
DST_ROUTINE_BEGIN rtnbeg;
DST_PROLOG prolog;
+ vms_func_ref fde = &func_table[rtnnum];
- rtnname = func_table[rtnnum];
+ rtnname = (char *)fde->vms_func_name;
rtnnamelen = strlen (rtnname);
rtnentryname = concat (rtnname, "..en", NULL);
@@ -850,7 +867,7 @@ write_rtnbeg (int rtnnum, int dosizeonly)
totsize += write_debug_header (&prolog.dst_a_prolog_header, "prolog",
dosizeonly);
- ASM_GENERATE_INTERNAL_LABEL (label, FUNC_PROLOG_LABEL, rtnnum);
+ ASM_GENERATE_INTERNAL_LABEL (label, FUNC_PROLOG_LABEL, fde->funcdef_number);
totsize += write_debug_addr (label, "prolog breakpoint addr",
dosizeonly);
}
@@ -868,6 +885,8 @@ write_rtnend (int rtnnum, int dosizeonly)
char label1[MAX_ARTIFICIAL_LABEL_BYTES];
char label2[MAX_ARTIFICIAL_LABEL_BYTES];
int totsize;
+ vms_func_ref fde = &func_table[rtnnum];
+ int corrected_rtnnum = fde->funcdef_number;
totsize = 0;
@@ -882,8 +901,8 @@ write_rtnend (int rtnnum, int dosizeonly)
totsize += write_debug_data1 (rtnend.dst_b_rtnend_unused, "unused",
dosizeonly);
- ASM_GENERATE_INTERNAL_LABEL (label1, FUNC_BEGIN_LABEL, rtnnum);
- ASM_GENERATE_INTERNAL_LABEL (label2, FUNC_END_LABEL, rtnnum);
+ ASM_GENERATE_INTERNAL_LABEL (label1, FUNC_BEGIN_LABEL, corrected_rtnnum);
+ ASM_GENERATE_INTERNAL_LABEL (label2, FUNC_END_LABEL, corrected_rtnnum);
totsize += write_debug_delta4 (label2, label1, "routine size", dosizeonly);
return totsize;
@@ -1358,6 +1377,7 @@ static void
vmsdbgout_begin_function (tree decl)
{
const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
+ vms_func_ref fde;
if (write_symbols == VMS_AND_DWARF2_DEBUG)
(*dwarf2_debug_hooks.begin_function) (decl);
@@ -1365,12 +1385,16 @@ vmsdbgout_begin_function (tree decl)
if (func_table_in_use == func_table_allocated)
{
func_table_allocated += FUNC_TABLE_INCREMENT;
- func_table = xrealloc (func_table,
- func_table_allocated * sizeof (char *));
+ func_table
+ = (vms_func_ref) xrealloc (func_table,
+ func_table_allocated * sizeof (vms_func_node));
}
/* Add the new entry to the end of the function name table. */
- func_table[func_table_in_use++] = xstrdup (name);
+ fde = &func_table[func_table_in_use++];
+ fde->vms_func_name = xstrdup (name);
+ fde->funcdef_number = current_function_funcdef_no;
+
}
static char fullname_buff [4096];
@@ -1581,7 +1605,7 @@ vmsdbgout_init (const char *main_input_filename)
/* Skip the first entry - file numbers begin at 1 */
file_info_table_in_use = 1;
- func_table = xcalloc (FUNC_TABLE_INCREMENT, sizeof (char *));
+ func_table = (vms_func_ref) xcalloc (FUNC_TABLE_INCREMENT, sizeof (vms_func_node));
func_table_allocated = FUNC_TABLE_INCREMENT;
func_table_in_use = 1;
diff --git a/include/ChangeLog b/include/ChangeLog
index 52d2559f519..a4df91ab323 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,8 @@
+2004-05-04 Andreas Jaeger <aj@suse.de>
+
+ * demangle.h: Do not use C++ reserved keyword typename as
+ parameter for cplus_demangle_fill_builtin_type.
+
2004-04-22 Richard Henderson <rth@redhat.com>
* hashtab.h (struct htab): Add size_prime_index.
@@ -549,8 +554,8 @@ Tue May 30 16:53:34 2000 Andrew Cagney <cagney@b1.cygnus.com>
2000-05-06 Zack Weinberg <zack@wolery.cumb.org>
- * ansidecl.h: #define __extension__ to nothing if
- GCC_VERSION < 2008.
+ * ansidecl.h: #define __extension__ to nothing if
+ GCC_VERSION < 2008.
2000-05-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
@@ -795,8 +800,8 @@ Tue Feb 24 13:05:02 1998 Doug Evans <devans@canuck.cygnus.com>
Tue Feb 17 12:32:18 1998 Andrew Cagney <cagney@b1.cygnus.com>
* remote-sim.h (sim_fetch_register, sim_store_register): Add
- register length parameter. Functions return actual length of
- register.
+ register length parameter. Functions return actual length of
+ register.
Thu Feb 12 16:29:01 1998 Ian Lance Taylor <ian@cygnus.com>
@@ -854,7 +859,7 @@ Tue Nov 25 01:35:52 1997 Doug Evans <devans@seba.cygnus.com>
Sat Nov 22 23:34:15 1997 Andrew Cagney <cagney@b1.cygnus.com>
* remote-sim.h (sim_stop_reason): Clarify sim_signalled SIGRC
- argument.
+ argument.
Mon Nov 17 14:00:51 1997 Doug Evans <devans@seba.cygnus.com>
@@ -934,12 +939,12 @@ Fri May 23 13:43:41 1997 Fred Fish <fnf@cygnus.com>
Thu May 22 11:32:49 1997 Andrew Cagney <cagney@b1.cygnus.com>
* remote-sim.h: Review documentation. Clarify restrictions on
- when functions can be called.
+ when functions can be called.
Wed May 21 16:47:53 1997 Andrew Cagney <cagney@b1.cygnus.com>
* remote-sim.h (sim_set_profile_size): Add prototype, document as
- depreciated.
+ depreciated.
Tue May 20 09:32:22 1997 Andrew Cagney <cagney@b1.cygnus.com>
@@ -973,16 +978,16 @@ Tue Apr 22 10:24:34 1997 Fred Fish <fnf@cygnus.com>
Fri Apr 18 13:04:49 1997 Andrew Cagney <cagney@b1.cygnus.com>
* remote-sim.h (sim_stop): New interface - asynchronous
- notification of a request to stop / suspend the running
- simulation.
+ notification of a request to stop / suspend the running
+ simulation.
* remote-sim.h (enum sim_stop): Add sim_running and sim_polling as
- states for use internal to simulators.
+ states for use internal to simulators.
* callback.h (struct host_callback_strut): Put a magic number at
- the end of the struct to allow basic checking.
+ the end of the struct to allow basic checking.
(struct host_callback_struct ): Add poll_quit - so
- that the console etc can be polled at regular intervals.
+ that the console etc can be polled at regular intervals.
Thu Apr 17 02:17:12 1997 Doug Evans <dje@canuck.cygnus.com>
@@ -993,7 +998,7 @@ Thu Apr 17 02:17:12 1997 Doug Evans <dje@canuck.cygnus.com>
Wed Apr 2 17:09:12 1997 Andrew Cagney <cagney@kremvax.cygnus.com>
* remote-sim.h (sim_trace, sim_size): Make these global. They
- will go away shortly.
+ will go away shortly.
Wed Apr 2 15:23:49 1997 Doug Evans <dje@canuck.cygnus.com>
@@ -1023,7 +1028,7 @@ Mon Mar 17 19:22:12 1997 Ian Lance Taylor <ian@cygnus.com>
Mon Mar 17 14:57:55 1997 Andrew Cagney <cagney@kremvax.cygnus.com>
* remote-sim.h: New file, copied in from gdb/remote-sim.h. One
- day this will be placed in a directory of its own.
+ day this will be placed in a directory of its own.
Sat Mar 15 19:00:14 1997 Ian Lance Taylor <ian@cygnus.com>
@@ -1032,8 +1037,8 @@ Sat Mar 15 19:00:14 1997 Ian Lance Taylor <ian@cygnus.com>
Thu Mar 6 15:46:59 1997 Andrew Cagney <cagney@kremvax.cygnus.com>
* callback.h (struct host_callback_struct): Add callbacks -
- flush_stdout, write_stderr, flush_stderr, vprintf_filtered,
- evprintf_filtered. Delete redundant callbacks - printf_filtered.
+ flush_stdout, write_stderr, flush_stderr, vprintf_filtered,
+ evprintf_filtered. Delete redundant callbacks - printf_filtered.
Thu Feb 27 23:18:27 1997 Ian Lance Taylor <ian@cygnus.com>
@@ -1145,7 +1150,7 @@ Tue Jul 23 17:37:58 1996 Fred Fish <fnf@cygnus.com>
can define PRIVATE_XMALLOC and then define xmalloc and
xrealloc anyway they want.
(basename): Document in source that we can't declare the
- parameter type because it is declared inconsistently across
+ parameter type because it is declared inconsistently across
different systems.
Mon Jul 22 13:16:13 1996 Richard Henderson <rth@tamu.edu>
@@ -1940,7 +1945,7 @@ Sat Nov 30 20:46:43 1991 Steve Chamberlain (sac at rtl.cygnus.com)
Wed Nov 27 10:38:31 1991 Steve Chamberlain (sac at rtl.cygnus.com)
* internalcoff.h: (internal_scnhdr) took out #def dependency, now
- s_nreloc and s_nlnno are always long. (internal_reloc): allways
+ s_nreloc and s_nlnno are always long. (internal_reloc): allways
has an offset field now.
Fri Nov 22 08:12:58 1991 John Gilmore (gnu at cygnus.com)
diff --git a/include/demangle.h b/include/demangle.h
index 6e995e4817d..b3b8c58c517 100644
--- a/include/demangle.h
+++ b/include/demangle.h
@@ -458,7 +458,7 @@ cplus_demangle_fill_name PARAMS ((struct demangle_component *fill,
extern int
cplus_demangle_fill_builtin_type PARAMS ((struct demangle_component *fill,
- const char *typename));
+ const char *type_name));
/* Fill in a DEMANGLE_COMPONENT_OPERATOR, using the name of the
operator and the number of arguments which it takes (the latter is
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 553d17c3731..82547e29bfe 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,8 @@
+2004-04-29 Douglas B Rupp <rupp@gnat.com>
+
+ * mkstemps.c (mkstemps) [VMS]: Remove special open option. Update
+ copyright.
+
2004-04-26 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
* configure.ac (UNSIGNED_64BIT_TYPE): Unquote the definition.
diff --git a/libiberty/mkstemps.c b/libiberty/mkstemps.c
index 1f6600a15b9..94edf78755b 100644
--- a/libiberty/mkstemps.c
+++ b/libiberty/mkstemps.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1996, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 1996, 1998, 2004 Free Software Foundation, Inc.
This file is derived from mkstemp.c from the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -121,11 +121,7 @@ mkstemps (template, suffix_len)
v /= 62;
XXXXXX[5] = letters[v % 62];
-#ifdef VMS
- fd = open (template, O_RDWR|O_CREAT|O_EXCL, 0600, "fop=tmd");
-#else
fd = open (template, O_RDWR|O_CREAT|O_EXCL, 0600);
-#endif
if (fd >= 0)
/* The file does not exist. */
return fd;
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 3cb21bdbd9f..5b1edccbbe8 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,420 @@
+2004-05-10 Andreas Tobler <a.tobler@schweiz.ch>
+
+ * testsuite/lib/libjava.exp (libjava_invoke): Add new argument
+ ld_library_additions. Adjust all calls to libjava_invoke to match
+ the new argument.
+
+ * testsuite/libjava.jni/jni.exp (gcj_jni_test_one): Pass stdc++
+ path to cxxflagslist.
+ Pass path of libstdc++ to libjava_invoke.
+
+ * testsuite/libjava.jar/jar.exp (gcj_jar_inerpret): Adjust
+ libjava_invoke arguments.
+
+2004-05-10 Ranjit Mathew <rmathew@hotmail.com>
+
+ * testsuite/libjava.jacks/jacks.xfail: Update to reflect the current
+ reality.
+
+2004-05-07 Ranjit Mathew <rmathew@gmail.com>
+
+ * testsuite/libjava.jni/jni.exp (gcj_jni_test_one): Don't link the
+ main binary against the JNI shared library.
+
+2004-05-07 Jerry Quinn <jlquinn@optonline.net>
+
+ * java/util/SimpleTimeZone.java (startTimeMode, endTimeMode,
+ WALL_TIME, STANDARD_TIME, UTC_TIME): New members.
+ (SimpleTimeZone): Tweak docs. Add new variation.
+ (setStartRule,setEndRule): Add new variations. Use
+ startTimeMode and endTimeMode.
+
+2004-05-07 Jerry Quinn <jlquinn@optonline.net>
+
+ * java/util/Calendar.java (getActualMinimum,
+ getActualMaximum): Remove abstract. Implement.
+
+2004-05-06 Bryce McKinlay <mckinlay@redhat.com>
+
+ Run the jni tests using the interpreter.
+ * testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Append
+ options_cxx to shared lib compile command.
+ (gcj_jni_test_one): Pass cxxflags to gcj_jni_compile_c_to_so, so
+ they are used to link the shared lib, not the main binary.
+ Use libjava_invoke to run gij.
+
+2004-05-06 Michael Koch <konqueror@gmx.de>
+
+ * java/util/logging/Level.java
+ (parse): Use == instead of String.equals().
+
+2004-05-06 Bryce McKinlay <mckinlay@redhat.com>
+
+ * defineclass.cc (_Jv_ClassReader::prepare_pool_entry): Use
+ verify_field_signature and verify_method_signature, not
+ _Jv_VerifyFieldSignature and _Jv_VerifyMethodSigntature.
+ (_Jv_ClassReader::handleField): Likewise.
+ (_Jv_ClassReader::handleMethod): Likewise.
+
+2004-05-06 Michael Koch <konqueror@gmx.de>
+
+ * javax/swing/table/TableColumn.java:
+ Reformated.
+
+2004-05-06 Michael Koch <konqueror@gmx.de>
+
+ * javax/imageio/spi/ImageReaderWriterSpi.java
+ (ImageReaderWriterSpi): Made it public.
+ * javax/imageio/stream/ImageInputStream.java:
+ Clean up imports.
+
+2004-05-06 Michael Koch <konqueror@gmx.de>
+
+ * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ Removed empty line.
+
+2004-05-06 Michael Koch <konqueror@gmx.de>
+
+ * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c,
+ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c:
+ New files.
+ * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c:
+ Include gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h.
+ * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c:
+ Moved GtkCheckboxGroupPeer_dispose and GtkCheckboxGroupPeer_remove to
+ their own source file.
+ * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ Moved GtkGenericPeer_dispose and GtkComponentPeer_requestFocus to
+ their own source file. Removed GtkComponentPeer_gtkWidgetSetUsize.
+ * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ (create): Define variable on top of function.
+ * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
+ (menu_pos): Prototyped.
+ * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ (setTitle): Removed.
+ * jni/gtk-peer/gthread-jni.c
+ (gdk_threads_wake): Removed.
+ * Makefile.am (gtk_c_source_files): Added new files
+ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c and
+ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c.
+ * Makefile.in: Regenerated.
+
+2004-05-05 Bryce McKinlay <mckinlay@redhat.com>
+
+ * testsuite/libjava.jni/pr11951.java: Add missing System.loadLibrary()
+ call.
+
+2004-05-05 Mark Wielaard <mark@klomp.org>
+
+ * javax/swing/AbstractButton.java: Replace special HTML entities with
+ ASCII equivalent.
+ * javax/swing/DefaultBoundedRangeModel.java: Likewise.
+ * javax/swing/DefaultButtonModel.java: Likewise.
+ * javax/swing/DefaultListModel.java: Likewise.
+ * javax/swing/JList.java: Likewise.
+ * javax/swing/JSlider.java: Likewise.
+ * javax/swing/ListModel.java: Likewise.
+ * javax/swing/Popup.java: Likewise.
+ * javax/swing/SwingUtilities.java: Likewise.
+
+2004-05-05 Michael Koch <konqueror@gmx.de>
+
+ * javax/swing/AbstractButton.java,
+ javax/swing/ActionMap.java,
+ javax/swing/DefaultButtonModel.java,
+ javax/swing/DefaultListModel.java,
+ javax/swing/ImageIcon.java,
+ javax/swing/JComboBox.java,
+ javax/swing/JComponent.java,
+ javax/swing/JFrame.java,
+ javax/swing/JInternalFrame.java,
+ javax/swing/JMenuBar.java,
+ javax/swing/JMenuItem.java,
+ javax/swing/JOptionPane.java,
+ javax/swing/JProgressBar.java,
+ javax/swing/JRootPane.java,
+ javax/swing/JScrollBar.java,
+ javax/swing/JScrollPane.java,
+ javax/swing/JSeparator.java,
+ javax/swing/JSlider.java,
+ javax/swing/JTabbedPane.java,
+ javax/swing/JTable.java,
+ javax/swing/JTextField.java,
+ javax/swing/JToolBar.java,
+ javax/swing/JToolTip.java,
+ javax/swing/JTree.java,
+ javax/swing/JViewport.java,
+ javax/swing/JWindow.java,
+ javax/swing/KeyStroke.java,
+ javax/swing/LookAndFeel.java,
+ javax/swing/SwingUtilities.java,
+ javax/swing/Timer.java,
+ javax/swing/ToolTipManager.java,
+ javax/swing/UIDefaults.java,
+ javax/swing/border/TitledBorder.java,
+ javax/swing/filechooser/FileSystemView.java,
+ javax/swing/plaf/basic/BasicButtonListener.java,
+ javax/swing/plaf/basic/BasicButtonUI.java,
+ javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java,
+ javax/swing/plaf/basic/BasicGraphicsUtils.java,
+ javax/swing/plaf/basic/BasicLabelUI.java,
+ javax/swing/plaf/basic/BasicMenuItemUI.java,
+ javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java,
+ javax/swing/plaf/basic/BasicRootPaneUI.java,
+ javax/swing/plaf/basic/BasicScrollBarUI.java,
+ javax/swing/plaf/basic/BasicScrollPaneUI.java,
+ javax/swing/plaf/basic/BasicSliderUI.java,
+ javax/swing/plaf/basic/BasicTabbedPaneUI.java,
+ javax/swing/plaf/basic/BasicToggleButtonUI.java,
+ javax/swing/table/JTableHeader.java,
+ javax/swing/text/AbstractDocument.java,
+ javax/swing/text/DefaultCaret.java,
+ javax/swing/text/StyledEditorKit.java,
+ javax/swing/tree/DefaultTreeCellEditor.java:
+ Cleaned up imports.
+
+2004-05-05 Michael Koch <konqueror@gmx.de>
+
+ * java/util/prefs/AbstractPreferences.java
+ (AbstractPreferences): Added parenthesis for clarity.
+ Closes classpath bug #7940.
+
+2004-05-05 Tom Tromey <tromey@redhat.com>
+
+ * javax/naming/CompoundName.java (endsWith): Look at correct
+ element of source name.
+
+2004-05-05 Mark Wielaard <mark@klomp.org>
+
+ Reported by f.haeglsperger@gmx.de [classpath patch #2485]
+ * java/util/HashMap.java (rehash): Add entry at start of bucket.
+
+2004-05-05 Tom Tromey <tromey@redhat.com>
+
+ * java/io/BufferedReader.java (skip): Removed unused
+ variable.
+
+2004-05-05 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/FileDialog.java: Import java.io.Serializable explicitly.
+
+2004-05-05 Dalibor Topic <robilad@kaffe.org>
+
+ * java/text/AttributedString.java,
+ java/text/AttributedStringIterator.java,
+ java/text/Collator.java,
+ java/text/DecimalFormatSymbols.java,
+ java/text/NumberFormat.java,
+ java/text/RuleBasedCollator.java:
+ Cleaned up imports.
+
+2004-05-05 Tom Tromey <tromey@redhat.com>
+
+ * java/text/Format.java: Cleaned up imports.
+ * java/text/DecimalFormat.java: Cleaned up imports.
+ * java/security/SecureRandom.java: Cleaned up imports.
+ (SecureRandom): Removed unused variable.
+ * java/security/UnresolvedPermission.java: Cleaned up imports.
+ * java/util/Date.java (parse): Removed unused variable.
+ * java/util/ResourceBundle.java: Cleaned up imports.
+ (getBundle): Removed unused variable.
+ (tryBundle): Likewise.
+ * java/util/regex/Pattern.java (Pattern): Removed unused constructor.
+
+2004-05-05 Guilhem Lavaux <guilhem@kaffe.org>
+
+ * java/text/SimpleDateFormat.java:
+ (formatWithAttribute): New method. It implements
+ the formatting process with attributes.
+ (format): Use formatWithAttribute.
+ (formatToCharacterIterator): New method. Use
+ formatWithAttribute.
+
+2004-05-05 Guilhem Lavaux <guilhem@kaffe.org>
+
+ * java/text/MessageFormat.java:
+ (class Field): New class.
+ (formatToCharacterIterator): New method.
+ (format): Use formatInternal now.
+ (formatInternal): New method. String formatter should
+ be done here (with attributes). Attributes merging supported.
+ (parse): More documentation.
+ (getFormatsByArgumentIndex): New method.
+ (setFormatByArgumentIndex): New method.
+ (setFormatsByArgumentIndex): New method.
+
+2004-05-05 Guilhem Lavaux <guilhem@kaffe.org>
+
+ * java/text/DecimalFormat.java
+ (MAXIMUM_INTEGER_DIGITS): New constant to keep the numeric value 309.
+ (applyPatternWithSymbols): Use MAXIMUM_INTEGER_DIGITS.
+ (parse): Fixed handling of exponentiation notation and grouping.
+
+2004-05-05 Guilhem Lavaux <guilhem@kaffe.org>
+
+ * java/text/DecimalFormat.java
+ (scanFix): Build attribute array. Fixed error reporting.
+ (applyPatternWithSymbols): Store attributes for the prefix and
+ suffix.
+ (formatInternal): New method. Changed the way the string is
+ computed. Implemented attributes. Cleant up rounding in
+ exponential notation.
+ (format): Use formatInternal.
+ (formatToCharacterIterator): New method.
+ (exponentRound, negativePrefixRanges, positivePrefixRanges,
+ negativePrefixAttrs, positivePrefixAttrs, negativeSuffixRanges,
+ positiveSuffixRanges, negativeSuffixAttrs, positiveSuffixAttrs):
+ New fields.
+
+2004-05-04 Dalibor Topic <robilad@kaffe.org>
+
+ * java/security/interfaces/DSAKeyPairGenerator.java,
+ java/security/interfaces/DSAPrivateKey.java,
+ java/security/interfaces/DSAPublicKey.java,
+ java/security/interfaces/RSAPrivateKey.java,
+ java/security/interfaces/RSAPublicKey.java:
+ Cleaned up imports.
+
+2004-05-04 Michael Koch <konqueror@gmx.de>
+
+ * java/nio/ByteBuffer.java,
+ java/nio/CharBuffer.java,
+ java/nio/DoubleBuffer.java,
+ java/nio/FloatBuffer.java,
+ java/nio/IntBuffer.java,
+ java/nio/LongBuffer.java,
+ java/nio/ShortBuffer.java:
+ (compareTo): Fixed bogus implementation in all buffer classes.
+
+2004-05-04 Ingo Proetel <proetel@aicas.com>
+
+ * java/awt/image/ColorModel.java (getRGBdefault): Default ColorModel has
+ 32 bit pixels not 8 bit pixels.
+ (isCompatibleRaster): Added javadoc comment.
+
+2004-05-04 Ingo Proetel <proetel@aicas.com>
+
+ * java/awt/image/ComponentSampleModel.java (setDataSamples):Do not reset
+ scanline stride.
+
+2004-05-04 Ingo Proetel <proetel@aicas.com>
+
+ * java/awt/ColorPaintContext.java (<init>): Added ColorModel to signature.
+ (getColorModel): Return the actual color model.
+ (getRaster): Implemented.
+ (ColorRaster): New inner class.
+ * java/awt/SystemColor.java (createContext): Use ColorModel when creating
+ a PaintContext.
+ * java/awt/Color.java (<init>): Make exception more verbose.
+ (createContext): Use ColorModel when creating a PaintContext.
+
+2004-05-04 Michael Koch <konqueror@gmx.de>
+
+ * gnu/java/text/CharacterBreakIterator.java
+ (previous): Removed unused variable.
+
+2004-05-04 Guilhem Lavaux <guilhem@kaffe.org>
+
+ * gnu/java/text/FormatBuffer.java,
+ gnu/java/text/AttributedFormatBuffer.java,
+ gnu/java/text/StringFormatBuffer.java: New classes to implement
+ attributed iterators in java.text.
+ * gnu/java/text/FormatCharacterIterator.java: Moved
+ from java/text as it is an internal class.
+ * java/text/FormatCharacterIterator.java: Removed.
+ * java/text/Format.java:
+ Import gnu.java.text.FormatCharacterIterator.
+ * Makefile.am (java_source_files): Added new files.
+ * Makefile.in: Regenerated.
+
+
+2004-05-04 Mark Wielaard <mark@klomp.org>
+
+ * gnu/java/nio/channels/FileChannelImpl.java (finalize): New method.
+
+2004-05-03 Andreas Tobler <a.tobler@schweiz.ch>
+
+ * Makefile.am (WARNINGS): Replace -W with the more speaking -Wextra.
+ * Makefile.in: Rebuilt.
+
+2004-05-03 Mark Wielaard <mark@klomp.org>
+
+ * gnu/java/security/der/DERReader.java: Call static methods staticly.
+ * java/awt/TextComponent.java (select): Use selectionEnd parameter.
+ * java/net/URL.java
+ (set(String, String, int, String, String, String, String, String)):
+ Assign this.file to path or path + "?" + query.
+ * java/util/Arrays.java: Call static methods staticly.
+ * java/util/zip/ZipEntry.java: Likewise.
+ * javax/swing/plaf/basic/BasicArrowButton.java (setDirection): Assign
+ dir to this.direction.
+ * javax/swing/table/DefaultTableCellRenderer.java (noFocusBorder):
+ Assign static field only once.
+ (DefaultTableCellRenderer): Don't reassign noFocusBorder each time.
+
+2004-05-03 Mark Wielaard <mark@klomp.org>
+
+ * gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (minimumSize): Removed
+ unused variables hScrollbarHeight and vScrollbarWidth.
+ (preferredSize): Likewise.
+ * gnu/java/security/provider/DSAParameters.java (engineToString):
+ Removed unused call to System.getProperty("line.seperator");
+ * java/security/Security.java (loadProviders): Return result.
+
+2004-05-03 Tom Tromey <tromey@redhat.com>
+
+ * java/net/URLStreamHandler.java (toExternalForm): Removed
+ unused variables.
+ unused constructor.
+ * java/math/BigDecimal.java (divide): Removed unused variable.
+ * java/lang/Throwable.java: Cleaned up imports.
+ * java/lang/ClassLoader.java: Cleaned up imports.
+ * java/io/FilePermission.java (implies): Removed unused
+ variable.
+ * java/awt/TextComponent.java: Removed unused import.
+ * gnu/java/util/prefs/NodeReader.java: Cleaned up imports.
+ * gnu/java/util/DoubleEnumeration.java: Removed unused import.
+ * gnu/java/text/WordBreakIterator.java: Removed unused import.
+ * gnu/java/text/SentenceBreakIterator.java: Removed unused
+ import.
+ * gnu/java/text/LineBreakIterator.java: Removed unused import.
+ * gnu/java/text/CharacterBreakIterator.java: Removed
+ unused import.
+ * gnu/java/security/provider/DSAKeyPairGenerator.java:
+ Cleaned up imports.
+ * gnu/java/security/der/DERWriter.java: Cleaned up imports.
+ * gnu/java/nio/charset/UTF_16Decoder.java (put): Removed
+ unused method.
+ * gnu/java/nio/SocketChannelImpl.java: Cleaned up imports.
+ * gnu/java/nio/FileLockImpl.java: Cleaned up imports.
+ * gnu/java/io/Base64InputStream.java: Cleaned up imports.
+ * gnu/java/beans/info/ComponentBeanInfo.java: Cleaned up imports.
+ * gnu/classpath/ServiceFactory.java: Cleaned up imports.
+ (lookupProviders): Removed unused variable.
+ (loadNextServiceProvider): Likewise.
+ * gnu/java/beans/BeanInfoEmbryo.java: Cleaned up imports.
+
+2004-05-03 Michael Koch <konqueror@gmx.de>
+
+ Fixes PR libgcj/14695:
+ * java/net/NetworkInterface.java
+ (getByName): Return null when no interface was found.
+
+2004-04-30 Ranjit Mathew <rmathew@hotmail.com>
+ Tom Tromey <tromey@redhat.com>
+
+ * testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Use
+ additional option "-Wmissing-prototypes" for compiling C sources.
+ Print actual filename for pass/fail rather than $name.c.
+ * testsuite/libjava.jni/PR15133.java: New testcase file.
+ * testsuite/libjava.jni/PR15133.c: Likewise.
+ * testsuite/libjava.jni/PR15133.out: Likewise.
+
+2004-04-30 Roger Sayle <roger@eyesopen.com>
+
+ * testsuite/libjava.lang/MathBuiltin.java: Add tests for acos, asin,
+ ceil and floor.
+
2004-04-25 Ranjit Mathew <rmathew@hotmail.com>
* testsuite/libjava.jacks/jacks.exp (gcj_jacks_write): Explicitly
diff --git a/libjava/Makefile.am b/libjava/Makefile.am
index d1733adc071..ef8a49ddeb7 100644
--- a/libjava/Makefile.am
+++ b/libjava/Makefile.am
@@ -103,7 +103,7 @@ JAVAC = $(GCJ_WITH_FLAGS) -C
GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
-WARNINGS = -W -Wall
+WARNINGS = -Wextra -Wall
## We need _GNU_SOURCE defined for some Linux builds. It doesn't hurt
## to always define it.
AM_CXXFLAGS = -fno-rtti -fnon-call-exceptions $(THREADCXXFLAGS) \
@@ -191,6 +191,7 @@ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c \
+jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c \
@@ -199,6 +200,7 @@ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c \
+jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c \
@@ -2469,10 +2471,14 @@ gnu/java/security/x509/X500DistinguishedName.java \
gnu/java/security/x509/X509Certificate.java \
gnu/java/security/x509/X509CRLEntry.java \
gnu/java/security/x509/X509CRL.java \
+gnu/java/text/AttributedFormatBuffer.java \
gnu/java/text/BaseBreakIterator.java \
gnu/java/text/CharacterBreakIterator.java \
+gnu/java/text/FormatBuffer.java \
+gnu/java/text/FormatCharacterIterator.java \
gnu/java/text/LineBreakIterator.java \
gnu/java/text/SentenceBreakIterator.java \
+gnu/java/text/StringFormatBuffer.java \
gnu/java/text/WordBreakIterator.java \
gnu/java/util/DoubleEnumeration.java \
gnu/java/util/EmptyEnumeration.java \
@@ -2812,7 +2818,6 @@ java/text/DecimalFormat.java \
java/text/DecimalFormatSymbols.java \
java/text/FieldPosition.java \
java/text/Format.java \
-java/text/FormatCharacterIterator.java \
java/text/MessageFormat.java \
java/text/NumberFormat.java \
java/text/ParseException.java \
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index 66125bdda6c..1afe8dc27f6 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -211,7 +211,7 @@ JAVAC = $(GCJ_WITH_FLAGS) -C
GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
-WARNINGS = -W -Wall
+WARNINGS = -Wextra -Wall
AM_CXXFLAGS = -fno-rtti -fnon-call-exceptions $(THREADCXXFLAGS) \
-fdollars-in-identifiers \
-Wswitch-enum \
@@ -282,6 +282,7 @@ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c \
+jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c \
@@ -290,6 +291,7 @@ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c \
+jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c \
@@ -2141,10 +2143,14 @@ gnu/java/security/x509/X500DistinguishedName.java \
gnu/java/security/x509/X509Certificate.java \
gnu/java/security/x509/X509CRLEntry.java \
gnu/java/security/x509/X509CRL.java \
+gnu/java/text/AttributedFormatBuffer.java \
gnu/java/text/BaseBreakIterator.java \
gnu/java/text/CharacterBreakIterator.java \
+gnu/java/text/FormatBuffer.java \
+gnu/java/text/FormatCharacterIterator.java \
gnu/java/text/LineBreakIterator.java \
gnu/java/text/SentenceBreakIterator.java \
+gnu/java/text/StringFormatBuffer.java \
gnu/java/text/WordBreakIterator.java \
gnu/java/util/DoubleEnumeration.java \
gnu/java/util/EmptyEnumeration.java \
@@ -2484,7 +2490,6 @@ java/text/DecimalFormat.java \
java/text/DecimalFormatSymbols.java \
java/text/FieldPosition.java \
java/text/Format.java \
-java/text/FormatCharacterIterator.java \
java/text/MessageFormat.java \
java/text/NumberFormat.java \
java/text/ParseException.java \
@@ -2856,6 +2861,7 @@ lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES =
@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo \
@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.lo \
@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo \
@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo \
@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo \
@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.lo \
@@ -2864,6 +2870,7 @@ lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES =
@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo \
@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.lo \
@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.lo \
@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.lo \
@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.lo \
@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.lo \
@@ -2938,6 +2945,7 @@ lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES =
@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo \
@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.lo \
@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.lo \
+@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo \
@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo \
@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo \
@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.lo \
@@ -2946,6 +2954,7 @@ lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES =
@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo \
@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.lo \
@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo \
+@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.lo \
@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.lo \
@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.lo \
@GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.lo \
@@ -3009,7 +3018,7 @@ libgcj-test.spec.in libgcj.pc.in libgcj.spec.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = tar
+TAR = gtar
GZIP_ENV = --best
DIST_SUBDIRS = @DIRLTDL@ testsuite gcj include @DIRLTDL@ gcj include
DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
@@ -3410,10 +3419,14 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/gnu/java/security/x509/X509CRL.P \
.deps/gnu/java/security/x509/X509CRLEntry.P \
.deps/gnu/java/security/x509/X509Certificate.P \
+.deps/gnu/java/text/AttributedFormatBuffer.P \
.deps/gnu/java/text/BaseBreakIterator.P \
.deps/gnu/java/text/CharacterBreakIterator.P \
+.deps/gnu/java/text/FormatBuffer.P \
+.deps/gnu/java/text/FormatCharacterIterator.P \
.deps/gnu/java/text/LineBreakIterator.P \
.deps/gnu/java/text/SentenceBreakIterator.P \
+.deps/gnu/java/text/StringFormatBuffer.P \
.deps/gnu/java/text/WordBreakIterator.P \
.deps/gnu/java/util/DoubleEnumeration.P \
.deps/gnu/java/util/EmptyEnumeration.P \
@@ -4148,7 +4161,6 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/text/DateFormat.P .deps/java/text/DateFormatSymbols.P \
.deps/java/text/DecimalFormat.P .deps/java/text/DecimalFormatSymbols.P \
.deps/java/text/FieldPosition.P .deps/java/text/Format.P \
-.deps/java/text/FormatCharacterIterator.P \
.deps/java/text/MessageFormat.P .deps/java/text/NumberFormat.P \
.deps/java/text/ParseException.P .deps/java/text/ParsePosition.P \
.deps/java/text/RuleBasedCollator.P .deps/java/text/SimpleDateFormat.P \
@@ -4691,6 +4703,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.P \
+.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.P \
@@ -4699,6 +4712,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.P \
+.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.P \
diff --git a/libjava/defineclass.cc b/libjava/defineclass.cc
index 156efb5b1d7..26606815836 100644
--- a/libjava/defineclass.cc
+++ b/libjava/defineclass.cc
@@ -776,9 +776,9 @@ _Jv_ClassReader::prepare_pool_entry (int index, unsigned char this_tag)
name_index, type_index);
if (this_tag == JV_CONSTANT_Fieldref)
- _Jv_VerifyFieldSignature (pool_data[type_index].utf8);
+ verify_field_signature (pool_data[type_index].utf8);
else
- _Jv_VerifyMethodSignature (pool_data[type_index].utf8);
+ verify_method_signature (pool_data[type_index].utf8);
_Jv_Utf8Const* name = pool_data[name_index].utf8;
@@ -1107,7 +1107,7 @@ void _Jv_ClassReader::handleField (int field_no,
}
if (verify)
- _Jv_VerifyFieldSignature (sig);
+ verify_field_signature (sig);
// field->type is really a jclass, but while it is still
// unresolved we keep an _Jv_Utf8Const* instead.
@@ -1244,7 +1244,7 @@ void _Jv_ClassReader::handleMethod
else
verify_identifier (method->name);
- _Jv_VerifyMethodSignature (method->signature);
+ verify_method_signature (method->signature);
for (int i = 0; i < mth_index; ++i)
{
diff --git a/libjava/gnu/classpath/ServiceFactory.java b/libjava/gnu/classpath/ServiceFactory.java
index 0e81cf74b38..5d1493414d0 100644
--- a/libjava/gnu/classpath/ServiceFactory.java
+++ b/libjava/gnu/classpath/ServiceFactory.java
@@ -38,11 +38,9 @@ exception statement from your version. */
package gnu.classpath;
-import java.io.InputStream;
-import java.io.IOException;
import java.io.BufferedReader;
+import java.io.IOException;
import java.io.InputStreamReader;
-import java.io.Reader;
import java.net.URL;
import java.security.AccessControlContext;
import java.security.AccessController;
@@ -52,8 +50,8 @@ import java.util.Enumeration;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.logging.Level;
-import java.util.logging.Logger;
import java.util.logging.LogRecord;
+import java.util.logging.Logger;
/**
@@ -227,7 +225,6 @@ public final class ServiceFactory
public static Iterator lookupProviders(Class spi,
ClassLoader loader)
{
- InputStream stream;
String resourceName;
Enumeration urls;
@@ -407,7 +404,6 @@ public final class ServiceFactory
private Object loadNextServiceProvider()
{
String line;
- Class klass;
if (reader == null)
advanceReader();
diff --git a/libjava/gnu/java/awt/BitwiseXORComposite.java b/libjava/gnu/java/awt/BitwiseXORComposite.java
index 675c225bbfa..dd4f015b42a 100644
--- a/libjava/gnu/java/awt/BitwiseXORComposite.java
+++ b/libjava/gnu/java/awt/BitwiseXORComposite.java
@@ -232,7 +232,7 @@ public class BitwiseXORComposite
WritableRaster dstOut)
{
int aX, bX, dstX, aY, bY, dstY, width, height;
- int xorPixel, transferType;
+ int xorPixel;
int[] srcLine, dstLine;
aX = src.getMinX();
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
index e31a481537f..63d6fa86fe1 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
@@ -105,8 +105,6 @@ public class GtkTextAreaPeer extends GtkTextComponentPeer
public Dimension minimumSize (int rows, int cols)
{
TextArea ta = ((TextArea) awtComponent);
- int hScrollbarHeight = 0;
- int vScrollbarWidth = 0;
int height = 0;
int width = 0;
@@ -137,8 +135,6 @@ public class GtkTextAreaPeer extends GtkTextComponentPeer
public Dimension preferredSize (int rows, int cols)
{
TextArea ta = ((TextArea) awtComponent);
- int hScrollbarHeight = 0;
- int vScrollbarWidth = 0;
int height = 0;
int width = 0;
diff --git a/libjava/gnu/java/beans/BeanInfoEmbryo.java b/libjava/gnu/java/beans/BeanInfoEmbryo.java
index 473aa790cba..16738fe6048 100644
--- a/libjava/gnu/java/beans/BeanInfoEmbryo.java
+++ b/libjava/gnu/java/beans/BeanInfoEmbryo.java
@@ -38,10 +38,17 @@ exception statement from your version. */
package gnu.java.beans;
-import java.beans.*;
-import java.util.*;
-import gnu.java.lang.*;
-import java.lang.reflect.*;
+import java.beans.BeanDescriptor;
+import java.beans.BeanInfo;
+import java.beans.EventSetDescriptor;
+import java.beans.IndexedPropertyDescriptor;
+import java.beans.MethodDescriptor;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
/**
** A BeanInfoEmbryo accumulates information about a Bean
diff --git a/libjava/gnu/java/beans/info/ComponentBeanInfo.java b/libjava/gnu/java/beans/info/ComponentBeanInfo.java
index fce476149a9..877a18d65d2 100644
--- a/libjava/gnu/java/beans/info/ComponentBeanInfo.java
+++ b/libjava/gnu/java/beans/info/ComponentBeanInfo.java
@@ -38,8 +38,9 @@ exception statement from your version. */
package gnu.java.beans.info;
-import gnu.java.beans.*;
-import java.beans.*;
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.beans.SimpleBeanInfo;
/** BeanInfo class for java.awt.Component.
** This provides a few properties, but that's
diff --git a/libjava/gnu/java/io/Base64InputStream.java b/libjava/gnu/java/io/Base64InputStream.java
index 0879e945962..3780e952837 100644
--- a/libjava/gnu/java/io/Base64InputStream.java
+++ b/libjava/gnu/java/io/Base64InputStream.java
@@ -39,9 +39,8 @@ exception statement from your version. */
package gnu.java.io;
import java.io.FilterInputStream;
-import java.io.InputStream;
import java.io.IOException;
-import java.io.EOFException;
+import java.io.InputStream;
/**
* A filter input stream that decodes data encoded in the Base-64
diff --git a/libjava/gnu/java/nio/FileLockImpl.java b/libjava/gnu/java/nio/FileLockImpl.java
index c61b9caf10b..bba5880e22c 100644
--- a/libjava/gnu/java/nio/FileLockImpl.java
+++ b/libjava/gnu/java/nio/FileLockImpl.java
@@ -38,10 +38,10 @@ exception statement from your version. */
package gnu.java.nio;
+import gnu.java.nio.channels.FileChannelImpl;
+
import java.io.IOException;
import java.nio.channels.FileLock;
-import gnu.classpath.Configuration;
-import gnu.java.nio.channels.FileChannelImpl;
/**
* @author Michael Koch
diff --git a/libjava/gnu/java/nio/SocketChannelImpl.java b/libjava/gnu/java/nio/SocketChannelImpl.java
index d4dd6e05653..c67b7cb7bb7 100644
--- a/libjava/gnu/java/nio/SocketChannelImpl.java
+++ b/libjava/gnu/java/nio/SocketChannelImpl.java
@@ -38,12 +38,12 @@ exception statement from your version. */
package gnu.java.nio;
-import java.io.InputStream;
+import gnu.java.net.PlainSocketImpl;
+
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
-import java.net.InetAddress;
import java.net.InetSocketAddress;
-import gnu.java.net.PlainSocketImpl;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketTimeoutException;
@@ -53,13 +53,12 @@ import java.nio.channels.ClosedChannelException;
import java.nio.channels.ConnectionPendingException;
import java.nio.channels.NoConnectionPendingException;
import java.nio.channels.NotYetConnectedException;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.Selector;
+import java.nio.channels.SocketChannel;
import java.nio.channels.UnresolvedAddressException;
import java.nio.channels.UnsupportedAddressTypeException;
-import java.nio.channels.SocketChannel;
-import java.nio.channels.Selector;
-import java.nio.channels.SelectionKey;
import java.nio.channels.spi.SelectorProvider;
-import gnu.classpath.Configuration;
public final class SocketChannelImpl extends SocketChannel
{
diff --git a/libjava/gnu/java/nio/channels/FileChannelImpl.java b/libjava/gnu/java/nio/channels/FileChannelImpl.java
index ea6ef0e43bf..f4686b26d4f 100644
--- a/libjava/gnu/java/nio/channels/FileChannelImpl.java
+++ b/libjava/gnu/java/nio/channels/FileChannelImpl.java
@@ -115,6 +115,11 @@ public final class FileChannelImpl extends FileChannel
this.mode = mode;
}
+ protected void finalize() throws Throwable
+ {
+ close();
+ }
+
public static FileChannelImpl in;
public static FileChannelImpl out;
public static FileChannelImpl err;
diff --git a/libjava/gnu/java/nio/charset/UTF_16Decoder.java b/libjava/gnu/java/nio/charset/UTF_16Decoder.java
index c8e474d5741..6ff9c2893da 100644
--- a/libjava/gnu/java/nio/charset/UTF_16Decoder.java
+++ b/libjava/gnu/java/nio/charset/UTF_16Decoder.java
@@ -144,24 +144,6 @@ final class UTF_16Decoder extends CharsetDecoder
}
}
- /**
- * Writes <code>c</code> to <code>out</code> in the byte order
- * specified by <code>byteOrder</code>.
- **/
- private void put (ByteBuffer out, char c)
- {
- if (byteOrder == BIG_ENDIAN)
- {
- out.put ((byte) (c >> 8));
- out.put ((byte) (c & 0xFF));
- }
- else
- {
- out.put ((byte) (c & 0xFF));
- out.put ((byte) (c >> 8));
- }
- }
-
protected void implReset ()
{
byteOrder = originalByteOrder;
diff --git a/libjava/gnu/java/security/der/DERReader.java b/libjava/gnu/java/security/der/DERReader.java
index 3020b8b2d1a..3915b071165 100644
--- a/libjava/gnu/java/security/der/DERReader.java
+++ b/libjava/gnu/java/security/der/DERReader.java
@@ -335,7 +335,7 @@ public class DERReader implements DER
Integer.parseInt(str.substring( 6, 8)), // hour
Integer.parseInt(str.substring( 8, 10))); // minute
if (date.length() == 12);
- calendar.set(calendar.SECOND,
+ calendar.set(Calendar.SECOND,
Integer.parseInt(str.substring(10, 12)));
}
catch (NumberFormatException nfe)
@@ -362,13 +362,13 @@ public class DERReader implements DER
case 18:
case 17:
case 16:
- calendar.set(calendar.MILLISECOND,
+ calendar.set(Calendar.MILLISECOND,
Integer.parseInt(date.substring(15)));
case 14:
- calendar.set(calendar.SECOND,
+ calendar.set(Calendar.SECOND,
Integer.parseInt(date.substring(12, 14)));
case 12:
- calendar.set(calendar.MINUTE,
+ calendar.set(Calendar.MINUTE,
Integer.parseInt(date.substring(10, 12)));
}
}
diff --git a/libjava/gnu/java/security/der/DERWriter.java b/libjava/gnu/java/security/der/DERWriter.java
index ec3e3df339d..4e679ec802c 100644
--- a/libjava/gnu/java/security/der/DERWriter.java
+++ b/libjava/gnu/java/security/der/DERWriter.java
@@ -38,28 +38,23 @@ exception statement from your version. */
package gnu.java.security.der;
+import gnu.java.security.OID;
+
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
-
import java.math.BigInteger;
-
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
-
import java.text.SimpleDateFormat;
-
-import java.util.BitSet;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
-import gnu.java.security.OID;
-
/**
* Methods that allow various Java types to be written as a DER
* (Distinguished Encoding Rules) stream to the specified output stream.
diff --git a/libjava/gnu/java/security/provider/DSAKeyPairGenerator.java b/libjava/gnu/java/security/provider/DSAKeyPairGenerator.java
index 72f7b0eeddb..d4dff167164 100644
--- a/libjava/gnu/java/security/provider/DSAKeyPairGenerator.java
+++ b/libjava/gnu/java/security/provider/DSAKeyPairGenerator.java
@@ -39,20 +39,18 @@ exception statement from your version. */
package gnu.java.security.provider;
import java.math.BigInteger;
-import java.security.AlgorithmParameters;
import java.security.AlgorithmParameterGenerator;
-import java.security.KeyPairGeneratorSpi;
+import java.security.AlgorithmParameters;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidParameterException;
import java.security.KeyPair;
+import java.security.KeyPairGeneratorSpi;
import java.security.SecureRandom;
-import java.security.InvalidParameterException;
-import java.security.InvalidAlgorithmParameterException;
import java.security.interfaces.DSAParams;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.DSAParameterSpec;
import java.util.Random;
-import gnu.java.security.util.Prime;
-
public class DSAKeyPairGenerator extends KeyPairGeneratorSpi
implements java.security.interfaces.DSAKeyPairGenerator
{
diff --git a/libjava/gnu/java/security/provider/DSAParameters.java b/libjava/gnu/java/security/provider/DSAParameters.java
index 31c0d5e8e8e..3773308c26e 100644
--- a/libjava/gnu/java/security/provider/DSAParameters.java
+++ b/libjava/gnu/java/security/provider/DSAParameters.java
@@ -154,7 +154,6 @@ public byte[] engineGetEncoded(String format)
public String engineToString()
{
- String lineSeparator = System.getProperty("line.seperator");
return ("q: " + q + " p: " + p + " g: " + g);
}
diff --git a/libjava/gnu/java/text/CharacterBreakIterator.java b/libjava/gnu/java/text/CharacterBreakIterator.java
index 2febace8301..5d2036c3551 100644
--- a/libjava/gnu/java/text/CharacterBreakIterator.java
+++ b/libjava/gnu/java/text/CharacterBreakIterator.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.text;
-import java.text.BreakIterator;
import java.text.CharacterIterator;
/**
@@ -161,7 +160,6 @@ public class CharacterBreakIterator extends BaseBreakIterator
if (iter.getIndex() == iter.getBeginIndex())
return DONE;
- int start = iter.getBeginIndex();
while (iter.getIndex() >= iter.getBeginIndex())
{
char c = iter.previous();
diff --git a/libjava/gnu/java/text/LineBreakIterator.java b/libjava/gnu/java/text/LineBreakIterator.java
index 59c45d7bdca..e1cb49c7d56 100644
--- a/libjava/gnu/java/text/LineBreakIterator.java
+++ b/libjava/gnu/java/text/LineBreakIterator.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.text;
-import java.text.BreakIterator;
import java.text.CharacterIterator;
/**
diff --git a/libjava/gnu/java/text/SentenceBreakIterator.java b/libjava/gnu/java/text/SentenceBreakIterator.java
index 62b99f0fbf8..405bbc5408d 100644
--- a/libjava/gnu/java/text/SentenceBreakIterator.java
+++ b/libjava/gnu/java/text/SentenceBreakIterator.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.text;
-import java.text.BreakIterator;
import java.text.CharacterIterator;
/**
diff --git a/libjava/gnu/java/text/WordBreakIterator.java b/libjava/gnu/java/text/WordBreakIterator.java
index 3b6aae8c854..39dbefe6e50 100644
--- a/libjava/gnu/java/text/WordBreakIterator.java
+++ b/libjava/gnu/java/text/WordBreakIterator.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.text;
-import java.text.BreakIterator;
import java.text.CharacterIterator;
/**
diff --git a/libjava/gnu/java/util/DoubleEnumeration.java b/libjava/gnu/java/util/DoubleEnumeration.java
index fd033a356f8..21eb605e792 100644
--- a/libjava/gnu/java/util/DoubleEnumeration.java
+++ b/libjava/gnu/java/util/DoubleEnumeration.java
@@ -37,7 +37,6 @@ exception statement from your version. */
package gnu.java.util;
-import java.io.*;
import java.util.Enumeration;
import java.util.NoSuchElementException;
diff --git a/libjava/gnu/java/util/prefs/NodeReader.java b/libjava/gnu/java/util/prefs/NodeReader.java
index 6c9fdc9ec06..e343b6b2b5c 100644
--- a/libjava/gnu/java/util/prefs/NodeReader.java
+++ b/libjava/gnu/java/util/prefs/NodeReader.java
@@ -38,13 +38,13 @@ exception statement from your version. */
package gnu.java.util.prefs;
import java.io.BufferedReader;
+import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.io.InputStream;
-import java.io.IOException;
import java.io.Reader;
-
-import java.util.prefs.*;
+import java.util.prefs.InvalidPreferencesFormatException;
+import java.util.prefs.Preferences;
+import java.util.prefs.PreferencesFactory;
/**
* Reads and imports preferences nodes from files.
diff --git a/libjava/java/awt/Color.java b/libjava/java/awt/Color.java
index e6eb03e8f0a..c41117a6e33 100644
--- a/libjava/java/awt/Color.java
+++ b/libjava/java/awt/Color.java
@@ -319,7 +319,12 @@ public class Color implements Paint, Serializable
{
if ((red & 255) != red || (green & 255) != green || (blue & 255) != blue
|| (alpha & 255) != alpha)
- throw new IllegalArgumentException("Bad RGB values");
+ throw new IllegalArgumentException("Bad RGB values"
+ +" red=0x"+Integer.toHexString(red)
+ +" green=0x"+Integer.toHexString(green)
+ +" blue=0x"+Integer.toHexString(blue)
+ +" alpha=0x"+Integer.toHexString(alpha) );
+
value = (alpha << 24) | (red << 16) | (green << 8) | blue;
falpha = 1;
cs = null;
@@ -950,7 +955,7 @@ public class Color implements Paint, Serializable
* object, regardless of the parameters. Subclasses, however, may have a
* mutable result.
*
- * @param cm the requested color model, ignored
+ * @param cm the requested color model
* @param deviceBounds the bounding box in device coordinates, ignored
* @param userBounds the bounding box in user coordinates, ignored
* @param xform the bounds transformation, ignored
@@ -962,8 +967,8 @@ public class Color implements Paint, Serializable
AffineTransform xform,
RenderingHints hints)
{
- if (context == null)
- context = new ColorPaintContext(value);
+ if (context == null || !context.getColorModel().equals(cm))
+ context = new ColorPaintContext(cm,value);
return context;
}
diff --git a/libjava/java/awt/ColorPaintContext.java b/libjava/java/awt/ColorPaintContext.java
index a365812a866..9fdfe61962d 100644
--- a/libjava/java/awt/ColorPaintContext.java
+++ b/libjava/java/awt/ColorPaintContext.java
@@ -1,5 +1,5 @@
/* ColorPaintContext.java -- context for painting solid colors
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -55,15 +55,31 @@ class ColorPaintContext implements PaintContext
* SystemColor.
*/
final int color;
+ final ColorModel colorModel;
+ private ColorRaster cachedRaster;
+
+
/**
* Create the context for a given color.
*
- * @param c the solid color to use
+ * @param c The solid color to use.
*/
- ColorPaintContext(int c)
+ ColorPaintContext(int colorRGB)
{
- color = c;
+ this(ColorModel.getRGBdefault(), colorRGB);
+ }
+
+ /**
+ * Create the context for a given color.
+ *
+ * @param cm The color model of this context.
+ * @param c The solid color to use.
+ */
+ ColorPaintContext(ColorModel cm,int colorRGB)
+ {
+ color = colorRGB;
+ colorModel = cm;
}
/**
@@ -75,14 +91,13 @@ class ColorPaintContext implements PaintContext
}
/**
- * Return the color model of this context. This ignores the model passed
- * in the request, since colors are always in sRGB.
+ * Return the color model of this context.
*
* @return the context color model
*/
public ColorModel getColorModel()
{
- return ColorModel.getRGBdefault();
+ return colorModel;
}
/**
@@ -94,10 +109,87 @@ class ColorPaintContext implements PaintContext
* @param h the height, in device space
* @return a raster for the given area and color
*/
- public Raster getRaster(int x, int y, int w, int h)
+ public Raster getRaster(int x, int y, int width, int height)
+ {
+ if( cachedRaster == null
+ || cachedRaster.getWidth() < width
+ || cachedRaster.getHeight() < height)
+ {
+ cachedRaster = new ColorRaster(colorModel, 0, 0, width, height, color);
+ }
+ return cachedRaster.createChild(0 ,0 ,width ,height ,x ,y , null);
+ }
+
+ /**
+ * A ColorRaster is a raster that is completely filled with one color. The
+ * data layout is taken from the color model given to the constructor.
+ */
+ private class ColorRaster extends Raster
{
- // XXX Implement. Sun uses undocumented implementation class
- // sun.awt.image.IntegerInterleavedRaster.
- throw new Error("not implemented");
+
+ /**
+ * Create a raster that is compaltible with the given color model and
+ * filled with the given color.
+ * @param cm The color model for this raster.
+ * @param x The smallest horizontal corrdinate in the raster.
+ * @param y The smallest vertical coordinate in the raster.
+ * @param width The width of the raster.
+ * @param height The height of the raster.
+ * @param rgbPixel The RGB value of the color for this raster.
+ */
+ ColorRaster(ColorModel cm,int x, int y, int width, int height, int rgbPixel)
+ {
+ super(cm.createCompatibleSampleModel(width,height),new Point(x,y));
+ Object pixel = cm.getDataElements(rgbPixel,null);
+ getSampleModel().setDataElements(0, 0,
+ width, height,
+ multiplyData(pixel,null,width*height),
+ dataBuffer);
+ }
+
+
+
+ private Object multiplyData(Object src, Object dest, int factor)
+ {
+ Object from;
+ int srcLength = 0;
+ if (src instanceof byte[])
+ {
+ srcLength = ((byte[])src).length;
+
+ if (dest == null) dest = new byte[factor * srcLength];
+ }
+ else if (src instanceof short[])
+ {
+ srcLength = ((short[])src).length;
+ if (dest == null) dest = new short[factor * srcLength];
+ }
+ else if (src instanceof int[])
+ {
+ srcLength = ((int[]) src).length;
+ if (dest == null) dest = new int[factor * srcLength];
+ }
+ else
+ {
+ throw new ClassCastException("Unknown data buffer type");
+ }
+
+ System.arraycopy(src,0,dest,0,srcLength);
+
+ int count = 1;
+ while(count*2 < factor)
+ {
+ System.arraycopy(dest, 0, dest, count * srcLength, count*srcLength);
+ count *= 2;
+ }
+
+ if(factor > count)
+ System.arraycopy(dest,0, dest, count * srcLength,
+ (factor - count) * srcLength );
+
+ return dest;
+ }
+
}
+
} // class ColorPaintContext
diff --git a/libjava/java/awt/FileDialog.java b/libjava/java/awt/FileDialog.java
index 24a621084b9..854d092f016 100644
--- a/libjava/java/awt/FileDialog.java
+++ b/libjava/java/awt/FileDialog.java
@@ -41,6 +41,7 @@ package java.awt;
import java.awt.peer.FileDialogPeer;
import java.awt.peer.DialogPeer;
import java.io.FilenameFilter;
+import java.io.Serializable;
/**
* This class implements a file selection dialog box widget.
@@ -48,7 +49,7 @@ import java.io.FilenameFilter;
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Tom Tromey <tromey@redhat.com>
*/
-public class FileDialog extends Dialog implements java.io.Serializable
+public class FileDialog extends Dialog implements Serializable
{
/*
diff --git a/libjava/java/awt/SystemColor.java b/libjava/java/awt/SystemColor.java
index c6bffe2101a..5217677b722 100644
--- a/libjava/java/awt/SystemColor.java
+++ b/libjava/java/awt/SystemColor.java
@@ -427,7 +427,7 @@ public final class SystemColor extends Color implements Serializable
* as the system color is solid, the context does not need any of the
* passed parameters to do its job.
*
- * @param cm the requested color model, ignored
+ * @param cm the requested color model
* @param deviceBounds the bounding box in device coordinates, ignored
* @param userBounds the bounding box in user coordinates, ignored
* @param xform the bounds transformation, ignored
@@ -441,8 +441,8 @@ public final class SystemColor extends Color implements Serializable
{
Toolkit.getDefaultToolkit().loadSystemColors(colors);
int color = colors[value] | ALPHA_MASK;
- if (context == null || color != context.color)
- context = new ColorPaintContext(color);
+ if (context == null || color != context.color || !context.getColorModel().equals(cm))
+ context = new ColorPaintContext(cm,color);
return context;
}
diff --git a/libjava/java/awt/TextComponent.java b/libjava/java/awt/TextComponent.java
index f0c5d6f54b2..0a410a44b9f 100644
--- a/libjava/java/awt/TextComponent.java
+++ b/libjava/java/awt/TextComponent.java
@@ -41,7 +41,6 @@ package java.awt;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import java.awt.peer.TextComponentPeer;
-import java.awt.peer.ComponentPeer;
import java.io.Serializable;
import java.util.EventListener;
@@ -234,11 +233,11 @@ setSelectionEnd(int selectionEnd)
* specified start and end positions. Illegal values for these
* positions are silently fixed.
*
- * @param startSelection The new start position for the selected text.
- * @param endSelection The new end position for the selected text.
+ * @param selectionStart The new start position for the selected text.
+ * @param selectionEnd The new end position for the selected text.
*/
public synchronized void
-select(int selectionStart, int endSelection)
+select(int selectionStart, int selectionEnd)
{
if (selectionStart < 0)
selectionStart = 0;
diff --git a/libjava/java/awt/image/ColorModel.java b/libjava/java/awt/image/ColorModel.java
index 767b83f7dd0..c73f4fd4e58 100644
--- a/libjava/java/awt/image/ColorModel.java
+++ b/libjava/java/awt/image/ColorModel.java
@@ -166,7 +166,7 @@ public abstract class ColorModel implements Transparency
*/
public static ColorModel getRGBdefault()
{
- return new DirectColorModel(8, 0xff0000, 0xff00, 0xff, 0xff000000);
+ return new DirectColorModel(32, 0xff0000, 0xff00, 0xff, 0xff000000);
}
public final boolean hasAlpha()
@@ -597,7 +597,11 @@ public abstract class ColorModel implements Transparency
return null;
}
- // Typically overridden
+ /**
+ * Checks if the given raster has a compatible data-layout (SampleModel).
+ * @param raster The Raster to test.
+ * @return true if raster is compatible.
+ */
public boolean isCompatibleRaster(Raster raster)
{
SampleModel sampleModel = raster.getSampleModel();
diff --git a/libjava/java/awt/image/ComponentSampleModel.java b/libjava/java/awt/image/ComponentSampleModel.java
index 0a40161adeb..c7b08b919e5 100644
--- a/libjava/java/awt/image/ComponentSampleModel.java
+++ b/libjava/java/awt/image/ComponentSampleModel.java
@@ -349,7 +349,7 @@ public class ComponentSampleModel extends SampleModel
if (scanlineStride == rowSize)
{
// Collapse scan lines:
- scanlineStride = rowSize *= h;
+ rowSize *= h;
h = 1;
}
diff --git a/libjava/java/io/BufferedReader.java b/libjava/java/io/BufferedReader.java
index 9175d4e89f9..444b66de408 100644
--- a/libjava/java/io/BufferedReader.java
+++ b/libjava/java/io/BufferedReader.java
@@ -533,12 +533,13 @@ public class BufferedReader extends Reader
// skip the '\n' for us). By doing this, we'll have to back up pos.
// That's easier than trying to keep track of whether we've skipped
// one element or not.
- int ch;
if (pos > limit)
- if ((ch = read()) < 0)
- return 0;
- else
- --pos;
+ {
+ if (read() < 0)
+ return 0;
+ else
+ --pos;
+ }
int avail = limit - pos;
diff --git a/libjava/java/io/FilePermission.java b/libjava/java/io/FilePermission.java
index a26f8c70f87..c34a2ecf9b2 100644
--- a/libjava/java/io/FilePermission.java
+++ b/libjava/java/io/FilePermission.java
@@ -229,7 +229,6 @@ public final class FilePermission extends Permission implements Serializable
return false;
/* Make sure there are no subdirectories specified
underneath this one */
- String sub2 = f2.substring(sub1.length()+1);
if(f2.substring(sub1.length()+1).indexOf(File.separatorChar)
!= -1)
return false;
diff --git a/libjava/java/lang/ClassLoader.java b/libjava/java/lang/ClassLoader.java
index 2b30b1b8a8b..60d7a7f9e02 100644
--- a/libjava/java/lang/ClassLoader.java
+++ b/libjava/java/lang/ClassLoader.java
@@ -38,9 +38,11 @@ exception statement from your version. */
package java.lang;
-import java.io.InputStream;
+import gnu.java.util.DoubleEnumeration;
+import gnu.java.util.EmptyEnumeration;
+
import java.io.IOException;
-import java.lang.reflect.Constructor;
+import java.io.InputStream;
import java.net.URL;
import java.security.CodeSource;
import java.security.PermissionCollection;
@@ -49,8 +51,6 @@ import java.security.ProtectionDomain;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
-import gnu.java.util.DoubleEnumeration;
-import gnu.java.util.EmptyEnumeration;
/**
* The ClassLoader is a way of customizing the way Java gets its classes
diff --git a/libjava/java/lang/Throwable.java b/libjava/java/lang/Throwable.java
index b3005afc6ba..1f236b085ed 100644
--- a/libjava/java/lang/Throwable.java
+++ b/libjava/java/lang/Throwable.java
@@ -37,13 +37,9 @@ exception statement from your version. */
package java.lang;
-import java.io.Serializable;
-import java.io.PrintWriter;
import java.io.PrintStream;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
-import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.Serializable;
/**
* Throwable is the superclass of all exceptions that can be raised.
diff --git a/libjava/java/math/BigDecimal.java b/libjava/java/math/BigDecimal.java
index f9965add4c1..401ebe95d3c 100644
--- a/libjava/java/math/BigDecimal.java
+++ b/libjava/java/math/BigDecimal.java
@@ -271,7 +271,6 @@ public class BigDecimal extends Number implements Comparable
return newScale == 0 ? ZERO : new BigDecimal (ZERO.intVal, newScale);
// Ensure that pow gets a non-negative value.
- int valScale = val.scale;
BigInteger valIntVal = val.intVal;
int power = newScale - (scale - val.scale);
if (power < 0)
diff --git a/libjava/java/net/NetworkInterface.java b/libjava/java/net/NetworkInterface.java
index e7f7290febc..ab6d7b4263f 100644
--- a/libjava/java/net/NetworkInterface.java
+++ b/libjava/java/net/NetworkInterface.java
@@ -130,12 +130,15 @@ public final class NetworkInterface
}
/**
- * Returns an network interface by name
+ * Returns an network interface by name
*
- * @param name The name of the interface to return
+ * @param name The name of the interface to return
+ *
+ * @return a <code>NetworkInterface</code> object representing the interface,
+ * or null if there is no interface with that name.
*
- * @exception SocketException If an error occurs
- * @exception NullPointerException If the specified name is null
+ * @exception SocketException If an error occurs
+ * @exception NullPointerException If the specified name is null
*/
public static NetworkInterface getByName(String name)
throws SocketException
@@ -150,7 +153,8 @@ public final class NetworkInterface
return tmp;
}
- throw new SocketException("no network interface with this name exists");
+ // No interface with the given name found.
+ return null;
}
/**
diff --git a/libjava/java/net/URL.java b/libjava/java/net/URL.java
index 729d96fa878..623f6601770 100644
--- a/libjava/java/net/URL.java
+++ b/libjava/java/net/URL.java
@@ -743,12 +743,11 @@ public final class URL implements Serializable
this.host = host;
this.userInfo = userInfo;
this.port = port;
- this.file = path;
this.authority = authority;
if (query == null)
- this.file = file;
+ this.file = path;
else
- this.file = file + "?" + query;
+ this.file = path + "?" + query;
this.ref = ref;
hashCode = hashCode(); // Used for serialization.
}
diff --git a/libjava/java/net/URLStreamHandler.java b/libjava/java/net/URLStreamHandler.java
index 509e7f41586..d224ff556e9 100644
--- a/libjava/java/net/URLStreamHandler.java
+++ b/libjava/java/net/URLStreamHandler.java
@@ -502,12 +502,9 @@ public abstract class URLStreamHandler
protected String toExternalForm(URL url)
{
String protocol;
- String host;
String file;
String ref;
- String user;
String authority;
- int port;
protocol = url.getProtocol();
authority = url.getAuthority();
diff --git a/libjava/java/nio/ByteBuffer.java b/libjava/java/nio/ByteBuffer.java
index 276b2dbcb81..8b43da57910 100644
--- a/libjava/java/nio/ByteBuffer.java
+++ b/libjava/java/nio/ByteBuffer.java
@@ -293,32 +293,27 @@ public abstract class ByteBuffer extends Buffer
*/
public int compareTo (Object obj)
{
- ByteBuffer a = (ByteBuffer) obj;
+ ByteBuffer other = (ByteBuffer) obj;
- if (a.remaining () != remaining ())
- return 1;
-
- if (! hasArray () ||
- ! a.hasArray ())
- {
- return 1;
- }
-
- int r = remaining ();
- int i1 = position ();
- int i2 = a.position ();
-
- for (int i = 0; i < r; i++)
+ int num = Math.min(remaining(), other.remaining());
+ int pos_this = position();
+ int pos_other = other.position();
+
+ for (int count = 0; count < num; count++)
{
- int t = (int) (get (i1) - a.get (i2));
-
- if (t != 0)
- {
- return (int) t;
- }
+ byte a = get(pos_this++);
+ byte b = other.get(pos_other++);
+
+ if (a == b)
+ continue;
+
+ if (a < b)
+ return -1;
+
+ return 1;
}
-
- return 0;
+
+ return remaining() - other.remaining();
}
/**
diff --git a/libjava/java/nio/CharBuffer.java b/libjava/java/nio/CharBuffer.java
index 3d488bad345..416ca834988 100644
--- a/libjava/java/nio/CharBuffer.java
+++ b/libjava/java/nio/CharBuffer.java
@@ -1,5 +1,5 @@
/* CharBuffer.java --
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -310,32 +310,27 @@ public abstract class CharBuffer extends Buffer
*/
public int compareTo (Object obj)
{
- CharBuffer a = (CharBuffer) obj;
+ CharBuffer other = (CharBuffer) obj;
- if (a.remaining () != remaining ())
- return 1;
-
- if (! hasArray () ||
- ! a.hasArray ())
- {
- return 1;
- }
-
- int r = remaining ();
- int i1 = position ();
- int i2 = a.position ();
-
- for (int i = 0; i < r; i++)
+ int num = Math.min(remaining(), other.remaining());
+ int pos_this = position();
+ int pos_other = other.position();
+
+ for (int count = 0; count < num; count++)
{
- int t = (int) (get (i1) - a.get (i2));
-
- if (t != 0)
- {
- return (int) t;
- }
+ char a = get(pos_this++);
+ char b = other.get(pos_other++);
+
+ if (a == b)
+ continue;
+
+ if (a < b)
+ return -1;
+
+ return 1;
}
-
- return 0;
+
+ return remaining() - other.remaining();
}
/**
diff --git a/libjava/java/nio/DoubleBuffer.java b/libjava/java/nio/DoubleBuffer.java
index d669c2138c4..1ad8baede02 100644
--- a/libjava/java/nio/DoubleBuffer.java
+++ b/libjava/java/nio/DoubleBuffer.java
@@ -1,5 +1,5 @@
/* DoubleBuffer.java --
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -265,32 +265,27 @@ public abstract class DoubleBuffer extends Buffer
*/
public int compareTo (Object obj)
{
- DoubleBuffer a = (DoubleBuffer) obj;
+ DoubleBuffer other = (DoubleBuffer) obj;
- if (a.remaining () != remaining ())
- return 1;
-
- if (! hasArray () ||
- ! a.hasArray ())
- {
- return 1;
- }
-
- int r = remaining ();
- int i1 = position ();
- int i2 = a.position ();
-
- for (int i = 0; i < r; i++)
+ int num = Math.min(remaining(), other.remaining());
+ int pos_this = position();
+ int pos_other = other.position();
+
+ for (int count = 0; count < num; count++)
{
- int t = (int) (get (i1) - a.get (i2));
-
- if (t != 0)
- {
- return (int) t;
- }
+ double a = get(pos_this++);
+ double b = other.get(pos_other++);
+
+ if (a == b)
+ continue;
+
+ if (a < b)
+ return -1;
+
+ return 1;
}
-
- return 0;
+
+ return remaining() - other.remaining();
}
/**
diff --git a/libjava/java/nio/FloatBuffer.java b/libjava/java/nio/FloatBuffer.java
index 0c7b04dd0f5..ab87b7f898f 100644
--- a/libjava/java/nio/FloatBuffer.java
+++ b/libjava/java/nio/FloatBuffer.java
@@ -1,5 +1,5 @@
/* FloatBuffer.java --
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -265,32 +265,27 @@ public abstract class FloatBuffer extends Buffer
*/
public int compareTo (Object obj)
{
- FloatBuffer a = (FloatBuffer) obj;
+ FloatBuffer other = (FloatBuffer) obj;
- if (a.remaining () != remaining ())
- return 1;
-
- if (! hasArray () ||
- ! a.hasArray ())
- {
- return 1;
- }
-
- int r = remaining ();
- int i1 = position ();
- int i2 = a.position ();
-
- for (int i = 0; i < r; i++)
+ int num = Math.min(remaining(), other.remaining());
+ int pos_this = position();
+ int pos_other = other.position();
+
+ for (int count = 0; count < num; count++)
{
- int t = (int) (get (i1) - a.get (i2));
-
- if (t != 0)
- {
- return (int) t;
- }
+ float a = get(pos_this++);
+ float b = other.get(pos_other++);
+
+ if (a == b)
+ continue;
+
+ if (a < b)
+ return -1;
+
+ return 1;
}
-
- return 0;
+
+ return remaining() - other.remaining();
}
/**
diff --git a/libjava/java/nio/IntBuffer.java b/libjava/java/nio/IntBuffer.java
index 469a344ea71..52d822aa81d 100644
--- a/libjava/java/nio/IntBuffer.java
+++ b/libjava/java/nio/IntBuffer.java
@@ -1,5 +1,5 @@
/* IntBuffer.java --
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -265,32 +265,27 @@ public abstract class IntBuffer extends Buffer
*/
public int compareTo (Object obj)
{
- IntBuffer a = (IntBuffer) obj;
+ IntBuffer other = (IntBuffer) obj;
- if (a.remaining () != remaining ())
- return 1;
-
- if (! hasArray () ||
- ! a.hasArray ())
- {
- return 1;
- }
-
- int r = remaining ();
- int i1 = position ();
- int i2 = a.position ();
-
- for (int i = 0; i < r; i++)
+ int num = Math.min(remaining(), other.remaining());
+ int pos_this = position();
+ int pos_other = other.position();
+
+ for (int count = 0; count < num; count++)
{
- int t = (int) (get (i1) - a.get (i2));
-
- if (t != 0)
- {
- return (int) t;
- }
+ int a = get(pos_this++);
+ int b = other.get(pos_other++);
+
+ if (a == b)
+ continue;
+
+ if (a < b)
+ return -1;
+
+ return 1;
}
-
- return 0;
+
+ return remaining() - other.remaining();
}
/**
diff --git a/libjava/java/nio/LongBuffer.java b/libjava/java/nio/LongBuffer.java
index 712e0b3b59a..1b420eb5ed4 100644
--- a/libjava/java/nio/LongBuffer.java
+++ b/libjava/java/nio/LongBuffer.java
@@ -1,5 +1,5 @@
/* LongBuffer.java --
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -265,32 +265,27 @@ public abstract class LongBuffer extends Buffer
*/
public int compareTo (Object obj)
{
- LongBuffer a = (LongBuffer) obj;
+ LongBuffer other = (LongBuffer) obj;
- if (a.remaining () != remaining ())
- return 1;
-
- if (! hasArray () ||
- ! a.hasArray ())
- {
- return 1;
- }
-
- int r = remaining ();
- int i1 = position ();
- int i2 = a.position ();
-
- for (int i = 0; i < r; i++)
+ int num = Math.min(remaining(), other.remaining());
+ int pos_this = position();
+ int pos_other = other.position();
+
+ for (int count = 0; count < num; count++)
{
- int t = (int) (get (i1) - a.get (i2));
-
- if (t != 0)
- {
- return (int) t;
- }
+ long a = get(pos_this++);
+ long b = other.get(pos_other++);
+
+ if (a == b)
+ continue;
+
+ if (a < b)
+ return -1;
+
+ return 1;
}
-
- return 0;
+
+ return remaining() - other.remaining();
}
/**
diff --git a/libjava/java/nio/ShortBuffer.java b/libjava/java/nio/ShortBuffer.java
index 61097d04dd9..9f542769fac 100644
--- a/libjava/java/nio/ShortBuffer.java
+++ b/libjava/java/nio/ShortBuffer.java
@@ -1,5 +1,5 @@
/* ShortBuffer.java --
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -265,32 +265,27 @@ public abstract class ShortBuffer extends Buffer
*/
public int compareTo (Object obj)
{
- ShortBuffer a = (ShortBuffer) obj;
+ ShortBuffer other = (ShortBuffer) obj;
- if (a.remaining () != remaining ())
- return 1;
-
- if (! hasArray () ||
- ! a.hasArray ())
- {
- return 1;
- }
-
- int r = remaining ();
- int i1 = position ();
- int i2 = a.position ();
-
- for (int i = 0; i < r; i++)
+ int num = Math.min(remaining(), other.remaining());
+ int pos_this = position();
+ int pos_other = other.position();
+
+ for (int count = 0; count < num; count++)
{
- int t = (int) (get (i1) - a.get (i2));
-
- if (t != 0)
- {
- return (int) t;
- }
+ short a = get(pos_this++);
+ short b = other.get(pos_other++);
+
+ if (a == b)
+ continue;
+
+ if (a < b)
+ return -1;
+
+ return 1;
}
-
- return 0;
+
+ return remaining() - other.remaining();
}
/**
diff --git a/libjava/java/security/SecureRandom.java b/libjava/java/security/SecureRandom.java
index 56f4b22672c..d7fda7ba744 100644
--- a/libjava/java/security/SecureRandom.java
+++ b/libjava/java/security/SecureRandom.java
@@ -37,12 +37,11 @@ exception statement from your version. */
package java.security;
-import java.io.Serializable;
-import java.util.Random;
-import java.util.Enumeration;
-
import gnu.java.security.Engine;
+import java.util.Enumeration;
+import java.util.Random;
+
/**
* An interface to a cryptographically secure pseudo-random number
* generator (PRNG). Random (or at least unguessable) numbers are used
@@ -94,7 +93,7 @@ public class SecureRandom extends Random
String key;
String classname = null;
- int i, flag = 0;
+ int i;
Enumeration e;
for (i = 0; i < p.length; i++)
{
diff --git a/libjava/java/security/Security.java b/libjava/java/security/Security.java
index d7edf20656f..25cadcac465 100644
--- a/libjava/java/security/Security.java
+++ b/libjava/java/security/Security.java
@@ -150,7 +150,7 @@ public final class Security
result = false;
}
- return false;
+ return result;
}
/**
diff --git a/libjava/java/security/UnresolvedPermission.java b/libjava/java/security/UnresolvedPermission.java
index 954b562c773..7efb35582fc 100644
--- a/libjava/java/security/UnresolvedPermission.java
+++ b/libjava/java/security/UnresolvedPermission.java
@@ -37,7 +37,6 @@ exception statement from your version. */
package java.security;
-import java.io.Serializable;
// All uses of Certificate in this file refer to the one in the listed
// package, not this one.
import java.security.cert.Certificate;
diff --git a/libjava/java/security/interfaces/DSAKeyPairGenerator.java b/libjava/java/security/interfaces/DSAKeyPairGenerator.java
index dc957a31881..59f3834cafa 100644
--- a/libjava/java/security/interfaces/DSAKeyPairGenerator.java
+++ b/libjava/java/security/interfaces/DSAKeyPairGenerator.java
@@ -1,5 +1,5 @@
/* DSAKeyPairGenerator.java -- Initialize a DSA key generator
- Copyright (C) 1998 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,8 +37,8 @@ exception statement from your version. */
package java.security.interfaces;
-import java.security.SecureRandom;
import java.security.InvalidParameterException;
+import java.security.SecureRandom;
/**
* This interface contains methods for intializing a Digital Signature
diff --git a/libjava/java/security/interfaces/DSAPrivateKey.java b/libjava/java/security/interfaces/DSAPrivateKey.java
index 201d54f2f30..4e6f13ddbe5 100644
--- a/libjava/java/security/interfaces/DSAPrivateKey.java
+++ b/libjava/java/security/interfaces/DSAPrivateKey.java
@@ -1,5 +1,5 @@
/* DSAPublicKey.java -- A Digital Signature Algorithm private key
- Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2000, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,8 +37,8 @@ exception statement from your version. */
package java.security.interfaces;
-import java.security.PrivateKey;
import java.math.BigInteger;
+import java.security.PrivateKey;
/**
* This interface models a Digital Signature Algorithm (DSA) private key
diff --git a/libjava/java/security/interfaces/DSAPublicKey.java b/libjava/java/security/interfaces/DSAPublicKey.java
index 74f24482dcf..aec1c606dcd 100644
--- a/libjava/java/security/interfaces/DSAPublicKey.java
+++ b/libjava/java/security/interfaces/DSAPublicKey.java
@@ -1,5 +1,5 @@
/* DSAPublicKey.java -- A Digital Signature Algorithm public key
- Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2000, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,8 +37,8 @@ exception statement from your version. */
package java.security.interfaces;
-import java.security.PublicKey;
import java.math.BigInteger;
+import java.security.PublicKey;
/**
* This interface models a Digital Signature Algorithm (DSA) public key
diff --git a/libjava/java/security/interfaces/RSAPrivateKey.java b/libjava/java/security/interfaces/RSAPrivateKey.java
index 34b9798b627..d287d67327a 100644
--- a/libjava/java/security/interfaces/RSAPrivateKey.java
+++ b/libjava/java/security/interfaces/RSAPrivateKey.java
@@ -1,5 +1,5 @@
/* RSAPrivateKey.java -- An RSA private key
- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,8 +37,8 @@ exception statement from your version. */
package java.security.interfaces;
-import java.security.PrivateKey;
import java.math.BigInteger;
+import java.security.PrivateKey;
/**
* This interface provides access to information about an RSA private key.
diff --git a/libjava/java/security/interfaces/RSAPublicKey.java b/libjava/java/security/interfaces/RSAPublicKey.java
index b9b532cd9b0..22d64b1bb7a 100644
--- a/libjava/java/security/interfaces/RSAPublicKey.java
+++ b/libjava/java/security/interfaces/RSAPublicKey.java
@@ -1,5 +1,5 @@
/* RSAPublicKey.java -- An RSA public key
- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,8 +37,8 @@ exception statement from your version. */
package java.security.interfaces;
-import java.security.PublicKey;
import java.math.BigInteger;
+import java.security.PublicKey;
/**
* This interface provides access to information about an RSA public key.
diff --git a/libjava/java/text/AttributedString.java b/libjava/java/text/AttributedString.java
index 46cbf92d526..8304cedf7bc 100644
--- a/libjava/java/text/AttributedString.java
+++ b/libjava/java/text/AttributedString.java
@@ -39,10 +39,9 @@ exception statement from your version. */
package java.text;
import java.util.Arrays;
-import java.util.Iterator;
import java.util.HashMap;
import java.util.Hashtable;
-import java.util.HashSet;
+import java.util.Iterator;
import java.util.Map;
import java.util.Set;
diff --git a/libjava/java/text/AttributedStringIterator.java b/libjava/java/text/AttributedStringIterator.java
index 98204574c86..ca20801141c 100644
--- a/libjava/java/text/AttributedStringIterator.java
+++ b/libjava/java/text/AttributedStringIterator.java
@@ -1,5 +1,5 @@
/* AttributedStringIterator.java -- Class to iterate over AttributedString
- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,11 +38,11 @@ exception statement from your version. */
package java.text;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Map;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
/**
* This class implements the AttributedCharacterIterator interface. It
diff --git a/libjava/java/text/Collator.java b/libjava/java/text/Collator.java
index 907057eb0f9..7944d9501e5 100644
--- a/libjava/java/text/Collator.java
+++ b/libjava/java/text/Collator.java
@@ -1,5 +1,5 @@
/* Collator.java -- Perform locale dependent String comparisons.
- Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,10 +38,10 @@ exception statement from your version. */
package java.text;
+import java.util.Comparator;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
-import java.util.Comparator;
/**
* This class is the abstract superclass of classes which perform
diff --git a/libjava/java/text/DecimalFormat.java b/libjava/java/text/DecimalFormat.java
index 2f6691a8531..497a705670c 100644
--- a/libjava/java/text/DecimalFormat.java
+++ b/libjava/java/text/DecimalFormat.java
@@ -37,7 +37,13 @@ exception statement from your version. */
package java.text;
+import gnu.java.text.AttributedFormatBuffer;
+import gnu.java.text.FormatBuffer;
+import gnu.java.text.FormatCharacterIterator;
+import gnu.java.text.StringFormatBuffer;
+
import java.util.Currency;
+import java.util.HashMap;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
@@ -58,37 +64,48 @@ public class DecimalFormat extends NumberFormat
{
// This is a helper for applyPatternWithSymbols. It reads a prefix
// or a suffix. It can cause some side-effects.
- private final int scanFix (String pattern, int index, StringBuffer buf,
+ private final int scanFix (String pattern, int index, FormatBuffer buf,
String patChars, DecimalFormatSymbols syms,
boolean is_suffix)
{
int len = pattern.length();
- buf.setLength(0);
+ boolean quoteStarted = false;
+ buf.clear();
+
boolean multiplierSet = false;
while (index < len)
{
char c = pattern.charAt(index);
+
+ if (quoteStarted)
+ {
+ if (c == '\'')
+ quoteStarted = false;
+ else
+ buf.append(c);
+ index++;
+ continue;
+ }
+
if (c == '\'' && index + 1 < len
&& pattern.charAt(index + 1) == '\'')
{
buf.append(c);
- ++index;
+ index++;
}
- else if (c == '\'' && index + 2 < len
- && pattern.charAt(index + 2) == '\'')
+ else if (c == '\'')
{
- buf.append(pattern.charAt(index + 1));
- index += 2;
+ quoteStarted = true;
}
else if (c == '\u00a4')
{
if (index + 1 < len && pattern.charAt(index + 1) == '\u00a4')
{
- buf.append(syms.getInternationalCurrencySymbol());
- ++index;
+ buf.append(syms.getInternationalCurrencySymbol(), NumberFormat.Field.CURRENCY);
+ index++;
}
else
- buf.append(syms.getCurrencySymbol());
+ buf.append(syms.getCurrencySymbol(), NumberFormat.Field.CURRENCY);
}
else if (c == syms.getPercent())
{
@@ -97,7 +114,7 @@ public class DecimalFormat extends NumberFormat
"- index: " + index);
multiplierSet = true;
multiplier = 100;
- buf.append(c);
+ buf.append(c, NumberFormat.Field.PERCENT);
}
else if (c == syms.getPerMill())
{
@@ -106,7 +123,7 @@ public class DecimalFormat extends NumberFormat
"- index: " + index);
multiplierSet = true;
multiplier = 1000;
- buf.append(c);
+ buf.append(c, NumberFormat.Field.PERMILLE);
}
else if (patChars.indexOf(c) != -1)
{
@@ -115,9 +132,12 @@ public class DecimalFormat extends NumberFormat
}
else
buf.append(c);
- ++index;
+ index++;
}
+ if (quoteStarted)
+ throw new IllegalArgumentException ("pattern is lacking a closing quote");
+
return index;
}
@@ -259,6 +279,16 @@ public class DecimalFormat extends NumberFormat
useExponentialNotation = true;
minExponentDigits = (byte) zeroCount;
}
+
+ maximumIntegerDigits = groupingSize;
+ groupingSize = 0;
+ if (maximumIntegerDigits > minimumIntegerDigits && maximumIntegerDigits > 0)
+ {
+ minimumIntegerDigits = 1;
+ exponentRound = maximumIntegerDigits;
+ }
+ else
+ exponentRound = 1;
}
return index;
@@ -300,21 +330,27 @@ public class DecimalFormat extends NumberFormat
useExponentialNotation = false;
groupingUsed = false;
maximumFractionDigits = 0;
- maximumIntegerDigits = 309;
+ maximumIntegerDigits = MAXIMUM_INTEGER_DIGITS;
minimumFractionDigits = 0;
minimumIntegerDigits = 1;
- StringBuffer buf = new StringBuffer ();
+ AttributedFormatBuffer buf = new AttributedFormatBuffer ();
String patChars = patternChars (syms);
int max = pattern.length();
int index = scanFix (pattern, 0, buf, patChars, syms, false);
- positivePrefix = buf.toString();
+ buf.sync();
+ positivePrefix = buf.getBuffer().toString();
+ positivePrefixRanges = buf.getRanges();
+ positivePrefixAttrs = buf.getAttributes();
index = scanFormat (pattern, index, patChars, syms, true);
index = scanFix (pattern, index, buf, patChars, syms, true);
- positiveSuffix = buf.toString();
+ buf.sync();
+ positiveSuffix = buf.getBuffer().toString();
+ positiveSuffixRanges = buf.getRanges();
+ positiveSuffixAttrs = buf.getAttributes();
if (index == pattern.length())
{
@@ -329,14 +365,20 @@ public class DecimalFormat extends NumberFormat
"expected - index: " + index);
index = scanFix (pattern, index + 1, buf, patChars, syms, false);
- negativePrefix = buf.toString();
+ buf.sync();
+ negativePrefix = buf.getBuffer().toString();
+ negativePrefixRanges = buf.getRanges();
+ negativePrefixAttrs = buf.getAttributes();
// We parse the negative format for errors but we don't let
// it side-effect this object.
index = scanFormat (pattern, index, patChars, syms, false);
index = scanFix (pattern, index, buf, patChars, syms, true);
- negativeSuffix = buf.toString();
+ buf.sync();
+ negativeSuffix = buf.getBuffer().toString();
+ negativeSuffixRanges = buf.getRanges();
+ negativeSuffixAttrs = buf.getAttributes();
if (index != pattern.length())
throw new IllegalArgumentException ("end of pattern expected " +
@@ -409,39 +451,43 @@ public class DecimalFormat extends NumberFormat
&& useExponentialNotation == dup.useExponentialNotation);
}
- public StringBuffer format (double number, StringBuffer dest,
- FieldPosition fieldPos)
+ protected void formatInternal (double number, FormatBuffer dest,
+ FieldPosition fieldPos)
{
// A very special case.
if (Double.isNaN(number))
{
dest.append(symbols.getNaN());
- if (fieldPos != null && fieldPos.getField() == INTEGER_FIELD)
+ if (fieldPos != null &&
+ (fieldPos.getField() == INTEGER_FIELD ||
+ fieldPos.getFieldAttribute() == NumberFormat.Field.INTEGER))
{
int index = dest.length();
fieldPos.setBeginIndex(index - symbols.getNaN().length());
fieldPos.setEndIndex(index);
}
- return dest;
+ return;
}
boolean is_neg = number < 0;
if (is_neg)
{
if (negativePrefix != null)
- dest.append(negativePrefix);
+ dest.append(negativePrefix, negativePrefixRanges, negativePrefixAttrs);
else
{
- dest.append(symbols.getMinusSign());
- dest.append(positivePrefix);
+ dest.append(symbols.getMinusSign(), NumberFormat.Field.SIGN);
+ dest.append(positivePrefix, positivePrefixRanges, positivePrefixAttrs);
}
number = - number;
}
else
- dest.append(positivePrefix);
+ dest.append(positivePrefix, positivePrefixRanges, positivePrefixAttrs);
int integerBeginIndex = dest.length();
int integerEndIndex = 0;
+ int zeroStart = symbols.getZeroDigit() - '0';
+
if (Double.isInfinite (number))
{
dest.append(symbols.getInfinity());
@@ -457,6 +503,7 @@ public class DecimalFormat extends NumberFormat
if (useExponentialNotation)
{
exponent = (long) Math.floor (Math.log(number) / Math.log(10));
+ exponent = exponent - (exponent % exponentRound);
if (minimumIntegerDigits > 0)
exponent -= minimumIntegerDigits - 1;
baseNumber = (number / Math.pow(10.0, exponent));
@@ -468,33 +515,57 @@ public class DecimalFormat extends NumberFormat
baseNumber += 5 * Math.pow(10.0, - maximumFractionDigits - 1);
int index = dest.length();
- double intPart = Math.floor(baseNumber);
- int count = 0;
- while (count < maximumIntegerDigits
- && (intPart > 0 || count < minimumIntegerDigits))
+ //double intPart = Math.floor(baseNumber);
+ String intPart = Long.toString((long)Math.floor(baseNumber));
+ int count, groupPosition = intPart.length();
+
+ dest.setDefaultAttribute(NumberFormat.Field.INTEGER);
+
+ for (count = 0; count < minimumIntegerDigits-intPart.length(); count++)
+ dest.append(symbols.getZeroDigit());
+
+ for (count = 0;
+ count < maximumIntegerDigits && count < intPart.length();
+ count++)
{
- long dig = (long) (intPart % 10);
- intPart = Math.floor(intPart / 10);
+ int dig = intPart.charAt(count);
// Append group separator if required.
- if (groupingUsed && count > 0 && groupingSize != 0 && count % groupingSize == 0)
- dest.insert(index, symbols.getGroupingSeparator());
-
- dest.insert(index, (char) (symbols.getZeroDigit() + dig));
+ if (groupingUsed && count > 0 && groupingSize != 0 && groupPosition % groupingSize == 0)
+ {
+ dest.append(symbols.getGroupingSeparator(), NumberFormat.Field.GROUPING_SEPARATOR);
+ dest.setDefaultAttribute(NumberFormat.Field.INTEGER);
+ }
+ dest.append((char) (zeroStart + dig));
- ++count;
+ groupPosition--;
}
+ dest.setDefaultAttribute(null);
integerEndIndex = dest.length();
-
+
int decimal_index = integerEndIndex;
int consecutive_zeros = 0;
int total_digits = 0;
+ int localMaximumFractionDigits = maximumFractionDigits;
+
+ if (useExponentialNotation)
+ localMaximumFractionDigits += minimumIntegerDigits - count;
+
// Strip integer part from NUMBER.
double fracPart = baseNumber - Math.floor(baseNumber);
+
+ if ( ((fracPart != 0 || minimumFractionDigits > 0) && localMaximumFractionDigits > 0)
+ || decimalSeparatorAlwaysShown)
+ {
+ dest.append (symbols.getDecimalSeparator(), NumberFormat.Field.DECIMAL_SEPARATOR);
+ }
+
+ int fraction_begin = dest.length();
+ dest.setDefaultAttribute(NumberFormat.Field.FRACTION);
for (count = 0;
- count < maximumFractionDigits
+ count < localMaximumFractionDigits
&& (fracPart != 0 || count < minimumFractionDigits);
++count)
{
@@ -517,61 +588,88 @@ public class DecimalFormat extends NumberFormat
total_digits - minimumFractionDigits);
if (extra_zeros > 0)
{
- dest.setLength(dest.length() - extra_zeros);
+ dest.cutTail(extra_zeros);
total_digits -= extra_zeros;
+ if (total_digits == 0 && !decimalSeparatorAlwaysShown)
+ dest.cutTail(1);
}
- // If required, add the decimal symbol.
- if (decimalSeparatorAlwaysShown
- || total_digits > 0)
+ if (fieldPos != null && fieldPos.getField() == FRACTION_FIELD)
{
- dest.insert(decimal_index, symbols.getDecimalSeparator());
- if (fieldPos != null && fieldPos.getField() == FRACTION_FIELD)
- {
- fieldPos.setBeginIndex(decimal_index + 1);
- fieldPos.setEndIndex(dest.length());
- }
+ fieldPos.setBeginIndex(fraction_begin);
+ fieldPos.setEndIndex(dest.length());
}
// Finally, print the exponent.
if (useExponentialNotation)
{
- dest.append(symbols.getExponential());
+ dest.append(symbols.getExponential(), NumberFormat.Field.EXPONENT_SYMBOL);
if (exponent < 0)
{
- dest.append (symbols.getMinusSign ());
+ dest.append (symbols.getMinusSign (), NumberFormat.Field.EXPONENT_SIGN);
exponent = - exponent;
}
index = dest.length();
+ dest.setDefaultAttribute(NumberFormat.Field.EXPONENT);
+ String exponentString = Long.toString ((long) exponent);
+
+ for (count = 0; count < minExponentDigits-exponentString.length();
+ count++)
+ dest.append((char) symbols.getZeroDigit());
+
for (count = 0;
- exponent > 0 || count < minExponentDigits;
+ count < exponentString.length();
++count)
{
- long dig = exponent % 10;
- exponent /= 10;
- dest.insert(index, (char) (symbols.getZeroDigit() + dig));
+ int dig = exponentString.charAt(count);
+ dest.append((char) (zeroStart + dig));
}
}
}
- if (fieldPos != null && fieldPos.getField() == INTEGER_FIELD)
+ if (fieldPos != null &&
+ (fieldPos.getField() == INTEGER_FIELD ||
+ fieldPos.getFieldAttribute() == NumberFormat.Field.INTEGER))
{
fieldPos.setBeginIndex(integerBeginIndex);
fieldPos.setEndIndex(integerEndIndex);
}
- dest.append((is_neg && negativeSuffix != null)
- ? negativeSuffix
- : positiveSuffix);
+ if (is_neg && negativeSuffix != null)
+ dest.append(negativeSuffix, negativeSuffixRanges, negativeSuffixAttrs);
+ else
+ dest.append(positiveSuffix, positiveSuffixRanges, positiveSuffixAttrs);
+ }
+
+ public StringBuffer format (double number, StringBuffer dest,
+ FieldPosition fieldPos)
+ {
+ formatInternal (number, new StringFormatBuffer(dest), fieldPos);
return dest;
}
+ public AttributedCharacterIterator formatToCharacterIterator (Object value)
+ {
+ AttributedFormatBuffer sbuf = new AttributedFormatBuffer();
+
+ if (value instanceof Number)
+ formatInternal(((Number) value).doubleValue(), sbuf, null);
+ else
+ throw new IllegalArgumentException
+ ("Cannot format given Object as a Number");
+
+ sbuf.sync();
+ return new FormatCharacterIterator(sbuf.getBuffer().toString(),
+ sbuf.getRanges(),
+ sbuf.getAttributes());
+ }
+
public StringBuffer format (long number, StringBuffer dest,
FieldPosition fieldPos)
{
// If using exponential notation, we just format as a double.
if (useExponentialNotation)
- return format ((double) number, dest, fieldPos);
+ return format ((double) number, dest, fieldPos);
boolean is_neg = number < 0;
if (is_neg)
@@ -701,14 +799,19 @@ public class DecimalFormat extends NumberFormat
public Number parse (String str, ParsePosition pos)
{
- // Our strategy is simple: copy the text into a buffer,
- // translating or omitting locale-specific information. Then
- // let Double or Long convert the number for us.
+ /*
+ * Our strategy is simple: copy the text into separate buffers: one for the int part,
+ * one for the fraction part and for the exponential part.
+ * We translate or omit locale-specific information.
+ * If exponential is sufficiently big we merge the fraction and int part and
+ * remove the '.' and then we use Long to convert the number. In the other
+ * case, we use Double to convert the full number.
+ */
boolean is_neg = false;
int index = pos.getIndex();
- StringBuffer buf = new StringBuffer ();
-
+ StringBuffer int_buf = new StringBuffer ();
+
// We have to check both prefixes, because one might be empty. We
// want to pick the longest prefix that matches.
boolean got_pos = str.startsWith(positivePrefix, index);
@@ -748,11 +851,17 @@ public class DecimalFormat extends NumberFormat
// FIXME: do we have to respect minimum digits?
// What about leading zeros? What about multiplier?
+ StringBuffer buf = int_buf;
+ StringBuffer frac_buf = null;
+ StringBuffer exp_buf = null;
int start_index = index;
int max = str.length();
- int last = index + maximumIntegerDigits;
+ int exp_index = -1;
+ int last = index + MAXIMUM_INTEGER_DIGITS;
+
if (last > 0 && max > last)
max = last;
+
char zero = symbols.getZeroDigit();
int last_group = -1;
boolean int_part = true;
@@ -771,12 +880,11 @@ public class DecimalFormat extends NumberFormat
pos.setErrorIndex(index);
return null;
}
- last_group = index;
+ last_group = index+1;
}
else if (c >= zero && c <= zero + 9)
{
buf.append((char) (c - zero + '0'));
- exp_part = false;
}
else if (parseIntegerOnly)
break;
@@ -789,14 +897,16 @@ public class DecimalFormat extends NumberFormat
pos.setErrorIndex(index);
return null;
}
- buf.append('.');
+ buf = frac_buf = new StringBuffer();
+ frac_buf.append('.');
int_part = false;
}
else if (c == symbols.getExponential())
{
- buf.append('E');
+ buf = exp_buf = new StringBuffer();
int_part = false;
exp_part = true;
+ exp_index = index+1;
}
else if (exp_part
&& (c == '+' || c == '-' || c == symbols.getMinusSign()))
@@ -840,16 +950,111 @@ public class DecimalFormat extends NumberFormat
}
String suffix = is_neg ? ns : positiveSuffix;
+ long multiplier = 1;
+ boolean use_long;
+
if (is_neg)
- buf.insert(0, '-');
+ int_buf.insert(0, '-');
+
+ // Now handle the exponential part if there is one.
+ if (exp_buf != null)
+ {
+ int exponent_value;
+
+ try
+ {
+ exponent_value = Integer.parseInt(exp_buf.toString());
+ }
+ catch (NumberFormatException x1)
+ {
+ pos.setErrorIndex(exp_index);
+ return null;
+ }
- String t = buf.toString();
+ if (frac_buf == null)
+ {
+ // We only have to add some zeros to the int part.
+ // Build a multiplier.
+ for (int i = 0; i < exponent_value; i++)
+ int_buf.append('0');
+
+ use_long = true;
+ }
+ else
+ {
+ boolean long_sufficient;
+
+ if (exponent_value < frac_buf.length()-1)
+ {
+ int lastNonNull = -1;
+ /* We have to check the fraction buffer: it may only be full of '0'
+ * or be sufficiently filled with it to convert the number into Long.
+ */
+ for (int i = 1; i < frac_buf.length(); i++)
+ if (frac_buf.charAt(i) != '0')
+ lastNonNull = i;
+
+ long_sufficient = (lastNonNull < 0 || lastNonNull <= exponent_value);
+ }
+ else
+ long_sufficient = true;
+
+ if (long_sufficient)
+ {
+ for (int i = 1; i < frac_buf.length() && i < exponent_value; i++)
+ int_buf.append(frac_buf.charAt(i));
+ for (int i = frac_buf.length()-1; i < exponent_value; i++)
+ int_buf.append('0');
+ use_long = true;
+ }
+ else
+ {
+ /*
+ * A long type is not sufficient, we build the full buffer to
+ * be parsed by Double.
+ */
+ int_buf.append(frac_buf);
+ int_buf.append('E');
+ int_buf.append(exp_buf);
+ use_long = false;
+ }
+ }
+ }
+ else
+ {
+ if (frac_buf != null)
+ {
+ /* Check whether the fraction buffer contains only '0' */
+ int i;
+ for (i = 1; i < frac_buf.length(); i++)
+ if (frac_buf.charAt(i) != '0')
+ break;
+
+ if (i != frac_buf.length())
+ {
+ use_long = false;
+ int_buf.append(frac_buf);
+ }
+ else
+ use_long = true;
+ }
+ else
+ use_long = true;
+ }
+
+ String t = int_buf.toString();
Number result = null;
- try
+ if (use_long)
{
- result = new Long (t);
+ try
+ {
+ result = new Long (t);
+ }
+ catch (NumberFormatException x1)
+ {
+ }
}
- catch (NumberFormatException x1)
+ else
{
try
{
@@ -964,7 +1169,7 @@ public class DecimalFormat extends NumberFormat
// digits. Past that we need hash marks up to the grouping
// separator (and one beyond).
int total_digits = Math.max(minimumIntegerDigits,
- groupingUsed ? groupingSize + 1: 0);
+ groupingUsed ? groupingSize + 1: groupingSize);
for (int i = 0; i < total_digits - minimumIntegerDigits; ++i)
mainPattern.append(syms.getDigit());
for (int i = total_digits - minimumIntegerDigits; i < total_digits; ++i)
@@ -1018,15 +1223,22 @@ public class DecimalFormat extends NumberFormat
return computePattern (nonLocalizedSymbols);
}
+ private static final int MAXIMUM_INTEGER_DIGITS = 309;
+
// These names are fixed by the serialization spec.
private boolean decimalSeparatorAlwaysShown;
private byte groupingSize;
private byte minExponentDigits;
+ private int exponentRound;
private int multiplier;
private String negativePrefix;
private String negativeSuffix;
private String positivePrefix;
private String positiveSuffix;
+ private int[] negativePrefixRanges, positivePrefixRanges;
+ private HashMap[] negativePrefixAttrs, positivePrefixAttrs;
+ private int[] negativeSuffixRanges, positiveSuffixRanges;
+ private HashMap[] negativeSuffixAttrs, positiveSuffixAttrs;
private int serialVersionOnStream = 1;
private DecimalFormatSymbols symbols;
private boolean useExponentialNotation;
diff --git a/libjava/java/text/DecimalFormatSymbols.java b/libjava/java/text/DecimalFormatSymbols.java
index 35e75311eb0..843b6020b3a 100644
--- a/libjava/java/text/DecimalFormatSymbols.java
+++ b/libjava/java/text/DecimalFormatSymbols.java
@@ -1,5 +1,5 @@
/* DecimalFormatSymbols.java -- Format symbols used by DecimalFormat
- Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,13 +38,13 @@ exception statement from your version. */
package java.text;
+import java.io.IOException;
+import java.io.ObjectInputStream;
import java.io.Serializable;
import java.util.Currency;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
-import java.io.ObjectInputStream;
-import java.io.IOException;
/**
* This class is a container for the symbols used by
diff --git a/libjava/java/text/Format.java b/libjava/java/text/Format.java
index d3b7fccce01..7bc389eb71e 100644
--- a/libjava/java/text/Format.java
+++ b/libjava/java/text/Format.java
@@ -38,10 +38,7 @@ exception statement from your version. */
package java.text;
-import java.util.Set;
-import java.util.Map;
-import java.util.HashSet;
-import java.util.HashMap;
+import gnu.java.text.FormatCharacterIterator;
import java.io.Serializable;
/**
diff --git a/libjava/java/text/FormatCharacterIterator.java b/libjava/java/text/FormatCharacterIterator.java
deleted file mode 100644
index a31154c531a..00000000000
--- a/libjava/java/text/FormatCharacterIterator.java
+++ /dev/null
@@ -1,469 +0,0 @@
-/* FormatCharacter.java -- Implementation of AttributedCharacterIterator for
- formatters.
- Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-02111-1307 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-package java.text;
-
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Vector;
-
-
-/**
- * This class should not be put public and it is only intended to the
- * classes of the java.text package. Its aim is to build a segmented
- * character iterator by appending strings and adding attributes to
- * portions of strings. The code intends to do some optimization
- * concerning memory consumption and attribute access but at the
- * end it is only an AttributedCharacterIterator.
- *
- * @author Guilhem Lavaux <guilhem@kaffe.org>
- * @date November 22, 2003
- */
-class FormatCharacterIterator implements AttributedCharacterIterator
-{
- private String formattedString;
- private int charIndex;
- private int attributeIndex;
- private int[] ranges;
- private HashMap[] attributes;
-
- /**
- * This constructor builds an empty iterated strings. The attributes
- * are empty and so is the string. However you may append strings
- * and attributes to this iterator.
- */
- FormatCharacterIterator()
- {
- formattedString = "";
- ranges = new int[0];
- attributes = new HashMap[0];
- }
-
- /**
- * This constructor take a string <code>s</code>, a set of ranges
- * and the corresponding attributes. This is used to build an iterator.
- * The array <code>ranges</code> should be formatted as follow:
- * each element of <code>ranges</code> specifies the index in the string
- * until which the corresponding map of attributes at the same position
- * is applied. For example, if you have:
- * <pre>
- * s = "hello";
- * ranges = new int[] { 2, 6 };
- * attributes = new HashMap[2];
- * </pre>
- * <code>"he"</code> will have the attributes <code>attributes[0]</code>,
- * <code>"llo"</code> the <code>attributes[1]</code>.
- */
- FormatCharacterIterator (String s, int[] ranges, HashMap[] attributes)
- {
- formattedString = s;
- this.ranges = ranges;
- this.attributes = attributes;
- }
-
- /*
- * The following methods are inherited from AttributedCharacterIterator,
- * and thus are already documented.
- */
-
- public Set getAllAttributeKeys()
- {
- if (attributes != null && attributes[attributeIndex] != null)
- return attributes[attributeIndex].keySet();
- else
- return new HashSet();
- }
-
- public Map getAttributes()
- {
- if (attributes != null && attributes[attributeIndex] != null)
- return attributes[attributeIndex];
- else
- return new HashMap();
- }
-
- public Object getAttribute (AttributedCharacterIterator.Attribute attrib)
- {
- if (attributes != null && attributes[attributeIndex] != null)
- return attributes[attributeIndex].get (attrib);
- else
- return null;
- }
-
- public int getRunLimit(Set reqAttrs)
- {
- if (attributes == null)
- return formattedString.length();
-
- int currentAttrIndex = attributeIndex;
- Set newKeys;
-
- do
- {
- currentAttrIndex++;
- if (currentAttrIndex == attributes.length)
- return formattedString.length();
- if (attributes[currentAttrIndex] == null)
- break;
- newKeys = attributes[currentAttrIndex].keySet();
- }
- while (newKeys.containsAll (reqAttrs));
-
- return ranges[currentAttrIndex-1];
- }
-
- public int getRunLimit (AttributedCharacterIterator.Attribute attribute)
- {
- Set s = new HashSet();
-
- s.add (attribute);
- return getRunLimit (s);
- }
-
- public int getRunLimit()
- {
- if (attributes == null)
- return formattedString.length();
- if (attributes[attributeIndex] == null)
- {
- for (int i=attributeIndex+1;i<attributes.length;i++)
- if (attributes[i] != null)
- return ranges[i-1];
- return formattedString.length();
- }
-
- return getRunLimit (attributes[attributeIndex].keySet());
- }
-
- public int getRunStart (Set reqAttrs)
- {
- if (attributes == null)
- return formattedString.length();
-
- int currentAttrIndex = attributeIndex;
- Set newKeys = null;
-
- do
- {
- if (currentAttrIndex == 0)
- return 0;
-
- currentAttrIndex--;
- if (attributes[currentAttrIndex] == null)
- break;
- newKeys = attributes[currentAttrIndex].keySet();
- }
- while (newKeys.containsAll (reqAttrs));
-
- return (currentAttrIndex > 0) ? ranges[currentAttrIndex-1] : 0;
- }
-
- public int getRunStart()
- {
- if (attributes == null)
- return 0;
-
- if (attributes[attributeIndex] == null)
- {
- for (int i=attributeIndex;i>0;i--)
- if (attributes[i] != null)
- return ranges[attributeIndex-1];
- return 0;
- }
-
- return getRunStart (attributes[attributeIndex].keySet());
- }
-
- public int getRunStart (AttributedCharacterIterator.Attribute attribute)
- {
- Set s = new HashSet();
-
- s.add (attribute);
- return getRunStart (s);
- }
-
- public Object clone()
- {
- return new FormatCharacterIterator (formattedString, ranges, attributes);
- }
-
- /*
- * The following methods are inherited from CharacterIterator and thus
- * are already documented.
- */
-
- public char current()
- {
- return formattedString.charAt (charIndex);
- }
-
- public char first()
- {
- charIndex = 0;
- attributeIndex = 0;
- return formattedString.charAt (0);
- }
-
- public int getBeginIndex()
- {
- return 0;
- }
-
- public int getEndIndex()
- {
- return formattedString.length();
- }
-
- public int getIndex()
- {
- return charIndex;
- }
-
- public char last()
- {
- charIndex = formattedString.length()-1;
- if (attributes != null)
- attributeIndex = attributes.length-1;
- return formattedString.charAt (charIndex);
- }
-
- public char next()
- {
- charIndex++;
- if (charIndex >= formattedString.length())
- {
- charIndex = getEndIndex();
- return DONE;
- }
- if (attributes != null)
- {
- if (charIndex >= ranges[attributeIndex])
- attributeIndex++;
- }
- return formattedString.charAt (charIndex);
- }
-
- public char previous()
- {
- charIndex--;
- if (charIndex < 0)
- {
- charIndex = 0;
- return DONE;
- }
-
- if (attributes != null)
- {
- if (charIndex < ranges[attributeIndex])
- attributeIndex--;
- }
- return formattedString.charAt (charIndex);
- }
-
- public char setIndex (int position)
- {
- if (position < 0 || position > formattedString.length())
- throw new IllegalArgumentException ("position is out of range");
-
- charIndex = position;
- if (attributes != null)
- {
- for (attributeIndex=0;attributeIndex<attributes.length;
- attributeIndex++)
- if (ranges[attributeIndex] > charIndex)
- break;
- attributeIndex--;
- }
- if (charIndex == formattedString.length())
- return DONE;
- else
- return formattedString.charAt (charIndex);
- }
-
- /**
- * This method merge the specified attributes and ranges with the
- * internal tables. This method is in charge of the optimization
- * of tables. Two following sets of attributes are never the same.
- *
- * @see #FormatCharacterIterator()
- *
- * @param attributes the new array attributes to apply to the string.
- */
- protected void mergeAttributes (HashMap[] attributes, int[] ranges)
- {
- Vector new_ranges = new Vector();
- Vector new_attributes = new Vector();
- int i = 0, j = 0;
-
- while (i < this.ranges.length && j < ranges.length)
- {
- if (this.attributes[i] != null)
- {
- new_attributes.add (this.attributes[i]);
- if (attributes[j] != null)
- this.attributes[i].putAll (attributes[j]);
- }
- else
- {
- new_attributes.add (attributes[j]);
- }
- if (this.ranges[i] == ranges[j])
- {
- new_ranges.add (new Integer (ranges[j]));
- i++;
- j++;
- }
- else if (this.ranges[i] < ranges[j])
- {
- new_ranges.add (new Integer (this.ranges[i]));
- i++;
- }
- else
- {
- new_ranges.add (new Integer (ranges[j]));
- j++;
- }
- }
-
- if (i != this.ranges.length)
- {
- for (;i<this.ranges.length;i++)
- {
- new_attributes.add (this.attributes[i]);
- new_ranges.add (new Integer (this.ranges[i]));
- }
- }
- if (j != ranges.length)
- {
- for (;j<ranges.length;j++)
- {
- new_attributes.add (attributes[j]);
- new_ranges.add (new Integer (ranges[j]));
- }
- }
-
- this.attributes = new HashMap[new_attributes.size()];
- this.ranges = new int[new_ranges.size()];
- System.arraycopy (new_attributes.toArray(), 0, this.attributes,
- 0, this.attributes.length);
-
- for (i=0;i<new_ranges.size();i++)
- {
- this.ranges[i] = ((Integer)new_ranges.elementAt (i)).intValue();
- }
-
- }
-
- /**
- * This method appends to the internal attributed string the attributed
- * string contained in the specified iterator.
- *
- * @param iterator the iterator which contains the attributed string to
- * append to this iterator.
- */
- protected void append (AttributedCharacterIterator iterator)
- {
- char c = iterator.first();
- Vector more_ranges = new Vector();
- Vector more_attributes = new Vector();
-
- do
- {
- formattedString = formattedString + String.valueOf(c);
- // TODO: Reduce the size of the output array.
- more_attributes.add (iterator.getAttributes());
- more_ranges.add (new Integer (formattedString.length()));
- // END TOOD
- c = iterator.next();
- }
- while (c != DONE);
-
- HashMap[] new_attributes = new HashMap[attributes.length
- + more_attributes.size()];
- int[] new_ranges = new int[ranges.length + more_ranges.size()];
-
- System.arraycopy (attributes, 0, new_attributes, 0, attributes.length);
- System.arraycopy (more_attributes.toArray(), 0, new_attributes,
- attributes.length, more_attributes.size());
-
- System.arraycopy (ranges, 0, new_ranges, 0, ranges.length);
- Object[] new_ranges_array = more_ranges.toArray();
- for (int i=0;i<more_ranges.size();i++)
- new_ranges[i+ranges.length] = ((Integer)new_ranges_array[i]).intValue();
-
- attributes = new_attributes;
- ranges = new_ranges;
- }
-
- /**
- * This method appends an attributed string which attributes are specified
- * directly in the calling parameters.
- *
- * @param text The string to append.
- * @param local_attributes The attributes to put on this string in the
- * iterator. If it is <code>null</code> the string will simply have no
- * attributes.
- */
- protected void append (String text, HashMap local_attributes)
- {
- int[] new_ranges = new int[ranges.length+1];
- HashMap[] new_attributes = new HashMap[attributes.length+1];
-
- formattedString += text;
- System.arraycopy (attributes, 0, new_attributes, 0, attributes.length);
- System.arraycopy (ranges, 0, new_ranges, 0, ranges.length);
- new_ranges[ranges.length] = formattedString.length();
- new_attributes[attributes.length] = local_attributes;
-
- ranges = new_ranges;
- attributes = new_attributes;
- }
-
- /**
- * This method appends a string without attributes. It is completely
- * equivalent to call {@link #append(String,HashMap)} with local_attributes
- * equal to <code>null</code>.
- *
- * @param text The string to append to the iterator.
- */
- protected void append (String text)
- {
- append (text, null);
- }
-}
diff --git a/libjava/java/text/MessageFormat.java b/libjava/java/text/MessageFormat.java
index 7bb7760c90e..2e1786da986 100644
--- a/libjava/java/text/MessageFormat.java
+++ b/libjava/java/text/MessageFormat.java
@@ -38,7 +38,11 @@ exception statement from your version. */
package java.text;
+import gnu.java.text.FormatCharacterIterator;
+
+import java.io.InvalidObjectException;
import java.util.Date;
+import java.util.HashMap;
import java.util.Locale;
import java.util.Vector;
@@ -145,6 +149,43 @@ public class MessageFormat extends Format
{
private static final long serialVersionUID = 6479157306784022952L;
+ public static class Field extends Format.Field
+ {
+ static final long serialVersionUID = 7899943957617360810L;
+
+ /**
+ * This is the attribute set for all characters produced
+ * by MessageFormat during a formatting.
+ */
+ public static final MessageFormat.Field ARGUMENT = new Field("argument");
+
+ // For deserialization
+ private Field()
+ {
+ super("");
+ }
+
+ private Field(String s)
+ {
+ super(s);
+ }
+
+ /**
+ * invoked to resolve the true static constant by
+ * comparing the deserialized object to know name.
+ *
+ * @return object constant
+ */
+ protected Object readResolve() throws InvalidObjectException
+ {
+ if (getName().equals(ARGUMENT.getName()))
+ return ARGUMENT;
+
+ throw new InvalidObjectException("no such MessageFormat field called " + getName());
+ }
+
+ }
+
// Helper that returns the text up to the next format opener. The
// text is put into BUFFER. Returns index of character after end of
// string. Throws IllegalArgumentException on error.
@@ -326,12 +367,28 @@ public class MessageFormat extends Format
* @param aPattern The pattern used when formatting.
* @param arguments The array containing the objects to be formatted.
*/
+ public AttributedCharacterIterator formatToCharacterIterator (Object arguments)
+ {
+ Object[] arguments_array = (Object[])arguments;
+ FormatCharacterIterator iterator = new FormatCharacterIterator();
+
+ formatInternal(arguments_array, new StringBuffer(), null, iterator);
+
+ return iterator;
+ }
+
+ /**
+ * A convinience method to format patterns.
+ *
+ * @param aPattern The pattern used when formatting.
+ * @param arguments The array containing the objects to be formatted.
+ */
public static String format (String pattern, Object arguments[])
{
MessageFormat mf = new MessageFormat (pattern);
StringBuffer sb = new StringBuffer ();
FieldPosition fp = new FieldPosition (NumberFormat.INTEGER_FIELD);
- return mf.format(arguments, sb, fp).toString();
+ return mf.formatInternal(arguments, sb, fp, null).toString();
}
/**
@@ -342,9 +399,18 @@ public class MessageFormat extends Format
* @param fp A FieldPosition object (it is ignored).
*/
public final StringBuffer format (Object arguments[], StringBuffer appendBuf,
- FieldPosition ignore)
+ FieldPosition fp)
+ {
+ return formatInternal(arguments, appendBuf, fp, null);
+ }
+
+ protected final StringBuffer formatInternal (Object arguments[], StringBuffer appendBuf,
+ FieldPosition fp,
+ FormatCharacterIterator output_iterator)
{
appendBuf.append(leader);
+ if (output_iterator != null)
+ output_iterator.append(leader);
for (int i = 0; i < elements.length; ++i)
{
@@ -352,8 +418,13 @@ public class MessageFormat extends Format
throw new IllegalArgumentException("Not enough arguments given");
Object thisArg = arguments[elements[i].argNumber];
+ AttributedCharacterIterator iterator = null;
Format formatter = null;
+
+ if (fp != null && i == fp.getField() && fp.getFieldAttribute() == Field.ARGUMENT)
+ fp.setBeginIndex(appendBuf.length());
+
if (elements[i].setFormat != null)
formatter = elements[i].setFormat;
else if (elements[i].format != null)
@@ -371,25 +442,56 @@ public class MessageFormat extends Format
else
appendBuf.append(thisArg);
+ if (fp != null && fp.getField() == i && fp.getFieldAttribute() == Field.ARGUMENT)
+ fp.setEndIndex(appendBuf.length());
+
if (formatter != null)
{
// Special-case ChoiceFormat.
if (formatter instanceof ChoiceFormat)
{
StringBuffer buf = new StringBuffer ();
- formatter.format(thisArg, buf, ignore);
+ formatter.format(thisArg, buf, fp);
MessageFormat mf = new MessageFormat ();
mf.setLocale(locale);
mf.applyPattern(buf.toString());
- mf.format(arguments, appendBuf, ignore);
+ mf.format(arguments, appendBuf, fp);
}
else
- formatter.format(thisArg, appendBuf, ignore);
+ {
+ if (output_iterator != null)
+ iterator = formatter.formatToCharacterIterator(thisArg);
+ else
+ formatter.format(thisArg, appendBuf, fp);
+ }
+
+ elements[i].format = formatter;
}
+ if (output_iterator != null)
+ {
+ HashMap hash_argument = new HashMap();
+ int position = output_iterator.getEndIndex();
+
+ hash_argument.put (MessageFormat.Field.ARGUMENT,
+ new Integer(elements[i].argNumber));
+
+
+ if (iterator != null)
+ {
+ output_iterator.append(iterator);
+ output_iterator.addAttributes(hash_argument, position,
+ output_iterator.getEndIndex());
+ }
+ else
+ output_iterator.append(thisArg.toString(), hash_argument);
+
+ output_iterator.append(elements[i].trailer);
+ }
+
appendBuf.append(elements[i].trailer);
}
-
+
return appendBuf;
}
@@ -398,10 +500,10 @@ public class MessageFormat extends Format
*
* @param source The object to be formatted.
* @param result The StringBuffer where the text is appened.
- * @param fp A FieldPosition object (it is ignored).
+ * @param fpos A FieldPosition object (it is ignored).
*/
public final StringBuffer format (Object singleArg, StringBuffer appendBuf,
- FieldPosition ignore)
+ FieldPosition fpos)
{
Object[] args;
@@ -416,7 +518,7 @@ public class MessageFormat extends Format
args = new Object[1];
args[0] = singleArg;
}
- return format (args, appendBuf, ignore);
+ return format (args, appendBuf, fpos);
}
/**
@@ -478,6 +580,15 @@ public class MessageFormat extends Format
applyPattern (pattern);
}
+ /**
+ * Parse a string <code>sourceStr</code> against the pattern specified
+ * to the MessageFormat constructor.
+ *
+ * @param sourceStr the string to be parsed.
+ * @param pos the current parse position (and eventually the error position).
+ * @return the array of parsed objects sorted according to their argument number
+ * in the pattern.
+ */
public Object[] parse (String sourceStr, ParsePosition pos)
{
// Check initial text.
@@ -628,6 +739,72 @@ public class MessageFormat extends Format
return pattern;
}
+ /**
+ * Return the formatters used sorted by argument index. It uses the
+ * internal table to fill in this array: if a format has been
+ * set using <code>setFormat</code> or <code>setFormatByArgumentIndex</code>
+ * then it returns it at the right index. If not it uses the detected
+ * formatters during a <code>format</code> call. If nothing is known
+ * about that argument index it just puts null at that position.
+ * To get useful informations you may have to call <code>format</code>
+ * at least once.
+ *
+ * @return an array of formatters sorted by argument index.
+ */
+ public Format[] getFormatsByArgumentIndex()
+ {
+ int argNumMax = 0;
+ // First, find the greatest argument number.
+ for (int i=0;i<elements.length;i++)
+ if (elements[i].argNumber > argNumMax)
+ argNumMax = elements[i].argNumber;
+
+ Format[] formats = new Format[argNumMax];
+ for (int i=0;i<elements.length;i++)
+ {
+ if (elements[i].setFormat != null)
+ formats[elements[i].argNumber] = elements[i].setFormat;
+ else if (elements[i].format != null)
+ formats[elements[i].argNumber] = elements[i].format;
+ }
+ return formats;
+ }
+
+ /**
+ * Set the format to used using the argument index number.
+ *
+ * @param argumentIndex the argument index.
+ * @param newFormat the format to use for this argument.
+ */
+ public void setFormatByArgumentIndex(int argumentIndex,
+ Format newFormat)
+ {
+ for (int i=0;i<elements.length;i++)
+ {
+ if (elements[i].argNumber == argumentIndex)
+ elements[i].setFormat = newFormat;
+ }
+ }
+
+ /**
+ * Set the format for argument using a specified array of formatters
+ * which is sorted according to the argument index. If the number of
+ * elements in the array is fewer than the number of arguments only
+ * the arguments specified by the array are touched.
+ *
+ * @param newFormats array containing the new formats to set.
+ *
+ * @throws NullPointerException if newFormats is null
+ */
+ public void setFormatsByArgumentIndex(Format[] newFormats)
+ {
+ for (int i=0;i<newFormats.length;i++)
+ {
+ // Nothing better than that can exist here.
+ setFormatByArgumentIndex(i, newFormats[i]);
+ }
+ }
+
// The pattern string.
private String pattern;
// The locale.
diff --git a/libjava/java/text/NumberFormat.java b/libjava/java/text/NumberFormat.java
index 42372908e39..6520f7524e0 100644
--- a/libjava/java/text/NumberFormat.java
+++ b/libjava/java/text/NumberFormat.java
@@ -38,8 +38,8 @@ exception statement from your version. */
package java.text;
-import java.io.InvalidObjectException;
import java.io.IOException;
+import java.io.InvalidObjectException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Currency;
diff --git a/libjava/java/text/RuleBasedCollator.java b/libjava/java/text/RuleBasedCollator.java
index 1c1feab4e3c..64c2ac231f7 100644
--- a/libjava/java/text/RuleBasedCollator.java
+++ b/libjava/java/text/RuleBasedCollator.java
@@ -1,5 +1,5 @@
/* RuleBasedCollator.java -- Concrete Collator Class
- Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
diff --git a/libjava/java/text/SimpleDateFormat.java b/libjava/java/text/SimpleDateFormat.java
index 69ce391db8d..5f3614eefcf 100644
--- a/libjava/java/text/SimpleDateFormat.java
+++ b/libjava/java/text/SimpleDateFormat.java
@@ -39,16 +39,21 @@ exception statement from your version. */
package java.text;
+import gnu.java.text.AttributedFormatBuffer;
+import gnu.java.text.FormatBuffer;
+import gnu.java.text.FormatCharacterIterator;
+import gnu.java.text.StringFormatBuffer;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.Locale;
-import java.util.TimeZone;
import java.util.SimpleTimeZone;
-import java.io.ObjectInputStream;
-import java.io.IOException;
+import java.util.TimeZone;
/**
* SimpleDateFormat provides convenient methods for parsing and formatting
@@ -82,7 +87,7 @@ public class SimpleDateFormat extends DateFormat
// This string is specified in the JCL. We set it here rather than
// do a DateFormatSymbols(Locale.US).getLocalPatternChars() since
// someone could theoretically change those values (though unlikely).
- private static final String standardChars = "GyMdkHmsSEDFwWahKz";
+ private static final String standardChars = "GyMdkHmsSEDFwWahKzZ";
private void readObject(ObjectInputStream stream)
throws IOException, ClassNotFoundException
@@ -411,109 +416,164 @@ public class SimpleDateFormat extends DateFormat
* appending to the specified StringBuffer. The input StringBuffer
* is returned as output for convenience.
*/
- public StringBuffer format(Date date, StringBuffer buffer, FieldPosition pos)
+ final private void formatWithAttribute(Date date, FormatBuffer buffer, FieldPosition pos)
{
String temp;
+ AttributedCharacterIterator.Attribute attribute;
calendar.setTime(date);
-
- // go through ArrayList, filling in fields where applicable, else toString
- Iterator i = tokens.iterator();
- while (i.hasNext()) {
- Object o = i.next();
- if (o instanceof FieldSizePair) {
- FieldSizePair p = (FieldSizePair) o;
- int beginIndex = buffer.length();
- switch (p.field) {
- case ERA_FIELD:
- buffer.append(formatData.eras[calendar.get(Calendar.ERA)]);
- break;
- case YEAR_FIELD:
- // If we have two digits, then we truncate. Otherwise, we
- // use the size of the pattern, and zero pad.
- if (p.size == 2)
- {
- temp = String.valueOf(calendar.get(Calendar.YEAR));
- buffer.append(temp.substring(temp.length() - 2));
- }
- else
- withLeadingZeros(calendar.get(Calendar.YEAR), p.size, buffer);
- break;
- case MONTH_FIELD:
- if (p.size < 3)
- withLeadingZeros(calendar.get(Calendar.MONTH)+1,p.size,buffer);
- else if (p.size < 4)
- buffer.append(formatData.shortMonths[calendar.get(Calendar.MONTH)]);
- else
- buffer.append(formatData.months[calendar.get(Calendar.MONTH)]);
- break;
- case DATE_FIELD:
- withLeadingZeros(calendar.get(Calendar.DATE),p.size,buffer);
- break;
- case HOUR_OF_DAY1_FIELD: // 1-24
- withLeadingZeros(((calendar.get(Calendar.HOUR_OF_DAY)+23)%24)+1,p.size,buffer);
- break;
- case HOUR_OF_DAY0_FIELD: // 0-23
- withLeadingZeros(calendar.get(Calendar.HOUR_OF_DAY),p.size,buffer);
- break;
- case MINUTE_FIELD:
- withLeadingZeros(calendar.get(Calendar.MINUTE),p.size,buffer);
- break;
- case SECOND_FIELD:
- withLeadingZeros(calendar.get(Calendar.SECOND),p.size,buffer);
- break;
- case MILLISECOND_FIELD:
- withLeadingZeros(calendar.get(Calendar.MILLISECOND),p.size,buffer);
- break;
- case DAY_OF_WEEK_FIELD:
- if (p.size < 4)
- buffer.append(formatData.shortWeekdays[calendar.get(Calendar.DAY_OF_WEEK)]);
- else
- buffer.append(formatData.weekdays[calendar.get(Calendar.DAY_OF_WEEK)]);
- break;
- case DAY_OF_YEAR_FIELD:
- withLeadingZeros(calendar.get(Calendar.DAY_OF_YEAR),p.size,buffer);
- break;
- case DAY_OF_WEEK_IN_MONTH_FIELD:
- withLeadingZeros(calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH),p.size,buffer);
- break;
- case WEEK_OF_YEAR_FIELD:
- withLeadingZeros(calendar.get(Calendar.WEEK_OF_YEAR),p.size,buffer);
- break;
- case WEEK_OF_MONTH_FIELD:
- withLeadingZeros(calendar.get(Calendar.WEEK_OF_MONTH),p.size,buffer);
- break;
- case AM_PM_FIELD:
- buffer.append(formatData.ampms[calendar.get(Calendar.AM_PM)]);
- break;
- case HOUR1_FIELD: // 1-12
- withLeadingZeros(((calendar.get(Calendar.HOUR)+11)%12)+1,p.size,buffer);
- break;
- case HOUR0_FIELD: // 0-11
- withLeadingZeros(calendar.get(Calendar.HOUR),p.size,buffer);
- break;
- case TIMEZONE_FIELD:
- TimeZone zone = calendar.getTimeZone();
- boolean isDST = calendar.get(Calendar.DST_OFFSET) != 0;
- // FIXME: XXX: This should be a localized time zone.
- String zoneID = zone.getDisplayName(isDST, p.size > 3 ? TimeZone.LONG : TimeZone.SHORT);
- buffer.append(zoneID);
- break;
- default:
- throw new IllegalArgumentException("Illegal pattern character");
- }
- if (pos != null && p.field == pos.getField())
+
+ // go through vector, filling in fields where applicable, else toString
+ Iterator iter = tokens.iterator();
+ while (iter.hasNext())
+ {
+ Object o = iter.next();
+ if (o instanceof FieldSizePair)
{
- pos.setBeginIndex(beginIndex);
- pos.setEndIndex(buffer.length());
- }
- } else {
- buffer.append(o.toString());
+ FieldSizePair p = (FieldSizePair) o;
+ int beginIndex = buffer.length();
+
+ switch (p.field)
+ {
+ case ERA_FIELD:
+ buffer.append (formatData.eras[calendar.get (Calendar.ERA)], DateFormat.Field.ERA);
+ break;
+ case YEAR_FIELD:
+ // If we have two digits, then we truncate. Otherwise, we
+ // use the size of the pattern, and zero pad.
+ buffer.setDefaultAttribute (DateFormat.Field.YEAR);
+ if (p.size == 2)
+ {
+ temp = String.valueOf (calendar.get (Calendar.YEAR));
+ buffer.append (temp.substring (temp.length() - 2));
+ }
+ else
+ withLeadingZeros (calendar.get (Calendar.YEAR), p.size, buffer);
+ break;
+ case MONTH_FIELD:
+ buffer.setDefaultAttribute (DateFormat.Field.MONTH);
+ if (p.size < 3)
+ withLeadingZeros (calendar.get (Calendar.MONTH) + 1, p.size, buffer);
+ else if (p.size < 4)
+ buffer.append (formatData.shortMonths[calendar.get (Calendar.MONTH)]);
+ else
+ buffer.append (formatData.months[calendar.get (Calendar.MONTH)]);
+ break;
+ case DATE_FIELD:
+ buffer.setDefaultAttribute (DateFormat.Field.DAY_OF_MONTH);
+ withLeadingZeros (calendar.get (Calendar.DATE), p.size, buffer);
+ break;
+ case HOUR_OF_DAY1_FIELD: // 1-24
+ buffer.setDefaultAttribute(DateFormat.Field.HOUR_OF_DAY1);
+ withLeadingZeros ( ((calendar.get (Calendar.HOUR_OF_DAY) + 23) % 24) + 1,
+ p.size, buffer);
+ break;
+ case HOUR_OF_DAY0_FIELD: // 0-23
+ buffer.setDefaultAttribute (DateFormat.Field.HOUR_OF_DAY0);
+ withLeadingZeros (calendar.get (Calendar.HOUR_OF_DAY), p.size, buffer);
+ break;
+ case MINUTE_FIELD:
+ buffer.setDefaultAttribute (DateFormat.Field.MINUTE);
+ withLeadingZeros (calendar.get (Calendar.MINUTE),
+ p.size, buffer);
+ break;
+ case SECOND_FIELD:
+ buffer.setDefaultAttribute (DateFormat.Field.SECOND);
+ withLeadingZeros(calendar.get (Calendar.SECOND),
+ p.size, buffer);
+ break;
+ case MILLISECOND_FIELD:
+ buffer.setDefaultAttribute (DateFormat.Field.MILLISECOND);
+ withLeadingZeros (calendar.get (Calendar.MILLISECOND), p.size, buffer);
+ break;
+ case DAY_OF_WEEK_FIELD:
+ buffer.setDefaultAttribute (DateFormat.Field.DAY_OF_WEEK);
+ if (p.size < 4)
+ buffer.append (formatData.shortWeekdays[calendar.get (Calendar.DAY_OF_WEEK)]);
+ else
+ buffer.append (formatData.weekdays[calendar.get (Calendar.DAY_OF_WEEK)]);
+ break;
+ case DAY_OF_YEAR_FIELD:
+ buffer.setDefaultAttribute (DateFormat.Field.DAY_OF_YEAR);
+ withLeadingZeros (calendar.get (Calendar.DAY_OF_YEAR), p.size, buffer);
+ break;
+ case DAY_OF_WEEK_IN_MONTH_FIELD:
+ buffer.setDefaultAttribute (DateFormat.Field.DAY_OF_WEEK_IN_MONTH);
+ withLeadingZeros (calendar.get (Calendar.DAY_OF_WEEK_IN_MONTH),
+ p.size, buffer);
+ break;
+ case WEEK_OF_YEAR_FIELD:
+ buffer.setDefaultAttribute (DateFormat.Field.WEEK_OF_YEAR);
+ withLeadingZeros (calendar.get (Calendar.WEEK_OF_YEAR),
+ p.size, buffer);
+ break;
+ case WEEK_OF_MONTH_FIELD:
+ buffer.setDefaultAttribute (DateFormat.Field.WEEK_OF_MONTH);
+ withLeadingZeros (calendar.get (Calendar.WEEK_OF_MONTH),
+ p.size, buffer);
+ break;
+ case AM_PM_FIELD:
+ buffer.setDefaultAttribute (DateFormat.Field.AM_PM);
+ buffer.append (formatData.ampms[calendar.get (Calendar.AM_PM)]);
+ break;
+ case HOUR1_FIELD: // 1-12
+ buffer.setDefaultAttribute (DateFormat.Field.HOUR1);
+ withLeadingZeros (((calendar.get (Calendar.HOUR) + 11) % 12) + 1, p.size, buffer);
+ break;
+ case HOUR0_FIELD: // 0-11
+ buffer.setDefaultAttribute (DateFormat.Field.HOUR0);
+ withLeadingZeros (calendar.get (Calendar.HOUR), p.size, buffer);
+ break;
+ case TIMEZONE_FIELD:
+ buffer.setDefaultAttribute (DateFormat.Field.TIME_ZONE);
+ TimeZone zone = calendar.getTimeZone();
+ boolean isDST = calendar.get (Calendar.DST_OFFSET) != 0;
+ // FIXME: XXX: This should be a localized time zone.
+ String zoneID = zone.getDisplayName (isDST, p.size > 3 ? TimeZone.LONG : TimeZone.SHORT);
+ buffer.append (zoneID);
+ break;
+ default:
+ throw new IllegalArgumentException ("Illegal pattern character " + p.field);
+ }
+ if (pos != null && (buffer.getDefaultAttribute() == pos.getFieldAttribute()
+ || p.field == pos.getField()))
+ {
+ pos.setBeginIndex(beginIndex);
+ pos.setEndIndex(buffer.length());
+ }
+ }
+ else
+ {
+ buffer.append(o.toString(), null);
+ }
}
- }
+ }
+
+ public StringBuffer format(Date date, StringBuffer buffer, FieldPosition pos)
+ {
+ formatWithAttribute(date, new StringFormatBuffer (buffer), pos);
+
return buffer;
}
- private void withLeadingZeros(int value, int length, StringBuffer buffer)
+ public AttributedCharacterIterator formatToCharacterIterator(Object date)
+ throws IllegalArgumentException
+ {
+ if (date == null)
+ throw new NullPointerException("null argument");
+ if (!(date instanceof Date))
+ throw new IllegalArgumentException("argument should be an instance of java.util.Date");
+
+ AttributedFormatBuffer buf = new AttributedFormatBuffer();
+ formatWithAttribute((Date)date, buf,
+ null);
+ buf.sync();
+
+ return new FormatCharacterIterator(buf.getBuffer().toString(),
+ buf.getRanges(),
+ buf.getAttributes());
+ }
+
+ private void withLeadingZeros(int value, int length, FormatBuffer buffer)
{
String valStr = String.valueOf(value);
for (length -= valStr.length(); length > 0; length--)
diff --git a/libjava/java/util/Arrays.java b/libjava/java/util/Arrays.java
index 080b4b9cbf9..cc32d153900 100644
--- a/libjava/java/util/Arrays.java
+++ b/libjava/java/util/Arrays.java
@@ -2400,7 +2400,7 @@ public class Arrays
{
int size = a.length;
for (int i = 0; i < size; i++)
- if (this.equals(o, a[i]))
+ if (ArrayList.equals(o, a[i]))
return i;
return -1;
}
@@ -2409,7 +2409,7 @@ public class Arrays
{
int i = a.length;
while (--i >= 0)
- if (this.equals(o, a[i]))
+ if (ArrayList.equals(o, a[i]))
return i;
return -1;
}
diff --git a/libjava/java/util/Calendar.java b/libjava/java/util/Calendar.java
index 2a1e1d8b707..11b0aacf940 100644
--- a/libjava/java/util/Calendar.java
+++ b/libjava/java/util/Calendar.java
@@ -926,8 +926,21 @@ public abstract class Calendar implements Serializable, Cloneable
* @return the actual minimum value.
* @since jdk1.2
*/
- // FIXME: XXX: Not abstract in JDK 1.2.
- public abstract int getActualMinimum(int field);
+ public int getActualMinimum(int field)
+ {
+ Calendar tmp = (Calendar)clone(); // To avoid restoring state
+ int min = tmp.getGreatestMinimum(field);
+ int end = tmp.getMinimum(field);
+ tmp.set(field, min);
+ for (; min > end; min--)
+ {
+ tmp.add(field, -1); // Try to get smaller
+ if (tmp.get(field) != min - 1)
+ break; // Done if not successful
+
+ }
+ return min;
+ }
/**
* Gets the actual maximum value that is allowed for the specified field.
@@ -936,8 +949,20 @@ public abstract class Calendar implements Serializable, Cloneable
* @return the actual maximum value.
* @since jdk1.2
*/
- // FIXME: XXX: Not abstract in JDK 1.2.
- public abstract int getActualMaximum(int field);
+ public int getActualMaximum(int field)
+ {
+ Calendar tmp = (Calendar)clone(); // To avoid restoring state
+ int max = tmp.getLeastMaximum(field);
+ int end = tmp.getMaximum(field);
+ tmp.set(field, max);
+ for (; max < end; max++)
+ {
+ tmp.add(field, 1);
+ if (tmp.get(field) != max + 1)
+ break;
+ }
+ return max;
+ }
/**
* Return a clone of this object.
diff --git a/libjava/java/util/Date.java b/libjava/java/util/Date.java
index c25b503dcde..43ae9699082 100644
--- a/libjava/java/util/Date.java
+++ b/libjava/java/util/Date.java
@@ -460,7 +460,6 @@ public class Date implements Cloneable, Comparable, java.io.Serializable
int curYear = 1900 + new Date().getYear();
int firstYear = curYear - 80;
year = firstYear / 100 * 100 + num;
- int yx = year;
if (year < firstYear)
year += 100;
}
diff --git a/libjava/java/util/HashMap.java b/libjava/java/util/HashMap.java
index dc1b112302c..fe4c8b06022 100644
--- a/libjava/java/util/HashMap.java
+++ b/libjava/java/util/HashMap.java
@@ -743,18 +743,9 @@ public class HashMap extends AbstractMap
{
int idx = hash(e.key);
HashEntry dest = buckets[idx];
-
- if (dest != null)
- {
- while (dest.next != null)
- dest = dest.next;
- dest.next = e;
- }
- else
- buckets[idx] = e;
-
HashEntry next = e.next;
- e.next = null;
+ e.next = buckets[idx];
+ buckets[idx] = e;
e = next;
}
}
diff --git a/libjava/java/util/ResourceBundle.java b/libjava/java/util/ResourceBundle.java
index 6663bd4533e..264152a8cb7 100644
--- a/libjava/java/util/ResourceBundle.java
+++ b/libjava/java/util/ResourceBundle.java
@@ -42,7 +42,6 @@ import java.lang.ref.Reference;
import java.lang.ref.SoftReference;
import java.io.InputStream;
import java.io.IOException;
-import gnu.classpath.Configuration;
/**
* A resource bundle contains locale-specific data. If you need localized
@@ -345,7 +344,6 @@ public abstract class ResourceBundle
else if (cache.containsKey(name))
{
Reference ref = (Reference) cache.get(name);
- ResourceBundle result = null;
// If REF is null, that means that we added a `null' value to
// the hash map. That means we failed to find the bundle
// previously, and we cached that fact. The JDK does this, so
@@ -440,7 +438,6 @@ public abstract class ResourceBundle
if (cache.containsKey(localizedName))
{
Reference ref = (Reference) cache.get(localizedName);
- ResourceBundle result = null;
// If REF is null, that means that we added a `null' value to
// the hash map. That means we failed to find the bundle
// previously, and we cached that fact. The JDK does this, so
diff --git a/libjava/java/util/SimpleTimeZone.java b/libjava/java/util/SimpleTimeZone.java
index 31b85e18972..71f92e88f34 100644
--- a/libjava/java/util/SimpleTimeZone.java
+++ b/libjava/java/util/SimpleTimeZone.java
@@ -1,5 +1,5 @@
/* java.util.SimpleTimeZone
- Copyright (C) 1998, 1999, 2000, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -146,7 +146,15 @@ public class SimpleTimeZone extends TimeZone
* @serial
*/
private int startTime;
-
+
+ /**
+ * This variable specifies the mode that startTime is specified in. By
+ * default it is WALL_TIME, but can also be STANDARD_TIME or UTC_TIME. For
+ * startTime, STANDARD_TIME and WALL_TIME are equivalent.
+ * @serial
+ */
+ private int startTimeMode = WALL_TIME;
+
/**
* The month in which daylight savings ends. This is one of the
* constants Calendar.JANUARY, ..., Calendar.DECEMBER.
@@ -186,6 +194,13 @@ public class SimpleTimeZone extends TimeZone
private int endTime;
/**
+ * This variable specifies the mode that endTime is specified in. By
+ * default it is WALL_TIME, but can also be STANDARD_TIME or UTC_TIME.
+ * @serial
+ */
+ private int endTimeMode = WALL_TIME;
+
+ /**
* This variable points to a deprecated array from JDK 1.1. It is
* ignored in JDK 1.2 but streamed out for compatibility with JDK 1.1.
* The array contains the lengths of the months in the year and is
@@ -224,6 +239,23 @@ public class SimpleTimeZone extends TimeZone
private static final long serialVersionUID = -403250971215465050L;
/**
+ * Constant to indicate that start and end times are specified in standard
+ * time, without adjusting for daylight savings.
+ */
+ public static final int STANDARD_TIME = 1;
+
+ /**
+ * Constant to indicate that start and end times are specified in wall
+ * time, adjusting for daylight savings. This is the default.
+ */
+ public static final int WALL_TIME = 0;
+
+ /**
+ * Constant to indicate that start and end times are specified in UTC.
+ */
+ public static final int UTC_TIME = 2;
+
+ /**
* Create a <code>SimpleTimeZone</code> with the given time offset
* from GMT and without daylight savings.
* @param rawOffset the time offset from GMT in milliseconds.
@@ -283,7 +315,10 @@ public class SimpleTimeZone extends TimeZone
* @param endday A day in month or a day of week number, as
* described above.
* @param endDayOfWeek The end rule day of week; see above.
- * @param endTime A time in millis in standard time. */
+ * @param endTime A time in millis in standard time.
+ * @throws IllegalArgumentException if parameters are invalid or out of
+ * range.
+ */
public SimpleTimeZone(int rawOffset, String id,
int startMonth, int startDayOfWeekInMonth,
int startDayOfWeek, int startTime,
@@ -310,6 +345,7 @@ public class SimpleTimeZone extends TimeZone
*
* @param dstSavings the amount of savings for daylight savings
* time in milliseconds. This must be positive.
+ * @since 1.2
*/
public SimpleTimeZone(int rawOffset, String id,
int startMonth, int startDayOfWeekInMonth,
@@ -325,6 +361,51 @@ public class SimpleTimeZone extends TimeZone
}
/**
+ * This constructs a new SimpleTimeZone that supports a daylight savings
+ * rule. The parameter are the same as for the constructor above, except
+ * there are the additional startTimeMode, endTimeMode, and dstSavings
+ * parameters.
+ *
+ * @param startTimeMode the mode that start times are specified in. One of
+ * WALL_TIME, STANDARD_TIME, or UTC_TIME.
+ * @param endTimeMode the mode that end times are specified in. One of
+ * WALL_TIME, STANDARD_TIME, or UTC_TIME.
+ * @param dstSavings the amount of savings for daylight savings
+ * time in milliseconds. This must be positive.
+ * @throws IllegalArgumentException if parameters are invalid or out of
+ * range.
+ * @since 1.4
+ */
+ public SimpleTimeZone(int rawOffset, String id,
+ int startMonth, int startDayOfWeekInMonth,
+ int startDayOfWeek, int startTime, int startTimeMode,
+ int endMonth, int endDayOfWeekInMonth,
+ int endDayOfWeek, int endTime, int endTimeMode,
+ int dstSavings)
+ {
+ this.rawOffset = rawOffset;
+ setID(id);
+ useDaylight = true;
+
+ if (startTimeMode < WALL_TIME || startTimeMode > UTC_TIME)
+ throw new IllegalArgumentException("startTimeMode must be one of WALL_TIME, STANDARD_TIME, or UTC_TIME");
+ if (endTimeMode < WALL_TIME || endTimeMode > UTC_TIME)
+ throw new IllegalArgumentException("endTimeMode must be one of WALL_TIME, STANDARD_TIME, or UTC_TIME");
+ this.startTimeMode = startTimeMode;
+ this.endTimeMode = endTimeMode;
+
+ setStartRule(startMonth, startDayOfWeekInMonth,
+ startDayOfWeek, startTime);
+ setEndRule(endMonth, endDayOfWeekInMonth, endDayOfWeek, endTime);
+ if (startMonth == endMonth)
+ throw new IllegalArgumentException
+ ("startMonth and endMonth must be different");
+ this.startYear = 0;
+
+ this.dstSavings = dstSavings;
+ }
+
+ /**
* Sets the first year, where daylight savings applies. The daylight
* savings rule never apply for years in the BC era. Note that this
* is gregorian calendar specific.
@@ -400,18 +481,85 @@ public class SimpleTimeZone extends TimeZone
// of this method.
this.startDay = Math.abs(day);
this.startDayOfWeek = Math.abs(dayOfWeek);
- this.startTime = time;
+ if (this.startTimeMode == WALL_TIME || this.startTimeMode == STANDARD_TIME)
+ this.startTime = time;
+ else
+ // Convert from UTC to STANDARD
+ this.startTime = time + this.rawOffset;
+ useDaylight = true;
+ }
+
+ /**
+ * Sets the daylight savings start rule. You must also set the
+ * end rule with <code>setEndRule</code> or the result of
+ * getOffset is undefined. For the parameters see the ten-argument
+ * constructor above.
+ *
+ * Note that this API isn't incredibly well specified. It appears that the
+ * after flag must override the parameters, since normally, the day and
+ * dayofweek can select this. I.e., if day < 0 and dayOfWeek < 0, on or
+ * before mode is chosen. But if after == true, this implementation
+ * overrides the signs of the other arguments. And if dayOfWeek == 0, it
+ * falls back to the behavior in the other APIs. I guess this should be
+ * checked against Sun's implementation.
+ *
+ * @param month The month where daylight savings start, zero
+ * based. You should use the constants in Calendar.
+ * @param day A day of month or day of week in month.
+ * @param dayOfWeek The day of week where daylight savings start.
+ * @param time The time in milliseconds standard time where daylight
+ * savings start.
+ * @param after If true, day and dayOfWeek specify first day of week on or
+ * after day, else first day of week on or before.
+ * @since 1.2
+ * @see SimpleTimeZone
+ */
+ public void setStartRule(int month, int day, int dayOfWeek, int time, boolean after)
+ {
+ // FIXME: XXX: Validate that checkRule and offset processing work with on
+ // or before mode.
+ this.startDay = after ? Math.abs(day) : -Math.abs(day);
+ this.startDayOfWeek = after ? Math.abs(dayOfWeek) : -Math.abs(dayOfWeek);
+ this.startMode = (dayOfWeek != 0) ? (after ? DOW_GE_DOM_MODE : DOW_LE_DOM_MODE)
+ : checkRule(month, day, dayOfWeek);
+ this.startDay = Math.abs(this.startDay);
+ this.startDayOfWeek = Math.abs(this.startDayOfWeek);
+
+ this.startMonth = month;
+
+ if (this.startTimeMode == WALL_TIME || this.startTimeMode == STANDARD_TIME)
+ this.startTime = time;
+ else
+ // Convert from UTC to STANDARD
+ this.startTime = time + this.rawOffset;
useDaylight = true;
}
/**
+ * Sets the daylight savings start rule. You must also set the
+ * end rule with <code>setEndRule</code> or the result of
+ * getOffset is undefined. For the parameters see the ten-argument
+ * constructor above.
+ *
+ * @param month The month where daylight savings start, zero
+ * based. You should use the constants in Calendar.
+ * @param day A day of month or day of week in month.
+ * @param time The time in milliseconds standard time where daylight
+ * savings start.
+ * @see SimpleTimeZone
+ * @since 1.2
+ */
+ public void setStartRule(int month, int day, int time)
+ {
+ setStartRule(month, day, 0, time);
+ }
+
+ /**
* Sets the daylight savings end rule. You must also set the
* start rule with <code>setStartRule</code> or the result of
* getOffset is undefined. For the parameters see the ten-argument
* constructor above.
*
- * @param rawOffset The time offset from GMT.
- * @param id The identifier of this time zone.
* @param month The end month of daylight savings.
* @param day A day in month, or a day of week in month.
* @param dayOfWeek A day of week, when daylight savings ends.
@@ -426,11 +574,82 @@ public class SimpleTimeZone extends TimeZone
// of this method.
this.endDay = Math.abs(day);
this.endDayOfWeek = Math.abs(dayOfWeek);
- this.endTime = time;
+ if (this.endTimeMode == WALL_TIME)
+ this.endTime = time;
+ else if (this.endTimeMode == STANDARD_TIME)
+ // Convert from STANDARD to DST
+ this.endTime = time + this.dstSavings;
+ else
+ // Convert from UTC to DST
+ this.endTime = time + this.rawOffset + this.dstSavings;
+ useDaylight = true;
+ }
+
+ /**
+ * Sets the daylight savings end rule. You must also set the
+ * start rule with <code>setStartRule</code> or the result of
+ * getOffset is undefined. For the parameters see the ten-argument
+ * constructor above.
+ *
+ * Note that this API isn't incredibly well specified. It appears that the
+ * after flag must override the parameters, since normally, the day and
+ * dayofweek can select this. I.e., if day < 0 and dayOfWeek < 0, on or
+ * before mode is chosen. But if after == true, this implementation
+ * overrides the signs of the other arguments. And if dayOfWeek == 0, it
+ * falls back to the behavior in the other APIs. I guess this should be
+ * checked against Sun's implementation.
+ *
+ * @param month The end month of daylight savings.
+ * @param day A day in month, or a day of week in month.
+ * @param dayOfWeek A day of week, when daylight savings ends.
+ * @param time A time in millis in standard time.
+ * @param after If true, day and dayOfWeek specify first day of week on or
+ * after day, else first day of week on or before.
+ * @since 1.2
+ * @see #setStartRule
+ */
+ public void setEndRule(int month, int day, int dayOfWeek, int time, boolean after)
+ {
+ // FIXME: XXX: Validate that checkRule and offset processing work with on
+ // or before mode.
+ this.endDay = after ? Math.abs(day) : -Math.abs(day);
+ this.endDayOfWeek = after ? Math.abs(dayOfWeek) : -Math.abs(dayOfWeek);
+ this.endMode = (dayOfWeek != 0) ? (after ? DOW_GE_DOM_MODE : DOW_LE_DOM_MODE)
+ : checkRule(month, day, dayOfWeek);
+ this.endDay = Math.abs(this.endDay);
+ this.endDayOfWeek = Math.abs(endDayOfWeek);
+
+ this.endMonth = month;
+
+ if (this.endTimeMode == WALL_TIME)
+ this.endTime = time;
+ else if (this.endTimeMode == STANDARD_TIME)
+ // Convert from STANDARD to DST
+ this.endTime = time + this.dstSavings;
+ else
+ // Convert from UTC to DST
+ this.endTime = time + this.rawOffset + this.dstSavings;
useDaylight = true;
}
/**
+ * Sets the daylight savings end rule. You must also set the
+ * start rule with <code>setStartRule</code> or the result of
+ * getOffset is undefined. For the parameters see the ten-argument
+ * constructor above.
+ *
+ * @param month The end month of daylight savings.
+ * @param day A day in month, or a day of week in month.
+ * @param dayOfWeek A day of week, when daylight savings ends.
+ * @param time A time in millis in standard time.
+ * @see #setStartRule
+ */
+ public void setEndRule(int month, int day, int time)
+ {
+ setEndRule(month, day, 0, time);
+ }
+
+ /**
* Gets the time zone offset, for current date, modified in case of
* daylight savings. This is the offset to add to UTC to get the local
* time.
diff --git a/libjava/java/util/logging/Level.java b/libjava/java/util/logging/Level.java
index ed497d537e0..e37f9cb5824 100644
--- a/libjava/java/util/logging/Level.java
+++ b/libjava/java/util/logging/Level.java
@@ -343,7 +343,7 @@ public class Level implements Serializable
for (int i = 0; i < knownLevels.length; i++)
{
- if (name.equals(knownLevels[i].name))
+ if (name == knownLevels[i].name)
return knownLevels[i];
}
diff --git a/libjava/java/util/prefs/AbstractPreferences.java b/libjava/java/util/prefs/AbstractPreferences.java
index 12313c0902f..876279c8c62 100644
--- a/libjava/java/util/prefs/AbstractPreferences.java
+++ b/libjava/java/util/prefs/AbstractPreferences.java
@@ -119,7 +119,7 @@ public abstract class AbstractPreferences extends Preferences {
throw new IllegalArgumentException("Illegal name argument '"
+ name
+ "' (parent is "
- + parent == null ? "" : "not "
+ + (parent == null ? "" : "not ")
+ "null)");
this.parent = parent;
this.name = name;
diff --git a/libjava/java/util/regex/Pattern.java b/libjava/java/util/regex/Pattern.java
index 779103bdcb5..174bdae5878 100644
--- a/libjava/java/util/regex/Pattern.java
+++ b/libjava/java/util/regex/Pattern.java
@@ -67,12 +67,6 @@ public class Pattern implements Serializable
private final RE re;
- private Pattern (String regex)
- throws PatternSyntaxException
- {
- this (regex, 0);
- }
-
private Pattern (String regex, int flags)
throws PatternSyntaxException
{
diff --git a/libjava/java/util/zip/ZipEntry.java b/libjava/java/util/zip/ZipEntry.java
index e2262812b9f..3f7f6435529 100644
--- a/libjava/java/util/zip/ZipEntry.java
+++ b/libjava/java/util/zip/ZipEntry.java
@@ -169,12 +169,12 @@ public class ZipEntry implements ZipConstants, Cloneable
synchronized (cal)
{
cal.setTime(new Date(time*1000L));
- dostime = (cal.get(cal.YEAR) - 1980 & 0x7f) << 25
- | (cal.get(cal.MONTH) + 1) << 21
- | (cal.get(cal.DAY_OF_MONTH)) << 16
- | (cal.get(cal.HOUR_OF_DAY)) << 11
- | (cal.get(cal.MINUTE)) << 5
- | (cal.get(cal.SECOND)) >> 1;
+ dostime = (cal.get(Calendar.YEAR) - 1980 & 0x7f) << 25
+ | (cal.get(Calendar.MONTH) + 1) << 21
+ | (cal.get(Calendar.DAY_OF_MONTH)) << 16
+ | (cal.get(Calendar.HOUR_OF_DAY)) << 11
+ | (cal.get(Calendar.MINUTE)) << 5
+ | (cal.get(Calendar.SECOND)) >> 1;
}
dostime = (int) (dostime / 1000L);
this.known |= KNOWN_TIME;
diff --git a/libjava/javax/imageio/spi/ImageReaderWriterSpi.java b/libjava/javax/imageio/spi/ImageReaderWriterSpi.java
index 33de165e35d..74dbb3859bb 100644
--- a/libjava/javax/imageio/spi/ImageReaderWriterSpi.java
+++ b/libjava/javax/imageio/spi/ImageReaderWriterSpi.java
@@ -168,7 +168,7 @@ public abstract class ImageReaderWriterSpi
* subclasses must ensure that they set all inherited fields to
* meaningful values.
*/
- protected ImageReaderWriterSpi()
+ public ImageReaderWriterSpi()
{
}
diff --git a/libjava/javax/imageio/stream/ImageInputStream.java b/libjava/javax/imageio/stream/ImageInputStream.java
index 4b509f85798..d37231dd7a7 100644
--- a/libjava/javax/imageio/stream/ImageInputStream.java
+++ b/libjava/javax/imageio/stream/ImageInputStream.java
@@ -39,7 +39,6 @@ exception statement from your version. */
package javax.imageio.stream;
import java.io.DataInput;
-import java.io.EOFException;
import java.io.IOException;
import java.nio.ByteOrder;
diff --git a/libjava/javax/naming/CompoundName.java b/libjava/javax/naming/CompoundName.java
index 87d26feb43b..4908d1bed6d 100644
--- a/libjava/javax/naming/CompoundName.java
+++ b/libjava/javax/naming/CompoundName.java
@@ -264,7 +264,7 @@ public class CompoundName implements Name, Cloneable, Serializable
int delta = elts.size () - cn.elts.size ();
for (int i = 0; i < cn.elts.size (); ++i)
{
- String f = canonicalize ((String) elts.get (i));
+ String f = canonicalize ((String) elts.get (delta + i));
if (! f.equals (canonicalize ((String) cn.elts.get (i))))
return false;
}
diff --git a/libjava/javax/swing/AbstractButton.java b/libjava/javax/swing/AbstractButton.java
index de0be6350bb..b2d2c52b8c2 100644
--- a/libjava/javax/swing/AbstractButton.java
+++ b/libjava/javax/swing/AbstractButton.java
@@ -37,8 +37,6 @@ exception statement from your version. */
package javax.swing;
-import java.awt.AWTEvent;
-import java.awt.AWTEventMulticaster;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
@@ -51,12 +49,10 @@ import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
-import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.io.Serializable;
-import java.util.Vector;
import java.util.EventListener;
+
import javax.accessibility.AccessibleAction;
import javax.accessibility.AccessibleIcon;
import javax.accessibility.AccessibleRelationSet;
@@ -151,8 +147,8 @@ import javax.swing.text.AttributeSet;
*
* </ul>
*
- * @author Ronald Veldema (rveldema&064;cs.vu.nl)
- * @author Graydon Hoare (graydon&064;redhat.com)
+ * @author Ronald Veldema (rveldema@cs.vu.nl)
+ * @author Graydon Hoare (graydon@redhat.com)
*/
public abstract class AbstractButton extends JComponent
diff --git a/libjava/javax/swing/ActionMap.java b/libjava/javax/swing/ActionMap.java
index 940d1dfa13d..ce6086c2ecd 100644
--- a/libjava/javax/swing/ActionMap.java
+++ b/libjava/javax/swing/ActionMap.java
@@ -42,7 +42,6 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Arrays;
-import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
diff --git a/libjava/javax/swing/DefaultBoundedRangeModel.java b/libjava/javax/swing/DefaultBoundedRangeModel.java
index 8ca178dd551..3294c1d9e90 100644
--- a/libjava/javax/swing/DefaultBoundedRangeModel.java
+++ b/libjava/javax/swing/DefaultBoundedRangeModel.java
@@ -203,7 +203,7 @@ public class DefaultBoundedRangeModel
* Changes the current value of this bounded range model. In a
* scroll bar visualization of a {@link BoundedRangeModel}, the
* <code>value</code> is displayed as the position of the thumb;
- * changing the <code>value</code> of a scroll bar&#x2019;s model
+ * changing the <code>value</code> of a scroll bar's model
* thus moves the thumb to a different position.
*/
public void setValue(int value)
diff --git a/libjava/javax/swing/DefaultButtonModel.java b/libjava/javax/swing/DefaultButtonModel.java
index edffc39d6e5..a608de4488c 100644
--- a/libjava/javax/swing/DefaultButtonModel.java
+++ b/libjava/javax/swing/DefaultButtonModel.java
@@ -37,15 +37,13 @@ exception statement from your version. */
package javax.swing;
-import java.awt.AWTEvent;
-import java.awt.AWTEventMulticaster;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.Serializable;
import java.util.EventListener;
-import java.util.Vector;
+
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList;
@@ -73,7 +71,7 @@ import javax.swing.event.EventListenerList;
*
* In all other respects this class is just a container of boolean flags.
*
- * @author Graydon Hoare (graydon&064;redhat.com)
+ * @author Graydon Hoare (graydon@redhat.com)
*/
public class DefaultButtonModel implements ButtonModel, Serializable
{
diff --git a/libjava/javax/swing/DefaultListModel.java b/libjava/javax/swing/DefaultListModel.java
index 23f135b2f6b..53dd20cbc10 100644
--- a/libjava/javax/swing/DefaultListModel.java
+++ b/libjava/javax/swing/DefaultListModel.java
@@ -1,5 +1,5 @@
/* DefaultListModel.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,7 +38,6 @@ exception statement from your version. */
package javax.swing;
import java.util.Enumeration;
-import java.util.NoSuchElementException;
import java.util.Vector;
/**
@@ -48,7 +47,7 @@ import java.util.Vector;
* java.util.Vector}.
*
* @author Andrew Selkirk
- * @author Graydon Hoare (graydon&064;redhat.com)
+ * @author Graydon Hoare (graydon@redhat.com)
*/
public class DefaultListModel extends AbstractListModel
diff --git a/libjava/javax/swing/ImageIcon.java b/libjava/javax/swing/ImageIcon.java
index e68d4538ee5..da271a51d3f 100644
--- a/libjava/javax/swing/ImageIcon.java
+++ b/libjava/javax/swing/ImageIcon.java
@@ -1,5 +1,5 @@
/* ImageIcon.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,12 +41,7 @@ package javax.swing;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
-import java.awt.MediaTracker;
import java.awt.Toolkit;
-import java.io.Serializable;
-import java.net.URL;
-import javax.accessibility.Accessible;
-import javax.accessibility.AccessibleContext;
public class ImageIcon implements Icon
{
diff --git a/libjava/javax/swing/JComboBox.java b/libjava/javax/swing/JComboBox.java
index b3c5ccf8834..acdbdc011e3 100644
--- a/libjava/javax/swing/JComboBox.java
+++ b/libjava/javax/swing/JComboBox.java
@@ -48,13 +48,12 @@ import java.beans.PropertyChangeListener;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Vector;
+
import javax.accessibility.Accessible;
-import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleAction;
+import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleSelection;
-import javax.swing.event.MenuEvent;
-import javax.swing.event.MenuListener;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import javax.swing.event.PopupMenuListener;
diff --git a/libjava/javax/swing/JComponent.java b/libjava/javax/swing/JComponent.java
index 633ce664732..7b2261fa43b 100644
--- a/libjava/javax/swing/JComponent.java
+++ b/libjava/javax/swing/JComponent.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package javax.swing;
-import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
@@ -55,7 +54,6 @@ import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
-import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.image.ImageObserver;
import java.awt.peer.LightweightPeer;
@@ -65,17 +63,16 @@ import java.beans.VetoableChangeListener;
import java.io.Serializable;
import java.util.EventListener;
import java.util.Hashtable;
-import java.util.Vector;
+
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
-import javax.accessibility.AccessibleExtendedComponent;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleStateSet;
+import javax.swing.border.Border;
import javax.swing.event.AncestorListener;
import javax.swing.event.EventListenerList;
-import javax.swing.border.Border;
-import javax.swing.plaf.ComponentUI;
import javax.swing.event.SwingPropertyChangeSupport;
+import javax.swing.plaf.ComponentUI;
/**
* Every component in swing inherits from this class (JLabel, JButton, etc).
diff --git a/libjava/javax/swing/JFrame.java b/libjava/javax/swing/JFrame.java
index 89d109f660e..1062c9603b7 100644
--- a/libjava/javax/swing/JFrame.java
+++ b/libjava/javax/swing/JFrame.java
@@ -45,10 +45,10 @@ import java.awt.Container;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
-import java.awt.GraphicsConfiguration;
import java.awt.LayoutManager;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
+
import javax.accessibility.AccessibleContext;
/**
diff --git a/libjava/javax/swing/JInternalFrame.java b/libjava/javax/swing/JInternalFrame.java
index 034050b6456..f005c91e309 100644
--- a/libjava/javax/swing/JInternalFrame.java
+++ b/libjava/javax/swing/JInternalFrame.java
@@ -1,5 +1,5 @@
/* JInternalFrame.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,9 +38,6 @@ exception statement from your version. */
package javax.swing;
-import java.awt.Component;
-import java.awt.Container;
-import javax.accessibility.Accessible;
public class JInternalFrame extends JComponent
/*implements Accessible, WindowConstants, RootPaneContainer*/
diff --git a/libjava/javax/swing/JList.java b/libjava/javax/swing/JList.java
index 7ed776c0380..e8d2228bcdd 100644
--- a/libjava/javax/swing/JList.java
+++ b/libjava/javax/swing/JList.java
@@ -99,7 +99,7 @@ import javax.swing.plaf.ListUI;
* <tr><td>visibleRowCount </td><td>list </td><td>no </td></tr>
* </table>
*
- * @author Graydon Hoare (graydon&064;redhat.com)
+ * @author Graydon Hoare (graydon@redhat.com)
*/
public class JList extends JComponent implements Accessible, Scrollable
diff --git a/libjava/javax/swing/JMenuBar.java b/libjava/javax/swing/JMenuBar.java
index 24440db598a..fec19e694bd 100644
--- a/libjava/javax/swing/JMenuBar.java
+++ b/libjava/javax/swing/JMenuBar.java
@@ -1,5 +1,5 @@
/* JMenuBar.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,10 +38,6 @@ exception statement from your version. */
package javax.swing;
-import java.awt.Component;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseEvent;
-import javax.accessibility.Accessible;
public class JMenuBar extends JComponent
{
diff --git a/libjava/javax/swing/JMenuItem.java b/libjava/javax/swing/JMenuItem.java
index 68e8bfeacfc..db06bc670e8 100644
--- a/libjava/javax/swing/JMenuItem.java
+++ b/libjava/javax/swing/JMenuItem.java
@@ -1,5 +1,5 @@
/* JMenuItem.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,15 +41,14 @@ package javax.swing;
import java.awt.Component;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
-import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
-import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.MenuDragMouseEvent;
diff --git a/libjava/javax/swing/JOptionPane.java b/libjava/javax/swing/JOptionPane.java
index 2992d2441a5..7df8ebd5d16 100644
--- a/libjava/javax/swing/JOptionPane.java
+++ b/libjava/javax/swing/JOptionPane.java
@@ -1,5 +1,5 @@
/* JOptionPane.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,7 +42,7 @@ import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Frame;
-import javax.accessibility.Accessible;
+
import javax.accessibility.AccessibleContext;
import javax.swing.plaf.OptionPaneUI;
diff --git a/libjava/javax/swing/JProgressBar.java b/libjava/javax/swing/JProgressBar.java
index 6ee29334c5a..79c5102fbfd 100644
--- a/libjava/javax/swing/JProgressBar.java
+++ b/libjava/javax/swing/JProgressBar.java
@@ -38,8 +38,7 @@ exception statement from your version. */
package javax.swing;
import java.awt.Graphics;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
+
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
@@ -47,7 +46,6 @@ import javax.accessibility.AccessibleStateSet;
import javax.accessibility.AccessibleValue;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
-import javax.swing.event.EventListenerList;
import javax.swing.plaf.ProgressBarUI;
diff --git a/libjava/javax/swing/JRootPane.java b/libjava/javax/swing/JRootPane.java
index e7ec0bf806f..4d869d41517 100644
--- a/libjava/javax/swing/JRootPane.java
+++ b/libjava/javax/swing/JRootPane.java
@@ -1,5 +1,5 @@
/* JRootPane.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,10 +43,6 @@ import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
-import java.awt.LayoutManager2;
-import java.io.Serializable;
-import javax.accessibility.Accessible;
-import javax.accessibility.AccessibleComponent;
/**
* This class is where JComponents are added to.
diff --git a/libjava/javax/swing/JScrollBar.java b/libjava/javax/swing/JScrollBar.java
index ee7e3eba985..5636cf3fadf 100644
--- a/libjava/javax/swing/JScrollBar.java
+++ b/libjava/javax/swing/JScrollBar.java
@@ -41,16 +41,14 @@ import java.awt.Adjustable;
import java.awt.Dimension;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
+
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleStateSet;
import javax.accessibility.AccessibleValue;
-import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
-import javax.swing.event.EventListenerList;
-import javax.swing.plaf.ProgressBarUI;
import javax.swing.plaf.ScrollBarUI;
diff --git a/libjava/javax/swing/JScrollPane.java b/libjava/javax/swing/JScrollPane.java
index f31da048abf..b5c0da0542f 100644
--- a/libjava/javax/swing/JScrollPane.java
+++ b/libjava/javax/swing/JScrollPane.java
@@ -40,17 +40,16 @@ package javax.swing;
import java.awt.Component;
import java.awt.ComponentOrientation;
-import java.awt.LayoutManager;
import java.awt.Insets;
+import java.awt.LayoutManager;
import java.awt.Point;
import java.awt.Rectangle;
-import javax.swing.border.Border;
import javax.accessibility.Accessible;
+import javax.swing.border.Border;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.plaf.ScrollPaneUI;
-import javax.swing.plaf.UIResource;
/**
* <table>
diff --git a/libjava/javax/swing/JSeparator.java b/libjava/javax/swing/JSeparator.java
index 224280b35a6..be0d205c7a0 100644
--- a/libjava/javax/swing/JSeparator.java
+++ b/libjava/javax/swing/JSeparator.java
@@ -37,8 +37,6 @@ exception statement from your version. */
package javax.swing;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
diff --git a/libjava/javax/swing/JSlider.java b/libjava/javax/swing/JSlider.java
index 2b861b6b64b..7350ea4ee98 100644
--- a/libjava/javax/swing/JSlider.java
+++ b/libjava/javax/swing/JSlider.java
@@ -37,16 +37,14 @@ exception statement from your version. */
package javax.swing;
-import java.awt.ComponentOrientation;
-import java.awt.MenuContainer;
import java.awt.Dimension;
+import java.awt.MenuContainer;
import java.awt.image.ImageObserver;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Hashtable;
+
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
@@ -54,7 +52,6 @@ import javax.accessibility.AccessibleStateSet;
import javax.accessibility.AccessibleValue;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
-import javax.swing.event.EventListenerList;
import javax.swing.plaf.SliderUI;
@@ -414,7 +411,7 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
* This method returns a name to identify which look and feel class will be
* the UI delegate for the slider.
*
- * @return The L&F classID. "SliderUI"
+ * @return The Look and Feel classID. "SliderUI"
*/
public String getUIClassID()
{
diff --git a/libjava/javax/swing/JTabbedPane.java b/libjava/javax/swing/JTabbedPane.java
index 3c75461f010..e0ca953e226 100644
--- a/libjava/javax/swing/JTabbedPane.java
+++ b/libjava/javax/swing/JTabbedPane.java
@@ -44,15 +44,13 @@ import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.io.Serializable;
import java.util.Vector;
+
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleSelection;
-import javax.accessibility.AccessibleStateSet;
-import javax.accessibility.AccessibleValue;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
-import javax.swing.event.EventListenerList;
import javax.swing.plaf.TabbedPaneUI;
import javax.swing.plaf.UIResource;
diff --git a/libjava/javax/swing/JTable.java b/libjava/javax/swing/JTable.java
index 55c6043ff8f..496ae99572c 100644
--- a/libjava/javax/swing/JTable.java
+++ b/libjava/javax/swing/JTable.java
@@ -1,5 +1,5 @@
/* JTable.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,25 +38,21 @@ exception statement from your version. */
package javax.swing;
-import java.awt.Color;
-import java.awt.Component;
import java.awt.Dimension;
import java.awt.Rectangle;
-import java.util.Hashtable;
import java.util.Vector;
+
import javax.accessibility.Accessible;
-import javax.swing.event.ChangeEvent;
import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableColumnModelEvent;
import javax.swing.event.TableColumnModelListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
-import javax.swing.table.JTableHeader;
-import javax.swing.table.TableModel;
-import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
public class JTable extends JComponent
implements TableModelListener, Scrollable, TableColumnModelListener,
diff --git a/libjava/javax/swing/JTextField.java b/libjava/javax/swing/JTextField.java
index edc3ea7735b..95fceaf50c6 100644
--- a/libjava/javax/swing/JTextField.java
+++ b/libjava/javax/swing/JTextField.java
@@ -1,5 +1,5 @@
/* JTextField.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,9 +40,8 @@ package javax.swing;
import java.awt.event.ActionListener;
import java.util.Vector;
+
import javax.accessibility.AccessibleStateSet;
-import javax.swing.text.Document;
-import javax.swing.text.JTextComponent;
public class JTextField extends JEditorPane
{
diff --git a/libjava/javax/swing/JToolBar.java b/libjava/javax/swing/JToolBar.java
index 8dce3c14b02..ebc469212c8 100644
--- a/libjava/javax/swing/JToolBar.java
+++ b/libjava/javax/swing/JToolBar.java
@@ -37,14 +37,14 @@ exception statement from your version. */
package javax.swing;
-import java.awt.Dimension;
import java.awt.Component;
-import java.awt.Container;
+import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.beans.PropertyChangeListener;
import java.io.IOException;
import java.io.ObjectOutputStream;
+
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
diff --git a/libjava/javax/swing/JToolTip.java b/libjava/javax/swing/JToolTip.java
index 54e09cf0c60..083bbad02da 100644
--- a/libjava/javax/swing/JToolTip.java
+++ b/libjava/javax/swing/JToolTip.java
@@ -1,5 +1,5 @@
/* JToolTip.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -39,7 +39,6 @@ exception statement from your version. */
package javax.swing;
import javax.accessibility.Accessible;
-import javax.accessibility.AccessibleContext;
public class JToolTip extends JComponent implements Accessible
{
diff --git a/libjava/javax/swing/JTree.java b/libjava/javax/swing/JTree.java
index bdf519b911e..ca86679d707 100644
--- a/libjava/javax/swing/JTree.java
+++ b/libjava/javax/swing/JTree.java
@@ -1,5 +1,5 @@
/* JTree.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,23 +40,10 @@ package javax.swing;
import java.awt.Dimension;
import java.awt.Rectangle;
-import java.io.Serializable;
-import java.util.Hashtable;
-import java.util.Vector;
+
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
-import javax.swing.event.TreeModelEvent;
-import javax.swing.event.TreeModelListener;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
import javax.swing.plaf.TreeUI;
-import javax.swing.tree.DefaultTreeSelectionModel;
-import javax.swing.tree.TreeCellEditor;
-import javax.swing.tree.TreeCellRenderer;
-import javax.swing.tree.TreeModel;
-import javax.swing.tree.TreeNode;
-import javax.swing.tree.TreePath;
-import javax.swing.tree.TreeSelectionModel;
public class JTree extends JComponent implements Scrollable, Accessible
{
diff --git a/libjava/javax/swing/JViewport.java b/libjava/javax/swing/JViewport.java
index 66a9865a767..756d5edd555 100644
--- a/libjava/javax/swing/JViewport.java
+++ b/libjava/javax/swing/JViewport.java
@@ -1,5 +1,5 @@
/* JViewport.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -39,15 +39,12 @@ exception statement from your version. */
package javax.swing;
import java.awt.Component;
-import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
-import java.awt.Image;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
-import java.awt.image.ImageObserver;
-import javax.accessibility.Accessible;
+
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.plaf.ViewportUI;
diff --git a/libjava/javax/swing/JWindow.java b/libjava/javax/swing/JWindow.java
index 5edf5b25412..11760e92dd6 100644
--- a/libjava/javax/swing/JWindow.java
+++ b/libjava/javax/swing/JWindow.java
@@ -1,5 +1,5 @@
/* JWindow.java --
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -44,11 +44,11 @@ import java.awt.Container;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
-import java.awt.GraphicsConfiguration;
import java.awt.LayoutManager;
import java.awt.Window;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
+
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
diff --git a/libjava/javax/swing/KeyStroke.java b/libjava/javax/swing/KeyStroke.java
index c3053aa289e..743d3069d37 100644
--- a/libjava/javax/swing/KeyStroke.java
+++ b/libjava/javax/swing/KeyStroke.java
@@ -1,5 +1,5 @@
/* KeyStroke.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,7 +37,6 @@ exception statement from your version. */
package javax.swing;
-import java.awt.AWTKeyStroke;
import java.awt.event.KeyEvent;
import java.io.Serializable;
diff --git a/libjava/javax/swing/ListModel.java b/libjava/javax/swing/ListModel.java
index e11fc633c0e..1aa7bd20619 100644
--- a/libjava/javax/swing/ListModel.java
+++ b/libjava/javax/swing/ListModel.java
@@ -42,7 +42,7 @@ import javax.swing.event.ListDataListener;
* This is an interface to general list-like data, typically used as the
* model object of a {@link JList} component.
*
- * @author Graydon Hoare (graydon&064;redhat.com)
+ * @author Graydon Hoare (graydon@redhat.com)
*/
public interface ListModel
{
diff --git a/libjava/javax/swing/LookAndFeel.java b/libjava/javax/swing/LookAndFeel.java
index b841a178075..173d2fa825a 100644
--- a/libjava/javax/swing/LookAndFeel.java
+++ b/libjava/javax/swing/LookAndFeel.java
@@ -1,5 +1,5 @@
/* LookAndFeel.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,7 +38,6 @@ exception statement from your version. */
package javax.swing;
-import java.awt.Component;
import javax.swing.text.JTextComponent;
public abstract class LookAndFeel
diff --git a/libjava/javax/swing/Popup.java b/libjava/javax/swing/Popup.java
index b1cb4460a49..1b8d08e3304 100644
--- a/libjava/javax/swing/Popup.java
+++ b/libjava/javax/swing/Popup.java
@@ -163,7 +163,7 @@ public class Popup
/**
- * Displays the popup&#x2019;s <code>JWindow</code> on the screen.
+ * Displays the popup's <code>JWindow</code> on the screen.
* Nothing happens if it is already visible.
*/
public void show()
@@ -173,7 +173,7 @@ public class Popup
/**
- * Removes the popup&#x2019;s <code>JWindow</code> from the
+ * Removes the popup's <code>JWindow</code> from the
* screen. Nothing happens if it is currently not visible.
*/
public void hide()
diff --git a/libjava/javax/swing/SwingUtilities.java b/libjava/javax/swing/SwingUtilities.java
index 36fe017c1ca..e75a95e0f24 100644
--- a/libjava/javax/swing/SwingUtilities.java
+++ b/libjava/javax/swing/SwingUtilities.java
@@ -1,5 +1,5 @@
/* SwingUtilities.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,7 +41,6 @@ import java.applet.Applet;
import java.awt.Component;
import java.awt.ComponentOrientation;
import java.awt.Container;
-import java.awt.EventQueue;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
@@ -51,11 +50,8 @@ import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.Toolkit;
import java.awt.Window;
-import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.lang.reflect.InvocationTargetException;
-import javax.accessibility.Accessible;
-import javax.accessibility.AccessibleStateSet;
/**
@@ -63,7 +59,7 @@ import javax.accessibility.AccessibleStateSet;
* useful when drawing swing components, dispatching events, or calculating
* regions which need painting.
*
- * @author Graydon Hoare (graydon&064;redhat.com)
+ * @author Graydon Hoare (graydon@redhat.com)
*/
public class SwingUtilities implements SwingConstants
{
diff --git a/libjava/javax/swing/Timer.java b/libjava/javax/swing/Timer.java
index adb695a1035..fd88351f417 100644
--- a/libjava/javax/swing/Timer.java
+++ b/libjava/javax/swing/Timer.java
@@ -1,5 +1,5 @@
/* Timer.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,7 +42,7 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;
import java.util.EventListener;
-import java.util.Vector;
+
import javax.swing.event.EventListenerList;
public class Timer implements Serializable
diff --git a/libjava/javax/swing/ToolTipManager.java b/libjava/javax/swing/ToolTipManager.java
index ba86f13cd4b..762d5d338b6 100644
--- a/libjava/javax/swing/ToolTipManager.java
+++ b/libjava/javax/swing/ToolTipManager.java
@@ -37,7 +37,6 @@ exception statement from your version. */
package javax.swing;
-import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
diff --git a/libjava/javax/swing/UIDefaults.java b/libjava/javax/swing/UIDefaults.java
index da23a54d344..8141399f549 100644
--- a/libjava/javax/swing/UIDefaults.java
+++ b/libjava/javax/swing/UIDefaults.java
@@ -1,5 +1,5 @@
/* UIDefaults.java -- database for all settings and interface bindings.
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -44,17 +44,16 @@ import java.awt.Insets;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.lang.reflect.Method;
-import java.lang.reflect.Constructor;
+import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
import java.util.LinkedList;
+import java.util.ListIterator;
import java.util.Locale;
-import java.util.Set;
-import java.util.HashSet;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
+import java.util.Set;
+
import javax.swing.border.Border;
import javax.swing.plaf.ComponentUI;
diff --git a/libjava/javax/swing/border/TitledBorder.java b/libjava/javax/swing/border/TitledBorder.java
index 3b6a791630c..8b9fe2a73be 100644
--- a/libjava/javax/swing/border/TitledBorder.java
+++ b/libjava/javax/swing/border/TitledBorder.java
@@ -1,5 +1,5 @@
/* TitledBorder.java --
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,8 +45,8 @@ import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Insets;
-import java.awt.Rectangle;
import java.awt.Shape;
+
import javax.swing.UIManager;
diff --git a/libjava/javax/swing/filechooser/FileSystemView.java b/libjava/javax/swing/filechooser/FileSystemView.java
index 759149756fc..f224349a50b 100644
--- a/libjava/javax/swing/filechooser/FileSystemView.java
+++ b/libjava/javax/swing/filechooser/FileSystemView.java
@@ -1,5 +1,5 @@
/* FileSystemView.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,7 +40,6 @@ package javax.swing.filechooser;
import java.io.File;
import java.io.IOException;
-import javax.swing.Icon;
/**
* FileSystemView
diff --git a/libjava/javax/swing/plaf/basic/BasicArrowButton.java b/libjava/javax/swing/plaf/basic/BasicArrowButton.java
index e778c5bffa3..cb2c99baf58 100644
--- a/libjava/javax/swing/plaf/basic/BasicArrowButton.java
+++ b/libjava/javax/swing/plaf/basic/BasicArrowButton.java
@@ -223,7 +223,7 @@ public class BasicArrowButton extends JButton implements SwingConstants
setIcon(new arrowIcon(arrow));
else
((arrowIcon) getIcon()).setArrow(arrow);
- this.direction = direction;
+ this.direction = dir;
}
/**
diff --git a/libjava/javax/swing/plaf/basic/BasicButtonListener.java b/libjava/javax/swing/plaf/basic/BasicButtonListener.java
index 98b4c8b3c53..4dafc7e9f0b 100644
--- a/libjava/javax/swing/plaf/basic/BasicButtonListener.java
+++ b/libjava/javax/swing/plaf/basic/BasicButtonListener.java
@@ -45,13 +45,12 @@ import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+
import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
-import javax.swing.UIDefaults;
-import javax.swing.UIManager;
+import javax.swing.JComponent;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
-import javax.swing.JComponent;
public class BasicButtonListener
implements MouseListener, MouseMotionListener, FocusListener,
diff --git a/libjava/javax/swing/plaf/basic/BasicButtonUI.java b/libjava/javax/swing/plaf/basic/BasicButtonUI.java
index 5dbd17ecfa8..663050ee685 100644
--- a/libjava/javax/swing/plaf/basic/BasicButtonUI.java
+++ b/libjava/javax/swing/plaf/basic/BasicButtonUI.java
@@ -44,15 +44,9 @@ import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
-import java.awt.Stroke;
-import java.awt.Insets;
import java.awt.Rectangle;
-import java.awt.event.FocusListener;
-import java.awt.event.FocusAdapter;
-import java.awt.event.FocusEvent;
-import java.awt.event.InputEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
+import java.awt.Stroke;
+
import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
import javax.swing.Icon;
@@ -60,7 +54,6 @@ import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
-import javax.swing.event.MouseInputListener;
import javax.swing.plaf.ButtonUI;
import javax.swing.plaf.ComponentUI;
diff --git a/libjava/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java b/libjava/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java
index 752b1448183..84c8e392357 100644
--- a/libjava/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java
+++ b/libjava/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java
@@ -39,8 +39,6 @@ package javax.swing.plaf.basic;
import java.awt.event.MouseEvent;
-import javax.swing.AbstractButton;
-import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.MenuElement;
diff --git a/libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java b/libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java
index 1f2f7444db1..0645a373c2b 100644
--- a/libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java
+++ b/libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java
@@ -45,11 +45,9 @@ import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Rectangle;
-
import java.awt.font.FontRenderContext;
import java.awt.font.LineMetrics;
import java.awt.font.TextLayout;
-
import java.awt.geom.Rectangle2D;
import javax.swing.AbstractButton;
diff --git a/libjava/javax/swing/plaf/basic/BasicLabelUI.java b/libjava/javax/swing/plaf/basic/BasicLabelUI.java
index 219c6fab02e..669c7063645 100644
--- a/libjava/javax/swing/plaf/basic/BasicLabelUI.java
+++ b/libjava/javax/swing/plaf/basic/BasicLabelUI.java
@@ -46,10 +46,10 @@ import java.awt.Insets;
import java.awt.Rectangle;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JLabel;
-import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
diff --git a/libjava/javax/swing/plaf/basic/BasicMenuItemUI.java b/libjava/javax/swing/plaf/basic/BasicMenuItemUI.java
index fd21728be0a..886ca9dbce6 100644
--- a/libjava/javax/swing/plaf/basic/BasicMenuItemUI.java
+++ b/libjava/javax/swing/plaf/basic/BasicMenuItemUI.java
@@ -37,43 +37,28 @@ exception statement from your version. */
package javax.swing.plaf.basic;
-import java.awt.AWTKeyStroke;
-import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Insets;
import java.awt.Rectangle;
-import java.awt.Stroke;
-import java.awt.event.FocusAdapter;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
-import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
-
import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
import javax.swing.Icon;
import javax.swing.JComponent;
-import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenuItem;
-import javax.swing.JRadioButtonMenuItem;
import javax.swing.KeyStroke;
import javax.swing.MenuElement;
import javax.swing.MenuSelectionManager;
import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
import javax.swing.event.MenuDragMouseEvent;
import javax.swing.event.MenuDragMouseListener;
import javax.swing.event.MenuKeyEvent;
diff --git a/libjava/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java b/libjava/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java
index 93d070e0aa3..9a9f2e89c66 100644
--- a/libjava/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java
+++ b/libjava/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java
@@ -38,15 +38,13 @@ exception statement from your version. */
package javax.swing.plaf.basic;
import java.awt.event.MouseEvent;
-import javax.swing.AbstractButton;
-import javax.swing.Icon;
+
import javax.swing.JComponent;
import javax.swing.JMenuItem;
-import javax.swing.UIDefaults;
-import javax.swing.UIManager;
import javax.swing.MenuElement;
import javax.swing.MenuSelectionManager;
-
+import javax.swing.UIDefaults;
+import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
diff --git a/libjava/javax/swing/plaf/basic/BasicRootPaneUI.java b/libjava/javax/swing/plaf/basic/BasicRootPaneUI.java
index 70829d10f89..e6472160587 100644
--- a/libjava/javax/swing/plaf/basic/BasicRootPaneUI.java
+++ b/libjava/javax/swing/plaf/basic/BasicRootPaneUI.java
@@ -1,5 +1,5 @@
/* BasicPanelUI.java
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,9 +38,9 @@ exception statement from your version. */
package javax.swing.plaf.basic;
-import javax.swing.*;
-import javax.swing.plaf.*;
-import java.awt.*;
+import javax.swing.JComponent;
+import javax.swing.plaf.ComponentUI;
+import javax.swing.plaf.RootPaneUI;
public class BasicRootPaneUI extends RootPaneUI
diff --git a/libjava/javax/swing/plaf/basic/BasicScrollBarUI.java b/libjava/javax/swing/plaf/basic/BasicScrollBarUI.java
index f0f56d30c79..d6b31a2bafa 100644
--- a/libjava/javax/swing/plaf/basic/BasicScrollBarUI.java
+++ b/libjava/javax/swing/plaf/basic/BasicScrollBarUI.java
@@ -41,8 +41,6 @@ import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.LayoutManager;
@@ -56,6 +54,7 @@ import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+
import javax.swing.BoundedRangeModel;
import javax.swing.Icon;
import javax.swing.JButton;
diff --git a/libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java b/libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java
index 4f60fb48dc5..2148a92104e 100644
--- a/libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java
+++ b/libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java
@@ -40,8 +40,8 @@ package javax.swing.plaf.basic;
import java.awt.Dimension;
import java.awt.Graphics;
+
import javax.swing.JComponent;
-import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneLayout;
import javax.swing.plaf.ComponentUI;
diff --git a/libjava/javax/swing/plaf/basic/BasicSliderUI.java b/libjava/javax/swing/plaf/basic/BasicSliderUI.java
index 2ee481e317d..05e3bb334f2 100644
--- a/libjava/javax/swing/plaf/basic/BasicSliderUI.java
+++ b/libjava/javax/swing/plaf/basic/BasicSliderUI.java
@@ -40,7 +40,6 @@ package javax.swing.plaf.basic;
import java.awt.Color;
import java.awt.Component;
import java.awt.ComponentOrientation;
-import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
@@ -54,22 +53,20 @@ import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
-import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Dictionary;
import java.util.Enumeration;
-import javax.swing.JButton;
+
+import javax.swing.BoundedRangeModel;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JSlider;
-import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
-import javax.swing.BoundedRangeModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.MouseInputAdapter;
diff --git a/libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java b/libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java
index 563a8fef6da..4dcec822537 100644
--- a/libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java
+++ b/libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java
@@ -47,10 +47,7 @@ import java.awt.Graphics;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.Point;
-import java.awt.Polygon;
import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
@@ -59,15 +56,13 @@ import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.lang.Exception;
+
import javax.swing.Icon;
-import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JViewport;
import javax.swing.KeyStroke;
-import javax.swing.SingleSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
@@ -78,8 +73,6 @@ import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.PanelUI;
import javax.swing.plaf.TabbedPaneUI;
import javax.swing.plaf.UIResource;
-import javax.swing.plaf.ViewportUI;
-import javax.swing.plaf.basic.BasicGraphicsUtils;
import javax.swing.text.View;
diff --git a/libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java b/libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java
index c6b3bdb0670..a319b0b4e02 100644
--- a/libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java
+++ b/libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java
@@ -38,10 +38,6 @@ exception statement from your version. */
package javax.swing.plaf.basic;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Rectangle;
-import javax.swing.AbstractButton;
import javax.swing.JComponent;
import javax.swing.plaf.ComponentUI;
diff --git a/libjava/javax/swing/table/DefaultTableCellRenderer.java b/libjava/javax/swing/table/DefaultTableCellRenderer.java
index 6bd0ff57f59..563d9e60af2 100644
--- a/libjava/javax/swing/table/DefaultTableCellRenderer.java
+++ b/libjava/javax/swing/table/DefaultTableCellRenderer.java
@@ -54,7 +54,7 @@ public class DefaultTableCellRenderer extends JLabel
{
static final long serialVersionUID = 7878911414715528324L;
- protected static Border noFocusBorder;
+ protected static Border noFocusBorder = new EmptyBorder(0, 0, 0, 0);
public static class UIResource extends DefaultTableCellRenderer
implements javax.swing.plaf.UIResource
@@ -70,7 +70,6 @@ public class DefaultTableCellRenderer extends JLabel
public DefaultTableCellRenderer()
{
super();
- this.noFocusBorder = new EmptyBorder(0, 0, 0, 0);
}
/**
diff --git a/libjava/javax/swing/table/JTableHeader.java b/libjava/javax/swing/table/JTableHeader.java
index d747664cd12..6b486019532 100644
--- a/libjava/javax/swing/table/JTableHeader.java
+++ b/libjava/javax/swing/table/JTableHeader.java
@@ -1,5 +1,5 @@
/* JTableHeader.java
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,27 +38,8 @@ exception statement from your version. */
package javax.swing.table;
-import java.awt.Color;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.event.FocusListener;
-import java.util.Locale;
-import javax.accessibility.Accessible;
-import javax.accessibility.AccessibleComponent;
-import javax.accessibility.AccessibleContext;
-import javax.accessibility.AccessibleRole;
-import javax.accessibility.AccessibleStateSet;
import javax.swing.JComponent;
import javax.swing.JTable;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.TableColumnModelEvent;
-import javax.swing.event.TableColumnModelListener;
-import javax.swing.plaf.TableHeaderUI;
public class JTableHeader extends JComponent
{
diff --git a/libjava/javax/swing/table/TableColumn.java b/libjava/javax/swing/table/TableColumn.java
index d228d8aae92..73313c6c7da 100644
--- a/libjava/javax/swing/table/TableColumn.java
+++ b/libjava/javax/swing/table/TableColumn.java
@@ -218,9 +218,10 @@ public class TableColumn implements Serializable
* @param oldValue TODO
* @param newValue TODO
*/
- private void firePropertyChange(String property, boolean oldValue, boolean newValue) {
+ private void firePropertyChange(String property, boolean oldValue, boolean newValue)
+ {
firePropertyChange(property, new Boolean(oldValue), new Boolean(newValue));
- } // firePropertyChange()
+ }
/**
* setModelIndex
diff --git a/libjava/javax/swing/text/AbstractDocument.java b/libjava/javax/swing/text/AbstractDocument.java
index 027b99d5cb5..6408b22cdfb 100644
--- a/libjava/javax/swing/text/AbstractDocument.java
+++ b/libjava/javax/swing/text/AbstractDocument.java
@@ -41,9 +41,9 @@ import java.util.Dictionary;
import java.util.Enumeration;
import java.util.EventListener;
import java.util.Vector;
+
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
-import javax.swing.event.EventListenerList;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.tree.TreeNode;
diff --git a/libjava/javax/swing/text/DefaultCaret.java b/libjava/javax/swing/text/DefaultCaret.java
index 7fdc3fcc541..1c4607fce9f 100644
--- a/libjava/javax/swing/text/DefaultCaret.java
+++ b/libjava/javax/swing/text/DefaultCaret.java
@@ -41,16 +41,12 @@ import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
-import java.awt.Shape;
-import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
-import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
-import java.util.EventListener;
import java.util.Vector;
+
import javax.swing.event.ChangeListener;
-import javax.swing.event.EventListenerList;
public class DefaultCaret extends Rectangle implements Caret, FocusListener, MouseListener, MouseMotionListener
diff --git a/libjava/javax/swing/text/StyledEditorKit.java b/libjava/javax/swing/text/StyledEditorKit.java
index 8ec90662191..f237247a01f 100644
--- a/libjava/javax/swing/text/StyledEditorKit.java
+++ b/libjava/javax/swing/text/StyledEditorKit.java
@@ -41,11 +41,8 @@ import java.awt.Color;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
import java.io.Serializable;
-import java.io.Writer;
+
import javax.swing.Action;
import javax.swing.JEditorPane;
import javax.swing.event.CaretEvent;
diff --git a/libjava/javax/swing/tree/DefaultTreeCellEditor.java b/libjava/javax/swing/tree/DefaultTreeCellEditor.java
index 6d922a42437..bebdc6a9e64 100644
--- a/libjava/javax/swing/tree/DefaultTreeCellEditor.java
+++ b/libjava/javax/swing/tree/DefaultTreeCellEditor.java
@@ -1,5 +1,5 @@
/* DefaultTreeCellEditor.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -50,12 +50,12 @@ import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.EventObject;
+
import javax.swing.Icon;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.border.Border;
import javax.swing.event.CellEditorListener;
-import javax.swing.event.EventListenerList;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
index 71600c082ca..153b17fe333 100644
--- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
+++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
@@ -37,7 +37,7 @@ exception statement from your version. */
#include "gtkpeer.h"
-#include "gnu_java_awt_peer_gtk_GtkMenuItemPeer.h"
+#include "gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h"
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer_create
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
index 88821ae9a48..b4654bb2e29 100644
--- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
@@ -42,40 +42,6 @@ exception statement from your version. */
static void item_toggled (GtkToggleButton *item, jobject peer);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_dispose
- (JNIEnv *env, jobject obj)
-{
- /* The actual underlying widget is owned by a different class. So
- we just clean up the hash table here. */
- NSA_DEL_PTR (env, obj);
-}
-
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_remove
- (JNIEnv *env, jobject obj, jobject checkbox)
-{
- GtkRadioButton *button;
- void *ptr;
- GSList *list;
-
- ptr = NSA_GET_PTR (env, checkbox);
- gdk_threads_enter ();
- button = GTK_RADIO_BUTTON (ptr);
-
- /* Update the group to point to some other widget in the group. We
- have to do this because Gtk doesn't have a separate object to
- represent a radio button's group. */
- for (list = gtk_radio_button_group (button); list != NULL;
- list = list->next)
- {
- if (list->data != button)
- break;
- }
-
- gdk_threads_leave ();
-
- NSA_SET_PTR (env, obj, list ? list->data : NULL);
-}
-
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeCreate
(JNIEnv *env, jobject obj, jobject group, jboolean state)
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
index 1d56c5cfe2c..fecaff48243 100644
--- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
@@ -43,24 +43,6 @@ exception statement from your version. */
static GtkWidget *find_fg_color_widget (GtkWidget *widget);
static GtkWidget *find_bg_color_widget (GtkWidget *widget);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose
- (JNIEnv *env, jobject obj)
-{
- void *ptr;
-
- /* Remove entries from state tables */
- NSA_DEL_GLOBAL_REF (env, obj);
- ptr = NSA_DEL_PTR (env, obj);
-
- gdk_threads_enter ();
-
- /* For now the native state for any object must be a widget.
- However, a subclass could override dispose() if required. */
- gtk_widget_destroy (GTK_WIDGET (ptr));
-
- gdk_threads_leave ();
-}
-
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor
(JNIEnv *env, jobject obj, jint type)
@@ -128,18 +110,6 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor
gdk_threads_leave ();
}
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_requestFocus
- (JNIEnv *env, jobject obj)
-{
- void *ptr;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
- /* XXX gtk_widget_grab_focus (GTK_WIDGET (ptr)); */
- gdk_threads_leave ();
-}
-
/*
* Find the origin of a widget's window.
*/
@@ -234,19 +204,6 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetPreferredDimensions
(*env)->ReleaseIntArrayElements (env, jdims, dims, 0);
}
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetUsize (JNIEnv *env,
- jobject obj, jint w, jint h)
-{
- void *ptr;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
- gtk_widget_set_usize (GTK_WIDGET (ptr), w, h);
- gdk_threads_leave ();
-}
-
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds
(JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
{
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
index 889cc3b4c71..e6a8851fcf2 100644
--- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
@@ -89,7 +89,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_setupAccelGroup
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create
(JNIEnv *env, jobject obj, jstring label)
{
- GtkWidget *menu_title, *menu;
+ GtkWidget *menu_title, *menu, *toplevel;
const char *str;
/* Create global reference and save it for future use */
@@ -109,7 +109,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_title), menu);
/* Allow this menu to grab the pointer. */
- GtkWidget *toplevel = gtk_widget_get_toplevel (menu);
+ toplevel = gtk_widget_get_toplevel (menu);
if (GTK_IS_WINDOW (toplevel))
{
gtk_window_group_add_window (global_gtk_window_group,
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
index 97213c45db2..ee12a7f77b1 100644
--- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
+++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
@@ -39,6 +39,8 @@ exception statement from your version. */
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h"
+void menu_pos (GtkMenu *, gint *, gint *, gboolean *, gpointer);
+
struct pos
{
gint x;
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
index 80d9d5bfb1b..619b48d593a 100644
--- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
@@ -284,28 +284,6 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals
}
/*
- * Set a frame's title
- */
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setTitle
- (JNIEnv *env, jobject obj, jstring title)
-{
- void *ptr;
- const char *str;
-
- ptr = NSA_GET_PTR (env, obj);
-
- str = (*env)->GetStringUTFChars (env, title, NULL);
-
- gdk_threads_enter ();
- gtk_window_set_title (GTK_WINDOW (ptr), str);
- gdk_threads_leave ();
-
- (*env)->ReleaseStringUTFChars (env, title, str);
-}
-
-/*
* Lower the z-level of a window.
*/
diff --git a/libjava/jni/gtk-peer/gthread-jni.c b/libjava/jni/gtk-peer/gthread-jni.c
index b21a80c8843..3dd5596b4bc 100644
--- a/libjava/jni/gtk-peer/gthread-jni.c
+++ b/libjava/jni/gtk-peer/gthread-jni.c
@@ -505,7 +505,3 @@ GThreadFunctions g_thread_jni_functions =
NULL
};
-/* ??? */
-void gdk_threads_wake () {
-
-}
diff --git a/libjava/libltdl/ChangeLog b/libjava/libltdl/ChangeLog
index 3193f5c1adb..e4134ab8901 100644
--- a/libjava/libltdl/ChangeLog
+++ b/libjava/libltdl/ChangeLog
@@ -1,3 +1,9 @@
+2004-05-03 Andreas Tobler <a.tobler@schweiz.ch>
+
+ * acinclude.m4: Replace -W with more speaking -Wextra.
+ * aclocal.m4: Regenerate.
+ * configure: Regenerate.
+
2004-03-10 Kelley Cook <kcook@gcc.gnu.org>
* configure.ac: Bump AC_PREREQ to 2.59.
diff --git a/libjava/libltdl/acinclude.m4 b/libjava/libltdl/acinclude.m4
index ccb24e63a2f..47312e1bf21 100644
--- a/libjava/libltdl/acinclude.m4
+++ b/libjava/libltdl/acinclude.m4
@@ -4643,7 +4643,7 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
mvs*)
case $cc_basename in
cxx)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Wextra c,exportall'
;;
*)
;;
diff --git a/libjava/libltdl/aclocal.m4 b/libjava/libltdl/aclocal.m4
index 31d8fbb6d42..ffc19a78403 100644
--- a/libjava/libltdl/aclocal.m4
+++ b/libjava/libltdl/aclocal.m4
@@ -4622,7 +4622,7 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
mvs*)
case $cc_basename in
cxx)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Wextra c,exportall'
;;
*)
;;
diff --git a/libjava/libltdl/configure b/libjava/libltdl/configure
index 84b834dc09f..cbe58d2532a 100755
--- a/libjava/libltdl/configure
+++ b/libjava/libltdl/configure
@@ -11255,7 +11255,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
mvs*)
case $cc_basename in
cxx)
- lt_prog_compiler_pic_CXX='-W c,exportall'
+ lt_prog_compiler_pic_CXX='-Wextra c,exportall'
;;
*)
;;
diff --git a/libjava/testsuite/ChangeLog b/libjava/testsuite/ChangeLog
deleted file mode 100644
index d1394c54827..00000000000
--- a/libjava/testsuite/ChangeLog
+++ /dev/null
@@ -1,2142 +0,0 @@
-2004-01-09 Andrew Haley <aph@redhat.com>
-
- * lib/libjava.exp (bytecompile_file): Log compile command.
-
-2004-01-07 Andreas Tobler <a.tobler@schweiz.ch>
-
- PR libgcj/13011:
- * libjava.jar/simple.jar: Add a working MANIFEST.MF.
-
-2003-12-03 Ralph Loader <rcl@ihug.co.nz>
-
- PR java/12374:
- * libjava.compile/PR12374.java: New file.
-
-2003-12-01 Jeff Sturm <jsturm@one-point.com>
-
- PR optimization/13024
- * libjava.compile/PR13024.java: New file.
-
- PR java/13237
- * libjava.compile/PR13237.java: New file.
-
-2003-11-18 Andreas Tobler <a.tobler@schweiz.ch>
-
- * libjava.jar/jar.exp: Cleanup files and reset CLASSPATH.
-
-2003-11-17 Jeff Sturm <jsturm@one-point.com>
-
- * libjava.compile/PR12857.java: New test case.
-
-2003-11-14 Tom Tromey <tromey@redhat.com>
-
- * libjava.jar/simple.jar: Replaced.
-
-2003-11-13 Tom Fitzsimmons <fitzsim@redhat.com>
-
- * libjava.jni/jniutf.c: New file.
- * libjava.jni/jniutf.java: New file.
- * libjava.jni/jniutf.out: New file.
-
-2003-11-11 Tom Tromey <tromey@redhat.com>
-
- For PR java/12915:
- * libjava.lang/PR12915.java: New file.
- * libjava.lang/PR12915.out: New file.
-
- * libjava.jacks/jacks.exp (gcj_jacks_write): Enable "assert"
- constraint.
- * libjava.jacks/jacks.xfail: Added new xfails.
-
-2003-11-10 Tom Tromey <tromey@redhat.com>
-
- For PR java/12996:
- * libjava.jar/simple.jar: New file.
- * libjava.jar/simple.xfail: New file.
- * libjava.jar/simple.out: New file.
- * libjava.jar/simple.java: New file.
- * libjava.jar/jar.exp: New file.
-
-2003-11-08 Tom Tromey <tromey@redhat.com>
-
- * libjava.jacks/jacks.xfail: Updated.
-
-2003-11-03 Jeff Sturm <jsturm@one-point.com>
-
- PR java/12866:
- * libjava.compile/InnerExcept.java: New File.
-
-2003-10-22 Tom Tromey <tromey@redhat.com>
-
- PR libgcj/12416:
- * libjava.lang/PR12416.out: New file.
- * libjava.lang/PR12416.java: New file.
-
- PR libgcj/12656:
- * libjava.lang/PR12656.java: New file.
- * libjava.lang/PR12656.out: New file.
-
-2003-10-21 Tom Tromey <tromey@redhat.com>
-
- * lib/libjava.exp (find_javac): Use -Wno-unreachable-bytecode.
-
-2003-10-08 Tom Tromey <tromey@redhat.com>
-
- * libjava.mauve/xfails: Removed some tests.
-
-2003-09-27 Tom Tromey <tromey@redhat.com>
-
- * libjava.jacks/jacks.xfail: Updated for new passes.
-
-2003-09-21 Ralph Loader <suckfish@ihug.co.nz>
-
- PR java/12350
- * libjava.lang/PR12350.java: New file.
- * libjava.lang/PR12350.out: New file.
-
-2003-09-17 Ranjit Mathew <rmathew@hotmail.com>
-
- PR java/9577
- * libjava.cni/PR9577.java: New file.
- * libjava.cni/natPR9577.cc: New file.
- * libjava.cni/PR9577.out: New file.
-
-2003-09-04 Jeff Sturm <jsturm@one-point.com>
-
- * libjava.compile/compile.exp: Test with -O3 rather than -O.
- * libjava.lang/lang.exp: Likewise.
-
-2003-09-04 Jeff Sturm <jsturm@one-point.com>
-
- * lib/libjava.exp (libjava_arguments): Remove unneeded variables.
- (test_libjava_from_source): Likewise.
- (test_libjava_from_javac): Likewise.
-
-2003-08-23 Andreas Tobler <a.tobler@schweiz.ch>
-
- PR libgcj/8823
- * libjava.lang/pr8823.xfail: Removed.
-
-2003-08-19 Jeff Sturm <jsturm@one-point.com>
-
- * lib/libjava.exp (libjava_arguments): Add $libjava to the list of
- libraries.
-
-2003-08-18 Tom Tromey <tromey@redhat.com>
-
- PR libgcj/11951:
- * libjava.jni/pr11951.c: New file.
- * libjava.jni/pr11951.out: New file.
- * libjava.jni/pr11951.java: New file.
-
-2003-08-12 Tom Tromey <tromey@redhat.com>
-
- * libjava.jacks/jacks.xfail: Updated to account for new passes.
- * libjava.compile/abstr.xfail: Now can compile from bytecode.
- * libjava.compile/PR5641.xfail: Now can compile from bytecode.
-
- * libjava.mauve/mauve.exp (test_mauve_sim): Don't find
- DejaGNUTestHarness in gnu/testlet.
- (test_mauve): Use correct object extension.
-
-2003-08-12 Tom Tromey <tromey@redhat.com>
-
- * lib/libjava.exp (libjava_find_lib): Search for .so file first.
- (libjava_arguments): Don't add libraries to link line explictly.
-
-2003-08-05 Tom Tromey <tromey@redhat.com>
-
- For PR java/11600:
- * libjava.compile/PR11600.xfail: New file.
- * libjava.compile/PR11600.java: New file.
-
-2003-08-04 Tom Tromey <tromey@redhat.com>
-
- * libjava.jacks/jacks.exp (gcj_jacks_run): Just ignore errors
- from jacks.
-
-2003-07-24 Tom Tromey <tromey@redhat.com>
-
- For PR libgcj/7482:
- * libjava.lang/PR7482.java: New file.
- * libjava.lang/PR7482.out: New file.
-
-2003-07-20 Tom Tromey <tromey@redhat.com>
-
- * libjava.mauve/mauve.exp (mauve_find_harness_files): New proc.
- (test_mauve): Use it.
- (test_mauve_sim): Likewise.
-
-2003-07-19 Tom Tromey <tromey@redhat.com>
-
- * libjava.verify/verify.exp (gcj_verify_list_tests): Only change
- directory if new directory exists.
-
-2003-07-13 Tom Tromey <tromey@redhat.com>
-
- * libjava.verify/verify.exp: Fixed variable init.
-
-2003-07-10 Tom Tromey <tromey@redhat.com>
-
- * libjava.verify/verify.exp: New file.
- * libjava.verify/README.verify: New file.
-
-2003-07-09 Jeff Sturm <jsturm@one-point.com>
-
- * libjava.lang/SyncTest.java (run): Cache .class value.
-
-2003-06-08 Roger Sayle <roger@eyesopen.com>
-
- * libjava.lang/MathBuiltin.java: New test case.
- * libjava.lang/MathBuiltin.out: New file.
-
-2003-06-05 Mark Wielaard <mark@klomp.org>
-
- * libjava.mauve/mauve.exp (test_mauve): Add -wno-deprecated to GCJ.
-
- PR libgcj/6181:
- * libjava.mauve/xfails: Remove getBeanInfo() failures.
-
- PR libgcj/6293:
- * libjava.mauve/xfails: Remove PipedStream.close() failure.
-
-2003-05-31 Roger Sayle <roger@eyesopen.com>
-
- * libjava.lang/Overflow.java: New test.
- * libjava.lang/Overflow.out: New file.
-
-2003-05-06 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/verify.java: New file.
- * libjava.lang/verify.out: New file.
-
-2003-05-01 Tom Tromey <tromey@redhat.com>
-
- PR java/10459:
- * libjava.compile/pr10459_2.java: New file.
- * libjava.compile/pr10459.java: New file.
-
-2003-04-30 Tom Tromey <tromey@redhat.com>
-
- PR libgcj/10582:
- * libjava.lang/assign.java: New file.
- * libjava.lang/assign.out: New file.
-
-2003-04-16 Mark Mitchell <mark@codesourcery.com>
-
- PR middle-end/8866
- * libjava.lang/PR8866.java: New test.
-
-2003-04-16 Andrew Haley <aph@redhat.com>
-
- * libjava.lang/Throw_2.java (main): Make a successful test produce
- some output.
-
-2003-03-22 Andreas Tobler <a.tobler@schweiz.ch>
-
- * libjava.jni/jni.exp: Add compilation/link fix dor darwin dylibs.
-
-2003-03-22 Tom Tromey <tromey@redhat.com>
-
- * lib/libjava.exp (gcj_invoke): Moved...
- * libjava.jni/jni.exp: ...from here.
-
- * libjava.cni/shortfield.out: New file.
- * libjava.cni/shortfield.java: New file.
- * libjava.cni/natshortfield.cc: New file.
- * libjava.cni/natlongfield.cc: New file.
- * libjava.cni/longfield.out: New file.
- * libjava.cni/longfield.java: New file.
-
- * libjava.cni/cni.exp: New file.
-
-2003-03-11 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/initfield.java: New file.
- * libjava.lang/initfield.out: New file.
-
-2003-03-08 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/initfield.java: New file.
- * libjava.lang/initfield.out: New file.
-
-2003-03-10 Tom Tromey <tromey@redhat.com>
-
- * libjava.jacks/jacks.xfail: Updated to reflect reality.
-
-2003-03-02 Mark Wielaard <mark@klomp.org>
-
- * libjava.mauve/xfails: Remove all AcuniaPropertiesTest failures
-
-2003-02-23 Tom Tromey <tromey@redhat.com>
-
- * libjava.jacks/jacks.xfail: Most 4.7.10 tests pass now.
-
-2003-02-16 Jeff Sturm <jsturm@one-point.com>
-
- * libjava.lang/CompareNaN.java: New test.
- * libjava.lang/CompareNaN.out: New test.
-
-2003-02-16 Mark Wielaard <mark@klomp.org>
-
- * libjava.mauve/xfails: Add Class.reflect2 and String.getBytes FAILs.
-
-2003-02-15 Mark Wielaard <mark@klomp.org>
-
- * lib/libjava.exp (test_libjava_from_javac): Use regsub not string map.
- * libjava.mauve/mauve.exp (mauve_compute_uses): Likewise.
- (test_mauve): Likewise.
-
-2003-02-14 Mark Wielaard <mark@klomp.org>
-
- * lib/libjava.exp (test_libjava_from_javac): Don't create .o files
- containing $ characters and always quote class files with "'"s.
-
-2003-02-14 Mark Wielaard <mark@klomp.org>
-
- * libjava.mauve/mauve.exp (mauve_compute_uses): Add inner class
- object files by changing all occurances of $ to ^.
- (test_mauve): Replace ^ with $ for class file names and quote
- them with "'"s.
-
-2003-02-13 Tom Tromey <tromey@redhat.com>
-
- * libjava.mauve/xfails: Added entries for an unimplemented Class
- method.
-
-2003-02-07 Mark Wielaard <mark@klomp.org>
-
- * libjava.mauve/xfails: Add new entries for
- gnu.testlet.java.text.CollationElementIterator.jdk11
-
-2003-02-03 Ulrich Weigand <uweigand@de.ibm.com>
-
- * libjava.jacks/jacks.exp (gcj_jacks_write): Set LD_LIBRARY_PATH
- to find libgcc_s. Set JAVA_CLASSPATH to find libgcj.jar.
-
-2003-01-31 Mark Wielaard <mark@klomp.org>
-
- * lib/libjava.exp (libjava_prune_warnings): Remove all unreachable
- bytecode warnings.
-
-2003-01-28 Tom Tromey <tromey@redhat.com>
-
- * libjava.loader/TestEarlyGC.java: Added comment explaining
- bytecode.
-
- * libjava.jacks/jacks.xfail: More lexer tests now pass.
-
-2003-01-27 Tom Tromey <tromey@redhat.com>
-
- * libjava.compile/consthrow.java: New file.
- * libjava.compile/consthrow.xfail: New file.
-
-2003-01-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libjava.lang/pr8823.xfail: New file, add "xfail-byte".
-
-2003-01-24 Ranjit Mathew <rmathew@hotmail.com>
-
- * libjava.jni/calls.c (Java_calls_docall): Define with
- JNIEXPORT and JNICALL method attributes.
- * libjava.jni/field.c (Java_field_fetch): Likewise.
- * libjava.jni/final_method.c (Java_final_1method_meth): Likewise.
- * libjava.jni/findclass.c (Java_findclass_doit): Likewise.
- * libjava.jni/invoke.c (Java_invoke_val): Likewise.
- * libjava.jni/martin.c (Java_martin_myNative): Likewise.
- * libjava.jni/noclass.c (Java_noclass_find_1it): Likewise.
- * libjava.jni/overload.c (Java_overload_over__I): Likewise.
- (Java_overload_over__II): Likewise.
- * libjava.jni/register.c (JNI_OnLoad): Likewise.
- * libjava.jni/simple_int.c (Java_simple_1int_nat): Likewise.
- * libjava.jni/throwit.c (Java_throwit_throwit): Likewise.
- * libjava.jni/virtual.c (Java_virtual_equals): Likewise.
-
-2003-01-21 Tom Tromey <tromey@redhat.com>
-
- * libjava.jacks/jacks.xfail: All 8.4.3 tests and 9.4-modifier-10
- now pass.
-
-2003-01-12 Tom Tromey <tromey@redhat.com>
-
- Fix for PR libgcj/9139:
- * lib/libjava.exp (find_javac): Put value of libgcj_jar into
- return value when gcj is used.
- * libjava.mauve/mauve.exp (test_mauve): Use libgcj_jar global.
-
-2003-01-03 Tom Tromey <tromey@redhat.com>
-
- * libjava.compile/pr8712.java: New file, for PR java/8712.
-
-2003-01-01 Tom Tromey <tromey@redhat.com>
-
- * libjava.compile/pr8955.java: New test, for PR java/8955.
-
-2002-12-19 Tom Tromey <tromey@redhat.com>
-
- * libjava.jacks/jacks.xfail: Updated.
-
-2002-12-18 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/pr8945.java: New file.
- * libjava.lang/pr8945.out: New file.
-
-2002-12-12 Tom Tromey <tromey@redhat.com>
-
- * libjava.loader/loader.exp (gcj_loader_test_one): Use
- libjava_prune_warnings.
- (gcj_loader_run): Likewise.
- * libjava.mauve/mauve.exp (test_mauve): Use
- libjava_prune_warnings.
- (test_mauve_sim): Likewise.
- * libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Use
- libjava_prune_warnings.
- (gcj_jni_build_header): Likewise.
- * lib/libjava.exp (libjava_prune_warnings): New proc.
- (gcj_link): Use it.
- (test_libjava_from_source): Likewise.
- (test_libjava_from_javac): Likewise.
-
-2002-12-08 Tom Tromey <tromey@redhat.com>
-
- Test for PR libgcj/8823:
- * libjava.lang/pr8823.java: New file.
- * libjava.lang/pr8823.out: New file.
-
-2002-12-05 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/override.java: New file.
- * libjava.lang/override.out: New file.
-
-2002-12-01 Tom Tromey <tromey@redhat.com>
-
- * libjava.jacks/jacks.exp (gcj_jacks_setup_xfail): New function.
- (gcj_jacks_parse): Use it; set up xfails.
- * libjava.jacks/jacks.xfail: New file.
-
-2002-12-01 Mark Wielaard <mark@klomp.org>
-
- * libjava.mauve/xfails: Remove Inspector FAILs that now PASS.
-
-2002-11-21 Tom Tromey <tromey@redhat.com>
-
- For PR java/8676:
- * libjava.lang/pr8676.java: New file.
- * libjava.lang/pr8676.out: New file.
-
-2002-11-21 Ulrich Weigand <uweigand@de.ibm.com>
-
- * libjava.loader/loader.exp (gcj_loader_test_one): Fix typo in
- 'type' argument to libjava_tcompile.
- (gcj_loader_run): Use libjava_tcompile instead of running
- GCJ_UNDER_TEST directly.
-
-2002-11-05 Tom Tromey <tromey@redhat.com>
-
- * libjava.jacks/jacks.exp: New file.
-
-2002-11-04 Tom Tromey <tromey@redhat.com>
-
- * libjava.compile/pr7912.java: New file.
-
-2002-11-04 Andrew Haley <aph@redhat.com>
-
- * libjava.lang/utilTest.java: New.
- * libjava.lang/utilTest.out: New.
-
-2002-11-04 Anthony Green <green@redhat.com>
-
- * libjava.loader/MyLoader.java: New constructor.
- * libjava.loader/TestParent.java: New file.
- * libjava.loader/TestParent.out: New file.
-
-2002-11-04 Anthony Green <green@redhat.com>
-
- * libjava.loader/TestEarlyGC.java,
- libjava.loader/TestEarlyGC.out: New files (from
- Jeff Sturm).
-
-2002-11-04 Anthony Green <green@redhat.com>
-
- * libjava.loader/dummy.java, libjava.loader/loader.exp,
- libjava.loader/MyLoader.java, libjava.loader/TestLeak.java,
- libjava.loader/TestLeak.out, libjava.loader/TestMultiple.java,
- libjava.loader/TestMultiple.out: New files.
-
-2002-11-02 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/initexc.java (fail): Static initializers must be
- able to complete normally. From Eric Blake.
-
- * libjava.lang/initexc.java: New file.
- * libjava.lang/initexc.out: New file.
-
-2002-11-01 Tom Tromey <tromey@redhat.com>
-
- For PR java/8415:
- * libjava.lang/pr8415.java: New file.
- * libjava.lang/pr8415.out: New file.
-
- * libjava.mauve/mauve.exp (find_mauve_sources): New proc.
- (test_mauve): Use it.
- (test_mauve_sim): Likewise.
-
-2002-10-24 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/Primes.java: Removed.
- * libjava.lang/Primes.out: Removed.
-
-2002-10-23 Tom Tromey <tromey@redhat.com>
-
- For PR java/6388:
- * libjava.lang/pr6388.java: New file.
- * libjava.lang/pr6388.out: New file.
-
-2002-10-15 Andrew Haley <aph@redhat.com>
-
- * libjava.lang/EvaluationOrder.java (EvaluationOrder): New.
- * libjava.lang/EvaluationOrder.out (EvaluationOrder): New.
-
-2002-10-14 Andrew Haley <aph@redhat.com>
-
- * libjava.lang/StaticConstructor.java: New.
- * libjava.lang/StaticConstructor.out: New.
-
-2002-10-13 Mark Wielaard <mark@klomp.org>
-
- * libjava.mauve/xfails: Remove tests that now XPASS.
-
-2002-10-03 Andrew Haley <aph@redhat.com>
-
- * libjava.lang/Array_3.java (baz): New.
- (main): Call baz.
-
-2002-09-29 Anthony Green <green@redhat.com>
-
- * libjava.lang/TestProxy.java: New file.
- * libjava.lang/TestProxy.out: Ditto.
-
-2002-09-29 Anthony Green <green@redhat.com>
-
- * libjava.lang/utf8concat.java: New file.
- * libjava.lang/utf8concat.out: Ditto.
-
-2002-08-26 Tom Tromey <tromey@redhat.com>
-
- * libjava.compile/narrow_case.java: New file.
-
-2002-08-25 Adam Megacz <adam@xwt.org>
-
- * lib/libjava.exp: don't apply -no-install when platform is mingw.
-
-2002-08-16 H.J. Lu <hjl@gnu.org>
-
- * lib/libjava.exp (gcc_version): Removed.
- (libgcj_jar): New.
- (libjava_init): Set libgcj_jar with tcl glob.
- (libjava_arguments): Use libgcj_jar.
-
-2002-07-22 Tom Tromey <tromey@redhat.com>
-
- * libjava.compile/zeroexp.java: New file.
-
-2002-07-18 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-
- * libjava.compile/compile.exp: Sort sources.
- * libjava.jni/jni.exp (gcj_jni_run): Likewise.
- * libjava.lang/lang.exp: Likewise.
-
-2002-07-02 Andrew Haley <aph@redhat.com>
-
- * libjava.lang/inline.java: New file.
- * libjava.lang/inline.out: Likewise.
-
- * libjava.lang/Array_3.java: Add another case.
-
-2002-06-23 Tom Tromey <tromey@redhat.com>
-
- * Makefile.in: Rebuilt.
- * Makefile.am (RUNTEST): Added AM_RUNTESTFLAGS.
- (AM_RUNTESTFLAGS): New variable.
- (RUNTESTFLAGS): Don't define.
- * lib/libjava.exp (libjava_invoke): New proc.
- (test_libjava_from_source): Use it.
- (test_libjava_from_javac): Likewise.
- (libjava_find_gij): New proc.
-
-2002-06-12 Tom Tromey <tromey@redhat.com>
-
- * lib/libjava.exp (test_libjava): Fixed typo.
- * libjava.compile/PR6865.xfail: New file.
-
-2002-06-11 Tom Tromey <tromey@redhat.com>
-
- * libjava.compile/PR6865.java: New file. For PR java/6865.
-
- * libjava.lang/PR6520.java: Fixed typo.
-
-2002-06-10 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/PR6520.java: New file. For PR java/6520.
-
-2002-06-04 Tom Tromey <tromey@redhat.com>
-
- * libjava.compile/T20020604.java: New file.
-
- For PR libgcj/6389:
- * libjava.mauve/xfails: Now passes System.getProperty test.
-
- For PR java/1343 and PR java/6336:
- * libjava.compile/PR1343.java: New file.
-
- For PR java/5913:
- * libjava.compile/PR5913.xfail: Removed.
-
-2002-05-29 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
-
- * libjava.compile/T20020529.java: New file.
-
-2002-05-27 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
-
- * libjava.lang/PR6820.java: New file.
- * libjava.lang/PR6820.out: New file.
-
-2002-05-23 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
-
- * libjava.lang/PR6729.java: New file.
- * libjava.lang/PR6729.out: New file.
-
-2002-05-04 Mark Wielaard <mark@klomp.org>
-
- For PR java/6519:
- * libjava.lang/emptystring.java: New.
- * libjava.lang/emptystring.out: New.
-
-2002-04-21 Mark Wielaard <mark@klomp.org>
-
- * libjava.mauve/xfail: Expect failures for PR java/6391 and
- libgcj/6389.
-
-2002-04-16 Mark Wielaard <mark@klomp.org>
-
- * libjava.lang/negzero.java: New.
- * libjava.lang/negzero.out: New.
-
-2002-04-14 Mark Wielaard <mark@klomp.org>
-
- * libjava.mauve/xfails: Expect failures for PR libgcj/6302 and
- libgcj/6298.
-
-2002-04-14 Mark Wielaard <mark@klomp.org>
-
- * libjava.mauve/xfails: Expect failures for PR libgcj/6293,
- libgcj/6295, libgcj/6296 and libgcj/6297.
-
-2002-04-12 Anthony Green <green@redhat.com>
-
- * lib/libjava.exp: Use libgcj-VERSION.jar, not libgcj.jar.
-
-2002-04-12 Loren J. Rittle <ljrittle@acm.org>
-
- * libjava.lang/SyncGlobal.java, libjava.lang/SyncGlobal.out:
- New test case.
-
-2002-04-09 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
-
- * libjava.lang/PR6204.java, libjava.lang/PR6204.out: New test case.
- * libjava.lang/PR6085.java, libjava.lang/PR6085.out: Likewise.
-
-2002-04-07 Mark Wielaard <mark@klomp.org>
-
- * libjava.mauve/xfails: Add CASE_INSENSITIVE_ORDER, result was
- unspecified and test should be updated to match latest spec.
- Add AcuniaPropertiesTest, known bug #6219. Add test_getClassLoader,
- what we do seems to be not really right or wrong.
-
-2002-04-06 Mark Wielaard <mark@klomp.org>
-
- * libjava.mauve/mauve.exp: Use libgcj.jar not libgcj.zip.
- * libjava.mauve/xfails: add Character.classify12 (number 1),
- Character.getType (number 11), Character.getType (number 20) and
- Character.getType (number 22). We implement 1.4 Character.
-
-2002-03-28 Andrew Haley <aph@redhat.com>
-
- * libjava.lang/Throw_2.java: New.
- * libjava.lang/Throw_2.out: New.
-
-2002-03-27 Anthony Green <green@redhat.com>
-
- * libjava.lang/InvokeReturn.java: Modify test for targets
- which do not yet support reflection.
-
-2002-03-27 Anthony Green <green@redhat.com>
-
- * libjava.jni/jni.exp (gcj_jni_run): Fix cross build test.
-
-2002-03-27 Anthony Green <green@redhat.com>
-
- * lib/libjava.exp: Add the wrapper link options only when we're
- linking.
-
-2002-03-26 Tom Tromey <tromey@redhat.com>
-
- * libjava.mauve/mauve.exp (test_mauve): Use correct stderr
- redirection code.
-
-2002-03-22 Eric Blake <ebb9@email.byu.edu>
-
- For PR java/6026:
- * libjava.compile/PR6026.java: New file.
-
-2002-03-21 Andrew Haley <aph@redhat.com>
-
- * libjava.lang/Thread_Interrupt.java (Looper.calibrate): New.
- (yields): New.
-
-2002-03-18 Tom Tromey <tromey@redhat.com>
-
- * libjava.jni/jni.exp (gcj_jni_test_one): Find libstdc++ in build
- tree.
- (gcj_invoke): Added ld_library_additions argument.
-
-2002-03-17 Tom Tromey <tromey@redhat.com>
-
- * libjava.jni/jni.exp (gcj_jni_build_header): Use local_exec, not
- target_compile. Fixes PR other/5874.
-
-2002-03-15 Eric Blake <ebb9@email.byu.edu>
-
- For PR java/5902:
- * libjava.compile/PR5902.java: Does not need to execute.
- For PR java/5913:
- * libjava.compile/PR5913.java: Ditto.
-
-2002-03-12 Tom Tromey <tromey@redhat.com>
-
- Test for PR java/5848:
- * libjava.compile/PR5848.xfail: New file.
- * libjava.compile/PR5848.java: New file.
-
-2002-03-12 Eric Blake <ebb9@email.byu.edu>
-
- * libjava.compile/PR5913.java: Expand test.
-
-2002-03-11 Eric Blake <ebb9@email.byu.edu>
-
- * libjava.compile/PR5902.java: New file.
- * libjava.compile/PR5913.java: New file.
- * libjava.compile/PR5913.xfail: New file.
-
-2002-02-23 Jeff Sturm <jsturm@one-point.com>
-
- * libjava.lang/InvokeReturn.java: New file.
- * libjava.lang/InvokeReturn.out: New file.
-
-2002-02-20 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
-
- * lib/libjava.exp: Add "xfail-byte-output" and "xfail-source-output".
- Don't display expected and actual output for a failed output test.
-
- * libjava.lang/ArrayStore.java: New file.
- * libjava.lang/ArrayStore.out: New file.
- * libjava.lang/ArrayStore.xfail: New file. xfail-byte-output.
- * libjava.lang/ArrayStore2.java: New file.
- * libjava.lang/ArrayStore2.out: New file.
- * libjava.lang/ArrayStore2.xfail: New file. xfail-source-output.
-
- * libjava.lang/stringconst.xfail: xfail-output -> xfail-source-output.
-
-2002-02-18 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
-
- * libjava.lang/err7.xfail: Removed.
- * libjava.lang/err8.xfail: Removed.
-
- * libjava.lang/ArrayStore.java: New file.
- * libjava.lang/ArrayStore.out: New file.
-
-2002-02-10 Tom Tromey <tromey@redhat.com>
-
- For PR java/5641:
- * libjava.compile/PR5641.xfail: New file.
- * libjava.compile/PR5641.java: New file.
-
-2002-02-10 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-
- * lib/libjava.exp (libjava_find_lib): Remove duplicate .la files.
-
-2002-01-05 H.J. Lu <hjl@gnu.org>
-
- * libjava.jni/jni.exp: Add -I.. for generated header.
-
-2001-12-20 Tom Tromey <tromey@redhat.com>
-
- For PR java/4766:
- * libjava.compile/PR4766.java: New file.
-
-2001-12-20 Andrew Haley <aph@redhat.com>
-
- * libjava.lang/FileHandleGcTest.out: New file.
- * libjava.lang/FileHandleGcTest.java: New file.
- * libjava.lang/Array_3.out: New file.
- * libjava.lang/Array_3.java: New file.
-
-2001-12-18 Tom Tromey <tromey@redhat.com>
-
- For PR java/3417:
- * libjava.compile/PR3417.xfail: New file.
- * libjava.compile/PR3417.java: New file.
-
-2001-12-17 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/PR3731.xfail: Removed.
-
- Inspired by PR java/5057:
- * libjava.lang/PR5057_2.java: New file.
- * libjava.lang/PR5057_2.out: New file.
-
- For PR java/5057:
- * libjava.lang/PR5057.out: New file.
- * libjava.lang/PR5057.java: New file.
-
-2001-12-13 Tom Tromey <tromey@redhat.com>
-
- For PR libgcj/5103:
- * libjava.jni/cxxtest.out: New file.
- * libjava.jni/cxxtest.cc: New file.
- * libjava.jni/cxxtest.java: New file.
- * libjava.jni/jni.exp (gcj_jni_test_one): If there is no .c file,
- assume there is a .cc file.
-
-2001-12-09 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
-
- * libjava.lang/PR3731.out: Adjust output to reflect that "instanceof"
- shouldn't trigger class initialization.
-
-2001-12-06 Tom Tromey <tromey@redhat.com>
-
- * libjava.compile/BlankFinal.java: Removed; incorrect test.
-
-2001-11-02 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
-
- * libjava.lang/TLtest.xfail: New file. Needs threads.
-
-2001-10-04 Alexandre Petit-Bianco <apbianco@redhat.com>
-
- * libjava.lang/PR3096.java: New file.
- * libjava.lang/PR3096.out: Likewise.
-
-2001-09-27 Alexandre Petit-Bianco <apbianco@redhat.com>
-
- * libjava.compile/final_initialization_in_ctor.java: New file
-
-2001-08-28 Alexandre Petit-Bianco <apbianco@redhat.com>
-
- * libjava.compile/final_assignment_check.java: New file.
- * libjava.compile/final_assignment_check.xfail: Likewise.
- * libjava.compile/final_local_switch.java: Likewise.
-
-2001-08-24 Alexandre Petit-Bianco <apbianco@redhat.com>
-
- * libjava.lang/KeepInline.out: Fixed content.
-
-2001-08-17 Alexandre Petit-Bianco <apbianco@redhat.com>
-
- * libjava.compile/XercesBug.java: New file.
-
-2001-08-12 Alexandre Petit-Bianco <apbianco@redhat.com>
-
- * libjava.lang/Matrix4f.java: New file.
- * libjava.lang/Matrix4f.out: New file.
-
-2001-08-03 Richard Henderson <rth@redhat.com>
-
- * libjava.jni/calls.c (Java_calls_docall): Fix typo.
-
-2001-08-01 Jeff Sturm <jsturm@one-point.com>
-
- * libjava.lang/KeepInline.java: New file.
- * libjava.lang/KeepInline.out: New file.
-
-2001-07-30 Jeff Sturm <jsturm@one-point.com>
-
- * libjava.lang/SyncTest.java: New file.
- * libjava.lang/SyncTest.out: New file.
- * libjava.lang/SyncTest.xfail: New file.
-
-2001-07-27 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-
- * lib/libjava.exp (${tool}_set_ld_library_path): New, copied from
- g++.exp.
-
-2001-07-19 Jeff Sturm <jsturm@one-point.com>
-
- * libjava.lang/PR3731.java: New file.
- * libjava.lang/PR3731.out: New file.
- * libjava.lang/PR3731.xfail: New file.
-
-2001-07-12 Alexandre Petit-Bianco <apbianco@redhat.com>
-
- * libjava.compile/anon_ctor_itf_arg.java: Moved to `libjava.lang.'
- * libjava.compile/anon_ctor_itf_arg.out: Likewise
- * libjava.lang/invoke_from_inner.java: New file.
- * libjava.lang/invoke_from_inner.out: Likewise.
-
-2001-07-12 Alexandre Petit-Bianco <apbianco@redhat.com>
-
- * libjava.compile/anon_ctor_itf_arg.java: New file.
- * libjava.compile/anon_ctor_itf_arg.out: New file.
-
-2001-07-12 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/N19990310_4.xfail: Removed.
-
-2001-07-10 Alexandre Petit-Bianco <apbianco@readhat.com>
-
- * libjava.lang/TLtest.java: New file.
- * libjava.lang/TLtest.out: New file.
-
-2001-07-06 Andrew Haley <aph@cambridge.redhat.com>
-
- * libjava.lang/Divide_1.java: Add many more test cases.
- * libjava.lang/Divide_1.out: Likewise.
-
-2001-07-03 Jeff Sturm <jsturm@one-point.com>
-
- * libjava.lang/II.java: New file.
- * libjava.lang/II.out: New file.
-
-2001-06-25 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/stub.xfail: Removed.
-
-2001-06-24 Andreas Jaeger <aj@suse.de>
-
- * libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Fix path for
- jni.h.
-
-2001-06-14 Tom Tromey <tromey@redhat.com>
-
- * libjava.jni/jni.exp: New file.
- * lib/libjava.exp (gcj_link): New proc.
-
-2001-06-08 Tom Tromey <tromey@redhat.com>
-
- Fix for PR libgcj/2874:
- * libjava.mauve/mauve.exp (gcj_run_mauve_tests): New proc.
- (test_mauve): Return 0 on failure.
- * lib/libjava.exp (test_libjava_from_source): Remove generated
- files if test is successful.
- (test_libjava_from_javac): Likewise.
- (gcj_cleanup): New proc.
-
-2001-06-05 Jeff Sturm <jsturm@one-point.com>
-
- * lib/libjava.exp (libjava_arguments): Build with `-no-install'
- when $mode == "link".
-
-2001-06-02 Anthony Green <green@redhat.com>
-
- * libjava.lang/invokethrow.java: Fake a pass for systems which
- don't support invocation.
-
-2001-05-30 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/invokethrow.out: New file.
- * libjava.lang/invokethrow.java: New file.
-
-2001-05-03 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/Thread_Wait_Interrupt.xfail: New file.
- * libjava.lang/Thread_Wait_2.xfail: New file.
- * libjava.lang/Thread_Wait.xfail: New file.
- * libjava.lang/Thread_Sleep.xfail: New file.
- * libjava.lang/Thread_Monitor.xfail: New file.
- * libjava.lang/Thread_Join.xfail: New file.
- * libjava.lang/Thread_Interrupt.xfail: New file.
- * libjava.lang/Thread_Alive.xfail: New file.
- * lib/libjava.exp (libjava_init): Set global
- libjava_uses_threads.
- (test_libjava): Document `need-threads' tag.
- (test_libjava_from_source): handle need-threads tag.
- (test_libjava_from_javac): Likewise.
-
-2001-05-03 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/err11.xfail: Removed.
-
-2001-04-25 Tom Tromey <tromey@redhat.com>
-
- * lib/libjava.exp (libjava_init): Use UTF-8 encoding.
- (test_libjava_from_javac): Likewise.
-
-2001-04-09 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/pr83.xfail: Removed.
- * libjava.lang/Shazam.xfail: Removed.
- * libjava.lang/PR162.xfail: Removed.
- * libjava.compile/PR375.xfail: Removed.
- * libjava.compile/PR208.xfail: Removed xfail-byte.
- * libjava.compile/PR207.xfail: Removed xfail-byte.
-
-2001-04-07 Tom Tromey <tromey@redhat.com>
-
- * libjava.compile/weirddecl.xfail: Removed xfail-*.
- * libjava.compile/PR374.xfail: Removed.
-
-2001-03-29 Alexandre Petit-Bianco <apbianco@redhat.com>
-
- * libjava.lang/instinit2.out: Fixed.
-
-2001-03-22 Tom Tromey <tromey@redhat.com>
-
- * libjava.jni/field.out: New file.
- * libjava.jni/field.c: New file.
- * libjava.jni/field.java: New file.
-
-2001-03-20 Tom Tromey <tromey@redhat.com>
-
- * libjava.compile/uesc.java: New file.
- * libjava.compile/uesc.xfail: New file.
-
-2001-03-16 Tom Tromey <tromey@redhat.com>
-
- * lib/libjava.exp (libjava_arguments): Rewrote computation of
- LD_LIBRARY_PATH. Add gcc build directory if it contains
- libgcc_s.so.
-
-2001-03-14 Tom Tromey <tromey@redhat.com>
-
- * libjava.compile/assignment.xfail: Removed.
- * libjava.compile/assignment_2.xfail: Removed.
-
-2001-02-08 Warren Levy <warrenl@redhat.com>
-
- * libjava.mauve/mauve.exp: Added support for XFAILs.
- * libjava.mauve/xfails: New file.
-
-2001-01-26 Tom Tromey <tromey@redhat.com>
-
- * libjava.jni/martin.c (Java_martin_myNative): Flush stdout.
-
- * libjava.jni/martin.out: New file.
- * libjava.jni/martin.c: New file.
- * libjava.jni/martin.java: New file.
-
-2001-01-16 Richard Henderson <rth@redhat.com>
-
- * lib/libjava.exp (bytecompile_file): Don't unset CLASSPATH.
- (libjava_arguments): Use .jar extension for libgcj.
-
-2001-01-08 Bryce McKinlay <bryce@albatross.co.nz>
-
- * libjava.compile/SuperConstr.java: New test case.
-
-2000-12-18 Tom Tromey <tromey@redhat.com>
-
- * libjava.mauve/mauve.exp (test_mauve): Don't look for exceptions
- thrown in the test harness.
- (test_mauve_sim): Likewise.
-
-2000-12-16 Tom Tromey <tromey@redhat.com>
-
- * lib/libjava.exp (test_libjava_from_javac): Strange quoting trick
- for `.class' link case.
- (bytecompile_file): Change directory outside of `catch'.
-
- * libjava.lang/Thread_1.java: Removed.
- * libjava.lang/Thread_1.out: Likewise.
-
- * libjava.lang/N19990310_4.xfail: New file.
- * libjava.lang/stub.xfail: Added new failure modes.
- * libjava.lang/stringconst.xfail: New file.
- * libjava.lang/PR162.xfail: New file.
- * libjava.lang/Final.xfail: Removed.
-
-2000-12-15 Tom Tromey <tromey@redhat.com>
-
- * libjava.lang/instinit.out: Removed erroneous line.
-
- * libjava.lang/Thread_1.out: Expect `0' active count.
-
- * libjava.lang/stub.xfail: New file.
- * libjava.lang/pr83.xfail: New file.
- * libjava.lang/err8.xfail: New file.
- * libjava.lang/err7.xfail: New file.
- * libjava.lang/Shazam.xfail: New file.
- * libjava.lang/err11.xfail: New file.
-
- * libjava.lang/instinit2.java: Renamed class to `instinit2'.
-
- * libjava.lang/anon3.out: Fixed typo.
-
- * libjava.lang/Class_1.java (main): Uncommented out previously
- failing code; now it works
-
- * lib/libjava.exp (libjava_tcompile): New proc.
- (test_libjava_from_source): Use it.
- (test_libjava_from_javac): Likewise.
- (find_javac): New proc.
- (bytecompile_file): Use it.
- (test_libjava_from_javac): Handle `xfail-gcjC' tag. If no-exec
- set, then don't link even if program has a `main'.
-
- * libjava.compile/static_3.xfail: New file.
- * libjava.compile/weirddecl.xfail: New file.
- * libjava.compile/static_2.xfail: New file.
- * libjava.compile/not_a_redef.xfail: New file.
- * libjava.compile/inner_1.xfail: New file.
- * libjava.compile/assignment_2.xfail: New file.
- * libjava.compile/assignment.xfail: New file.
- * libjava.compile/abstr.xfail: New file.
- * libjava.compile/PR375.xfail: New file.
- * libjava.compile/PR374.java: New file.
- * libjava.compile/PR238.xfail: New file.
- * libjava.compile/PR208.xfail: New file.
- * libjava.compile/PR207.xfail: New file.
-
-2000-11-30 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/instinit.java: Don't extend `foo'.
-
-2000-11-26 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/weirddecl.java: New file.
-
-Fri Nov 24 11:25:20 2000 Anthony Green <green@redhat.com>
-
- * lib/libjava.exp (bytecompile_file): Change default from javac to
- gcj -C.
- (libjava_arguments): Fix classpath.
-
- * libjava.compile/PR129_B.no-link: New file.
-
-2000-11-24 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/PR375.java: New file. For PR gcj/375.
-
- * libjava.compile/PR374.java: New file. For PR gcj/374.
-
-2000-11-07 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/sjis_comment3.java: Removed.
- * libjava.compile/sjis_comment2.java: Removed.
- * libjava.compile/sjis_comment1.java: Removed.
- * libjava.compile/euc_comment3.java: Removed.
- * libjava.compile/euc_comment2.java: Removed.
- * libjava.compile/euc_comment1.java: Removed.
-
-2000-11-03 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (libjava_arguments): Set --tag on libtool
- invocation.
-
-Sun Oct 8 19:14:05 2000 Anthony Green <green@redhat.com>
-
- * libjava.compile/ArrayClass.java: New file.
-
-2000-08-31 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/abstr.xfail: New file.
- * libjava.compile/abstr.java: New file.
-
-2000-08-09 Tom Tromey <tromey@cygnus.com>
-
- From PR gcj/310:
- * libjava.compile/PR310.java: New file.
- * libjava.compile/PR310.xfail: New file.
-
-2000-07-30 Anthony Green <green@redhat.com>
-
- * libjava.compile/PR295.java: New file.
- See PR gcj/295.
-
-2000-07-11 Andrew Haley <aph@cygnus.com>
-
- * libjava.compile/static_init2.java: New file.
-
-2000-07-07 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/stringconst2.out: New file.
- * libjava.lang/stringconst2.java: New file.
-
-2000-06-23 Tom Tromey <tromey@cygnus.com>
-
- For PR gcj/260:
- * libjava.lang/PR260.out: New file.
- * libjava.lang/PR260.java: New file.
-
-2000-06-13 Warren Levy <warrenl@cygnus.com>
-
- Test for PR java.lang/258:
- * libjava.lang/Class_1.java: New file.
- * libjava.lang/Class_1.out: New file.
-
-2000-05-29 Bryce McKinlay <bryce@albatross.co.nz>
-
- * libjava.lang/PR242.java: New file. PR gcj/242.
-
-2000-05-23 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/PR238.java: New file. For PR gcj/238.
-
- * libjava.lang/stringconst.out: New file.
- * libjava.lang/stringconst.java: New file.
-
-2000-05-22 Bryce McKinlay <bryce@albatross.co.nz>
-
- * libjava.compile/PR232B.java: Additional PR gcj/232 test.
-
-2000-05-22 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/PR235.java: New file. For PR gcj/235.
-
-2000-05-21 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/PR234.java: New file. For PR gcj/234.
-
-2000-05-22 Bryce McKinlay <bryce@albatross.co.nz>
-
- Test for PR gcj/232:
- * libjava.compile/PR232.java: New file.
-
-2000-05-18 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (bytecompile_file): Use exec, not system.
-
-2000-05-17 Tom Tromey <tromey@cygnus.com>
-
- * libjava.mauve/mauve.exp (test_mauve): Call `prune_warnings'.
- (test_mauve_sim): Likewise.
- (test_mauve): Redirect stderr in system call.
- (test_mauve_sim): Likewise.
- * lib/libjava.exp (test_libjava_from_source): Call
- `prune_warnings'.
- (test_libjava_from_javac): Likewise.
- (bytecompile_file): Redirect stderr in system call.
- * lib/libjava.exp (libjava_find_program): New proc.
- (find_jvscan): Use it.
- (find_gcjh): New proc.
-
- * libjava.compile/compile.exp: Use "", not $options.
-
-2000-05-16 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/instance.out: New file.
- * libjava.lang/instance.java: New file.
-
-2000-05-10 Bryce McKinlay <bryce@albatross.co.nz>
-
- * libjava.lang/StringBuffer_1.java: New file.
- * libjava.lang/StringBuffer_1.out: New file.
-
-2000-05-08 Bryce McKinlay <bryce@albatross.co.nz>
-
- Test for PR gcj/224:
- * libjava.compile/PR224.java: New file.
- * libjava.compile/PR224.xfail: New file.
-
-2000-04-28 Bryce McKinlay <bryce@albatross.co.nz>
-
- Test for PR gcj/218:
- * libjava.lang/PR218.java: New file.
- * libjava.lang/PR218.out: New file.
-
-2000-04-25 Alexandre Petit-Bianco <apbianco@cygnus.com>
-
- * libjava.compile/MethodFailure4.java: New file.
- * libjava.compile/MethodFailure4.out: New file.
-
-2000-04-20 Alexandre Petit-Bianco <apbianco@cygnus.com>
-
- * libjava.compile/block.java: New file.
- * libjava.compile/block.out: New file.
-
-2000-04-20 Tom Tromey <tromey@cygnus.com>
-
- * libjava.jni/throwit.out: Fixed output to be correct.
-
- * libjava.jni/noclass.java (main): `find_it' throws an exception.
-
-2000-04-16 Anthony Green <green@redhat.com>
-
- * libjava.compile/PR209.java: New file.
-
-2000-04-16 Anthony Green <green@redhat.com>
-
- * libjava.compile/PR208.java: New file.
-
-2000-04-16 Anthony Green <green@redhat.com>
-
- * libjava.compile/PR207.java: New file.
- libjava.compile/PR207_A.java: New file.
- libjava.compile/PR206.java: New file.
- libjava.compile/PR206_A.java: New file.
-
-2000-04-14 Bryce McKinlay <bryce@albatross.co.nz>
-
- Additional test for PR gcj/148:
- * libjava.compile/assignment_2.java: New file.
-
-2000-03-28 Bryce McKinlay <bryce@albatross.co.nz>
-
- Test case for PR libgcj/184:
- * libjava.lang/pr184.java: New file.
- * libjava.lang/pr184.out: New file.
-
-2000-03-27 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/test_long.out: New file.
- * libjava.lang/test_long.java: New file.
-
-2000-03-26 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Array_1.xfail: Removed.
-
-2000-03-23 Bryce McKinlay <bryce@albatross.co.nz>
-
- * libjava.lang/Thread_Wait.java: New file.
- * libjava.lang/Thread_Sleep.java: New file.
- * libjava.lang/Thread_Monitor.java: New file.
- * libjava.lang/Thread_Wait.out: New file.
- * libjava.lang/Thread_Sleep.out: New file.
- * libjava.lang/Thread_Monitor.out: New file.
- * libjava.lang/Thread_Interrupt.java: New file.
- * libjava.lang/Thread_Wait_2.java: New file.
- * libjava.lang/Thread_Wait_2.out: New file.
- * libjava.lang/Thread_Wait_Interrupt.java: New file.
- * libjava.lang/Thread_Wait_Interrupt.out: New file.
- * libjava.lang/Thread_Interrupt.out: New file.
- * libjava.lang/Thread_Join.java: New file.
- * libjava.lang/Thread_Join.out: New file.
- * libjava.lang/Thread_Alive.java: New file.
- * libjava.lang/Thread_Alive.out: New file.
-
-2000-03-22 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/iface.java: New file.
- * libjava.compile/static_3.java: New file.
- * libjava.compile/static_2.java: New file.
- * libjava.compile/static_1.xfail: New file.
- * libjava.compile/static_1.java: New file.
- * libjava.compile/redef6.xfail: New file.
- * libjava.compile/redef6.java: New file.
- * libjava.compile/redef5.xfail: New file.
- * libjava.compile/redef5.java: New file.
- * libjava.compile/redef4.xfail: New file.
- * libjava.compile/redef4.java: New file.
- * libjava.compile/redef3.xfail: New file.
- * libjava.compile/redef3.java: New file.
- * libjava.compile/redef2.xfail: New file.
- * libjava.compile/redef2.java: New file.
- * libjava.compile/redef1.xfail: New file.
- * libjava.compile/redef1.java: New file.
- * libjava.compile/not_a_redef.java: New file.
- * libjava.compile/inner_1.java: New file.
- * libjava.compile/static_init.xfail: New file.
- * libjava.compile/static_init.java: New file.
-
-2000-03-21 Bryce McKinlay <bryce@albatross.co.nz>
-
- Test case for PR libgcj/179:
- * libjava.lang/pr179.java: New file.
- * libjava.lang/pr179.out: New file.
-
-2000-03-18 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/pr109.java: Added `println' at end.
-
-2000-03-15 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/pr176.java: New file, for PR gcj/176.
-
-2000-03-15 Bryce McKinlay <bryce@albatross.co.nz>
-
- * libjava.compile/pr172.java: Correct classname to match file name.
- * libjava.compile/pr174.java: ditto. Remove superfluous main()
- method.
- * libjava.compile/PR140.xfail: New file.
-
-2000-03-14 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/PR140.java: New file, for PR gcj/140.
-
- * libjava.compile/pr172.java: New file, for PR gcj/172.
-
- * libjava.compile/pr174.java: New file, for PR gcj/174.
-
-2000-03-07 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/PR162.java: Mention `PR162', not `Test', as class
- name.
-
-2000-03-07 Bryce McKinlay <bryce@albatross.co.nz>
-
- Test for PR gcj/163:
- * libjava.lang/PR163.java: New file.
- * libjava.lang/PR163.xfail: New file.
-
-2000-03-07 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (test_libjava_from_javac): Removed hack for
- interfaces. Fail if jv-scan reports a parse error.
-
- Test for PR gcj/162:
- * libjava.lang/PR162.out: New file.
- * libjava.lang/PR162.java: New file.
-
-2000-03-06 Tom Tromey <tromey@cygnus.com>
-
- Test for PR gcj/164:
- * libjava.compile/PR164.xfail: New file.
- * libjava.compile/PR164.java: New file.
-
-2000-03-06 Bryce McKinlay <bryce@albatross.co.nz>
-
- * libjava.compile/PR127.java: New file.
- * libjava.compile/PR127.xfail: New file.
- PR 127 test case from Joerg Brunsmann.
-
-2000-03-05 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (test_libjava): Document `shouldfail' token.
- (test_libjava_from_source): Handle `shouldfail' case.
- (test_libjava_from_javac): Likewise.
-
- Test for PR libgcj/124:
- * libjava.compile/PR124.java: New file.
- * libjava.compile/PR124.xfail: New file.
-
-2000-03-05 Anthony Green <green@redhat.com>
-
- * libjava.lang/PR141.java: New file.
- * libjava.lang/PR141.out: New file.
- For PR java.io/141.
-
-2000-03-05 Anthony Green <green@redhat.com>
-
- * libjava.compile/PR129_B.java: New file.
- * libjava.compile/support/PR129_A.java: New file.
- For PR gcj/129.
-
-2000-03-04 Anthony Green <green@redhat.com>
-
- * libjava.lang/PR160.java: New file.
- * libjava.lang/PR160.out: New file.
-
-2000-02-28 Mo DeJong <mdejong@cygnus.com>
-
- * libjava.compile/static_inner.java: New file.
-
-2000-02-23 Tom Tromey <tromey@cygnus.com>
-
- * libjava.jni/noclass.c: New file.
- * libjava.jni/noclass.out: New file.
- * libjava.jni/noclass.java: New file.
-
-2000-02-18 Tom Tromey <tromey@cygnus.com>
-
- * libjava.jni/register.java: New file.
- * libjava.jni/register.c: New file.
- * libjava.jni/register.out: New file.
-
-2000-02-16 Tom Tromey <tromey@cygnus.com>
-
- * libjava.jni/calls.c: New file.
- * libjava.jni/calls.out: New file.
- * libjava.jni/calls.java: New file.
-
- * libjava.jni/throwit.java: New file.
- * libjava.jni/throwit.c: New file.
- * libjava.jni/throwit.out: New file.
-
-2000-02-15 Tom Tromey <tromey@cygnus.com>
-
- * libjava.jni/findclass.java: New file
- * libjava.jni/findclass.c: New file
- * libjava.jni/findclass.out: New file
-
-2000-02-16 Bryce McKinlay <bryce@albatross.co.nz>
-
- * libjava.lang/InterfaceDispatch.java: New file.
- * libjava.lang/InterfaceDispatch.out: New file.
-
-2000-02-15 Tom Tromey <tromey@cygnus.com>
-
- * libjava.jni/virtual.java: New file.
- * libjava.jni/virtual.c: New file.
- * libjava.jni/virtual.out: New file.
- * libjava.jni/final_method.java: New file.
- * libjava.jni/final_method.c: New file.
- * libjava.jni/final_method.out: New file.
- * libjava.jni/overload.java: New file.
- * libjava.jni/overload.c: New file.
- * libjava.jni/overload.out: New file.
- * libjava.jni/simple_int.java: New file.
- * libjava.jni/simple_int.c: New file.
- * libjava.jni/simple_int.out: New file.
- * libjava.jni/invoke.out: New file.
- * libjava.jni/invoke.c: New file.
- * libjava.jni/invoke.java: New file.
-
-2000-02-12 Anthony Green <green@cygnus.com>
-
- * libjava.compile/comment.java: New file.
-
-2000-02-12 Anthony Green <green@cygnus.com>
-
- * libjava.compile/assignment.java: New file.
-
-2000-02-12 Anthony Green <green@cygnus.com>
-
- * libjava.compile/inner_data.java: New file.
-
-2000-02-12 Anthony Green <green@cygnus.com>
-
- * libjava.compile/inner_inherit.java: New file.
-
-2000-02-12 Alexandre Petit-Bianco <apbianco@cygnus.com>
-
- * libjava.lang/inner_interface.out: New file.
- * libjava.lang/inner_interface.java: New file.
- * libjava.lang/final_int.out: New file.
- * libjava.lang/final_int.java: New file.
- * libjava.lang/final_static_and_friend.out: New file.
- * libjava.lang/final_static_and_friend.java: New file.
-
-2000-02-07 Alexandre Petit-Bianco <apbianco@cygnus.com>
-
- * libjava.lang/anonarray3.out: New file.
- * libjava.lang/anonarray3.java: New file.
-
-2000-02-09 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/inner_priv.java: New file.
-
-2000-02-07 Alexandre Petit-Bianco <apbianco@cygnus.com>
-
- * libjava.lang/instinit2.out: New file.
- * libjava.lang/instinit2.java: New file.
- * libjava.lang/instinit.out: New file.
- * libjava.lang/instinit.java: New file.
- * libjava.lang/anonarray2.out: New file.
- * libjava.lang/anonarray2.java: New file.
- * libjava.lang/anonarray.out: New file.
- * libjava.lang/anonarray.java: New file.
- * libjava.lang/nested_with_ctor.out: New file.
- * libjava.lang/nested_with_ctor.java: New file.
- * libjava.lang/anfi.out: New file.
- * libjava.lang/anfi.java: New file.
- * libjava.lang/stub.out: New file.
- * libjava.lang/stub.java: New file.
-
-2000-01-30 Alexandre Petit-Bianco <apbianco@cygnus.com>
-
- * libjava.lang/final_inner.java: New file.
- * libjava.lang/final_inner.out: Likewise.
-
-2000-01-20 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/BlankFinal.java: New file.
-
-2000-01-19 Alexandre Petit-Bianco <apbianco@cygnus.com>
-
- * libjava.lang/anon.java, libjava.lang/anon2.java,
- libjava.lang/anon3.java, libjava.lang/anon4.java,
- libjava.lang/direct_read.java, libjava.lang/direct_write.java,
- libjava.lang/indirect.java, libjava.lang/indirect_read.java,
- libjava.lang/indirect_write.java, libjava.lang/inner1.java,
- libjava.lang/inner2.java, libjava.lang/inner3.java,
- libjava.lang/inner4.java, libjava.lang/inner_array.java,
- libjava.lang/multiple_finit.java,
- libjava.lang/private_direct_read.java,
- libjava.lang/private_direct_write.java,
- libjava.lang/private_indirect_read.java,
- libjava.lang/private_indirect_write.java,
- libjava.lang/search_outer.java, libjava.lang/tmi.java,
- libjava.lang/tp.java, libjava.lang/update_outer.java: New files.
-
-2000-01-18 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/inner_pub.java: New file.
-
-2000-01-16 Anthony Green <green@cygnus.com>
-
- * libjava.lang/pr133.out: New file.
- * libjava.lang/pr133.java: New file.
-
- * libjava.lang/pr100.xpo: New file.
- * libjava.lang/pr100.java: New file.
-
-2000-01-16 Anthony Green <green@cygnus.com>
-
- * libjava.lang/pr93.xpo: New file.
- * libjava.lang/pr93.java: New file.
-
-2000-01-16 Anthony Green <green@cygnus.com>
-
- * libjava.lang/lang.exp: Handle regexp matches correctly.
-
-2000-01-16 Anthony Green <green@cygnus.com>
-
- * libjava.lang/pr83.out: New file.
- * libjava.lang/pr83.java: New file.
-
- * libjava.lang/pr109.out: New file.
- * libjava.lang/pr109.java: New file.
-
-2000-01-11 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/klass.out: New file.
- * libjava.lang/klass.java: New file.
-
-1999-12-31 Tom Tromey <tromey@cygnus.com>
-
- * libjava.mauve/mauve.exp (mauve_compute_uses): Let user select
- specific tests to run.
-
-1999-10-19 Bryce McKinlay <bryce@albatross.co.nz>
-
- * libjava.compile/invokeinterface: New directory.
- * libjava.compile/invokeinterface/Test.java: New file. Test code for
- PR gcj/71 and PR gcj/72.
- * libjava.compile/invokeinterface/A.java: New file.
- * libjava.compile/invokeinterface/B.java: New file.
-
-1999-10-02 Anthony Green <green@cygnus.com>
-
- * libjava.compile/Case.xfail: Removed. This test should pass now.
-
- * libjava.compile/compile.exp: Copied from test.exp.
- * libjava.compile/test.exp: Removed.
-
- * libjava.lang/lang.exp: Copied from test.exp.
- * libjava.lang/test.exp: Removed.
-
-1999-10-01 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/PR56.out: New file.
- * libjava.lang/PR56.java: New file.
-
-1999-09-29 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/PR55.out: New file.
- * libjava.lang/PR55.java: New file.
-
-1999-08-25 Tom Tromey <tromey@cygnus.com>
-
- * libjava.toshiba/G19990304_01.out: New file.
- * libjava.toshiba/G19990304_01.java: New file.
-
- * libjava.lang/G19990310_01.out: New file.
- * libjava.lang/G19990310_01.java: New file.
-
-1999-08-17 Tom Tromey <tromey@cygnus.com>
-
- From Bryce McKinlay:
- * libjava.lang/Array_2.java: New file.
- * libjava.lang/Array_2.out: New file.
-
-1999-08-09 Anthony Green <green@cygnus.com>
-
- * libjava.lang/Primes.java: New file.
- * libjava.lang/Primes.out: New file.
-
-1999-07-31 Alexandre Oliva <oliva@dcc.unicamp.br>
-
- * lib/libjava.exp (bytecompile_file): Use `env(SUN_JAVAC)', that
- defaults to javac, as Sun-javac compiler or compatible.
- (libjava_init): Get GCJ from environment if neither GCJ_UNDER_TEST
- nor TOOL_EXECUTABLE are set. Set `original_ld_library_path' from
- environment.
- (libjava_arguments): Prepend `.' and `$srcdir/$subdir' to
- CLASSPATH, for `support' sources. Search for libgcj.spec in
- `$objdir/..', by adding -B to GCJ_UNDER_TEST. Append
- original_ld_library_path to ld_library_path.
- * libjava.mauve/mauve.exp (test_mauve): Set `env(GCJ)' from
- GCJ_UNDER_TEST, calculated just like in libjava.exp.
-
-1999-07-14 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/G19990217_02.no-link: New file.
- * libjava.compile/test.exp: Look for `.no-link' file.
- * lib/libjava.exp (test_libjava_from_source): Added `no-link'
- option.
- (test_libjava_from_javac): Likewise. Also, handle package
- information from class name when creating class file name.
-
-1999-07-13 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/test.exp: New file.
- * libjava.lang/err9.out: New file.
- * libjava.lang/err9.java: New file.
- * libjava.lang/err8.out: New file.
- * libjava.lang/err8.java: New file.
- * libjava.lang/err7.out: New file.
- * libjava.lang/err7.java: New file.
- * libjava.lang/err6.out: New file.
- * libjava.lang/err6.java: New file.
- * libjava.lang/err5.out: New file.
- * libjava.lang/err5.java: New file.
- * libjava.lang/err4.out: New file.
- * libjava.lang/err4.java: New file.
- * libjava.lang/err3.out: New file.
- * libjava.lang/err3.java: New file.
- * libjava.lang/err2.out: New file.
- * libjava.lang/err2.java: New file.
- * libjava.lang/err13.out: New file.
- * libjava.lang/err13.java: New file.
- * libjava.lang/err12.out: New file.
- * libjava.lang/err12.java: New file.
- * libjava.lang/err11.out: New file.
- * libjava.lang/err11.java: New file.
- * libjava.lang/err10.out: New file.
- * libjava.lang/err10.java: New file.
- * libjava.lang/err1.out: New file.
- * libjava.lang/err1.java: New file.
- * libjava.lang/N19990310_5.out: New file.
- * libjava.lang/N19990310_5.java: New file.
- * libjava.lang/N19990310_4.out: New file.
- * libjava.lang/N19990310_4.java: New file.
- * libjava.lang/N19990310_3.out: New file.
- * libjava.lang/N19990310_3.java: New file.
- * libjava.lang/N19990310_02.out: New file.
- * libjava.lang/N19990310_02.java: New file.
- * libjava.lang/G19990303_02.out: New file.
- * libjava.lang/G19990303_02.java: New file.
- * libjava.lang/G19990303_01.out: New file.
- * libjava.lang/G19990303_01.java: New file.
- * libjava.lang/G19990302_02.out: New file.
- * libjava.lang/G19990302_02.java: New file.
- * libjava.lang/G19990301_01.out: New file.
- * libjava.lang/G19990301_01.java: New file.
-
- * libjava.compile/N19990317.java: New file.
- * libjava.compile/N19990310_01.java: New file.
- * libjava.compile/G19990225_01.java: New file.
- * libjava.compile/G19990217_02.java: New file.
- * libjava.compile/G19990217_01.java: New file.
- * libjava.compile/G19990210_3.java: New file.
- * libjava.compile/G19990210_2.java: New file.
- * libjava.compile/G19990210_1.java: New file.
-
-1999-07-06 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Final.xfail: Output fails, not exec.
-
- * libjava.lang/Final.xfail: New file.
- * libjava.compile/Case.xfail: New file.
- * libjava.compile/Where.xfail: New file.
- * libjava.compile/test.exp: Look for `.xfail' files.
- * libjava.lang/test.exp: Don't look for `.arg' files.
- Do look for `.xfail' files.
- * lib/libjava.exp (test_libjava_from_source): Changed meaning of
- `exec_args' argument. Handle `xfail-*' arguments.
- (test_libjava_from_javac): Likewise.
- (test_libjava): Likewise.
- (libjava_read_xfail): New proc.
-
-1999-07-05 Bryce McKinlay <bryce@albatross.co.nz>
-
- * libjava.lang/Final.java: Added.
- * libjava.lang/Final.out: Added.
-
-1999-07-02 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Finalize_1.out: Removed.
- * libjava.lang/Finalize_1.java: Removed.
-
- * libjava.lang/Thread_1.out: Updated.
- * libjava.lang/Thread_1.java: Don't run exit test.
-
-Thu Jul 1 16:22:19 1999 Anthony Green <green@cygnus.com>
-
- * libjava.mauve/mauve.exp: Don't stop counting test results
- prematurely.
-
-1999-06-25 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (test_libjava_from_javac): Fixed typo. Always
- make class_files a list.
-
- * lib/libjava.exp (test_libjava_from_javac): Prepend `$objdir/' to
- class file names.
-
-1999-06-24 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (libjava_arguments): If `libtool' not found in
- build tree, just use $GCJ_UNDER_TEST as compiler.
-
-1999-06-23 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (libjava_arguments): Handle -lzgcj.
-
-1999-05-24 Anthony Green <green@cygnus.com>
-
- * libjava.lang/Shazam.java: New file.
- libjava.lang/Shazam.out: New file.
-
-1999-05-12 Andrew Haley <aph@cygnus.com>
-
- * libjava.lang/Invoke_2.java: New file.
-
-1999-05-03 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (libjava_arguments): Don't use -nodefaultlibs.
- (libjava_find_lib): Add `-L' option to find the actual library.
-
- * libjava.mauve/mauve.exp (test_mauve): Pass `link' to
- libjava_arguments when linking.
- (test_mauve_sim): Likewise.
- * lib/libjava.exp (libjava_arguments): Run `libtool' to link.
- Don't use `-static'. Added `mode' argument. Use -nodefaultlibs
- when linking.
- (test_libjava_from_source): Mention why target_compile failed.
- Pass `link' to libjava_arguments when linking. Only do `xfails'
- for tests we would actually have run.
- (test_libjava_from_javac): Likewise.
- (libjava_find_lib): Return name of `.la' file.
-
-1999-04-26 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (libjava_find_lib): New proc.
- (libjava_arguments): Use it. Force static linking.
-
-Thu Apr 22 14:19:35 1999 Anthony Green <green@cygnus.com>
-
- * libjava.compile/OperatorBenchmark.java: New file.
-
-1999-04-09 Warren Levy <warrenl@cygnus.com>
-
- * libjava.mauve/mauve.exp (KEYS): Default to libgcj.
-
-1999-04-09 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/plusplus.java: New file.
- From MoT <Sebastien.Villemot@ens.fr>.
-
-1999-04-06 Tom Tromey <tromey@cygnus.com>
-
- * libjava.mauve/mauve.exp (test_mauve_sim): Reference
- mauve-libgcj.
- (test_mauve): Likewise.
-
-1999-03-30 Tom Tromey <tromey@cygnus.com>
-
- * libjava.mauve/mauve.exp: Renamed from test.exp. With the new
- name it is easier to run just the Mauve tests.
-
- * libjava.mauve/test.exp (test_mauve): Added gnu/testlet/config to
- list of files to link in.
- (test_mauve_sim): Likewise.
- * libjava.mauve/DejaGNUTestHarness.java (srcdir, tmpdir): New
- static variables.
- (DejaGNUTestHarness): Removed argument from constructor.
- (dejasrcdir): New static variable.
- (main): Set `dejasrcdir'.
- (getSourceDirectory): New method.
-
-1999-03-08 Tom Tromey <tromey@cygnus.com>
-
- * libjava.compile/perc.java: New file.
-
-1999-02-26 Tom Tromey <tromey@cygnus.com>
-
- * libjava.util/test.exp: Removed.
-
-1999-02-25 Tom Tromey <tromey@cygnus.com>
-
- * libjava.mauve/test.exp: Make sure current directory is correct
- after tests are run.
-
- * libjava.mauve/test.exp (test_mauve): Removed extra arg in call
- to bytecompile_file.
- (test_mauve_sim): Likewise.
-
-Thu Feb 25 09:21:03 1999 Anthony Green <green@cygnus.com>
-
- * libjava.compile/euc_comment1.java,
- libjava.compile/euc_comment2.java,
- libjava.compile/euc_comment3.java,
- libjava.compile/euc_comment1.java,
- libjava.compile/euc_comment2.java,
- libjava.compile/euc_comment3.java: New files.
-
- * libjava.compile/Case.java, libjava.compile/support/Case.java:
- New files.
-
-1999-02-24 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (find_jvscan): New proc.
- (bytecompile_file): Removed `srcfile_in' argument.
- (test_libjava_from_javac): Use `jv-scan' program to find name of
- `main' and name of all generated classes. Compile all generated
- classes, not just primary class. For no-exec tests, only try to
- build the .o, not the full executable.
-
-Wed Feb 24 11:22:32 1999 Anthony Green <green@hoser.cygnus.com>
-
- * libjava.compile/test.exp: Minor fix.
-
-1999-02-23 Anthony Green <green@cygnus.com>
-
- * libjava.compile/Where.java, libjava.compile/support/Waldo.java,
- libjava.compile/Twice.java, libjava.compile/Semi.java,
- libjava.compile/Statics.java, libjava.compile/test.exp,
- libjava.lang/Synch.java, libjava.lang/Synch.out: New files.
-
-1999-02-16 Tom Tromey <tromey@cygnus.com>
-
- * Makefile.in: Rebuilt.
- * Makefile.am (AUTOMAKE_OPTIONS): Added no-installinfo.
-
-Wed Feb 17 19:53:51 1999 Warren Levy <warrenl@cygnus.com>
-
- * libjava.mauve/test.exp: modified file allows Mauve tests to
- run on JMR board; simplified script to use same procedure for
- all testing
-
-1999-02-10 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (libjava_arguments): Updated to track library
- renames.
-
-1999-02-07 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/slash.java: New file.
- * libjava.lang/slash.out: New file.
-
-Mon Feb 1 05:17:40 1999 Anthony Green <green@fencer.cygnus.com>
-
- * lib/libjava.exp: Test compiling from source as well as from
- bytecodes.
-
-1999-01-11 Tom Tromey <tromey@cygnus.com>
-
- * libjava.mauve/test.exp (mauve_compute_uses): Read classes file,
- not choices file.
-
- * libjava.mauve/test.exp (test_mauve): Added
- ResourceNotFoundException to list of harness files to compile.
- (test_mauve_sim): Likewise.
-
-1998-12-17 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Invoke_1.java: New file.
-
- * libjava.lang/Thread_1.java (Thread_1): Class now public.
- * libjava.lang/Array_1.java (Array_1): Class now public.
-
- * libjava.lang/Throw_1.out: New file.
- * libjava.lang/Throw_1.java: New file.
-
-1998-12-11 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (libjava_arguments): New proc.
- (test_libjava): Use it.
- (bytecompile_file): Added classpath argument.
- * libjava.mauve/test.exp: New file.
- * libjava.mauve/DejaGNUTestHarness.java: New file.
-
-1998-12-08 Tom Tromey <tromey@cygnus.com>
-
- * Various: removed all test files that migrated to Mauve.
-
-1998-12-07 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Array_1.java (main): Removed extraneous
- getSuperclass call.
-
-1998-11-23 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Finalize_1.java (main): Clear `f' before GC.
-
-1998-10-08 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Thread_1.out: Added missing line.
-
-Fri Oct 2 14:55:46 1998 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Array_1.java: Changed so Cloneable test can run
- even if clone test itself fails.
-
- * libjava.lang/Array_1.java: Uncommented calls to getSuperclass.
- Added test to see if array implements Cloneable.
-
-Thu Oct 1 11:28:06 1998 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Array_1.java: New file.
- * libjava.lang/Array_1.out: New file.
-
-Thu Oct 1 13:51:00 1998 Anthony Green <green@cygnus.com>
-
- * testsuite/lib/libjava.exp: Find qthreads library correctly.
-
-Tue Sep 29 16:36:43 1998 Warren Levy <warrenl@cygnus.com>
-
- * libjava.util/Hashtable_1.java, libjava.util/Hashtable_1.out: Created.
-
-Tue Sep 29 00:40:26 1998 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Thread_1.java (started): New field.
- (run): Set `started'. Handle all synchronization here.
- (Thread_1): Initialize `started'.
- (doit): Just start both threads and let them handle their own
- synchronization.
-
- * libjava.lang/Boolean_5.out: Changed to reflect the
- Boolean_5.java changes.
- * libjava.lang/Boolean_5.java: Don't replace the system
- properties, just augment them. Don't print the property object.
- * libjava.lang/Long_2.out: Changed to reflect Long_2.java
- changes.
- * libjava.lang/Long_2.java: Don't replace the system properties,
- just augment them. Don't print the property object.
- * libjava.lang/Integer_2.out: Changed to reflect Integer_2.java
- changes.
- * libjava.lang/Integer_2.java: Don't replace the system
- properties, just augment them. Don't print the property object.
-
-Sat Sep 26 15:57:39 1998 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Thread_1.java (main): Catch InterruptedException.
-
-Tue Sep 22 13:45:58 1998 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Thread_1.out: New file.
- * libjava.lang/Thread_1.java: New file.
-
-Mon Sep 21 14:20:08 1998 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (test_libjava): Use runtest_file_p to see if
- test should be short-circuited.
-
-Tue Sep 15 13:57:45 1998 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Character_9.java: New file.
- * libjava.lang/Character_9.out: New file.
-
-Mon Sep 14 12:27:04 1998 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Character_8.out: New file.
- * libjava.lang/Character_8.java: New file.
- * libjava.lang/Character_7.out: New file.
- * libjava.lang/Character_7.java: New file.
- * libjava.lang/Character_6.out: New file.
- * libjava.lang/Character_6.java: New file.
- * libjava.lang/Character_5.out: New file.
- * libjava.lang/Character_5.java: New file.
- * libjava.lang/Character_4.out: New file.
- * libjava.lang/Character_4.java: New file.
- * libjava.lang/Character_3.out: New file.
- * libjava.lang/Character_3.java: New file.
- * libjava.lang/Character_2.out: New file.
- * libjava.lang/Character_2.java: New file.
-
-Fri Sep 11 10:04:55 1998 Tom Tromey <tromey@cygnus.com>
-
- * libjava.lang/Character_1.out: New file.
- * libjava.lang/Character_1.java: New file.
-
-Fri Sep 18 14:43:59 1998 Warren Levy <warrenl@cygnus.com>
-
- * libjava.lang/Long_1.java, libjava.lang/Long_1.out,
- libjava.lang/Long_2.java, libjava.lang/Long_2.out: Created.
-
-Fri Sep 18 12:43:52 1998 Warren Levy <warrenl@cygnus.com>
-
- * libjava.lang/Integer_1.java, libjava.lang/Integer_1.out,
- libjava.lang/Integer_2.java, libjava.lang/Integer_2.out: Created.
-
- * libjava.lang/String_2.java, libjava.lang/String_2.out: Use JDK 1.2
- values for hashCode.
-
-Thu Sep 10 12:44:42 1998 Warren Levy <warrenl@cygnus.com>
-
- * libjava.lang/String_1.java, libjava.lang/String_1.out,
- libjava.lang/String_2.java, libjava.lang/String_2.out,
- libjava.lang/String_3.java, libjava.lang/String_3.out,
- libjava.lang/String_4.java, libjava.lang/String_4.out,
- libjava.lang/String_5.java, libjava.lang/String_5.out,
- libjava.lang/String_6.java, libjava.lang/String_6.out,
- libjava.lang/String_7.java, libjava.lang/String_7.out,
- libjava.lang/String_8.java, libjava.lang/String_8.out,
- libjava.lang/String_9.java, libjava.lang/String_9.out: Created.
-
-Tue Sep 8 13:31:59 1998 Warren Levy <warrenl@cygnus.com>
-
- * libjava.lang/Byte_1.java, libjava.lang/Byte_1.out,
- libjava.lang/Short_1.java, libjava.lang/Short_1.out: New files.
-
-Thu Sep 3 15:57:57 1998 Warren Levy <warrenl@cygnus.com>
-
- * libjava.lang/Boolean_1.java, libjava.lang/Boolean_1.out,
- libjava.lang/Boolean_2.java, libjava.lang/Boolean_2.out,
- libjava.lang/Boolean_3.java, libjava.lang/Boolean_3.out,
- libjava.lang/Boolean_4.java, libjava.lang/Boolean_4.out,
- libjava.lang/Boolean_5.java, libjava.lang/Boolean_5.out: Created.
-
-Tue Sep 1 12:27:54 1998 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp (bytecompile_file): Don't throw error if byte
- compilation fails. Added `srcfile_in' argument. Changed return
- value.
- (test_libjava): Gracefully handle byte-compilation failure.
-
- * libjava.lang/System_15.java (main): Typo fix.
- (System_15): Choose correct class name.
- (X): Moved into System_15.
-
- * libjava.lang/System_1.java, libjava.lang/System_1.out,
- libjava.lang/System_10.java, libjava.lang/System_10.out,
- libjava.lang/System_11.java, libjava.lang/System_11.out,
- libjava.lang/System_12.java, libjava.lang/System_12.out,
- libjava.lang/System_13.java, libjava.lang/System_13.out,
- libjava.lang/System_14.java, libjava.lang/System_14.out,
- libjava.lang/System_15.java, libjava.lang/System_15.out,
- libjava.lang/System_2.java, libjava.lang/System_2.out,
- libjava.lang/System_3.java, libjava.lang/System_3.out,
- libjava.lang/System_4.java, libjava.lang/System_4.out,
- libjava.lang/System_5.java, libjava.lang/System_5.out,
- libjava.lang/System_6.java, libjava.lang/System_6.out,
- libjava.lang/System_7.java, libjava.lang/System_7.out,
- libjava.lang/System_8.java, libjava.lang/System_8.out,
- libjava.lang/System_9.java, libjava.lang/System_9.out: New files.
-
- * lib/libjava.exp (test_libjava): Only add -lgc or -lqthreads if
- library is actually found.
-
- * lib/libjava.exp (test_libjava): Look for qthreads.
-
-Mon Aug 31 17:49:21 1998 Warren Levy <warrenl@cygnus.com>
-
- * libjava.util/Random_1.java, libjava.util/Random_1.out,
- libjava.util/Random_2.java, libjava.util/Random_2.out,
- libjava.util/Random_3.java, libjava.util/Random_3.out,
- libjava.util/Random_4.java, libjava.util/Random_4.out,
- libjava.util/Random_5.java, libjava.util/Random_5.out,
- libjava.util/Random_6.java, libjava.util/Random_6.out,
- libjava.util/Random_7.java, libjava.util/Random_7.out,
- libjava.util/Random_8.java, libjava.util/Random_8.out,
- libjava.util/test.exp: Created.
-
-Mon Aug 31 16:37:19 1998 Tom Tromey <tromey@cygnus.com>
-
- * lib/libjava.exp: Changed gjavac to gcj everywhere.
-
-Wed Aug 26 12:20:10 1998 Anthony Green <green@cygnus.com>
-
- * Makefile.am (EXPECT,RUNTEST): Find expect and runtest
- correctly.
- * Makefile.in: Rebuild.
-
-Tue Aug 25 18:43:33 1998 Anthony Green <green@cygnus.com>
-
- * lib/libjava.exp: Fix CLASSPATH setting.
-
-Tue Aug 25 17:27:37 1998 Anthony Green <green@cygnus.com>
-
- * ChangeLog, lib/libjava.exp, config/default.exp,
- libjava.lang/Finalize_1.java, libjava.lang/Finalize_1.out,
- libjava.lang/Float_1.java, libjava.lang/Float_1.out
- libjava.lang/test.exp, Makefile.am, Makefile.in: Created.
diff --git a/libjava/testsuite/lib/libjava.exp b/libjava/testsuite/lib/libjava.exp
index 31937c3a1e0..ad76f8b0412 100644
--- a/libjava/testsuite/lib/libjava.exp
+++ b/libjava/testsuite/lib/libjava.exp
@@ -1,4 +1,4 @@
-# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation
load_lib "libgloss.exp"
@@ -495,7 +495,21 @@ proc gcj_invoke {program expectFile ld_library_additions} {
# Invoke a program and check its output. EXECUTABLE is the program;
# ARGS are the arguments to the program. Returns 1 if tests passed
# (or things were left untested), 0 otherwise.
-proc libjava_invoke {errname testName optName executable inpfile resultfile args} {
+proc libjava_invoke {errname testName optName executable inpfile resultfile
+ ld_library_additions args} {
+ global env
+ set lib_path $env(LD_LIBRARY_PATH)
+
+ set newval .
+ if {[llength $ld_library_additions] > 0} {
+ append newval :[join $ld_library_additions :]
+ }
+
+ append newval :$lib_path
+
+ setenv LD_LIBRARY_PATH $newval
+
+ verbose "LD_LIBRARY_PATH=$env(LD_LIBRARY_PATH)"
upvar $optName opts
if {[info exists opts(no-exec)]} {
@@ -512,6 +526,10 @@ proc libjava_invoke {errname testName optName executable inpfile resultfile args
set result [libjava_load $executable $args "$inpfile"]
set status [lindex $result 0]
set output [lindex $result 1]
+
+ # Restore LD_LIBRARY_PATH setting.
+ setenv LD_LIBRARY_PATH $lib_path
+
if {[info exists opts(xfail-exec)]} then {
setup_xfail *-*-*
}
@@ -658,7 +676,7 @@ proc test_libjava_from_source { options srcfile compile_args inpfile resultfile
set opts(xfail-output) x
}
if {[libjava_invoke $errname "source compiled test" opts $executable \
- $inpfile $resultfile]} {
+ $inpfile $resultfile ""]} {
# Everything ok, so clean up.
eval gcj_cleanup $removeList
}
@@ -796,7 +814,7 @@ proc test_libjava_from_javac { options srcfile compile_args inpfile resultfile e
# program; in this case we want to skip the test.
if {$INTERPRETER == "yes" && $gij != "gij"} {
libjava_invoke $errname "gij test" opts $gij \
- $inpfile $resultfile $main_name
+ $inpfile $resultfile "" $main_name
}
# Initial arguments.
@@ -859,7 +877,7 @@ proc test_libjava_from_javac { options srcfile compile_args inpfile resultfile e
set opts(xfail-output) x
}
if {[libjava_invoke $errname "bytecode->native test" opts $executable \
- $inpfile $resultfile]} {
+ $inpfile $resultfile ""]} {
# Everything ok, so clean up.
eval gcj_cleanup $removeList
}
diff --git a/libjava/testsuite/libjava.jacks/jacks.xfail b/libjava/testsuite/libjava.jacks/jacks.xfail
index ed55f1bae5b..2c84bb68790 100644
--- a/libjava/testsuite/libjava.jacks/jacks.xfail
+++ b/libjava/testsuite/libjava.jacks/jacks.xfail
@@ -1,28 +1,34 @@
-14.14-plain-2
-14.14-plain-5
+12.4.1-runtime-1
+12.4.1-runtime-2
+12.4.1-runtime-3
+12.4.1-runtime-4
+13.1-runtime-constant-1
+13.1-runtime-constant-3
+13.1-runtime-field-1
+13.1-runtime-method-5
+13.1-runtime-method-6
+13.4.8-constant-runtime-1
+13.4.8-constant-runtime-2
+14-runtime-jump-1
+14-runtime-jump-2
14.14-label-1
14.14-label-2
14.14-label-5
14.14-label-8
-14.7-shadow-3
-14.3-1
-14.3-scope-2
-14.3-scope-4
-14.3-scope-5
-14.3-scope-9
-14.3-scope-11
-14.4.2-shadow-5
-14.4.2-shadow-6
-14.4.2-shadow-7
-14.4.2-shadow-9
-14.19-shadow-4
-14.19-shadow-5
-14.19-shadow-6
-14.19-shadow-7
+14.14-plain-2
+14.14-plain-5
+14.17-null-1
+14.17-null-3
+14.17-null-4
+14.17-null-5
14.19-shadow-12
14.19-shadow-13
14.19-shadow-14
14.19-shadow-15
+14.19-shadow-4
+14.19-shadow-5
+14.19-shadow-6
+14.19-shadow-7
14.19.exception-13
14.19.exception-14
14.19.exception-15
@@ -31,39 +37,14 @@
14.19.exception-22
14.19.exception-23
14.19.exception-24
+14.20-abrupt-10
+14.20-abrupt-14
+14.20-abrupt-2
+14.20-abrupt-6
14.20-block-4
14.20-block-9
-14.20-local-2
-14.20-label-5
-14.20-label-8
-14.20-label-9
-14.20-label-10
-14.20-label-11
-14.20-label-12
-14.20-label-13
-14.20-label-14
-14.20-label-15
-14.20-switch-8
-14.20-switch-14
-14.20-switch-17
-14.20-switch-18
-14.20-switch-19
-14.20-switch-20
-14.20-switch-21
-14.20-switch-22
-14.20-switch-23
-14.20-switch-24
-14.20-while-4
-14.20-while-12
-14.20-while-13
-14.20-while-14
-14.20-while-15
-14.20-while-16
-14.20-while-17
-14.20-while-18
-14.20-while-19
-14.20-do-6
-14.20-do-9
+14.20-catch-15
+14.20-catch-17
14.20-do-10
14.20-do-11
14.20-do-12
@@ -88,8 +69,8 @@
14.20-do-31
14.20-do-32
14.20-do-33
-14.20-for-4
-14.20-for-8
+14.20-do-6
+14.20-do-9
14.20-for-15
14.20-for-16
14.20-for-17
@@ -98,187 +79,340 @@
14.20-for-20
14.20-for-21
14.20-for-22
-14.20-abrupt-2
-14.20-abrupt-6
-14.20-abrupt-10
-14.20-abrupt-14
+14.20-for-4
+14.20-for-8
+14.20-for-update-1
+14.20-if-6
+14.20-label-10
+14.20-label-11
+14.20-label-12
+14.20-label-13
+14.20-label-14
+14.20-label-15
+14.20-label-5
+14.20-label-8
+14.20-label-9
+14.20-local-2
+14.20-switch-14
+14.20-switch-17
+14.20-switch-18
+14.20-switch-19
+14.20-switch-20
+14.20-switch-21
+14.20-switch-22
+14.20-switch-23
+14.20-switch-24
+14.20-switch-8
14.20-synchronized-3
-14.20-try-3
-14.20-try-9
14.20-try-14
14.20-try-18
14.20-try-22
14.20-try-27
+14.20-try-3
14.20-try-31
-14.20-catch-15
-14.20-catch-17
-14.20-if-6
-14.20-for-update-1
-8.1.1.1-default-abstract-11
-8.1.1.1-default-abstract-13
-8.1.1.1-default-abstract-15
-8.1.1.1-default-abstract-19
-8.1.1.1-default-abstract-21
-8.1.1.1-default-abstract-25
-8.1.2-static-1
-8.1.2-static-11
-8.1.2-static-16
-8.1.2-enclosing-4
-8.1.2-enclosing-5
-8.1.3-object-3
-8.1.3-superclass-5
-8.1.3-superclass-6
-8.8.5.1-example-1
-8.8.5.1-example-3
-8.8.5.1-qualified-1
-8.8.5.1-qualified-2
-8.8.5.1-qualified-3
-8.8.5.1-qualified-4
-8.8.5.1-qualified-10
-8.8.5.1-qualified-11
-8.8.5.1-qualified-12
-8.8.5.1-qualified-13
-8.8.5.1-qualified-15
-8.8.7-inaccessible-default-constructor-toplevel-2
-8.8.7-accessible-default-constructor-inner-18
-8.8.7-accessible-default-constructor-inner-26
-8.3-inheritance-1
-8.3-inheritance-2
-8.3-inheritance-3
-8.3-inheritance-5
-8.3-inheritance-6
-8.3.1.2-final-2
-8.3.1.2-final-17
-8.3.1.2-final-19
-8.3.1.2-final-21
-8.3.1.2-final-24
-8.3.1.2-final-27
-8.3.1.2-final-28
-8.3.1.2-final-29
-8.3.2-abrupt-3
-8.3.2-abrupt-5
-8.3.2-abrupt-6
-8.3.2-abrupt-7
-8.3.2.2-super-2
-8.3.2.3-illegal-forward-instance-1
-8.3.2.3-illegal-forward-instance-2
-8.3.2.3-illegal-forward-instance-3
-8.3.2.3-illegal-forward-instance-4
-8.3.2.3-illegal-forward-instance-5
-8.3.2.3-illegal-forward-instance-6
-8.3.2.3-illegal-forward-instance-7
-8.3.2.3-illegal-forward-instance-8
-8.3.2.3-illegal-forward-instance-9
-8.3.2.3-legal-forward-instance-11
-8.3.2.3-illegal-forward-static-1
-8.3.2.3-illegal-forward-static-2
-8.3.2.3-illegal-forward-static-3
-8.3.2.3-illegal-forward-static-4
-8.3.2.3-illegal-forward-static-5
-8.3.2.3-illegal-forward-static-6
-8.3.2.3-illegal-forward-static-7
-8.3.2.3-illegal-forward-static-8
-8.3.2.3-illegal-forward-static-9
-8.3.2.3-illegal-forward-static-10
-8.6-checked-exception-2
-8.6-checked-exception-4
-8.6-checked-exception-5
-8.6-checked-exception-6
-8.6-checked-exception-8
-8.6-checked-exception-10
-8.6-checked-exception-11
-8.6-checked-exception-12
-8.6-complete-1
-8.6-complete-4
-8.6-complete-5
-8.6-abrupt-1
-8.6-abrupt-4
-8.5-inheritance-1
-8.5-inheritance-2
-8.5-inheritance-3
-8.5-inheritance-6
-8.5.2-non-static-member-usage-2
-8.4.6-inheritance-1
-8.4.6-inheritance-2
-8.4.6.2-hiding-3
-8.4.6.4-multiple-3
-8.4.6.4-multiple-4
-8.4.6.4-multiple-7
-8.4.6.4-multiple-8
-8.4.6.4-abstract-1
-8.4.6.4-abstract-2
-8.4.6.4-abstract-10
-8.4.6.1-override-3
-8.4.6.3-modifier-8
-8.4.6.3-modifier-9
-8.4.6.3-modifier-10
-8.4.6.3-modifier-11
-8.4.6.3-modifier-12
-8.4.6.3-modifier-13
-8.4.6.3-default-4
-8.4.6.3-default-6
-8.4.6.3-default-10
-8.4.6.3-default-12
-8.4.6.3-default-14
-8.4.6.3-signature-4
-8.7-abrupt-1
-8.7-complete-1
-8.7-complete-3
-5.1.2-bts-1
-5.1.2-bts-2
-5.1.2-bts-3
-5.1.2-bts-4
-5.1.2-bts-5
-5.1.2-bti-1
-5.1.2-bti-3
-5.1.2-bti-5
-5.1.2-btl-1
-5.1.2-btl-3
-5.1.2-btl-5
-5.1.2-btf-1
-5.1.2-btf-3
-5.1.2-btf-5
-5.1.2-btd-1
-5.1.2-btd-3
-5.1.2-btd-5
-5.1.2-sti-1
-5.1.2-sti-5
-5.1.2-stl-1
-5.1.2-stl-3
-5.1.2-stl-5
-5.1.2-stf-1
-5.1.2-stf-3
-5.1.2-stf-5
-5.1.2-std-3
-5.1.2-std-5
-16-static-1
-16-static-2
+14.20-try-9
+14.20-while-12
+14.20-while-13
+14.20-while-14
+14.20-while-15
+14.20-while-16
+14.20-while-17
+14.20-while-18
+14.20-while-19
+14.20-while-4
+14.3-1
+14.3-scope-10
+14.3-scope-2
+14.3-scope-4
+14.3-scope-5
+14.3-scope-9
+14.3.1-runtime-3
+14.4.2-shadow-5
+14.4.2-shadow-6
+14.4.2-shadow-7
+14.4.2-shadow-9
+14.7-shadow-3
+15.11.1-ambiguous-2
+15.11.1-ambiguous-3
+15.11.1-explicit-constructor-3
+15.11.1-runtime-static-1
+15.11.1-runtime-static-2
+15.11.1-runtime-static-3
+15.11.1-runtime-static-4
+15.11.2-explicit-constructor-2
+15.11.2-meaning-10
+15.11.2-meaning-11
+15.11.2-meaning-13
+15.11.2-meaning-14
+15.11.2-meaning-17
+15.11.2-meaning-3
+15.11.2-meaning-6
+15.11.2-meaning-8
+15.11.2-meaning-9
+15.11.2-runtime-1
+15.11.2-runtime-2
+15.11.2-syntax-1
+15.12.1-syntax-1
+15.12.1-type-14
+15.12.2.1-accessibility-method-3
+15.12.2.1-accessibility-method-5
+15.12.2.1-accessibility-method-6
+15.12.2.2-ambiguous-10
+15.12.2.2-ambiguous-12
+15.12.2.2-ambiguous-14
+15.12.2.2-ambiguous-17
+15.12.2.2-ambiguous-18
+15.12.2.2-ambiguous-21
+15.12.2.2-ambiguous-25
+15.12.2.2-ambiguous-27
+15.12.2.2-ambiguous-3
+15.12.2.2-ambiguous-6
+15.12.2.2-ambiguous-9
+15.12.3-abstract-1
+15.12.3-abstract-2
+15.12.3-abstract-3
+15.12.3-explicit-constructor-10
+15.12.3-explicit-constructor-3
+15.12.3-explicit-constructor-4
+15.12.3-explicit-constructor-5
+15.12.3-explicit-constructor-7
+15.12.3-runtime-mode-1
+15.12.3-runtime-mode-2
+15.12.3-runtime-mode-3
+15.12.3-runtime-mode-4
+15.12.3-runtime-mode-6
+15.12.4.1-runtime-static-1
+15.12.4.1-runtime-static-2
+15.12.4.1-runtime-super-1
+15.12.4.1-runtime-super-2
+15.13-anon-1
+15.14-runtime-3
+15.14-runtime-4
+15.14.1-final-2
+15.14.1-final-3
+15.14.2-final-2
+15.14.2-final-3
+15.15-precedence-5
+15.15-runtime-3
+15.15-runtime-4
+15.15.1-final-2
+15.15.1-final-3
+15.15.2-final-2
+15.15.2-final-3
+15.16-semantic-5
+15.16-value-1
+15.16-value-2
+15.17-mod-3
+15.17-mod-4
+15.17.3-assoc-2
+15.17.3-double-1
+15.17.3-double-10
+15.17.3-double-11
+15.17.3-double-12
+15.17.3-double-13
+15.17.3-double-14
+15.17.3-double-2
+15.17.3-double-3
+15.17.3-double-4
+15.17.3-double-5
+15.17.3-double-6
+15.17.3-double-7
+15.17.3-double-8
+15.17.3-double-9
+15.17.3-float-1
+15.17.3-float-10
+15.17.3-float-11
+15.17.3-float-12
+15.17.3-float-13
+15.17.3-float-14
+15.17.3-float-2
+15.17.3-float-3
+15.17.3-float-4
+15.17.3-float-5
+15.17.3-float-6
+15.17.3-float-7
+15.17.3-float-8
+15.17.3-float-9
+15.18.1-double-1
+15.18.1-double-10
+15.18.1-double-11
+15.18.1-double-12
+15.18.1-double-13
+15.18.1-double-2
+15.18.1-double-3
+15.18.1-double-4
+15.18.1-double-5
+15.18.1-double-6
+15.18.1-double-7
+15.18.1-double-8
+15.18.1-double-9
+15.18.1-float-1
+15.18.1-float-10
+15.18.1-float-11
+15.18.1-float-12
+15.18.1-float-2
+15.18.1-float-3
+15.18.1-float-4
+15.18.1-float-5
+15.18.1-float-6
+15.18.1-float-7
+15.18.1-float-8
+15.18.1-float-9
+15.18.1-valid-1
+15.18.1.1-runtime-5
+15.20-2-runtime-1
+15.21-assoc-7
+15.21-assoc-8
+15.21-equal-3
+15.21-type-17
+15.21-type-21
+15.21-type-22
+15.21-type-23
+15.21-type-24
+15.21-type-25
+15.21-type-30
+15.21-type-7
+15.25-runtime-1
+15.26.2-add-12
+15.26.2-and-10
+15.26.2-and-12
+15.26.2-div-12
+15.26.2-left-shift-12
+15.26.2-mod-12
+15.26.2-mult-12
+15.26.2-or-10
+15.26.2-or-12
+15.26.2-signed-right-shift-12
+15.26.2-sub-12
+15.26.2-unsigned-right-shift-12
+15.26.2-xor-10
+15.26.2-xor-12
+15.28-cast-simple-name-1
+15.28-cast-simple-name-2
+15.28-cast-simple-name-3
+15.28-instanceof-3
+15.28-notstring-1
+15.28-null-1
+15.28-null-3
+15.28-primitive-15
+15.28-primitive-16
+15.28-primitive-17
+15.28-primitive-9
+15.28-qualified-name-10
+15.28-qualified-name-5
+15.28-qualified-name-6
+15.28-qualified-name-7
+15.28-qualified-name-8
+15.28-qualified-name-9
+15.28-qualified-namestr-7
+15.28-qualified-namestr-8
+15.28-qualified-namestr-9
+15.28-simple-name-6
+15.28-simple-name-8
+15.28-simple-namestr-1
+15.28-simple-namestr-2
+15.28-simple-namestr-3
+15.28-simple-namestr-4
+15.28-string-11
+15.28-string-13
+15.28-string-15
+15.28-string-16
+15.28-string-17
+15.28-string-18
+15.28-string-2
+15.28-string-5
+15.28-string-9
+15.28-uninitialized-simple-name-3
+15.8.2-synthetic-1
+15.8.2-type-11
+15.8.2-type-12
+15.8.2-type-13
+15.8.2-type-14
+15.8.5-field-expression-6
+15.8.5-method-expression-8
+15.8.5-variable-5
+15.8.5-variable-6
+15.8.5-variable-7
+15.8.5-variable-8
+15.9-runtime-numcalls-1
+15.9.1-qualified-anonymous-10
+15.9.1-qualified-anonymous-12
+15.9.1-qualified-anonymous-13
+15.9.1-qualified-anonymous-14
+15.9.1-qualified-anonymous-17
+15.9.1-qualified-anonymous-18
+15.9.1-qualified-anonymous-2
+15.9.1-qualified-anonymous-20
+15.9.1-qualified-anonymous-22
+15.9.1-qualified-anonymous-26
+15.9.1-qualified-anonymous-28
+15.9.1-qualified-anonymous-4
+15.9.1-qualified-anonymous-5
+15.9.1-qualified-concrete-10
+15.9.1-qualified-concrete-12
+15.9.1-qualified-concrete-14
+15.9.1-qualified-concrete-16
+15.9.1-qualified-concrete-20
+15.9.1-qualified-concrete-4
+15.9.1-qualified-concrete-5
+15.9.1-unqualified-anonymous-12
+15.9.1-unqualified-anonymous-14
+15.9.1-unqualified-anonymous-15
+15.9.1-unqualified-anonymous-2
+15.9.1-unqualified-anonymous-23
+15.9.1-unqualified-anonymous-24
+15.9.1-unqualified-anonymous-26
+15.9.1-unqualified-anonymous-27
+15.9.1-unqualified-anonymous-4
+15.9.1-unqualified-anonymous-5
+15.9.1-unqualified-concrete-10
+15.9.1-unqualified-concrete-14
+15.9.1-unqualified-concrete-15
+15.9.1-unqualified-concrete-2
+15.9.1-unqualified-concrete-4
+15.9.1-unqualified-concrete-5
+15.9.3-choosing-4
+15.9.4-runtime-creation-1
+15.9.4-runtime-creation-2
+15.9.4-runtime-creation-5
+15.9.5.1-exception-1
+15.9.5.1-exception-3
+15.9.5.1-exception-4
+15.9.5.1-superconstructor-2
+15.9.5.1-superconstructor-4
+15.9.5.1-superconstructor-7
+15.9.5.1-superconstructor-8
16-instance-5
16-instance-6
16-instance-7
-16.5-anonymous-3
-16.8-constructor-6
-16.8-constructor-7
-16.8-constructor-8
-16.1.7-simple-definite-assignment-fail-8
-16.1.7-simple-definite-assignment-fail-9
+16-static-1
+16-static-2
+16.1.2-definite-unassignment-fail-6
+16.1.3-definite-unassignment-fail-6
+16.1.5-definite-unassignment-pass-4
+16.1.5-definite-unassignment-pass-7
+16.1.5-not-assignable-7
+16.1.5-not-assignable-8
16.1.7-compound-definite-assignment-fail-8
16.1.7-compound-definite-assignment-fail-9
-16.1.7-simple-definite-unassignment-fail-1
16.1.7-compound-definite-unassignment-fail-1
16.1.7-compound-definite-unassignment-fail-6
+16.1.7-compound-definite-unassignment-fail-7
16.1.7-compound-definite-unassignment-pass-6
16.1.7-compound-definite-unassignment-pass-7
-16.1.2-definite-unassignment-fail-6
-16.1.5-definite-unassignment-pass-4
-16.1.5-definite-unassignment-pass-7
-16.1.5-not-assignable-7
-16.1.5-not-assignable-8
-16.1.3-definite-unassignment-fail-6
+16.1.7-simple-definite-assignment-fail-8
+16.1.7-simple-definite-assignment-fail-9
+16.1.7-simple-definite-unassignment-fail-1
16.1.8-definite-unassign-fail-1
16.1.8-definite-unassign-fail-2
16.1.8-definite-unassign-fail-3
16.1.8-definite-unassign-fail-4
+16.2.10-definite-assign-fail-2
+16.2.10-definite-assign-pass-2
+16.2.10-definite-unassign-fail-6
+16.2.10-definite-unassign-fail-7
+16.2.10-definite-unassign-fail-8
+16.2.10-definite-unassign-fail-9
16.2.10-definite-unassign-pass-1
16.2.10-definite-unassign-pass-2
16.2.10-definite-unassign-pass-4
@@ -287,12 +421,11 @@
16.2.10-definite-unassign-pass-7
16.2.10-definite-unassign-pass-8
16.2.10-definite-unassign-pass-9
-16.2.10-definite-unassign-fail-6
-16.2.10-definite-unassign-fail-7
-16.2.10-definite-unassign-fail-8
-16.2.10-definite-unassign-fail-9
-16.2.10-definite-assign-pass-2
-16.2.10-definite-assign-fail-2
+16.2.11-definite-assign-fail-3
+16.2.11-definite-assign-pass-2
+16.2.11-definite-unassign-fail-7
+16.2.11-definite-unassign-fail-8
+16.2.11-definite-unassign-fail-9
16.2.11-definite-unassign-pass-1
16.2.11-definite-unassign-pass-2
16.2.11-definite-unassign-pass-4
@@ -300,28 +433,36 @@
16.2.11-definite-unassign-pass-6
16.2.11-definite-unassign-pass-7
16.2.11-definite-unassign-pass-8
-16.2.11-definite-unassign-fail-7
-16.2.11-definite-unassign-fail-8
-16.2.11-definite-unassign-fail-9
-16.2.11-definite-assign-pass-2
-16.2.11-definite-assign-fail-3
-16.2.7-final-4
-16.2.7-final-6
+16.2.14-definite-unassign-fail-12
+16.2.14-definite-unassign-fail-13
+16.2.14-definite-unassign-fail-5
+16.2.14-definite-unassign-fail-6
+16.2.14-definite-unassign-fail-7
+16.2.14-definite-unassign-fail-8
+16.2.3-local-class-11
+16.2.3-local-class-4
+16.2.3-local-class-5
+16.2.3-switch-1
16.2.5-definite-unassign-pass-1
16.2.5-definite-unassign-pass-2
16.2.5-definite-unassign-pass-3
-16.2.3-switch-1
+16.2.7-final-4
+16.2.7-final-6
16.2.8-final-1
16.2.8-final-2
16.2.8-unassigned-1
+16.2.8-unassigned-20
+16.2.8-unassigned-21
+16.2.8-unassigned-22
+16.2.8-unassigned-23
16.2.8-unassigned-6
16.2.8-unassigned-8
-16.2.14-definite-unassign-fail-5
-16.2.14-definite-unassign-fail-6
-16.2.14-definite-unassign-fail-7
-16.2.14-definite-unassign-fail-8
-16.2.14-definite-unassign-fail-12
-16.2.14-definite-unassign-fail-13
+16.2.8-unassigned-9
+16.2.9-definite-assign-fail-3
+16.2.9-definite-assign-pass-2
+16.2.9-definite-unassign-fail-5
+16.2.9-definite-unassign-fail-6
+16.2.9-definite-unassign-fail-7
16.2.9-definite-unassign-pass-1
16.2.9-definite-unassign-pass-2
16.2.9-definite-unassign-pass-4
@@ -329,361 +470,349 @@
16.2.9-definite-unassign-pass-6
16.2.9-definite-unassign-pass-7
16.2.9-definite-unassign-pass-8
-16.2.9-definite-unassign-fail-5
-16.2.9-definite-unassign-fail-6
-16.2.9-definite-unassign-fail-7
-16.2.9-definite-assign-pass-2
-16.2.9-definite-assign-fail-3
-15.18.1-float-1
-15.18.1-float-2
-15.18.1-float-3
-15.18.1-float-4
-15.18.1-float-5
-15.18.1-float-6
-15.18.1-float-7
-15.18.1-float-8
-15.18.1-float-9
-15.18.1-float-10
-15.18.1-float-11
-15.18.1-float-12
-15.18.1-double-1
-15.18.1-double-2
-15.18.1-double-3
-15.18.1-double-4
-15.18.1-double-5
-15.18.1-double-6
-15.18.1-double-7
-15.18.1-double-8
-15.18.1-double-9
-15.18.1-double-10
-15.18.1-double-11
-15.18.1-double-12
-15.18.1-double-13
-15.18.1-valid-1
-15.13-anon-1
-15.26.2-mult-12
-15.26.2-div-12
-15.26.2-mod-12
-15.26.2-add-12
-15.26.2-sub-12
-15.26.2-left-shift-12
-15.26.2-signed-right-shift-12
-15.26.2-unsigned-right-shift-12
-15.26.2-and-10
-15.26.2-and-12
-15.26.2-xor-10
-15.26.2-xor-12
-15.26.2-or-10
-15.26.2-or-12
-15.16-value-1
-15.16-value-2
-15.16-semantic-5
-15.9.5.1-superconstructor-2
-15.9.5.1-superconstructor-4
-15.9.5.1-superconstructor-7
-15.9.5.1-superconstructor-8
-15.9.5.1-exception-1
-15.9.5.1-exception-3
-15.9.5.1-exception-4
-15.9.3-choosing-4
-15.9.1-unqualified-anonymous-2
-15.9.1-unqualified-anonymous-4
-15.9.1-unqualified-anonymous-5
-15.9.1-unqualified-anonymous-12
-15.9.1-unqualified-anonymous-14
-15.9.1-unqualified-anonymous-15
-15.9.1-unqualified-anonymous-23
-15.9.1-unqualified-anonymous-24
-15.9.1-unqualified-anonymous-26
-15.9.1-unqualified-anonymous-27
-15.9.1-qualified-anonymous-2
-15.9.1-qualified-anonymous-4
-15.9.1-qualified-anonymous-5
-15.9.1-qualified-anonymous-10
-15.9.1-qualified-anonymous-12
-15.9.1-qualified-anonymous-13
-15.9.1-qualified-anonymous-14
-15.9.1-qualified-anonymous-17
-15.9.1-qualified-anonymous-18
-15.9.1-qualified-anonymous-20
-15.9.1-qualified-anonymous-22
-15.9.1-qualified-anonymous-26
-15.9.1-qualified-anonymous-28
-15.9.1-unqualified-concrete-2
-15.9.1-unqualified-concrete-4
-15.9.1-unqualified-concrete-5
-15.9.1-unqualified-concrete-10
-15.9.1-unqualified-concrete-14
-15.9.1-unqualified-concrete-15
-15.9.1-qualified-concrete-4
-15.9.1-qualified-concrete-5
-15.9.1-qualified-concrete-10
-15.9.1-qualified-concrete-12
-15.9.1-qualified-concrete-14
-15.9.1-qualified-concrete-16
-15.9.1-qualified-concrete-20
-15.9.1-qualified-concrete-24
-15.28-primitive-9
-15.28-primitive-15
-15.28-primitive-16
-15.28-primitive-17
-15.28-simple-name-6
-15.28-simple-name-8
-15.28-uninitialized-simple-name-3
-15.28-cast-simple-name-1
-15.28-cast-simple-name-2
-15.28-cast-simple-name-3
-15.28-qualified-name-5
-15.28-qualified-name-6
-15.28-qualified-name-7
-15.28-qualified-name-8
-15.28-qualified-name-9
-15.28-qualified-name-10
-15.28-string-2
-15.28-string-5
-15.28-string-9
-15.28-string-11
-15.28-string-13
-15.28-string-15
-15.28-string-16
-15.28-string-17
-15.28-string-18
-15.28-simple-namestr-1
-15.28-simple-namestr-2
-15.28-simple-namestr-3
-15.28-simple-namestr-4
-15.28-qualified-namestr-7
-15.28-qualified-namestr-8
-15.28-qualified-namestr-9
-15.28-notstring-1
-15.28-null-1
-15.28-null-3
-15.28-instanceof-3
-15.21-assoc-7
-15.21-assoc-8
-15.21-equal-3
-15.21-type-7
-15.21-type-17
-15.21-type-21
-15.21-type-22
-15.21-type-23
-15.21-type-24
-15.21-type-30
-15.11.2-syntax-1
-15.11.2-explicit-constructor-2
-15.11.2-meaning-3
-15.11.2-meaning-6
-15.11.2-meaning-8
-15.11.2-meaning-9
-15.11.2-meaning-10
-15.11.2-meaning-11
-15.11.2-meaning-13
-15.11.2-meaning-14
-15.11.2-meaning-17
-15.11.1-ambiguous-2
-15.11.1-ambiguous-3
-15.11.1-explicit-constructor-3
-15.12.3-explicit-constructor-3
-15.12.3-explicit-constructor-4
-15.12.3-explicit-constructor-5
-15.12.3-explicit-constructor-7
-15.12.3-explicit-constructor-10
-15.12.3-abstract-1
-15.12.3-abstract-2
-15.12.3-abstract-3
-15.12.1-syntax-1
-15.12.1-type-14
-15.12.2.1-accessibility-method-2
-15.12.2.1-accessibility-method-4
-15.12.2.1-accessibility-method-6
-15.12.2.2-ambiguous-1
-15.12.2.2-ambiguous-2
-15.12.2.2-ambiguous-6
-15.12.2.2-ambiguous-9
-15.12.2.2-ambiguous-10
-15.12.2.2-ambiguous-12
-15.12.2.2-ambiguous-14
-15.12.2.2-ambiguous-18
-15.12.2.2-ambiguous-21
-15.17-mod-3
-15.17-mod-4
-15.17.3-assoc-2
-15.17.3-float-1
-15.17.3-float-2
-15.17.3-float-3
-15.17.3-float-4
-15.17.3-float-5
-15.17.3-float-6
-15.17.3-float-7
-15.17.3-float-8
-15.17.3-float-9
-15.17.3-float-10
-15.17.3-float-11
-15.17.3-float-12
-15.17.3-float-13
-15.17.3-float-14
-15.17.3-double-1
-15.17.3-double-2
-15.17.3-double-3
-15.17.3-double-4
-15.17.3-double-5
-15.17.3-double-6
-15.17.3-double-7
-15.17.3-double-8
-15.17.3-double-9
-15.17.3-double-10
-15.17.3-double-11
-15.17.3-double-12
-15.17.3-double-13
-15.17.3-double-14
-15.14.2-final-2
-15.14.2-final-3
-15.14.1-final-2
-15.14.1-final-3
-15.8.2-synthetic-1
-15.8.2-type-11
-15.8.2-type-12
-15.8.2-type-13
-15.8.2-type-14
-15.8.5-field-expression-6
-15.8.5-method-expression-8
-15.8.5-variable-5
-15.8.5-variable-6
-15.8.5-variable-7
-15.8.5-variable-8
-15.15-precedence-5
-15.15.2-final-2
-15.15.2-final-3
-15.15.1-final-2
-15.15.1-final-3
-9.4.1-conflict-2
-9.3.1-init-1
-9.3.1-illegal-forward-1
-9.3.1-illegal-forward-2
-9.1.3-body-5
-9.1.1-in-class-17
-9.1.1-in-class-24
-9.1.1-in-interface-2
-9.1.1-in-interface-3
-9.1.1-in-interface-9
-9.1.1-in-interface-16
-9.1.2-supertype-1
-9.2-implicit-2
-9.2-implicit-3
-9.2-implicit-4
-9.2-implicit-6
-9.2-implicit-7
-9.2-implicit-15
-9.2-implicit-18
-9.2-implicit-19
-3.2-valid-1
-3.10.2-round-6
-3.10.2-round-7
-3.10.2-round-9
+16.5-anonymous-3
+16.5-runtime-1
+16.5-runtime-2
+16.5-runtime-3
+16.5-runtime-4
+16.5-runtime-5
+16.8-constructor-6
+16.8-constructor-7
+16.8-constructor-8
+3.10.1-invalid-3
+3.10.1-invalid-4
+3.10.2-double-13
+3.10.2-double-14
3.10.2-round-10
3.10.2-round-11
3.10.2-round-12
-3.10.2-double-13
-3.10.2-double-14
-3.10.1-invalid-3
-3.10.1-invalid-4
-6.6.2.2-protected-creation-3
-6.6.2.1-protected-instance-field-3
-6.6.2.1-protected-instance-field-4
-6.6.2.1-protected-instance-field-6
-6.6.2.1-protected-instance-field-7
-6.6.2.1-protected-instance-method-3
-6.6.2.1-protected-instance-method-5
-6.6.2.1-protected-instance-method-6
-6.6.2.1-protected-instance-method-7
-6.6.2.1-protected-type-2
-6.6.1-8
+3.10.2-round-6
+3.10.2-round-7
+3.10.2-round-9
+3.2-valid-1
+4.5.4-parameter-2
+4.5.4-parameter-3
+4.5.4-static-1
+4.5.4-static-5
+4.7.10-jvms-class-1
+4.7.10-jvms-class-10
+4.7.10-jvms-class-11
+4.7.10-jvms-class-12
+4.7.10-jvms-class-13
+4.7.10-jvms-class-14
+4.7.10-jvms-class-15
+4.7.10-jvms-class-16
+4.7.10-jvms-class-17
+4.7.10-jvms-class-18
+4.7.10-jvms-class-19
+4.7.10-jvms-class-2
+4.7.10-jvms-class-3
+4.7.10-jvms-class-4
+4.7.10-jvms-class-5
+4.7.10-jvms-class-6
+4.7.10-jvms-class-7
+4.7.10-jvms-class-8
+4.7.10-jvms-class-9
+4.7.10-jvms-constructor-1
+4.7.10-jvms-constructor-10
+4.7.10-jvms-constructor-11
+4.7.10-jvms-constructor-12
+4.7.10-jvms-constructor-13
+4.7.10-jvms-constructor-14
+4.7.10-jvms-constructor-2
+4.7.10-jvms-constructor-3
+4.7.10-jvms-constructor-4
+4.7.10-jvms-constructor-5
+4.7.10-jvms-constructor-6
+4.7.10-jvms-constructor-7
+4.7.10-jvms-constructor-8
+4.7.10-jvms-constructor-9
+4.7.10-jvms-field-1
+4.7.10-jvms-field-10
+4.7.10-jvms-field-11
+4.7.10-jvms-field-12
+4.7.10-jvms-field-13
+4.7.10-jvms-field-2
+4.7.10-jvms-field-3
+4.7.10-jvms-field-4
+4.7.10-jvms-field-5
+4.7.10-jvms-field-6
+4.7.10-jvms-field-7
+4.7.10-jvms-field-8
+4.7.10-jvms-field-9
+4.7.10-jvms-lex-1
+4.7.10-jvms-lex-10
+4.7.10-jvms-lex-2
+4.7.10-jvms-lex-3
+4.7.10-jvms-lex-4
+4.7.10-jvms-lex-5
+4.7.10-jvms-lex-6
+4.7.10-jvms-lex-7
+4.7.10-jvms-lex-8
+4.7.10-jvms-lex-9
+4.7.10-jvms-method-1
+4.7.10-jvms-method-10
+4.7.10-jvms-method-11
+4.7.10-jvms-method-12
+4.7.10-jvms-method-2
+4.7.10-jvms-method-3
+4.7.10-jvms-method-4
+4.7.10-jvms-method-5
+4.7.10-jvms-method-6
+4.7.10-jvms-method-7
+4.7.10-jvms-method-8
+4.7.10-jvms-method-9
+5.1.2-btd-1
+5.1.2-btd-3
+5.1.2-btd-5
+5.1.2-btf-1
+5.1.2-btf-3
+5.1.2-btf-5
+5.1.2-bti-1
+5.1.2-bti-3
+5.1.2-bti-5
+5.1.2-btl-1
+5.1.2-btl-3
+5.1.2-btl-5
+5.1.2-bts-1
+5.1.2-bts-2
+5.1.2-bts-3
+5.1.2-bts-4
+5.1.2-bts-5
+5.1.2-std-3
+5.1.2-std-5
+5.1.2-stf-1
+5.1.2-stf-3
+5.1.2-stf-5
+5.1.2-sti-1
+5.1.2-sti-5
+5.1.2-stl-1
+5.1.2-stl-3
+5.1.2-stl-5
+6.3-1
+6.5.1-type-15
+6.5.1-type-16
+6.5.1-typeorpackage-2
+6.5.4.1-simple-10
+6.5.4.1-simple-11
+6.5.4.1-simple-6
+6.5.5.1-import-2
+6.5.5.1-import-3
+6.5.5.1-nested-14
+6.5.5.1-nested-16
+6.5.5.1-nested-17
+6.5.5.1-nested-19
+6.5.5.1-nested-20
+6.5.5.1-nested-21
+6.5.5.1-nested-23
+6.5.5.1-nested-4
+6.5.5.1-nested-7
+6.5.5.1-nested-8
+6.5.5.1-nested-9
+6.5.5.2-type-4
+6.5.5.2-type-5
+6.5.5.2-type-6
+6.5.5.2-type-7
+6.5.5.2-type-8
+6.5.6.1-explicit-constructor-2
+6.5.6.1-field-6
+6.5.6.1-local-3
+6.5.6.1-local-4
+6.5.6.2-expression-6
+6.5.6.2-type-2
+6.5.6.2-type-6
+6.5.6.2-type-8
+6.5.6.2-type-9
6.6.1-11
-6.6.1-array-2
-6.6.1-array-3
-6.6.1-array-5
-6.6.1-array-8
+6.6.1-8
6.6.1-array-11
6.6.1-array-13
6.6.1-array-14
6.6.1-array-17
+6.6.1-array-2
6.6.1-array-20
6.6.1-array-22
6.6.1-array-23
6.6.1-array-26
6.6.1-array-29
+6.6.1-array-3
6.6.1-array-31
6.6.1-array-32
6.6.1-array-35
-6.5.6.2-type-2
-6.5.6.2-type-6
-6.5.6.2-type-8
-6.5.6.2-type-9
-6.5.6.2-expression-6
-6.5.6.1-local-3
-6.5.6.1-local-4
-6.5.6.1-field-6
-6.5.6.1-explicit-constructor-2
-6.5.4.1-simple-6
-6.5.4.1-simple-10
-6.5.4.1-simple-11
-6.5.1-type-15
-6.5.1-type-16
-6.5.1-typeorpackage-2
-6.5.5.2-type-4
-6.5.5.2-type-5
-6.5.5.2-type-6
-6.5.5.2-type-7
-6.5.5.2-type-8
-6.5.5.1-import-2
-6.5.5.1-import-3
-6.5.5.1-nested-4
-6.5.5.1-nested-7
-6.5.5.1-nested-8
-6.5.5.1-nested-9
-6.5.5.1-nested-14
-6.5.5.1-nested-16
-6.5.5.1-nested-17
-6.5.5.1-nested-19
-6.5.5.1-nested-20
-6.5.5.1-nested-21
-6.5.5.1-nested-23
-6.3-1
+6.6.1-array-5
+6.6.1-array-8
+6.6.1-runtime-privateconstructor-1
+6.6.2.1-protected-instance-field-3
+6.6.2.1-protected-instance-field-4
+6.6.2.1-protected-instance-field-6
+6.6.2.1-protected-instance-field-7
+6.6.2.1-protected-instance-method-3
+6.6.2.1-protected-instance-method-5
+6.6.2.1-protected-instance-method-6
+6.6.2.1-protected-instance-method-7
+6.6.2.1-protected-type-2
+6.6.2.2-protected-creation-3
+7.1-named-5
+7.1-named-6
+7.1-named-7
7.4.2-2
-7.5.1-canonical-3
7.5.1-accessible-4
7.5.1-accessible-5
+7.5.1-canonical-3
7.5.1-duplicate-4
7.5.1-shadow-2
-7.5.2-canonical-2
-7.5.2-canonical-3
7.5.2-accessible-1
7.5.2-accessible-3
7.5.2-accessible-4
+7.5.2-canonical-2
+7.5.2-canonical-3
7.5.2-duplicate-1
7.5.2-duplicate-2
7.5.2-duplicate-3
7.5.2-duplicate-4
-7.1-named-5
-7.1-named-6
-7.1-named-7
7.6-optional-restrictions-1
7.6-unnamed-scope-1
7.6-unnamed-scope-2
-4.5.4-static-1
-4.5.4-static-5
-4.5.4-parameter-2
-4.5.4-parameter-3
-4.7.10-jvms-class-6
-4.7.10-jvms-class-7
-4.7.10-jvms-class-8
-4.7.10-jvms-class-18
-4.7.10-jvms-method-6
-4.7.10-jvms-method-8
-4.7.10-jvms-constructor-6
-4.7.10-jvms-constructor-8
-4.7.10-jvms-field-6
-4.7.10-jvms-field-8
+8.1.1.1-12
+8.1.1.1-default-abstract-11
+8.1.1.1-default-abstract-13
+8.1.1.1-default-abstract-15
+8.1.1.1-default-abstract-19
+8.1.1.1-default-abstract-21
+8.1.1.1-default-abstract-25
+8.1.2-enclosing-10
+8.1.2-enclosing-4
+8.1.2-enclosing-5
+8.1.2-enclosing-7
+8.1.2-runtime-1
+8.1.2-static-1
+8.1.2-static-11
+8.1.2-static-16
+8.1.3-object-3
+8.1.3-superclass-6
+8.3-inheritance-1
+8.3-inheritance-2
+8.3-inheritance-3
+8.3-inheritance-5
+8.3-inheritance-6
+8.3-runtime-1
+8.3.1.2-final-17
+8.3.1.2-final-19
+8.3.1.2-final-2
+8.3.1.2-final-21
+8.3.1.2-final-24
+8.3.1.2-final-27
+8.3.1.2-final-28
+8.3.1.2-final-29
+8.3.2-abrupt-3
+8.3.2-abrupt-5
+8.3.2-abrupt-6
+8.3.2-abrupt-7
+8.3.2.2-super-2
+8.3.2.3-illegal-forward-instance-1
+8.3.2.3-illegal-forward-instance-2
+8.3.2.3-illegal-forward-instance-3
+8.3.2.3-illegal-forward-instance-4
+8.3.2.3-illegal-forward-instance-5
+8.3.2.3-illegal-forward-instance-6
+8.3.2.3-illegal-forward-instance-7
+8.3.2.3-illegal-forward-instance-8
+8.3.2.3-illegal-forward-instance-9
+8.3.2.3-illegal-forward-static-1
+8.3.2.3-illegal-forward-static-10
+8.3.2.3-illegal-forward-static-2
+8.3.2.3-illegal-forward-static-3
+8.3.2.3-illegal-forward-static-4
+8.3.2.3-illegal-forward-static-5
+8.3.2.3-illegal-forward-static-6
+8.3.2.3-illegal-forward-static-7
+8.3.2.3-illegal-forward-static-8
+8.3.2.3-illegal-forward-static-9
+8.3.2.3-legal-forward-instance-11
+8.4.6-inheritance-1
+8.4.6-inheritance-2
+8.4.6.1-override-3
+8.4.6.2-hiding-3
+8.4.6.2-hiding-5
+8.4.6.3-default-10
+8.4.6.3-default-12
+8.4.6.3-default-14
+8.4.6.3-default-4
+8.4.6.3-default-6
+8.4.6.3-modifier-10
+8.4.6.3-modifier-11
+8.4.6.3-modifier-12
+8.4.6.3-modifier-13
+8.4.6.3-modifier-8
+8.4.6.3-modifier-9
+8.4.6.3-signature-4
+8.4.6.4-abstract-1
+8.4.6.4-abstract-10
+8.4.6.4-abstract-2
+8.4.6.4-abstract-9
+8.4.6.4-multiple-3
+8.4.6.4-multiple-4
+8.4.6.4-multiple-7
+8.4.6.4-multiple-8
+8.4.6.4-multiple-runtime-1
+8.5-inheritance-1
+8.5-inheritance-2
+8.5-inheritance-3
+8.5-inheritance-6
+8.5.2-non-static-member-usage-2
+8.5.2-non-static-member-usage-4
+8.5.2-non-static-member-usage-5
+8.6-abrupt-1
+8.6-abrupt-4
+8.6-checked-exception-10
+8.6-checked-exception-11
+8.6-checked-exception-12
+8.6-checked-exception-2
+8.6-checked-exception-4
+8.6-checked-exception-5
+8.6-checked-exception-6
+8.6-checked-exception-8
+8.6-complete-1
+8.6-complete-4
+8.6-complete-5
+8.7-abrupt-1
+8.7-complete-1
+8.7-complete-3
+8.8.3-runtime-inner-4
+8.8.5.1-example-1
+8.8.5.1-example-3
+8.8.5.1-qualified-1
+8.8.5.1-qualified-10
+8.8.5.1-qualified-11
+8.8.5.1-qualified-12
+8.8.5.1-qualified-13
+8.8.5.1-qualified-15
+8.8.5.1-qualified-2
+8.8.5.1-qualified-3
+8.8.5.1-qualified-4
+8.8.7-accessible-default-constructor-inner-18
+8.8.7-accessible-default-constructor-inner-26
+8.8.7-runtime-accessible-default-1
+9.1.1-in-class-17
+9.1.1-in-class-24
+9.1.1-in-interface-16
+9.1.1-in-interface-2
+9.1.1-in-interface-3
+9.1.1-in-interface-9
+9.1.2-supertype-1
+9.1.3-body-5
+9.2-implicit-15
+9.2-implicit-18
+9.2-implicit-19
+9.2-implicit-2
+9.2-implicit-3
+9.2-implicit-4
+9.2-implicit-6
+9.2-implicit-7
+9.3.1-illegal-forward-1
+9.3.1-illegal-forward-2
+9.3.1-init-1
+9.4.1-conflict-2
non-jls-argument-expansion-11
non-jls-argument-expansion-12
non-jls-argument-expansion-13
@@ -692,58 +821,12 @@ non-jls-argument-expansion-tokens-1
non-jls-argument-expansion-tokens-2
non-jls-argument-expansion-tokens-4
non-jls-argument-expansion-tokens-5
-non-jls-zip-2
-13.1-runtime-constant-1
-13.1-runtime-constant-3
-13.1-runtime-field-1
-13.4.8-constant-runtime-1
-14-runtime-jump-1
-14-runtime-jump-2
-14.3.1-runtime-3
-8.1.2-runtime-1
-6.6.1-runtime-privateconstructor-1
-8.8.3-runtime-inner-4
-8.8.7-runtime-accessible-default-1
-8.3-runtime-1
-8.4.6.4-multiple-runtime-1
-16.5-runtime-1
-16.5-runtime-2
-16.5-runtime-3
-16.5-runtime-4
-16.5-runtime-5
-12.4.1-runtime-1
-12.4.1-runtime-2
-12.4.1-runtime-3
-12.4.1-runtime-4
-15.9-runtime-numcalls-1
-15.9.4-runtime-creation-1
-15.9.4-runtime-creation-2
-15.9.4-runtime-creation-5
-15.25-runtime-1
-15.11.2-runtime-1
-15.11.2-runtime-2
-15.11.1-runtime-static-1
-15.11.1-runtime-static-2
-15.11.1-runtime-static-3
-15.11.1-runtime-static-4
-15.12.3-runtime-mode-1
-15.12.3-runtime-mode-2
-15.12.3-runtime-mode-3
-15.12.3-runtime-mode-4
-15.12.3-runtime-mode-6
-15.12.4.1-runtime-static-1
-15.12.4.1-runtime-static-2
-15.12.4.1-runtime-super-1
-15.12.4.1-runtime-super-2
-15.14-runtime-3
-15.14-runtime-4
-15.20-2-runtime-1
-15.15-runtime-3
-15.15-runtime-4
+non-jls-jsr41.2-clash-1
+non-jls-jsr41.3-runtime-2
non-jls-jsr41.4-definite-unassignment-fail-22
+non-jls-jsr41.4-definite-unassignment-pass-10
non-jls-jsr41.4-definite-unassignment-pass-2
non-jls-jsr41.4-definite-unassignment-pass-9
-non-jls-jsr41.4-definite-unassignment-pass-10
non-jls-jsr41.4-definite-unassignment-try-1
non-jls-jsr41.4-definite-unassignment-try-2
non-jls-jsr41.4-definite-unassignment-try-3
@@ -753,15 +836,15 @@ non-jls-jsr41.4-definite-unassignment-try-6
non-jls-jsr41.4-definite-unassignment-try-7
non-jls-jsr41.4-definite-unassignment-try-8
non-jls-jsr41.4-loop-1
-non-jls-jsr41.4-loop-2
-non-jls-jsr41.4-loop-3
-non-jls-jsr41.4-loop-7
-non-jls-jsr41.4-loop-8
-non-jls-jsr41.4-loop-9
non-jls-jsr41.4-loop-10
non-jls-jsr41.4-loop-11
non-jls-jsr41.4-loop-12
non-jls-jsr41.4-loop-13
non-jls-jsr41.4-loop-14
non-jls-jsr41.4-loop-15
-non-jls-jsr41.2-clash-1
+non-jls-jsr41.4-loop-2
+non-jls-jsr41.4-loop-3
+non-jls-jsr41.4-loop-7
+non-jls-jsr41.4-loop-8
+non-jls-jsr41.4-loop-9
+non-jls-zip-2
diff --git a/libjava/testsuite/libjava.jar/jar.exp b/libjava/testsuite/libjava.jar/jar.exp
index bff1fea2c8c..7f4c792c25d 100644
--- a/libjava/testsuite/libjava.jar/jar.exp
+++ b/libjava/testsuite/libjava.jar/jar.exp
@@ -31,7 +31,7 @@ proc gcj_jar_interpret {jarfile} {
set opts(_) {}
set out [file rootname $jarfile].out
libjava_invoke $jarfile "gij test" opts $gij {} $out \
- -jar $jarfile
+ "" -jar $jarfile
}
proc gcj_jar_run {} {
diff --git a/libjava/testsuite/libjava.jni/jni.exp b/libjava/testsuite/libjava.jni/jni.exp
index 7dad519d415..b1f6d4e34f4 100644
--- a/libjava/testsuite/libjava.jni/jni.exp
+++ b/libjava/testsuite/libjava.jni/jni.exp
@@ -21,24 +21,36 @@ proc gcj_jni_compile_c_to_so {file {options {}}} {
set so_extension "so"
set so_flag "-shared"
}
- set name [file rootname [file tail $file]]
+ set filename [file tail $file]
+ set name [file rootname $filename]
set soname lib${name}.${so_extension}
lappend options "additional_flags=${so_flag} -fPIC"
# Find the generated header.
lappend options "additional_flags=-I. -I.."
+
+ # Ensure that the generated header has correct prototypes.
+ set cfile [file rootname $file].c
+ if { [file exists $cfile]} {
+ # This option is only valid for C sources.
+ lappend options "additional_flags=-Wmissing-prototypes"
+ }
+
# Find jni.h.
lappend options "additional_flags=-I$srcdir/../include"
+ # Append C++ options
+ lappend options "additional_flags=$options_cxx"
+
set x [libjava_prune_warnings \
[target_compile $file $soname executable $options]]
if {$x != ""} {
verbose "target_compile failed: $x" 2
- fail "$name.c compilation"
+ fail "$filename compilation"
return 0
}
- pass "$name.c compilation"
+ pass "$filename compilation"
return 1
}
@@ -62,6 +74,7 @@ proc gcj_jni_build_header {file} {
proc gcj_jni_test_one {file} {
global runtests
global host_triplet
+ global INTERPRETER
# apple uses a different extension for shared/dynamic libraries
# so we check against powerpc-apple-darwin and set them to
@@ -113,30 +126,46 @@ proc gcj_jni_test_one {file} {
}
}
lappend cxxflaglist $arg
+ # In case the libstdc++ is not installed yet, we pass the build
+ # directory of it to the cxxflaglist.
+ lappend cxxflaglist "-L$cxxldlibflags"
}
lappend cxxflaglist "-lstdc++"
set cxxflags [join $cxxflaglist]
}
- if {! [gcj_jni_compile_c_to_so $cfile]} {
+ if {! [gcj_jni_compile_c_to_so $cfile $cxxflags]} {
# FIXME
return 0
}
- # We use -l$main because the .so is named the same as the main
- # program.
- set args [list "additional_flags=-fjni -L. -l$main $cxxflags"]
+ set args [list "additional_flags=-fjni"]
if {! [gcj_link $main $main $file $args]} {
# FIXME
return 0
}
- if {! [gcj_invoke $main [file rootname $file].out $cxxldlibflags]} {
+ set resultfile [file rootname $file].out
+
+ if {! [gcj_invoke $main $resultfile $cxxldlibflags]} {
# FIXME
return 0
}
+ # We purposely ignore errors here; we still want to run the other
+ # appropriate tests.
+ set errname [file rootname [file tail $file]]
+ set gij [libjava_find_gij]
+ # libjava_find_gij will return `gij' if it couldn't find the
+ # program; in this case we want to skip the test.
+ # If the libraries are not installed yet, we have to pass them via
+ # cxxldlibflags to libjava_invoke.
+ if {$INTERPRETER == "yes" && $gij != "gij"} {
+ libjava_invoke $errname "gij test" opts $gij \
+ "" $resultfile $cxxldlibflags $main
+ }
+
# When we succeed we remove all our clutter.
eval gcj_cleanup [glob -nocomplain -- ${main}.*] [list $main lib${main}.${so_extension}]
diff --git a/libjava/testsuite/libjava.jni/pr11951.java b/libjava/testsuite/libjava.jni/pr11951.java
index 68a9f0126a3..e481503ab59 100644
--- a/libjava/testsuite/libjava.jni/pr11951.java
+++ b/libjava/testsuite/libjava.jni/pr11951.java
@@ -11,4 +11,8 @@ public class pr11951
{
nmethod();
}
+
+ static {
+ System.loadLibrary("pr11951");
+ }
}
diff --git a/libjava/testsuite/libjava.lang/MathBuiltin.java b/libjava/testsuite/libjava.lang/MathBuiltin.java
index 9a4c367a38e..275a086600a 100644
--- a/libjava/testsuite/libjava.lang/MathBuiltin.java
+++ b/libjava/testsuite/libjava.lang/MathBuiltin.java
@@ -5,6 +5,16 @@ class MathBuiltin
return Math.abs(x);
}
+ static double acos(double x)
+ {
+ return Math.acos(x);
+ }
+
+ static double asin(double x)
+ {
+ return Math.asin(x);
+ }
+
static double atan(double x)
{
return Math.atan(x);
@@ -15,6 +25,11 @@ class MathBuiltin
return Math.atan2(x,y);
}
+ static double ceil(double x)
+ {
+ return Math.ceil(x);
+ }
+
static double cos(double x)
{
return Math.cos(x);
@@ -25,6 +40,11 @@ class MathBuiltin
return Math.exp(x);
}
+ static double floor(double x)
+ {
+ return Math.floor(x);
+ }
+
static double log(double x)
{
return Math.log(x);
@@ -62,8 +82,9 @@ class MathBuiltin
public static void main(String argv[])
{
- double sum = abs (1.0) + atan (1.0) + atan2 (1.0, 1.0) + cos (1.0)
- + exp (1.0) + log(1.0) + max(1.0, 1.0) + min (1.0, 1.0)
+ double sum = abs (1.0) + acos (1.0) + asin (1.0) + atan (1.0)
+ + atan2 (1.0, 1.0) + ceil (1.0) + cos (1.0) + exp (1.0)
+ + floor (1.0) + log(1.0) + max(1.0, 1.0) + min (1.0, 1.0)
+ pow (1.0, 1.0) + sin (1.0) + sqrt(1.0) + tan(1.0);
}
}
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog
index 9839340ccb5..03a02a67f02 100644
--- a/libobjc/ChangeLog
+++ b/libobjc/ChangeLog
@@ -1,3 +1,7 @@
+2004-05-09 Richard Sandiford <rsandifo@redhat.com>
+
+ * Makefile.in (toolexecdir): Remove trailing space.
+
2004-04-15 Nathanael Nerode <neroden@gcc.gnu.org>
PR libobjc/14948
diff --git a/libobjc/Makefile.in b/libobjc/Makefile.in
index f06fa13c54b..c014a2dcfc8 100644
--- a/libobjc/Makefile.in
+++ b/libobjc/Makefile.in
@@ -36,7 +36,7 @@ target_noncanonical = @target_noncanonical@
gcc_version = @gcc_version@
top_srcdir = @top_srcdir@
toplevel_srcdir = @toplevel_srcdir@
-toolexecdir = @toolexecdir@
+toolexecdir = @toolexecdir@
# Toolexecdir is used only by toolexeclibdir
toolexeclibdir = @toolexeclibdir@
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 410070ae9cf..6d723b422d9 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,50 @@
+2004-05-06 Matthias Klose <doko@debian.org>
+
+ * include/backward/iterator.h: Add GPL copyright info,
+ with exception clause.
+ * include/bits/boost_concept_check.h: Likewise.
+ * include
+ * libsupc++/tinfo.h: Likewise.
+ * po/string_literals.cc: Likewise.
+
+2004-05-03 Andreas Tobler <a.tobler@schweiz.ch>
+
+ * acinclude.m4: Replace -W with more speaking -Wextra.
+ * configure: Rebuilt.
+
+2004-05-03 Paolo Carlini <pcarlini@suse.de>
+
+ Optimize locale::_M_impl->_M_names for the most common cases:
+ !_M_names[0] means unnamed; !_M_names[1] means all the categories
+ the same name (_M_names[0] && _M_names[1] means that the full set
+ of _M_names must be processed, the general case).
+ * include/bits/locale_classes.h (locale::_Impl::_M_check_same_name):
+ Tweak, saving work when !_M_names[1].
+ (locale::locale(const locale&, _Facet*): Simplify: now just setting
+ _M_names[0] = 0 means unnamed.
+ * src/locale.cc (locale::operator==): Deal first with the common,
+ easy cases, otherwise fall back to locale::name().
+ (locale::name()): Tweak, if !_M_names[0] just return "*".
+ (locale::_Impl::_Impl(const _Impl&, size_t): Tweak, early stop
+ copying __imp._M_names if !__imp._M_names[0] or !__imp._M_names[1].
+ * src/locale_init.cc (locale::_Impl::_Impl(size_t)): Tweak.
+ * src/localename.cc (locale::_Impl::_Impl(const char*, size_t):
+ Simplify when !std::strchr, just updating _M_names[0]; clean up.
+ (locale::_Impl::_M_replace_categories): When !_M_names[1] prepare
+ for the general case (full set of names), then do the usual work;
+ clean up.
+
+ * src/locale.cc (locale::name()): Reserve space in __ret.
+ * src/locale_init.cc (locale::global(const locale&)): Save
+ the name in a temporary.
+ * src/localename.cc (locale::locale(const char*)): Reserve space
+ in __str.
+
+2004-04-29 Paolo Carlini <pcarlini@suse.de>
+
+ * src/locale.cc (locale::operator==): Always avoid constructing
+ locale::name(), directly compare pairs of _M_names.
+
2004-04-26 Paolo Carlini <pcarlini@suse.de>
* include/bits/istream.tcc: Fix comment.
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index ab4538c5e1c..7529af32586 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -711,7 +711,7 @@ AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [
OPTIMIZE_CXXFLAGS=
AC_SUBST(OPTIMIZE_CXXFLAGS)
- WARN_FLAGS='-Wall -W -Wwrite-strings -Wcast-qual'
+ WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
AC_SUBST(WARN_FLAGS)
])
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 7db2d2edd53..6a6ad93e7d7 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -3965,7 +3965,7 @@ darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
-freebsd* )
+freebsd* | kfreebsd*-gnu)
if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
@@ -4033,7 +4033,7 @@ linux-gnu*)
lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
;;
-netbsd*)
+netbsd* | knetbsd*-gnu)
if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
else
@@ -73212,7 +73212,7 @@ echo "${ECHO_T}$gxx_include_dir" >&6
OPTIMIZE_CXXFLAGS=
- WARN_FLAGS='-Wall -W -Wwrite-strings -Wcast-qual'
+ WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
diff --git a/libstdc++-v3/include/backward/iterator.h b/libstdc++-v3/include/backward/iterator.h
index 659176a73c5..8316a83d698 100644
--- a/libstdc++-v3/include/backward/iterator.h
+++ b/libstdc++-v3/include/backward/iterator.h
@@ -1,3 +1,32 @@
+// Backward-compat support -*- C++ -*-
+
+// Copyright (C) 2001, 2004 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it 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 exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
/*
*
* Copyright (c) 1994
diff --git a/libstdc++-v3/include/bits/boost_concept_check.h b/libstdc++-v3/include/bits/boost_concept_check.h
index aef83af9474..7f255a72eeb 100644
--- a/libstdc++-v3/include/bits/boost_concept_check.h
+++ b/libstdc++-v3/include/bits/boost_concept_check.h
@@ -1,4 +1,30 @@
+// Copyright (C) 2004 Free Software Foundation, Inc.
//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it 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 exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
// (C) Copyright Jeremy Siek 2000. Permission to copy, use, modify,
// sell and distribute this software is granted provided this
// copyright notice appears in all copies. This software is provided
diff --git a/libstdc++-v3/include/bits/locale_classes.h b/libstdc++-v3/include/bits/locale_classes.h
index 926ce209b24..5366d652433 100644
--- a/libstdc++-v3/include/bits/locale_classes.h
+++ b/libstdc++-v3/include/bits/locale_classes.h
@@ -534,8 +534,10 @@ namespace std
_M_check_same_name()
{
bool __ret = true;
- for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i)
- __ret = std::strcmp(_M_names[__i], _M_names[__i + 1]) == 0;
+ if (_M_names[1])
+ // We must actually compare all the _M_names: can be all equal!
+ for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i)
+ __ret = std::strcmp(_M_names[__i], _M_names[__i + 1]) == 0;
return __ret;
}
@@ -569,30 +571,15 @@ namespace std
{
_M_impl = new _Impl(*__other._M_impl, 1);
- char* _M_tmp_names[_S_categories_size];
- size_t __i = 0;
try
- {
- for (; __i < _S_categories_size; ++__i)
- {
- _M_tmp_names[__i] = new char[2];
- std::strcpy(_M_tmp_names[__i], "*");
- }
- _M_impl->_M_install_facet(&_Facet::id, __f);
- }
+ { _M_impl->_M_install_facet(&_Facet::id, __f); }
catch(...)
{
_M_impl->_M_remove_reference();
- for (size_t __j = 0; __j < __i; ++__j)
- delete [] _M_tmp_names[__j];
__throw_exception_again;
}
-
- for (size_t __k = 0; __k < _S_categories_size; ++__k)
- {
- delete [] _M_impl->_M_names[__k];
- _M_impl->_M_names[__k] = _M_tmp_names[__k];
- }
+ delete [] _M_impl->_M_names[0];
+ _M_impl->_M_names[0] = 0; // Unnamed.
}
} // namespace std
diff --git a/libstdc++-v3/libsupc++/tinfo.h b/libstdc++-v3/libsupc++/tinfo.h
index b7191900d00..2c55e03a6d9 100644
--- a/libstdc++-v3/libsupc++/tinfo.h
+++ b/libstdc++-v3/libsupc++/tinfo.h
@@ -1,7 +1,33 @@
// RTTI support internals for -*- C++ -*-
-// Copyright (C) 1994, 1995, 1996, 1998, 1999, 2000, 2001
+// Copyright (C) 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2004
// Free Software Foundation
+// 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, 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it 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 exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
#include "typeinfo"
#include <cstddef>
diff --git a/libstdc++-v3/po/string_literals.cc b/libstdc++-v3/po/string_literals.cc
index 776cf39068a..262e708a4dc 100644
--- a/libstdc++-v3/po/string_literals.cc
+++ b/libstdc++-v3/po/string_literals.cc
@@ -16,6 +16,15 @@
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it 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 exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
#include <libintl.h>
#define gettext_noop(Str) Str
diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc
index 0ed2dbb8820..64d0c6227ae 100644
--- a/libstdc++-v3/src/locale.cc
+++ b/libstdc++-v3/src/locale.cc
@@ -70,15 +70,21 @@ namespace std
bool
locale::operator==(const locale& __rhs) const throw()
{
- bool __ret = false;
+ // Deal first with the common cases, fast to process: refcopies,
+ // unnamed (i.e., !_M_names[0]), "simple" (!_M_names[1] => all the
+ // categories same name, i.e., _M_names[0]). Otherwise fall back
+ // to the general locale::name().
+ bool __ret;
if (_M_impl == __rhs._M_impl)
__ret = true;
+ else if (!_M_impl->_M_names[0] || !__rhs._M_impl->_M_names[0]
+ || std::strcmp(_M_impl->_M_names[0],
+ __rhs._M_impl->_M_names[0]) != 0)
+ __ret = false;
+ else if (!_M_impl->_M_names[1] && !__rhs._M_impl->_M_names[1])
+ __ret = true;
else
- {
- const string __name = this->name();
- if (__name != "*" && __name == __rhs.name())
- __ret = true;
- }
+ __ret = this->name() == __rhs.name();
return __ret;
}
@@ -95,10 +101,13 @@ namespace std
locale::name() const
{
string __ret;
- if (_M_impl->_M_check_same_name())
+ if (!_M_impl->_M_names[0])
+ __ret = '*';
+ else if (_M_impl->_M_check_same_name())
__ret = _M_impl->_M_names[0];
else
{
+ __ret.reserve(128);
__ret += _S_categories[0];
__ret += '=';
__ret += _M_impl->_M_names[0];
@@ -242,12 +251,13 @@ namespace std
for (size_t __i = 0; __i < _S_categories_size; ++__i)
_M_names[__i] = 0;
- // Name all the categories.
- for (size_t __i = 0; __i < _S_categories_size; ++__i)
+ // Name the categories.
+ for (size_t __i = 0; (__i < _S_categories_size
+ && __imp._M_names[__i]); ++__i)
{
- char* __new = new char[std::strlen(__imp._M_names[__i]) + 1];
- std::strcpy(__new, __imp._M_names[__i]);
- _M_names[__i] = __new;
+ const size_t __len = std::strlen(__imp._M_names[__i]) + 1;
+ _M_names[__i] = new char[__len];
+ std::memcpy(_M_names[__i], __imp._M_names[__i], __len);
}
}
catch(...)
@@ -354,7 +364,6 @@ namespace std
}
}
-
// locale::id
// Definitions for static const data members of locale::id
_Atomic_word locale::id::_S_refcount; // init'd to 0 by linker
diff --git a/libstdc++-v3/src/locale_init.cc b/libstdc++-v3/src/locale_init.cc
index c1dac9f7a7c..d5a337f5b37 100644
--- a/libstdc++-v3/src/locale_init.cc
+++ b/libstdc++-v3/src/locale_init.cc
@@ -114,9 +114,10 @@ namespace std
__glibcxx_mutex_lock(__gnu_internal::locale_global_mutex);
_Impl* __old = _S_global;
__other._M_impl->_M_add_reference();
- _S_global = __other._M_impl;
- if (__other.name() != "*")
- setlocale(LC_ALL, __other.name().c_str());
+ _S_global = __other._M_impl;
+ const string __other_name = __other.name();
+ if (__other_name != "*")
+ setlocale(LC_ALL, __other_name.c_str());
__glibcxx_mutex_unlock(__gnu_internal::locale_global_mutex);
// Reference count sanity check: one reference removed for the
@@ -255,13 +256,12 @@ namespace std
for (size_t __i = 0; __i < _M_facets_size; ++__i)
_M_facets[__i] = _M_caches[__i] = 0;
- // Name all the categories.
+ // Name the categories.
_M_names = new (&name_vec) char*[_S_categories_size];
- for (size_t __i = 0; __i < _S_categories_size; ++__i)
- {
- _M_names[__i] = new (&name_c[__i]) char[2];
- std::strcpy(_M_names[__i], locale::facet::_S_get_c_name());
- }
+ _M_names[0] = new (&name_c[0]) char[2];
+ std::memcpy(_M_names[0], locale::facet::_S_get_c_name(), 2);
+ for (size_t __i = 1; __i < _S_categories_size; ++__i)
+ _M_names[__i] = 0;
// This is needed as presently the C++ version of "C" locales
// != data in the underlying locale model for __timepunct,
diff --git a/libstdc++-v3/src/localename.cc b/libstdc++-v3/src/localename.cc
index 4cd1af189fa..ca09b065156 100644
--- a/libstdc++-v3/src/localename.cc
+++ b/libstdc++-v3/src/localename.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -34,7 +34,6 @@ namespace std
{
using namespace __gnu_cxx;
-
locale::locale(const char* __s)
{
if (__s)
@@ -95,6 +94,7 @@ namespace std
if (__i < _S_categories_size)
{
string __str;
+ __str.reserve(128);
for (size_t __j = 0; __j < __i; ++__j)
{
__str += _S_categories[__j];
@@ -199,15 +199,12 @@ namespace std
for (size_t __i = 0; __i < _S_categories_size; ++__i)
_M_names[__i] = 0;
- // Name all the categories.
+ // Name the categories.
const size_t __len = std::strlen(__s);
if (!std::strchr(__s, ';'))
{
- for (size_t __i = 0; __i < _S_categories_size; ++__i)
- {
- _M_names[__i] = new char[__len + 1];
- std::strcpy(_M_names[__i], __s);
- }
+ _M_names[0] = new char[__len + 1];
+ std::memcpy(_M_names[0], __s, __len + 1);
}
else
{
@@ -218,10 +215,9 @@ namespace std
const char* __end = std::strchr(__beg, ';');
if (!__end)
__end = __s + __len;
- char* __new = new char[__end - __beg + 1];
- std::memcpy(__new, __beg, __end - __beg);
- __new[__end - __beg] = '\0';
- _M_names[__i] = __new;
+ _M_names[__i] = new char[__end - __beg + 1];
+ std::memcpy(_M_names[__i], __beg, __end - __beg);
+ _M_names[__i][__end - __beg] = '\0';
}
}
@@ -271,19 +267,35 @@ namespace std
locale::_Impl::
_M_replace_categories(const _Impl* __imp, category __cat)
{
- for (size_t __ix = 0; __ix < _S_categories_size; ++__ix)
+ category __mask = 1;
+ const bool __have_names = _M_names[0] && __imp->_M_names[0];
+ for (size_t __ix = 0; __ix < _S_categories_size; ++__ix, __mask <<= 1)
{
- const category __mask = 1 << __ix;
if (__mask & __cat)
{
// Need to replace entry in _M_facets with other locale's info.
_M_replace_category(__imp, _S_facet_categories[__ix]);
// If both have names, go ahead and mangle.
- if (std::strcmp(_M_names[__ix], "*") != 0
- && std::strcmp(__imp->_M_names[__ix], "*") != 0)
+ if (__have_names)
{
- char* __new = new char[std::strlen(__imp->_M_names[__ix]) + 1];
- std::strcpy(__new, __imp->_M_names[__ix]);
+ if (!_M_names[1])
+ {
+ // A full set of _M_names must be prepared, all identical
+ // to _M_names[0] to begin with. Then, below, a few will
+ // be replaced by the corresponding __imp->_M_names. I.e.,
+ // not a "simple" locale anymore (see locale::operator==).
+ const size_t __len = std::strlen(_M_names[0]) + 1;
+ for (size_t __i = 1; __i < _S_categories_size; ++__i)
+ {
+ _M_names[__i] = new char[__len];
+ std::memcpy(_M_names[__i], _M_names[0], __len);
+ }
+ }
+ char* __src = __imp->_M_names[__ix] ? __imp->_M_names[__ix]
+ : __imp->_M_names[0];
+ const size_t __len = std::strlen(__src) + 1;
+ char* __new = new char[__len];
+ std::memcpy(__new, __src, __len);
delete [] _M_names[__ix];
_M_names[__ix] = __new;
}
diff --git a/maintainer-scripts/ChangeLog b/maintainer-scripts/ChangeLog
index 6f3dbd0ec2b..94988ab3bfd 100644
--- a/maintainer-scripts/ChangeLog
+++ b/maintainer-scripts/ChangeLog
@@ -1,3 +1,14 @@
+2004-05-02 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * crontab: Move GCC 3.4 snapshots from Wednesday afternoon to
+ Friday night, where gcc.gnu.org has less load.
+
+2004-05-02 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * crontab: Adjust temporary directory used for snapshot generation.
+ Move GCC 3.3 snapshots to Wednesday 22:32, where gcc.gnu.org has
+ less load.
+
2004-04-19 Mark Mitchell <mark@codesourcery.com>
* gcc_release (build_sources): Do not use "-F" to tag sources.
diff --git a/maintainer-scripts/crontab b/maintainer-scripts/crontab
index 809dc9c96fc..c69c75d02d1 100644
--- a/maintainer-scripts/crontab
+++ b/maintainer-scripts/crontab
@@ -1,5 +1,5 @@
-16 0 * * * sh /home/gccadmin/scripts/update_version
-50 0 * * * sh /home/gccadmin/scripts/update_web_docs
-55 0 * * * sh /home/gccadmin/scripts/update_web_docs_libstdcxx
-40 16 * * 1 sh /home/gccadmin/scripts/gcc_release -s 3.3:gcc-3_3-branch -l -d /sourceware/snapshot-tmp all
-42 16 * * 3 sh /home/gccadmin/scripts/gcc_release -s 3.4:gcc-3_4-branch -l -d /sourceware/snapshot-tmp all
+16 0 * * * sh /home/gccadmin/scripts/update_version
+50 0 * * * sh /home/gccadmin/scripts/update_web_docs
+55 0 * * * sh /home/gccadmin/scripts/update_web_docs_libstdcxx
+32 22 * * 3 sh /home/gccadmin/scripts/gcc_release -s 3.3:gcc-3_3-branch -l -d /sourceware/snapshot-tmp/gcc all
+32 22 * * 5 sh /home/gccadmin/scripts/gcc_release -s 3.4:gcc-3_4-branch -l -d /sourceware/snapshot-tmp/gcc all