aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author(no author) <(no author)@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-08 20:22:32 +0000
committer(no author) <(no author)@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-08 20:22:32 +0000
commitc257e4c69fa5749f65d4348aa34cf2b1dd888bbb (patch)
tree7878a3c9dbdf10b66a75b7e495d5a887cce31de8
parentb88baab8dc533a28fc64d5addedc490222540398 (diff)
This commit was manufactured by cvs2svn to create tagimmuse-rewrite-start
'immuse-rewrite-start'. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/tags/immuse-rewrite-start@88792 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--ChangeLog9
-rw-r--r--MAINTAINERS21
-rw-r--r--gcc/ChangeLog348
-rw-r--r--gcc/Makefile.in1
-rw-r--r--gcc/builtins.c152
-rw-r--r--gcc/c-ppoutput.c2
-rw-r--r--gcc/c-typeck.c336
-rw-r--r--gcc/cfghooks.c8
-rw-r--r--gcc/cfgloopmanip.c10
-rw-r--r--gcc/config/i386/scodbx.h84
-rw-r--r--gcc/config/i386/xm-dgux.h4
-rw-r--r--gcc/config/i386/xm-sun.h21
-rw-r--r--gcc/config/i386/xm-sysv3.h3
-rw-r--r--gcc/config/ia64/ia64-protos.h1
-rw-r--r--gcc/config/ia64/ia64.c34
-rw-r--r--gcc/config/ia64/ia64.h10
-rw-r--r--gcc/config/m32r/m32r.c4
-rw-r--r--gcc/config/m32r/m32r.h7
-rw-r--r--gcc/config/mips/mips.c39
-rw-r--r--gcc/config/mips/mips.md3
-rw-r--r--gcc/config/pa/pa.h3
-rw-r--r--gcc/config/rs6000/altivec.md209
-rw-r--r--gcc/config/rs6000/rs6000-protos.h1
-rw-r--r--gcc/config/rs6000/rs6000.c299
-rw-r--r--gcc/config/rs6000/sysv4.h4
-rw-r--r--gcc/config/s390/s390-protos.h3
-rw-r--r--gcc/config/s390/s390.c158
-rw-r--r--gcc/config/s390/s390.h18
-rw-r--r--gcc/config/s390/s390.md352
-rw-r--r--gcc/config/s390/tpf.h8
-rw-r--r--gcc/config/sh/sh.c4
-rw-r--r--gcc/config/sh/sh.md44
-rw-r--r--gcc/config/sh/symbian.c3
-rw-r--r--gcc/config/sparc/sparc.c64
-rw-r--r--gcc/cp/ChangeLog97
-rw-r--r--gcc/cp/call.c2
-rw-r--r--gcc/cp/class.c137
-rw-r--r--gcc/cp/cp-tree.h26
-rw-r--r--gcc/cp/decl.c3
-rw-r--r--gcc/cp/decl2.c8
-rw-r--r--gcc/cp/init.c12
-rw-r--r--gcc/cp/parser.c8
-rw-r--r--gcc/cp/pt.c524
-rw-r--r--gcc/cp/search.c404
-rw-r--r--gcc/cp/semantics.c1
-rw-r--r--gcc/dbxout.c26
-rw-r--r--gcc/defaults.h10
-rw-r--r--gcc/doc/install.texi2
-rw-r--r--gcc/doc/tm.texi7
-rw-r--r--gcc/dwarf2.h200
-rw-r--r--gcc/dwarf2out.c12
-rw-r--r--gcc/expmed.c5
-rw-r--r--gcc/fortran/ChangeLog34
-rw-r--r--gcc/fortran/primary.c36
-rw-r--r--gcc/fortran/resolve.c4
-rw-r--r--gcc/fortran/simplify.c122
-rw-r--r--gcc/fortran/trans-array.c4
-rw-r--r--gcc/fortran/trans-stmt.c152
-rw-r--r--gcc/function.c8
-rw-r--r--gcc/hooks.c12
-rw-r--r--gcc/hooks.h2
-rw-r--r--gcc/lambda-code.c348
-rw-r--r--gcc/libgcc2.c2
-rw-r--r--gcc/loop-doloop.c47
-rw-r--r--gcc/loop-iv.c2
-rw-r--r--gcc/po/ChangeLog8
-rw-r--r--gcc/po/de.po222
-rw-r--r--gcc/po/gcc.pot3438
-rw-r--r--gcc/rtl.h4
-rw-r--r--gcc/system.h2
-rw-r--r--gcc/testsuite/ChangeLog105
-rw-r--r--gcc/testsuite/g++.dg/ext/asm6.C11
-rw-r--r--gcc/testsuite/g++.dg/warn/Winline-4.C17
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20041007-1.c16
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/acc1.c21
-rw-r--r--gcc/testsuite/gcc.dg/20011119-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/Wconversion-2.c64
-rw-r--r--gcc/testsuite/gcc.dg/assign-warn-1.c123
-rw-r--r--gcc/testsuite/gcc.dg/assign-warn-2.c124
-rw-r--r--gcc/testsuite/gcc.dg/cpp/ident-1.c7
-rw-r--r--gcc/testsuite/gcc.dg/darwin-abi-2.c1
-rw-r--r--gcc/testsuite/gcc.dg/darwin-longdouble.c2
-rw-r--r--gcc/testsuite/gcc.dg/doloop-2.c19
-rw-r--r--gcc/testsuite/gcc.dg/func-args-1.c53
-rw-r--r--gcc/testsuite/gcc.dg/noncompile/20020213-1.c10
-rw-r--r--gcc/testsuite/gcc.dg/ppc-fsel-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/ppc-fsel-3.c11
-rw-r--r--gcc/testsuite/gcc.dg/ultrasp11.c25
-rw-r--r--gcc/testsuite/gcc.dg/warn-1.c2
-rw-r--r--gcc/testsuite/gfortran.dg/do_1.f9080
-rw-r--r--gcc/testsuite/gfortran.dg/empty_format_1.f9021
-rw-r--r--gcc/testsuite/gfortran.dg/intrinsic_verify_1.f9012
-rw-r--r--gcc/testsuite/gfortran.dg/ishft.f9059
-rw-r--r--gcc/testsuite/gfortran.dg/use_allocated_1.f9018
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/compile/nested.f9023
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mvbits.f905
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_pack.f903
-rw-r--r--gcc/testsuite/objc.dg/method-9.m2
-rw-r--r--gcc/tree-cfg.c102
-rw-r--r--gcc/tree-flow-inline.h2
-rw-r--r--gcc/tree-flow.h3
-rw-r--r--gcc/tree-inline.c3
-rw-r--r--gcc/tree-nested.c15
-rw-r--r--gcc/tree-pretty-print.c20
-rw-r--r--gcc/tree-ssa-loop-ivopts.c2
-rw-r--r--gcc/tree-ssa-pre.c2
-rw-r--r--gcc/tree-tailcall.c34
-rw-r--r--gcc/version.c2
-rw-r--r--include/ChangeLog6
-rw-r--r--include/xtensa-config.h15
-rw-r--r--libcpp/ChangeLog6
-rw-r--r--libcpp/pch.c6
-rw-r--r--libgfortran/ChangeLog15
-rw-r--r--libgfortran/intrinsics/string_intrinsics.c5
-rw-r--r--libgfortran/io/transfer.c7
-rw-r--r--libgfortran/io/unix.c1
-rw-r--r--libobjc/ChangeLog5
-rw-r--r--libobjc/archive.c104
-rw-r--r--libstdc++-v3/ChangeLog72
-rw-r--r--libstdc++-v3/Makefile.in2
-rw-r--r--libstdc++-v3/acinclude.m45
-rwxr-xr-xlibstdc++-v3/configure29
-rw-r--r--libstdc++-v3/configure.ac1
-rw-r--r--libstdc++-v3/include/Makefile.am21
-rw-r--r--libstdc++-v3/include/Makefile.in22
-rw-r--r--libstdc++-v3/include/bits/c++config2
-rw-r--r--libstdc++-v3/include/bits/list.tcc5
-rw-r--r--libstdc++-v3/include/bits/stl_tree.h3
-rw-r--r--libstdc++-v3/include/ext/array_allocator.h141
-rw-r--r--libstdc++-v3/include/tr1/array200
-rw-r--r--libstdc++-v3/libmath/Makefile.in2
-rw-r--r--libstdc++-v3/libsupc++/Makefile.in2
-rw-r--r--libstdc++-v3/po/Makefile.in2
-rwxr-xr-xlibstdc++-v3/scripts/create_testsuite_files17
-rw-r--r--libstdc++-v3/src/Makefile.in2
-rw-r--r--libstdc++-v3/src/mt_allocator.cc4
-rw-r--r--libstdc++-v3/testsuite/Makefile.am12
-rw-r--r--libstdc++-v3/testsuite/Makefile.in11
-rw-r--r--libstdc++-v3/testsuite/ext/array_allocator/1.cc65
-rw-r--r--libstdc++-v3/testsuite/ext/array_allocator/2.cc72
-rw-r--r--libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global_thread-1.cc (renamed from libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global-1.cc)0
-rw-r--r--libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global_thread-3.cc (renamed from libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global-3.cc)0
-rw-r--r--libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-1.cc (renamed from libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-1.cc)0
-rw-r--r--libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-3.cc (renamed from libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-3.cc)0
-rw-r--r--libstdc++-v3/testsuite/ext/mt_allocator/instantiate.cc6
-rw-r--r--libstdc++-v3/testsuite/lib/libstdc++.exp11
-rw-r--r--libstdc++-v3/testsuite/thread/pthread1.cc4
-rw-r--r--libstdc++-v3/testsuite/thread/pthread2.cc5
-rw-r--r--libstdc++-v3/testsuite/thread/pthread3.cc5
-rw-r--r--libstdc++-v3/testsuite/thread/pthread4.cc4
-rw-r--r--libstdc++-v3/testsuite/thread/pthread5.cc4
-rw-r--r--libstdc++-v3/testsuite/thread/pthread6.cc5
-rw-r--r--libstdc++-v3/testsuite/thread/pthread7-rope.cc14
153 files changed, 6634 insertions, 3509 deletions
diff --git a/ChangeLog b/ChangeLog
index 6aa769d8248..7bbbb85e421 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2004-10-07 J"orn Rennecke <joern.rennecke@st.com>
+
+ * MAINTAINERS: Update my email address.
+
+2004-10-07 Kazu Hirata <kazu@cs.umass.edu>
+
+ * MAINTAINERS (Language Front Ends Maintainers): New. Move
+ entries belonging to this category.
+
2004-10-06 Josef Zlomek <josef.zlomek@email.cz>
* MAINTAINERS: Update my e-mail address.
diff --git a/MAINTAINERS b/MAINTAINERS
index 3ecce26c9b5..686dd332221 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -72,7 +72,7 @@ rs6000 port David Edelsohn dje@watson.ibm.com
rs6000 vector extns Aldy Hernandez aldyh@redhat.com
s390 port Hartmut Penner hpenner@de.ibm.com
s390 port Ulrich Weigand uweigand@de.ibm.com
-sh port Joern Rennecke joern.rennecke@superh.com
+sh port Joern Rennecke joern.rennecke@st.com
sh port Alexandre Oliva aoliva@redhat.com
sparc port Richard Henderson rth@redhat.com
sparc port David S. Miller davem@redhat.com
@@ -99,7 +99,7 @@ VxWorks ports Zack Weinberg zack@codesourcery.com
VxWorks ports Nathan Sidwell nathan@codesourcery.com
windows, cygwin, mingw Christopher Faylor cgf@redhat.com
- Various Maintainers
+ Language Front Ends Maintainers
C front end/ISO C99 Joseph Myers jsm@polyomino.org.uk
C front end/ISO C99 Richard Henderson rth@redhat.com
@@ -114,18 +114,22 @@ fortran 95 Toon Moene toon@moene.indiv.nluug.nl
c++ Jason Merrill jason@redhat.com
c++ Mark Mitchell mark@codesourcery.com
c++ Nathan Sidwell nathan@codesourcery.com
-cpplib Dave Brolley brolley@redhat.com
-cpplib Per Bothner per@bothner.com
-cpplib Zack Weinberg zack@codesourcery.com
-cpplib Neil Booth neil@daikokuya.co.uk
java Per Bothner per@bothner.com
java Andrew Haley aph@redhat.com
-libgcj Tom Tromey tromey@redhat.com
-libgcj Bryce McKinlay bryce@gcc.gnu.org
mercury Fergus Henderson fjh@cs.mu.oz.au
objective-c Stan Shebs shebs@apple.com
objective-c Ovidiu Predescu ovidiu@cup.hp.com
objective-c Ziemowit Laski zlaski@apple.com
+treelang Tim Josling tej@melbpc.org.au
+
+ Various Maintainers
+
+cpplib Dave Brolley brolley@redhat.com
+cpplib Per Bothner per@bothner.com
+cpplib Zack Weinberg zack@codesourcery.com
+cpplib Neil Booth neil@daikokuya.co.uk
+libgcj Tom Tromey tromey@redhat.com
+libgcj Bryce McKinlay bryce@gcc.gnu.org
libobjc Nicola Pero n.pero@mi.flashnet.it
libobjc Andrew Pinski pinskia@physics.uc.edu
alias analysis John Carr jfc@mit.edu
@@ -167,7 +171,6 @@ docs co-maintainer Gerald Pfeifer gerald@pfeifer.com
docs co-maintainer Joseph Myers jsm@polyomino.org.uk
predict.def Jan Hubicka jh@suse.cz
contrib/regression Geoff Keating geoffk@geoffk.org
-treelang Tim Josling tej@melbpc.org.au
new regalloc (ra*) Michael Matz matz@suse.de
gcov Jan Hubicka jh@suse.cz
gcov Nathan Sidwell nathan@codesourcery.com
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 71d6d1b3b8f..3f1b1a7909b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,351 @@
+2004-10-08 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c/16999
+ * c-ppoutput.c (cb_ident): Don't quote string as it is already
+ quoted.
+
+2004-10-08 Diego Novillo <dnovillo@redhat.com>
+
+ * tree-ssa-pre.c (init_pre): Use size of ARRAY_REF to allocate
+ reference_node_pool.
+
+2004-10-08 Kazu Hirata <kazu@cs.umass.edu>
+
+ * tree-cfg.c: Fix a comment typo.
+
+2004-10-08 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ * config/s390/s390.c (s390_register_info): Don't save fprs for
+ -msoft-float.
+ (s390_conditional_register_usage): Make fprs 'fixed' for -msoft-float.
+
+2004-10-08 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.h (TARGET_DEFAULT_BACKCHAIN): New define.
+ (TARGET_DEFAULT): Use symbolic values.
+ * config/s390/tpf.h (TARGET_DEFAULT_BACKCHAIN): Redefine.
+ (TARGET_DEFAULT): Use symbolic values.
+ * config/s390/s390.c (s390_backchain_string): Initialize to
+ TARGET_DEFAULT_BACKCHAIN.
+
+2004-10-08 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * builtins.c (expand_builtin_mempcpy): Move tree handling code to
+ fold_builtin_mempcpy. Accept a type parameter. Delete duplicate
+ code.
+ (expand_builtin_strcat): Accept a type parameter.
+ (fold_builtin_mempcpy): Accept a type and endp parameter.
+
+ * builtins.c (expand_builtin_strncpy): Delete duplicate code.
+ Accept an `exp' instead of an `arglist'.
+
+2004-10-08 Nathan Sidwell <nathan@codesourcery.com>
+
+ * tree-tailcall.c (tree_optimize_tail_calls_1): Use fold_convert,
+ reverting my 2004-09-07 patch to use build_int_cst.
+
+2004-10-08 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR target/17245
+ * config/sparc/sparc.c (input_operand): Remove redundant code
+ for handling LO_SUM.
+ (legitimate_address_p) <REG+REG>: Do not recheck TARGET_V9.
+ <LO_SUM>: If LO_SUM is offsettable, accept it for TFmode on V9.
+ Otherwise only accept it for TFmode if quad move insns are available.
+
+2004-10-08 Kazu Hirata <kazu@cs.umass.edu>
+
+ * tree-cfg.c (tree_forwarder_block_p): Reorder checks so that
+ common cases will be caught earlier than others.
+
+2004-10-08 Michael Matz <matz@suse.de>
+
+ * loop-doloop.c (doloop_optimize): Extend count.
+
+2004-10-08 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ * config/sh/sh.md (prefetch_media, prefetch_i4): New insns.
+ (prefetch): Convert to expander.
+
+2004-10-08 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ * config/sh/sh.md (tls_global_dynamic): Use MEM pattern for the
+ first argument of CALL.
+ (tls_local_dynamic): Likewise.
+
+2004-10-08 Joseph S. Myers <jsm@polyomino.org.uk>
+
+ * c-typeck.c (enum impl_conv): New.
+ (convert_for_assignment): Use it. Take tree for function called
+ instead of its name. Handle ObjC selectors for diagnostics at
+ start of function. Select diagnostic text within the function
+ using full sentences for diagnsotics. Use %qE to name functions
+ in diagnostics.
+ (convert_arguments, build_modify_expr,
+ c_convert_parm_for_inlining, digest_init, c_finish_return): Update
+ callers to convert_for_assignment.
+ (warn_for_assignment): Remove.
+
+2004-10-08 Nick Clifton <nickc@redhat.com>
+
+ * config/sh/symbian.c (symbian_possibly_export_base_class):
+ Replace use of deleted TYPE_USES_VIRTUAL_BASECLASSES macro with
+ TYPE_CONTAINS_VPTR_P.
+
+2004-10-08 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
+
+ * config/m32r/m32r.h (CONDITIONAL_REGISTER_USAGE): Don't exclude
+ fixed registers form all_used_regs. Update call_really_used_regs.
+ (CALL_REALLY_USED_REGISTERS): Define.
+ * config/m32r/m32r.c (MUST_SAVE_REGISTER): Replace call_used_regs
+ with call_really_used_regs.
+
+2004-10-08 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/sysv4.h (STARTFILE_LINUX_SPEC): Choose gcrt1.o
+ for -profile as well as -p and -pg.
+
+2004-10-07 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * libgcc2.c (__moddi3): Cast &w to UDWtype*.
+
+2004-10-07 Kazu Hirata <kazu@cs.umass.edu>
+
+ * tree-cfg.c (tree_block_forwards_to): Remove.
+ * tree-flow.h: Remove the corresponding prototype.
+
+2004-10-07 Kazu Hirata <kazu@cs.umass.edu>
+
+ * tree-flow-inline.h (phi_nodes): Remove an unnecessary check
+ for ENTRY_BLOCK_PTR and EXIT_BLOCK_PTR.
+
+2004-10-07 Geoffrey Keating <geoffk@apple.com>
+
+ Radar 3813796
+ * config/rs6000/rs6000.c (rs6000_generate_compare): When
+ flag_trapping_math is in effect, don't generate subtract
+ instructions.
+
+2004-10-07 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390-protos.h (s390_narrow_logical_operator): Add.
+ * config/s390/s390.c (s390_narrow_logical_operator): New function.
+ (s390_extra_constraint_str): Add 'A' constraints.
+ (s390_const_ok_for_constraint_p): Add 'Nx' constraints.
+ * config/s390/s390.h (EXTRA_MEMORY_CONSTRAINT): Add 'A' constraint.
+ (CONSTRAINT_LEN): Likewise.
+ * config/s390/s390.md ("*anddi3"): Add NI alternative and splitter.
+ ("*andsi3_zarch", "*andsi3_esa"): Likewise.
+ ("*andhi3_zarch", "*andhi3_esa"): Likewise.
+ ("*iordi3"): Add OI alternative and splitter.
+ ("*iorsi3_zarch", "*iorsi3_esa"): Likewise.
+ ("*iorhi3_zarch", "*iorhi3_esa"): Likewise.
+ ("*xordi3"): Add XI alternative and splitter.
+ ("*xorsi3", "*xorhi3"): Likewise.
+
+2004-10-07 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/mips.c (mips_function_rodata_section): New function.
+ (TARGET_ASM_FUNCTION_RODATA_SECTION): Use it.
+
+2004-10-07 Devang Patel <dpatel@apple.com>
+
+ * rs6000/altivec.md (UNSPEC_VCMPBFP, UNSPEC_VCMPEQUB, UNSPEC_VCMPEQUH,
+ UNSPEC_VCMPEQUW, UNSPEC_VCMPGEFP, UNSPEC_VCMPGTUB, UNSPEC_VCMPGTSB,
+ UNSPEC_VCMPGTUH, UNSPEC_VCMPGTSH, UNSPEC_VCMPGTUW, UNSPEC_VCMPGTSW,
+ UNSPEC_VCMPGTFP, UNSPEC_VSEL4SI, UNSPEC_VSEL4SF, UNSPEC_VSEL8HI,
+ UNSPEC_VSEL16QI, UNSPEC_VCOND_V4SI, UNSPEC_VCOND_V4SF, UNSPEC_VCOND_V8HI,
+ UNSPEC_VCOND_V16QI, UNSPEC_VCONDU_V4SI, UNSPEC_VCONDU_V8HI,
+ UNSPEC_VCONDU_V16QI): New constant defines.
+ (vcondv4si, vcondv4sf, vcondv8hi, vcondv16qi, vconduv4si, vconduv8hi,
+ vconduv16qi): New patterns.
+ * rs6000/rs6000-protos.h (rs6000_emit_vector_cond_expr): New function.
+ * rs6000/rs6000.c (rs6000_emit_vector_cond_expr): New function.
+ (get_vec_cmp_insn): Same.
+ (get_vsel_insn): Same.
+ (rs6000_emit_vector_compare): Same.
+ (rs6000_emit_vector_select): Same.
+ (INSN_NOT_AVAILABLE): New.
+
+2004-10-07 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR tree-optimization/17749
+ * tree-tailcall.c (find_tail_calls): Check that parameter is
+ a gimple_reg.
+
+2004-10-07 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/ia64/ia64.c: Fix a comment typo.
+
+2004-10-07 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * doc/install.texi (*-*-solaris2*): Fix marker for URL.
+
+2004-10-07 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/17115
+ * tree-inline.c (expand_call_inline): Do not warn for functions
+ marked with attribute noinline.
+
+2004-10-07 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR target/17862
+ * config/sparc/sparc.c (sparc_output_mi_thunk): Set
+ current_function_uses_only_leaf_regs as well as sparc_leaf_function_p.
+
+ * config/sparc/sparc.c (sparc_gimplify_va_arg): Pass 'false' instead
+ of 0 as 4th argument to pass_by_reference.
+ Call build_va_arg_indirect_ref instead of build_fold_indirect_ref.
+
+2004-10-06 Eric Christopher <echristo@redhat.com>
+
+ * config/sh/sh.c (sh_dwarf_calling_convention): Fix renesas dwarf
+ attribute.
+
+2004-10-07 Richard Sandiford <rsandifo@redhat.com>
+
+ PR target/17770
+ * config/mips/mips.md (mov_<load>l): Remove hazard=none attribute.
+
+2004-10-07 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR rtl-optimization/17791
+ * loop-doloop.c (doloop_modify): Take number of iterations as
+ argument.
+ (doloop_optimize): Extend or shorten the number of iterations
+ when changing mode of counter register.
+ * loop-iv.c (lowpart_subreg): Export.
+ * rtl.h (lowpart_subreg): Declare.
+
+2004-10-07 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR tree-optimization/17806
+ * cfghooks.c (split_edge): Update IRREDUCIBLE_LOOP flags.
+ * cfgloopmanip.c (loop_split_edge_with): Updating of IRREDUCIBLE_LOOP
+ flags moved to split_edge.
+
+2004-10-07 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR middle-end/17285
+ * expmed.c (expand_sdiv_pow2): Force a stack adjustment
+ before tentatively building the conditional move sequence.
+
+2004-10-07 Richard Sandiford <rsandifo@redhat.com>
+
+ PR target/16815
+ * function.c (assign_parm_setup_block_p): Tighten BLOCK_REG_PADDING
+ check.
+ * config/pa/pa.h (BLOCK_REG_PADDING): Define in terms of
+ function_arg_padding.
+
+2004-10-07 Richard Sandiford <rsandifo@redhat.com>
+
+ PR bootstrap/17857
+ * Makefile.in (stmp-fixproto): Pass FIX_HEADER=build/... to fixproto.
+
+2004-10-07 Kazu Hirata <kazu@cs.umass.edu>
+
+ * hooks.c (hook_int_void_1, hook_void_int): Remove.
+ * hooks.h: Remove the corresponding prototypes.
+
+2004-10-06 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR middle-end/17849
+ * tree-nested.c (walk_stmt_info): Add changed field.
+ (convert_nonlocal_reference): Set changed to when we
+ change a decl to unnested decl.
+ <case ADDR_EXPR>: Instead of checking if the immediate part
+ of the ADDR_EXPR changed, check the field changed.
+ Use recompute_tree_invarant_for_addr_expr instead of unsetting
+ TREE_INVARIANT.
+ (convert_local_reference): Set changed to when we
+ change a decl to unnested decl.
+ <case ADDR_EXPR>: Instead of checking if the immediate part
+ of the ADDR_EXPR changed, check the field changed.
+ Also call recompute_tree_invarant_for_addr_expr on the ADDR_EXPR.
+
+2004-10-06 Kazu Hirata <kazu@cs.umass.edu>
+
+ * defaults.h (DWARF2_GENERATE_TEXT_SECTION_LABEL): Remove.
+ * dwarf2out.c (dwarf2out_init): Remove references to
+ DWARF2_GENERATE_TEXT_SECTION_LABEL.
+ * system.h: Poison DWARF2_GENERATE_TEXT_SECTION_LABEL.
+ * doc/tm.texi (DWARF2_GENERATE_TEXT_SECTION_LABEL): Remove.
+
+2004-10-06 Joseph S. Myers <jsm@polyomino.org.uk>
+
+ * c-typeck.c (convert_arguments): Take expression for called
+ function rather than its name. Handle ObjC selectors directly
+ rather than relying on warn_for_assignment to do so. Call warning
+ directly rather than warn_for_assignment. Use %qE in diagnostics.
+ Say "argument" rather than "arg" in diagnostics.
+ (build_function_call): Update call to convert_arguments.
+
+2004-10-06 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR debug/17787
+ * dbxout.c (dbxout_symbol): Really handle RECORD, UNION, and
+ ENUMs specially instead of just saying we do.
+
+2004-10-06 Eric Christopher <echristo@redhat.com>
+
+ * dwarf2.h: Sync with include/elf/dwarf2.h
+
+2004-10-06 Daniel Berlin <dberlin@dberlin.org>
+
+ * tree-pretty-print.c (dump_generic_node): Fix printing of BINFO
+ and TREE_VEC nodes.
+
+2004-10-06 Daniel Berlin <dberlin@dberlin.org>
+
+ * lambda-code.c (lambda_loopnest_to_gcc_loopnest): Convert
+ to use FOR_EACH_SSA_USE_OPERAND iterator, and propagate_value.
+
+2004-10-06 Daniel Berlin <dberlin@dberlin.org>
+
+ * lambda-code.c (compute_nest_using_fourier_motzkin): New
+ function.
+ (lambda_compute_auxillary_space): Split from here.
+
+2004-10-06 Daniel Berlin <dberlin@dberlin.org>
+
+ * tree-ssa-loop-ivopts.c (expr_invariant_in_loop): Make non-static.
+ * tree-flow.h: Add prototype.
+ * lambda-code.c (invariant_in_loop_and_outer_loops): Use
+ expr_invariant_in_loop.
+
+2004-10-06 Kazu Hirata <kazu@cs.umass.edu>
+
+ * tree-cfg.c (thread_jumps): Remove a duplicate check for
+ EXIT_BLOCK_PTR.
+
+2004-10-06 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390-protos.h (s_imm_operand): Remove.
+ (s390_pool_operand): Add prototype.
+ * config/s390/s390.c (general_s_operand): Remove.
+ (s_imm_operand): Remove.
+ (s_operand): Merge contents of general_s_operand.
+ (s390_pool_operand): New function.
+ * config/s390/s390.h (PREDICATE_CODES): Remove s_imm_operand.
+ * config/s390/s390.md ("*cmpdi_cct", "*cmpsi_cct"): New insns.
+ ("*cmpdi_ccu"): Merge Q->Q alternative.
+ ("*cmpsi_ccu", "*cmphi_ccu"): Likewise.
+ ("*cmpqi_ccu"): Merge Q->Q, n->Q, n->S alternatives.
+ ("*cli"): Remove.
+ ("*cmpdi_ccu_mem", "*cmpsi_ccu_mem"): Likewise.
+ ("*cmphi_ccu_mem", "*cmpqi_ccu_mem"): Likewise.
+ ("*movstricthi"): Use memory_operand instead of s_imm_operand.
+
+2004-10-06 Steve Ellcey <sje@cup.hp.com>
+
+ * config/ia64/ia64.h (FUNCTION_ARG_BOUNDARY): Change macro to
+ call ia64_function_arg_boundary.
+ * config/ia64/ia64-protos.h (ia64_function_arg_boundary): New.
+ * config/ia64/ia64.c (ia64_function_arg_boundary): New.
+ (ia64_function_arg_advance): Do not put 128 bit floats into
+ FP registers.
+
2004-10-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* builtins.c (expand_builtin_strcpy): Delete duplicate code.
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 2f129272b76..50cf9dd5487 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -2901,6 +2901,7 @@ stmp-fixproto: fixhdr.ready fixproto stmp-int-hdrs
else \
: This line works around a 'make' bug in BSDI 1.1.; \
FIXPROTO_DEFINES="$(FIXPROTO_DEFINES)"; export FIXPROTO_DEFINES; \
+ FIX_HEADER="build/fix-header$(build_exeext)"; export FIX_HEADER; \
mkinstalldirs="$(mkinstalldirs)"; \
export mkinstalldirs; \
if [ -d "$(SYSTEM_HEADER_DIR)" ]; then \
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 11fd5687a0e..76be4a7f619 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -107,12 +107,12 @@ static rtx expand_builtin_memcmp (tree, tree, rtx, enum machine_mode);
static rtx expand_builtin_strcmp (tree, rtx, enum machine_mode);
static rtx expand_builtin_strncmp (tree, rtx, enum machine_mode);
static rtx builtin_memcpy_read_str (void *, HOST_WIDE_INT, enum machine_mode);
-static rtx expand_builtin_strcat (tree, rtx, enum machine_mode);
+static rtx expand_builtin_strcat (tree, tree, rtx, enum machine_mode);
static rtx expand_builtin_strncat (tree, rtx, enum machine_mode);
static rtx expand_builtin_strspn (tree, rtx, enum machine_mode);
static rtx expand_builtin_strcspn (tree, rtx, enum machine_mode);
static rtx expand_builtin_memcpy (tree, rtx, enum machine_mode);
-static rtx expand_builtin_mempcpy (tree, rtx, enum machine_mode, int);
+static rtx expand_builtin_mempcpy (tree, tree, rtx, enum machine_mode, int);
static rtx expand_builtin_memmove (tree, tree, rtx, enum machine_mode);
static rtx expand_builtin_bcopy (tree, tree);
static rtx expand_builtin_strcpy (tree, rtx, enum machine_mode);
@@ -162,7 +162,7 @@ static tree fold_builtin_ceil (tree);
static tree fold_builtin_round (tree);
static tree fold_builtin_bitop (tree);
static tree fold_builtin_memcpy (tree);
-static tree fold_builtin_mempcpy (tree);
+static tree fold_builtin_mempcpy (tree, tree, int);
static tree fold_builtin_memmove (tree, tree);
static tree fold_builtin_strchr (tree);
static tree fold_builtin_memcmp (tree);
@@ -2621,7 +2621,7 @@ expand_builtin_memcpy (tree exp, rtx target, enum machine_mode mode)
stpcpy. */
static rtx
-expand_builtin_mempcpy (tree arglist, rtx target, enum machine_mode mode,
+expand_builtin_mempcpy (tree arglist, tree type, rtx target, enum machine_mode mode,
int endp)
{
if (!validate_arglist (arglist,
@@ -2648,48 +2648,20 @@ expand_builtin_mempcpy (tree arglist, rtx target, enum machine_mode mode,
unsigned int dest_align
= get_pointer_alignment (dest, BIGGEST_ALIGNMENT);
rtx dest_mem, src_mem, len_rtx;
+ tree result = fold_builtin_mempcpy (arglist, type, endp);
- /* If DEST is not a pointer type, call the normal function. */
- if (dest_align == 0)
+ if (result)
+ return expand_expr (result, target, mode, EXPAND_NORMAL);
+
+ /* If either SRC or DEST is not a pointer type, don't do this
+ operation in-line. */
+ if (dest_align == 0 || src_align == 0)
return 0;
- /* If SRC and DEST are the same (and not volatile), do nothing. */
- if (operand_equal_p (src, dest, 0))
- {
- tree expr;
-
- if (endp == 0)
- {
- /* Evaluate and ignore LEN in case it has side-effects. */
- expand_expr (len, const0_rtx, VOIDmode, EXPAND_NORMAL);
- return expand_expr (dest, target, mode, EXPAND_NORMAL);
- }
-
- if (endp == 2)
- len = fold (build2 (MINUS_EXPR, TREE_TYPE (len), len,
- integer_one_node));
- len = fold_convert (TREE_TYPE (dest), len);
- expr = fold (build2 (PLUS_EXPR, TREE_TYPE (dest), dest, len));
- return expand_expr (expr, target, mode, EXPAND_NORMAL);
- }
-
/* If LEN is not constant, call the normal function. */
if (! host_integerp (len, 1))
return 0;
- /* If the LEN parameter is zero, return DEST. */
- if (tree_low_cst (len, 1) == 0)
- {
- /* Evaluate and ignore SRC in case it has side-effects. */
- expand_expr (src, const0_rtx, VOIDmode, EXPAND_NORMAL);
- return expand_expr (dest, target, mode, EXPAND_NORMAL);
- }
-
- /* If either SRC is not a pointer type, don't do this
- operation in-line. */
- if (src_align == 0)
- return 0;
-
len_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0);
src_str = c_getstr (src);
@@ -2779,7 +2751,7 @@ expand_builtin_memmove (tree arglist, tree type, rtx target,
it is ok to use memcpy as well. */
if (integer_onep (len))
{
- rtx ret = expand_builtin_mempcpy (arglist, target, mode,
+ rtx ret = expand_builtin_mempcpy (arglist, type, target, mode,
/*endp=*/0);
if (ret)
return ret;
@@ -2950,7 +2922,8 @@ expand_builtin_stpcpy (tree exp, rtx target, enum machine_mode mode)
narglist = build_tree_list (NULL_TREE, lenp1);
narglist = tree_cons (NULL_TREE, src, narglist);
narglist = tree_cons (NULL_TREE, dst, narglist);
- ret = expand_builtin_mempcpy (narglist, target, mode, /*endp=*/2);
+ ret = expand_builtin_mempcpy (narglist, TREE_TYPE (exp),
+ target, mode, /*endp=*/2);
if (ret)
return ret;
@@ -3010,35 +2983,21 @@ builtin_strncpy_read_str (void *data, HOST_WIDE_INT offset,
if we failed the caller should emit a normal call. */
static rtx
-expand_builtin_strncpy (tree arglist, rtx target, enum machine_mode mode)
+expand_builtin_strncpy (tree exp, rtx target, enum machine_mode mode)
{
- if (!validate_arglist (arglist,
- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
- return 0;
- else
+ tree arglist = TREE_OPERAND (exp, 1);
+ if (validate_arglist (arglist,
+ POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
{
tree slen = c_strlen (TREE_VALUE (TREE_CHAIN (arglist)), 1);
tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
- tree fn;
-
- /* We must be passed a constant len parameter. */
- if (TREE_CODE (len) != INTEGER_CST)
- return 0;
-
- /* If the len parameter is zero, return the dst parameter. */
- if (integer_zerop (len))
- {
- /* Evaluate and ignore the src argument in case it has
- side-effects. */
- expand_expr (TREE_VALUE (TREE_CHAIN (arglist)), const0_rtx,
- VOIDmode, EXPAND_NORMAL);
- /* Return the dst parameter. */
- return expand_expr (TREE_VALUE (arglist), target, mode,
- EXPAND_NORMAL);
- }
+ tree result = fold_builtin_strncpy (exp, slen);
+
+ if (result)
+ return expand_expr (result, target, mode, EXPAND_NORMAL);
- /* Now, we must be passed a constant src ptr parameter. */
- if (slen == 0 || TREE_CODE (slen) != INTEGER_CST)
+ /* We must be passed a constant len and src parameter. */
+ if (!host_integerp (len, 1) || !slen || !host_integerp (slen, 1))
return 0;
slen = size_binop (PLUS_EXPR, slen, ssize_int (1));
@@ -3068,14 +3027,8 @@ expand_builtin_strncpy (tree arglist, rtx target, enum machine_mode mode)
dest_mem = convert_memory_address (ptr_mode, dest_mem);
return dest_mem;
}
-
- /* OK transform into builtin memcpy. */
- fn = implicit_built_in_decls[BUILT_IN_MEMCPY];
- if (!fn)
- return 0;
- return expand_expr (build_function_call_expr (fn, arglist),
- target, mode, EXPAND_NORMAL);
}
+ return 0;
}
/* Callback routine for store_by_pieces. Read GET_MODE_BITSIZE (MODE)
@@ -3610,7 +3563,7 @@ expand_builtin_strncmp (tree exp, rtx target, enum machine_mode mode)
otherwise try to get the result in TARGET, if convenient. */
static rtx
-expand_builtin_strcat (tree arglist, rtx target, enum machine_mode mode)
+expand_builtin_strcat (tree arglist, tree type, rtx target, enum machine_mode mode)
{
if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
return 0;
@@ -3660,7 +3613,7 @@ expand_builtin_strcat (tree arglist, rtx target, enum machine_mode mode)
pass in a target of zero, it should never actually be
used. If this was successful return the original
dst, not the result of mempcpy. */
- if (expand_builtin_mempcpy (arglist, /*target=*/0, mode, /*endp=*/0))
+ if (expand_builtin_mempcpy (arglist, type, /*target=*/0, mode, /*endp=*/0))
return expand_expr (dst, target, mode, EXPAND_NORMAL);
else
return 0;
@@ -5391,7 +5344,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode,
break;
case BUILT_IN_STRNCPY:
- target = expand_builtin_strncpy (arglist, target, mode);
+ target = expand_builtin_strncpy (exp, target, mode);
if (target)
return target;
break;
@@ -5403,7 +5356,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode,
break;
case BUILT_IN_STRCAT:
- target = expand_builtin_strcat (arglist, target, mode);
+ target = expand_builtin_strcat (arglist, TREE_TYPE (exp), target, mode);
if (target)
return target;
break;
@@ -5459,7 +5412,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode,
break;
case BUILT_IN_MEMPCPY:
- target = expand_builtin_mempcpy (arglist, target, mode, /*endp=*/ 1);
+ target = expand_builtin_mempcpy (arglist, TREE_TYPE (exp), target, mode, /*endp=*/ 1);
if (target)
return target;
break;
@@ -6991,31 +6944,34 @@ fold_builtin_memcpy (tree exp)
NULL_TREE if no simplification can be made. */
static tree
-fold_builtin_mempcpy (tree exp)
+fold_builtin_mempcpy (tree arglist, tree type, int endp)
{
- tree arglist = TREE_OPERAND (exp, 1);
- tree dest, src, len;
-
- if (!validate_arglist (arglist,
- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
- return 0;
+ if (validate_arglist (arglist,
+ POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
+ {
+ tree dest = TREE_VALUE (arglist);
+ tree src = TREE_VALUE (TREE_CHAIN (arglist));
+ tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
- dest = TREE_VALUE (arglist);
- src = TREE_VALUE (TREE_CHAIN (arglist));
- len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
+ /* If the LEN parameter is zero, return DEST. */
+ if (integer_zerop (len))
+ return omit_one_operand (type, dest, src);
- /* If the LEN parameter is zero, return DEST. */
- if (integer_zerop (len))
- return omit_one_operand (TREE_TYPE (exp), dest, src);
+ /* If SRC and DEST are the same (and not volatile), return DEST+LEN. */
+ if (operand_equal_p (src, dest, 0))
+ {
+ if (endp == 0)
+ return omit_one_operand (type, dest, len);
- /* If SRC and DEST are the same (and not volatile), return DEST+LEN. */
- if (operand_equal_p (src, dest, 0))
- {
- tree temp = fold_convert (TREE_TYPE (dest), len);
- temp = fold (build2 (PLUS_EXPR, TREE_TYPE (dest), dest, temp));
- return fold_convert (TREE_TYPE (exp), temp);
+ if (endp == 2)
+ len = fold (build2 (MINUS_EXPR, TREE_TYPE (len), len,
+ ssize_int (1)));
+
+ len = fold_convert (TREE_TYPE (dest), len);
+ len = fold (build2 (PLUS_EXPR, TREE_TYPE (dest), dest, len));
+ return fold_convert (type, len);
+ }
}
-
return 0;
}
@@ -7984,7 +7940,7 @@ fold_builtin_1 (tree exp, bool ignore)
return fold_builtin_memcpy (exp);
case BUILT_IN_MEMPCPY:
- return fold_builtin_mempcpy (exp);
+ return fold_builtin_mempcpy (arglist, type, /*endp=*/1);
case BUILT_IN_MEMMOVE:
return fold_builtin_memmove (arglist, type);
diff --git a/gcc/c-ppoutput.c b/gcc/c-ppoutput.c
index 95563995e7c..64b27a75f62 100644
--- a/gcc/c-ppoutput.c
+++ b/gcc/c-ppoutput.c
@@ -304,7 +304,7 @@ cb_ident (cpp_reader *pfile ATTRIBUTE_UNUSED, source_location line,
const cpp_string *str)
{
maybe_print_line (line);
- fprintf (print.outf, "#ident \"%s\"\n", str->text);
+ fprintf (print.outf, "#ident %s\n", str->text);
print.src_line++;
}
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 27c8cd47c83..64669c88ca3 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -55,6 +55,15 @@ enum lvalue_use {
lv_asm
};
+/* Possible cases of implicit bad conversions. Used to select
+ diagnostic messages in convert_for_assignment. */
+enum impl_conv {
+ ic_argpass,
+ ic_assign,
+ ic_init,
+ ic_return
+};
+
/* The level of nesting inside "__alignof__". */
int in_alignof;
@@ -81,9 +90,8 @@ static tree default_function_array_conversion (tree);
static tree lookup_field (tree, tree);
static tree convert_arguments (tree, tree, tree, tree);
static tree pointer_diff (tree, tree);
-static tree convert_for_assignment (tree, tree, const char *, tree, tree,
+static tree convert_for_assignment (tree, tree, enum impl_conv, tree, tree,
int);
-static void warn_for_assignment (const char *, const char *, tree, int);
static tree valid_compound_expr_initializer (tree, tree);
static void push_string (const char *);
static void push_member_name (tree);
@@ -1976,7 +1984,7 @@ build_function_call (tree function, tree params)
function prototype, or apply default promotions. */
coerced_params
- = convert_arguments (TYPE_ARG_TYPES (fntype), params, name, fundecl);
+ = convert_arguments (TYPE_ARG_TYPES (fntype), params, function, fundecl);
/* Check that the arguments to the function are valid. */
@@ -2014,7 +2022,8 @@ build_function_call (tree function, tree params)
It may be 0, if that info is not available.
It is used only for generating error messages.
- NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
+ FUNCTION is a tree for the called function. It is used only for
+ error messages, where it is formatted with %qE.
This is also where warnings about wrong number of args are generated.
@@ -2022,11 +2031,21 @@ build_function_call (tree function, tree params)
with the elements of the list in the TREE_VALUE slots of those nodes. */
static tree
-convert_arguments (tree typelist, tree values, tree name, tree fundecl)
+convert_arguments (tree typelist, tree values, tree function, tree fundecl)
{
tree typetail, valtail;
tree result = NULL;
int parmnum;
+ tree selector;
+
+ /* Change pointer to function to the function itself for
+ diagnostics. */
+ if (TREE_CODE (function) == ADDR_EXPR
+ && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
+ function = TREE_OPERAND (function, 0);
+
+ /* Handle an ObjC selector specially for diagnostics. */
+ selector = objc_message_selector ();
/* Scan the given expressions and types, producing individual
converted arguments and pushing them on RESULT in reverse order. */
@@ -2037,17 +2056,21 @@ convert_arguments (tree typelist, tree values, tree name, tree fundecl)
{
tree type = typetail ? TREE_VALUE (typetail) : 0;
tree val = TREE_VALUE (valtail);
+ tree rname = function;
+ int argnum = parmnum + 1;
if (type == void_type_node)
{
- if (name)
- error ("too many arguments to function %qs",
- IDENTIFIER_POINTER (name));
- else
- error ("too many arguments to function");
+ error ("too many arguments to function %qE", function);
break;
}
+ if (selector && argnum > 2)
+ {
+ rname = selector;
+ argnum -= 2;
+ }
+
/* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
/* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
to convert automatically to a pointer. */
@@ -2078,22 +2101,34 @@ convert_arguments (tree typelist, tree values, tree name, tree fundecl)
if (INTEGRAL_TYPE_P (type)
&& TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
- warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name, parmnum + 1);
+ warning ("passing argument %d of %qE as integer "
+ "rather than floating due to prototype",
+ argnum, rname);
if (INTEGRAL_TYPE_P (type)
&& TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
- warn_for_assignment ("%s as integer rather than complex due to prototype", (char *) 0, name, parmnum + 1);
+ warning ("passing argument %d of %qE as integer "
+ "rather than complex due to prototype",
+ argnum, rname);
else if (TREE_CODE (type) == COMPLEX_TYPE
&& TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
- warn_for_assignment ("%s as complex rather than floating due to prototype", (char *) 0, name, parmnum + 1);
+ warning ("passing argument %d of %qE as complex "
+ "rather than floating due to prototype",
+ argnum, rname);
else if (TREE_CODE (type) == REAL_TYPE
&& INTEGRAL_TYPE_P (TREE_TYPE (val)))
- warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name, parmnum + 1);
+ warning ("passing argument %d of %qE as floating "
+ "rather than integer due to prototype",
+ argnum, rname);
else if (TREE_CODE (type) == COMPLEX_TYPE
&& INTEGRAL_TYPE_P (TREE_TYPE (val)))
- warn_for_assignment ("%s as complex rather than integer due to prototype", (char *) 0, name, parmnum + 1);
+ warning ("passing argument %d of %qE as complex "
+ "rather than integer due to prototype",
+ argnum, rname);
else if (TREE_CODE (type) == REAL_TYPE
&& TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
- warn_for_assignment ("%s as floating rather than complex due to prototype", (char *) 0, name, parmnum + 1);
+ warning ("passing argument %d of %qE as floating "
+ "rather than complex due to prototype",
+ argnum, rname);
/* ??? At some point, messages should be written about
conversions between complex types, but that's too messy
to do now. */
@@ -2103,9 +2138,9 @@ convert_arguments (tree typelist, tree values, tree name, tree fundecl)
/* Warn if any argument is passed as `float',
since without a prototype it would be `double'. */
if (formal_prec == TYPE_PRECISION (float_type_node))
- warn_for_assignment ("%s as %<float%> rather than "
- "%<double%> due to prototype",
- (char *) 0, name, parmnum + 1);
+ warning ("passing argument %d of %qE as %<float%> "
+ "rather than %<double%> due to prototype",
+ argnum, rname);
}
/* Detect integer changing in width or signedness.
These warnings are only activated with
@@ -2123,7 +2158,8 @@ convert_arguments (tree typelist, tree values, tree name, tree fundecl)
and the actual arg is that enum type. */
;
else if (formal_prec != TYPE_PRECISION (type1))
- warn_for_assignment ("%s with different width due to prototype", (char *) 0, name, parmnum + 1);
+ warning ("passing argument %d of %qE with different "
+ "width due to prototype", argnum, rname);
else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
;
/* Don't complain if the formal parameter type
@@ -2149,15 +2185,17 @@ convert_arguments (tree typelist, tree values, tree name, tree fundecl)
&& TYPE_UNSIGNED (TREE_TYPE (val)))
;
else if (TYPE_UNSIGNED (type))
- warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name, parmnum + 1);
+ warning ("passing argument %d of %qE as unsigned "
+ "due to prototype", argnum, rname);
else
- warn_for_assignment ("%s as signed due to prototype", (char *) 0, name, parmnum + 1);
+ warning ("passing argument %d of %qE as signed "
+ "due to prototype", argnum, rname);
}
}
- parmval = convert_for_assignment (type, val,
- (char *) 0, /* arg passing */
- fundecl, name, parmnum + 1);
+ parmval = convert_for_assignment (type, val, ic_argpass,
+ fundecl, function,
+ parmnum + 1);
if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
&& INTEGRAL_TYPE_P (type)
@@ -2180,13 +2218,7 @@ convert_arguments (tree typelist, tree values, tree name, tree fundecl)
}
if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
- {
- if (name)
- error ("too few arguments to function %qs",
- IDENTIFIER_POINTER (name));
- else
- error ("too few arguments to function");
- }
+ error ("too few arguments to function %qE", function);
return nreverse (result);
}
@@ -3362,7 +3394,7 @@ build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
/* Convert new value to destination type. */
- newrhs = convert_for_assignment (lhstype, newrhs, _("assignment"),
+ newrhs = convert_for_assignment (lhstype, newrhs, ic_assign,
NULL_TREE, NULL_TREE, 0);
if (TREE_CODE (newrhs) == ERROR_MARK)
return error_mark_node;
@@ -3379,7 +3411,7 @@ build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
if (olhstype == TREE_TYPE (result))
return result;
- return convert_for_assignment (olhstype, result, _("assignment"),
+ return convert_for_assignment (olhstype, result, ic_assign,
NULL_TREE, NULL_TREE, 0);
}
@@ -3388,21 +3420,63 @@ build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
The real work of conversion is done by `convert'.
The purpose of this function is to generate error messages
for assignments that are not allowed in C.
- ERRTYPE is a string to use in error messages:
- "assignment", "return", etc. If it is null, this is parameter passing
- for a function call (and different error messages are output).
+ ERRTYPE says whether it is argument passing, assignment,
+ initialization or return.
- FUNNAME is the name of the function being called,
- as an IDENTIFIER_NODE, or null.
+ FUNCTION is a tree for the function being called.
PARMNUM is the number of the argument, for printing in error messages. */
static tree
-convert_for_assignment (tree type, tree rhs, const char *errtype,
- tree fundecl, tree funname, int parmnum)
+convert_for_assignment (tree type, tree rhs, enum impl_conv errtype,
+ tree fundecl, tree function, int parmnum)
{
enum tree_code codel = TREE_CODE (type);
tree rhstype;
enum tree_code coder;
+ tree rname = NULL_TREE;
+
+ if (errtype == ic_argpass)
+ {
+ tree selector;
+ /* Change pointer to function to the function itself for
+ diagnostics. */
+ if (TREE_CODE (function) == ADDR_EXPR
+ && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
+ function = TREE_OPERAND (function, 0);
+
+ /* Handle an ObjC selector specially for diagnostics. */
+ selector = objc_message_selector ();
+ rname = function;
+ if (selector && parmnum > 2)
+ {
+ rname = selector;
+ parmnum -= 2;
+ }
+ }
+
+ /* This macro is used to emit diagnostics to ensure that all format
+ strings are complete sentences, visible to gettext and checked at
+ compile time. */
+#define WARN_FOR_ASSIGNMENT(AR, AS, IN, RE) \
+ do { \
+ switch (errtype) \
+ { \
+ case ic_argpass: \
+ pedwarn (AR, parmnum, rname); \
+ break; \
+ case ic_assign: \
+ pedwarn (AS); \
+ break; \
+ case ic_init: \
+ pedwarn (IN); \
+ break; \
+ case ic_return: \
+ pedwarn (RE); \
+ break; \
+ default: \
+ gcc_unreachable (); \
+ } \
+ } while (0)
/* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
/* Do not use STRIP_NOPS here. We do not want an enumerator
@@ -3479,7 +3553,8 @@ convert_for_assignment (tree type, tree rhs, const char *errtype,
/* Conversion to a transparent union from its member types.
This applies only to function arguments. */
- else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type) && !errtype)
+ else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
+ && errtype == ic_argpass)
{
tree memb_types;
tree marginal_memb_type = 0;
@@ -3554,13 +3629,27 @@ convert_for_assignment (tree type, tree rhs, const char *errtype,
function where an ordinary one is wanted, but not
vice-versa. */
if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
- warn_for_assignment ("%s makes qualified function pointer from unqualified",
- errtype, funname, parmnum);
+ WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE "
+ "makes qualified function "
+ "pointer from unqualified"),
+ N_("assignment makes qualified "
+ "function pointer from "
+ "unqualified"),
+ N_("initialization makes qualified "
+ "function pointer from "
+ "unqualified"),
+ N_("return makes qualified function "
+ "pointer from unqualified"));
}
else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
- warn_for_assignment ("%s discards qualifiers from pointer target type",
- errtype, funname,
- parmnum);
+ WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE discards "
+ "qualifiers from pointer target type"),
+ N_("assignment discards qualifiers "
+ "from pointer target type"),
+ N_("initialization discards qualifiers "
+ "from pointer target type"),
+ N_("return discards qualifiers from "
+ "pointer target type"));
}
if (pedantic && !DECL_IN_SYSTEM_HEADER (fundecl))
@@ -3602,17 +3691,29 @@ convert_for_assignment (tree type, tree rhs, const char *errtype,
which are not ANSI null ptr constants. */
&& (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
&& TREE_CODE (ttl) == FUNCTION_TYPE)))
- warn_for_assignment ("ISO C forbids %s between function "
- "pointer and %<void *%>",
- errtype, funname, parmnum);
+ WARN_FOR_ASSIGNMENT (N_("ISO C forbids passing argument %d of "
+ "%qE between function pointer "
+ "and %<void *%>"),
+ N_("ISO C forbids assignment between "
+ "function pointer and %<void *%>"),
+ N_("ISO C forbids initialization between "
+ "function pointer and %<void *%>"),
+ N_("ISO C forbids return between function "
+ "pointer and %<void *%>"));
/* Const and volatile mean something different for function types,
so the usual warnings are not appropriate. */
else if (TREE_CODE (ttr) != FUNCTION_TYPE
&& TREE_CODE (ttl) != FUNCTION_TYPE)
{
if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
- warn_for_assignment ("%s discards qualifiers from pointer target type",
- errtype, funname, parmnum);
+ WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE discards "
+ "qualifiers from pointer target type"),
+ N_("assignment discards qualifiers "
+ "from pointer target type"),
+ N_("initialization discards qualifiers "
+ "from pointer target type"),
+ N_("return discards qualifiers from "
+ "pointer target type"));
/* If this is not a case of ignoring a mismatch in signedness,
no warning. */
else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
@@ -3620,8 +3721,14 @@ convert_for_assignment (tree type, tree rhs, const char *errtype,
;
/* If there is a mismatch, do warn. */
else
- warn_for_assignment ("pointer targets in %s differ in signedness",
- errtype, funname, parmnum);
+ WARN_FOR_ASSIGNMENT (N_("pointer targets in passing argument "
+ "%d of %qE differ in signedness"),
+ N_("pointer targets in assignment "
+ "differ in signedness"),
+ N_("pointer targets in initialization "
+ "differ in signedness"),
+ N_("pointer targets in return differ "
+ "in signedness"));
}
else if (TREE_CODE (ttl) == FUNCTION_TYPE
&& TREE_CODE (ttr) == FUNCTION_TYPE)
@@ -3631,13 +3738,24 @@ convert_for_assignment (tree type, tree rhs, const char *errtype,
it is okay to use a const or volatile function
where an ordinary one is wanted, but not vice-versa. */
if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
- warn_for_assignment ("%s makes qualified function pointer from unqualified",
- errtype, funname, parmnum);
+ WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes "
+ "qualified function pointer "
+ "from unqualified"),
+ N_("assignment makes qualified function "
+ "pointer from unqualified"),
+ N_("initialization makes qualified "
+ "function pointer from unqualified"),
+ N_("return makes qualified function "
+ "pointer from unqualified"));
}
}
else
- warn_for_assignment ("%s from incompatible pointer type",
- errtype, funname, parmnum);
+ WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE from "
+ "incompatible pointer type"),
+ N_("assignment from incompatible pointer type"),
+ N_("initialization from incompatible "
+ "pointer type"),
+ N_("return from incompatible pointer type"));
return convert (type, rhs);
}
else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
@@ -3656,39 +3774,49 @@ convert_for_assignment (tree type, tree rhs, const char *errtype,
&& TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
&& TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
&& integer_zerop (TREE_OPERAND (rhs, 0))))
- warn_for_assignment ("%s makes pointer from integer without a cast",
- errtype, funname, parmnum);
+ WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes "
+ "pointer from integer without a cast"),
+ N_("assignment makes pointer from integer "
+ "without a cast"),
+ N_("initialization makes pointer from "
+ "integer without a cast"),
+ N_("return makes pointer from integer "
+ "without a cast"));
return convert (type, rhs);
}
else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
{
- warn_for_assignment ("%s makes integer from pointer without a cast",
- errtype, funname, parmnum);
+ WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes integer "
+ "from pointer without a cast"),
+ N_("assignment makes integer from pointer "
+ "without a cast"),
+ N_("initialization makes integer from pointer "
+ "without a cast"),
+ N_("return makes integer from pointer "
+ "without a cast"));
return convert (type, rhs);
}
else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
return convert (type, rhs);
- if (!errtype)
+ switch (errtype)
{
- if (funname)
- {
- tree selector = objc_message_selector ();
-
- if (selector && parmnum > 2)
- error ("incompatible type for argument %d of %qs",
- parmnum - 2, IDENTIFIER_POINTER (selector));
- else
- error ("incompatible type for argument %d of %qs",
- parmnum, IDENTIFIER_POINTER (funname));
- }
- else
- error ("incompatible type for argument %d of indirect function call",
- parmnum);
+ case ic_argpass:
+ error ("incompatible type for argument %d of %qE", parmnum, rname);
+ break;
+ case ic_assign:
+ error ("incompatible types in assignment");
+ break;
+ case ic_init:
+ error ("incompatible types in initialization");
+ break;
+ case ic_return:
+ error ("incompatible types in return");
+ break;
+ default:
+ gcc_unreachable ();
}
- else
- error ("incompatible types in %s", errtype);
return error_mark_node;
}
@@ -3709,56 +3837,14 @@ c_convert_parm_for_inlining (tree parm, tree value, tree fn, int argnum)
type = TREE_TYPE (parm);
ret = convert_for_assignment (type, value,
- (char *) 0 /* arg passing */, fn,
- DECL_NAME (fn), argnum);
+ ic_argpass, fn,
+ fn, argnum);
if (targetm.calls.promote_prototypes (TREE_TYPE (fn))
&& INTEGRAL_TYPE_P (type)
&& (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
ret = default_conversion (ret);
return ret;
}
-
-/* Print a warning using MSGID.
- It gets OPNAME as its one parameter.
- If OPNAME is null, it is replaced by "passing arg ARGNUM of 'FUNCTION'".
- FUNCTION and ARGNUM are handled specially if we are building an
- Objective-C selector. */
-
-static void
-warn_for_assignment (const char *msgid, const char *opname, tree function,
- int argnum)
-{
- if (opname == 0)
- {
- tree selector = objc_message_selector ();
- char * new_opname;
-
- if (selector && argnum > 2)
- {
- function = selector;
- argnum -= 2;
- }
- gcc_assert (argnum > 0);
- if (function)
- {
- /* Function name is known; supply it. */
- const char *const argstring = _("passing arg %d of '%s'");
- new_opname = (char *) alloca (IDENTIFIER_LENGTH (function)
- + strlen (argstring) + 1 + 25 /*%d*/ + 1);
- sprintf (new_opname, argstring, argnum,
- IDENTIFIER_POINTER (function));
- }
- else
- {
- /* Function name unknown (call through ptr); just give arg number. */
- const char *const argnofun = _("passing arg %d of pointer to function");
- new_opname = (char *) alloca (strlen (argnofun) + 1 + 25 /*%d*/ + 1);
- sprintf (new_opname, argnofun, argnum);
- }
- opname = new_opname;
- }
- pedwarn (msgid, opname);
-}
/* If VALUE is a compound expr all of whose expressions are constant, then
return its value. Otherwise, return error_mark_node.
@@ -4226,7 +4312,7 @@ digest_init (tree type, tree init, bool strict_string, int require_constant)
for arrays and functions. We must not call it in the
case where inside_init is a null pointer constant. */
inside_init
- = convert_for_assignment (type, init, _("initialization"),
+ = convert_for_assignment (type, init, ic_init,
NULL_TREE, NULL_TREE, 0);
/* Check to see if we have already given an error message. */
@@ -6366,7 +6452,7 @@ c_finish_return (tree retval)
}
else
{
- tree t = convert_for_assignment (valtype, retval, _("return"),
+ tree t = convert_for_assignment (valtype, retval, ic_return,
NULL_TREE, NULL_TREE, 0);
tree res = DECL_RESULT (current_function_decl);
tree inner;
diff --git a/gcc/cfghooks.c b/gcc/cfghooks.c
index e6a624c3550..948c2b4c13d 100644
--- a/gcc/cfghooks.c
+++ b/gcc/cfghooks.c
@@ -389,6 +389,7 @@ split_edge (edge e)
gcov_type count = e->count;
int freq = EDGE_FREQUENCY (e);
edge f;
+ bool irr = (e->flags & EDGE_IRREDUCIBLE_LOOP) != 0;
if (!cfg_hooks->split_edge)
internal_error ("%s does not support split_edge.", cfg_hooks->name);
@@ -399,6 +400,13 @@ split_edge (edge e)
EDGE_SUCC (ret, 0)->probability = REG_BR_PROB_BASE;
EDGE_SUCC (ret, 0)->count = count;
+ if (irr)
+ {
+ ret->flags |= BB_IRREDUCIBLE_LOOP;
+ EDGE_PRED (ret, 0)->flags |= EDGE_IRREDUCIBLE_LOOP;
+ EDGE_SUCC (ret, 0)->flags |= EDGE_IRREDUCIBLE_LOOP;
+ }
+
if (dom_computed[CDI_DOMINATORS])
set_immediate_dominator (CDI_DOMINATORS, ret, EDGE_PRED (ret, 0)->src);
diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c
index e5ec7bddaab..6d47756f588 100644
--- a/gcc/cfgloopmanip.c
+++ b/gcc/cfgloopmanip.c
@@ -1241,7 +1241,6 @@ loop_split_edge_with (edge e, rtx insns)
{
basic_block src, dest, new_bb;
struct loop *loop_c;
- edge new_e;
src = e->src;
dest = e->dest;
@@ -1252,14 +1251,7 @@ loop_split_edge_with (edge e, rtx insns)
new_bb = split_edge (e);
add_bb_to_loop (new_bb, loop_c);
- new_bb->flags = insns ? BB_SUPERBLOCK : 0;
-
- new_e = EDGE_SUCC (new_bb, 0);
- if (e->flags & EDGE_IRREDUCIBLE_LOOP)
- {
- new_bb->flags |= BB_IRREDUCIBLE_LOOP;
- new_e->flags |= EDGE_IRREDUCIBLE_LOOP;
- }
+ new_bb->flags |= (insns ? BB_SUPERBLOCK : 0);
if (insns)
emit_insn_after (insns, BB_END (new_bb));
diff --git a/gcc/config/i386/scodbx.h b/gcc/config/i386/scodbx.h
deleted file mode 100644
index 7da93053256..00000000000
--- a/gcc/config/i386/scodbx.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Definitions for Intel 386 running SCO Unix System V,
- using dbx-in-coff encapsulation.
- Copyright (C) 1992, 1995, 1996, 1999 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC 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 CC 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 CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#include "i386/svr3dbx.h"
-
-/* Overridden defines for SCO systems from sco.h. */
-
-/* By default, target has a 80387, uses IEEE compatible arithmetic,
- and returns float values in the 387, ie,
- (TARGET_80387 | TARGET_FLOAT_RETURNS_IN_80387)
-
- SCO's software emulation of a 387 fails to handle the `fucomp'
- opcode. fucomp is only used when generating IEEE compliant code.
- So don't make TARGET_IEEE_FP default for SCO. */
-
-#undef TARGET_SUBTARGET_DEFAULT
-#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_FLOAT_RETURNS)
-
-/* Use crt1.o as a startup file and crtn.o as a closing file. */
-
-#undef STARTFILE_SPEC
-#define STARTFILE_SPEC \
- "%{!r:%{!z:svr3.ifile%s}%{z:svr3z.ifile%s}}\
- %{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}"
-
-/* Library spec, including SCO international language support. */
-
-#undef LIB_SPEC
-#define LIB_SPEC \
- "%{p:-L/usr/lib/libp}%{pg:-L/usr/lib/libp} %{scointl:libintl.a%s} -lc"
-
-/* Specify predefined symbols in preprocessor. */
-
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-Dunix -DM_UNIX -DM_I386 -DM_COFF -DM_WORDSWAP -Asystem=svr3"
-
-#undef CPP_SPEC
-#define CPP_SPEC "%(cpp_cpu) %{scointl:-DM_INTERNAT}"
-
-/* This spec is used for telling cpp whether char is signed or not. */
-
-#undef SIGNED_CHAR_SPEC
-#if DEFAULT_SIGNED_CHAR
-#define SIGNED_CHAR_SPEC \
- "%{funsigned-char:-D__CHAR_UNSIGNED__ -D_CHAR_UNSIGNED}"
-#else
-#define SIGNED_CHAR_SPEC \
- "%{!fsigned-char:-D__CHAR_UNSIGNED__ -D_CHAR_UNSIGNED}"
-#endif
-
-/* caller has to pop the extra argument passed to functions that return
- structures. */
-
-#undef RETURN_POPS_ARGS
-#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \
- ((FUNDECL) && TREE_CODE (FUNDECL) == IDENTIFIER_NODE ? 0 \
- : (TARGET_RTD \
- && (TYPE_ARG_TYPES (FUNTYPE) == 0 \
- || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (FUNTYPE))) \
- == void_type_node))) ? (SIZE) \
- : 0)
-/* On other 386 systems, the last line looks like this:
- : (aggregate_value_p (TREE_TYPE (FUNTYPE))) ? GET_MODE_SIZE (Pmode) : 0) */
-
-/* Handle #pragma pack. */
-#define HANDLE_SYSV_PRAGMA
diff --git a/gcc/config/i386/xm-dgux.h b/gcc/config/i386/xm-dgux.h
deleted file mode 100644
index 881c5c7be9d..00000000000
--- a/gcc/config/i386/xm-dgux.h
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Configuration for GCC for Intel i386 running DG/ux */
-
-/* looks just like sysv4 for now */
-#include "xm-svr4.h"
diff --git a/gcc/config/i386/xm-sun.h b/gcc/config/i386/xm-sun.h
deleted file mode 100644
index 6c0f0a25630..00000000000
--- a/gcc/config/i386/xm-sun.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Configuration for GNU C-compiler for Intel 80386 running SunOS 4.0.
- Copyright (C) 1988, 1997 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC 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 CC 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 CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#define USG
diff --git a/gcc/config/i386/xm-sysv3.h b/gcc/config/i386/xm-sysv3.h
deleted file mode 100644
index 9a655443ff5..00000000000
--- a/gcc/config/i386/xm-sysv3.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Configuration for GCC for Intel i386 running System V Release 3. */
-
-#include "xm-svr3.h"
diff --git a/gcc/config/ia64/ia64-protos.h b/gcc/config/ia64/ia64-protos.h
index 19e1335b17e..ab5062c8c72 100644
--- a/gcc/config/ia64/ia64-protos.h
+++ b/gcc/config/ia64/ia64-protos.h
@@ -77,6 +77,7 @@ extern int ia64_function_arg_partial_nregs (CUMULATIVE_ARGS *,
enum machine_mode, tree, int);
extern void ia64_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
tree, int);
+extern int ia64_function_arg_boundary (enum machine_mode, tree);
extern void ia64_asm_output_external (FILE *, tree, const char *);
#endif /* TREE_CODE */
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index b51cc7a9408..5eed72144ef 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -3325,10 +3325,11 @@ ia64_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
cum->fp_regs = fp_regs;
}
- /* Integral and aggregates go in general registers. If we have run out of
- FR registers, then FP values must also go in general registers. This can
- happen when we have a SFmode HFA. */
- else if (! FLOAT_MODE_P (mode) || cum->fp_regs == MAX_ARGUMENT_SLOTS)
+ /* Integral and aggregates go in general registers. So do TFmode FP values.
+ If we have run out of FR registers, then other FP values must also go in
+ general registers. This can happen when we have a SFmode HFA. */
+ else if (mode == TFmode || mode == TCmode
+ || (! FLOAT_MODE_P (mode) || cum->fp_regs == MAX_ARGUMENT_SLOTS))
cum->int_regs = cum->words;
/* If there is a prototype, then FP values go in a FR register when
@@ -3351,6 +3352,31 @@ ia64_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
}
+/* Arguments with alignment larger than 8 bytes start at the next even
+ boundary. On ILP32 HPUX, TFmode arguments start on next even boundary
+ even though their normal alignment is 8 bytes. See ia64_function_arg. */
+
+int
+ia64_function_arg_boundary (enum machine_mode mode, tree type)
+{
+
+ if (mode == TFmode && TARGET_HPUX && TARGET_ILP32)
+ return PARM_BOUNDARY * 2;
+
+ if (type)
+ {
+ if (TYPE_ALIGN (type) > PARM_BOUNDARY)
+ return PARM_BOUNDARY * 2;
+ else
+ return PARM_BOUNDARY;
+ }
+
+ if (GET_MODE_BITSIZE (mode) > PARM_BOUNDARY)
+ return PARM_BOUNDARY * 2;
+ else
+ return PARM_BOUNDARY;
+}
+
/* Variable sized types are passed by reference. */
/* ??? At present this is a GCC extension to the IA-64 ABI. */
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index 58304a9b366..aab51f83000 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -1376,15 +1376,11 @@ do { \
/* If defined, a C expression that gives the alignment boundary, in bits, of an
argument with the specified mode and type. */
-/* Arguments with alignment larger than 8 bytes start at the next even
- boundary. See ia64_function_arg. */
+/* Return the alignment boundary in bits for an argument with a specified
+ mode and type. */
#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
- (((TYPE) ? (TYPE_ALIGN (TYPE) > 8 * BITS_PER_UNIT) \
- : (((((MODE) == BLKmode \
- ? int_size_in_bytes (TYPE) : GET_MODE_SIZE (MODE)) \
- + UNITS_PER_WORD - 1) / UNITS_PER_WORD) > 1)) \
- ? 128 : PARM_BOUNDARY)
+ ia64_function_arg_boundary (MODE, TYPE)
/* A C expression that is nonzero if REGNO is the number of a hard register in
which function arguments are sometimes passed. This does *not* include
diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c
index 9e3404a1891..b5621568997 100644
--- a/gcc/config/m32r/m32r.c
+++ b/gcc/config/m32r/m32r.c
@@ -1591,8 +1591,8 @@ static struct m32r_frame_info zero_frame_info;
The return address and frame pointer are treated separately.
Don't consider them here. */
#define MUST_SAVE_REGISTER(regno, interrupt_p) \
-((regno) != RETURN_ADDR_REGNUM && (regno) != FRAME_POINTER_REGNUM \
- && (regs_ever_live[regno] && (!call_used_regs[regno] || interrupt_p)))
+ ((regno) != RETURN_ADDR_REGNUM && (regno) != FRAME_POINTER_REGNUM \
+ && (regs_ever_live[regno] && (!call_really_used_regs[regno] || interrupt_p)))
#define MUST_SAVE_FRAME_POINTER (regs_ever_live[FRAME_POINTER_REGNUM])
#define MUST_SAVE_RETURN_ADDR (regs_ever_live[RETURN_ADDR_REGNUM] || current_function_profile)
diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h
index 9befbeee570..d5aa56b82e6 100644
--- a/gcc/config/m32r/m32r.h
+++ b/gcc/config/m32r/m32r.h
@@ -633,6 +633,8 @@ extern enum m32r_sdata m32r_sdata;
SUBTARGET_CALL_USED_REGISTERS \
}
+#define CALL_REALLY_USED_REGISTERS CALL_USED_REGISTERS
+
/* Zero or more C statements that may conditionally modify two variables
`fixed_regs' and `call_used_regs' (both of type `char []') after they
have been initialized from the two preceding macros.
@@ -649,7 +651,10 @@ extern enum m32r_sdata m32r_sdata;
do \
{ \
if (flag_pic) \
- fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
+ { \
+ fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
+ call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
+ } \
} \
while (0)
#endif
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 242c2f76aa0..048e5a8a365 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -292,6 +292,7 @@ static void mips_output_mi_thunk (FILE *, tree, HOST_WIDE_INT,
static int symbolic_expression_p (rtx);
static void mips_select_rtx_section (enum machine_mode, rtx,
unsigned HOST_WIDE_INT);
+static void mips_function_rodata_section (tree);
static bool mips_in_small_data_p (tree);
static int mips_fpr_return_fields (tree, tree *);
static bool mips_return_in_msb (tree);
@@ -722,6 +723,8 @@ const struct mips_cpu_info mips_cpu_info_table[] = {
#define TARGET_ASM_FUNCTION_EPILOGUE mips_output_function_epilogue
#undef TARGET_ASM_SELECT_RTX_SECTION
#define TARGET_ASM_SELECT_RTX_SECTION mips_select_rtx_section
+#undef TARGET_ASM_FUNCTION_RODATA_SECTION
+#define TARGET_ASM_FUNCTION_RODATA_SECTION mips_function_rodata_section
#undef TARGET_SCHED_REORDER
#define TARGET_SCHED_REORDER mips_sched_reorder
@@ -6574,6 +6577,42 @@ mips_select_rtx_section (enum machine_mode mode, rtx x,
}
}
+/* Implement TARGET_ASM_FUNCTION_RODATA_SECTION.
+
+ The complication here is that, with the combination TARGET_ABICALLS
+ && !TARGET_GPWORD, jump tables will use absolute addresses, and should
+ therefore not be included in the read-only part of a DSO. Handle such
+ cases by selecting a normal data section instead of a read-only one.
+ The logic apes that in default_function_rodata_section. */
+
+static void
+mips_function_rodata_section (tree decl)
+{
+ if (!TARGET_ABICALLS || TARGET_GPWORD)
+ default_function_rodata_section (decl);
+ else if (decl && DECL_SECTION_NAME (decl))
+ {
+ const char *name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl));
+ if (DECL_ONE_ONLY (decl) && strncmp (name, ".gnu.linkonce.t.", 16) == 0)
+ {
+ char *rname = ASTRDUP (name);
+ rname[14] = 'd';
+ named_section_real (rname, SECTION_LINKONCE | SECTION_WRITE, decl);
+ }
+ else if (flag_function_sections && flag_data_sections
+ && strncmp (name, ".text.", 6) == 0)
+ {
+ char *rname = ASTRDUP (name);
+ memcpy (rname + 1, "data", 4);
+ named_section_flags (rname, SECTION_WRITE);
+ }
+ else
+ data_section ();
+ }
+ else
+ data_section ();
+}
+
/* Implement TARGET_IN_SMALL_DATA_P. Return true if it would be safe to
access DECL using %gp_rel(...)($gp). */
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 70428ae78ed..3bcc72a6f90 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -2828,8 +2828,7 @@ beq\t%2,%.,1b\;\
"!TARGET_MIPS16"
"<load>l\t%0,%2"
[(set_attr "type" "load")
- (set_attr "mode" "<MODE>")
- (set_attr "hazard" "none")])
+ (set_attr "mode" "<MODE>")])
(define_insn "mov_<load>r"
[(set (match_operand:GPR 0 "register_operand" "=d")
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index 5c5d8bf39f0..18fb21706a3 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -918,7 +918,8 @@ struct hppa_args {int words, nargs_prototype, incoming, indirect; };
We use a DImode register in the parallel for 5 to 7 byte structures
so that there is only one element. This allows the object to be
correctly padded. */
-#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) (TARGET_64BIT ? upward : downward)
+#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \
+ function_arg_padding ((MODE), (TYPE))
/* Do not expect to understand this without reading it several times. I'm
tempted to try and simply it, but I worry about breaking something. */
diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md
index 0eb29b1ea37..17866a9131e 100644
--- a/gcc/config/rs6000/altivec.md
+++ b/gcc/config/rs6000/altivec.md
@@ -23,6 +23,30 @@
[(UNSPEC_VSPLTISW 141)
(UNSPEC_VSPLTISH 140)
(UNSPEC_VSPLTISB 139)
+ (UNSPEC_VCMPBFP 50)
+ (UNSPEC_VCMPEQUB 51)
+ (UNSPEC_VCMPEQUH 52)
+ (UNSPEC_VCMPEQUW 53)
+ (UNSPEC_VCMPEQFP 54)
+ (UNSPEC_VCMPGEFP 55)
+ (UNSPEC_VCMPGTUB 56)
+ (UNSPEC_VCMPGTSB 57)
+ (UNSPEC_VCMPGTUH 58)
+ (UNSPEC_VCMPGTSH 59)
+ (UNSPEC_VCMPGTUW 60)
+ (UNSPEC_VCMPGTSW 61)
+ (UNSPEC_VCMPGTFP 62)
+ (UNSPEC_VSEL4SI 159)
+ (UNSPEC_VSEL4SF 160)
+ (UNSPEC_VSEL8HI 161)
+ (UNSPEC_VSEL16QI 162)
+ (UNSPEC_VCOND_V4SI 301)
+ (UNSPEC_VCOND_V4SF 302)
+ (UNSPEC_VCOND_V8HI 303)
+ (UNSPEC_VCOND_V16QI 304)
+ (UNSPEC_VCONDU_V4SI 305)
+ (UNSPEC_VCONDU_V8HI 306)
+ (UNSPEC_VCONDU_V16QI 307)
])
;; Generic LVX load instruction.
@@ -496,7 +520,8 @@
(define_insn "altivec_vcmpbfp"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v")
- (match_operand:V4SF 2 "register_operand" "v")] 50))]
+ (match_operand:V4SF 2 "register_operand" "v")]
+ UNSPEC_VCMPBFP))]
"TARGET_ALTIVEC"
"vcmpbfp %0,%1,%2"
[(set_attr "type" "veccmp")])
@@ -504,7 +529,8 @@
(define_insn "altivec_vcmpequb"
[(set (match_operand:V16QI 0 "register_operand" "=v")
(unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
- (match_operand:V16QI 2 "register_operand" "v")] 51))]
+ (match_operand:V16QI 2 "register_operand" "v")]
+ UNSPEC_VCMPEQUB))]
"TARGET_ALTIVEC"
"vcmpequb %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -512,7 +538,8 @@
(define_insn "altivec_vcmpequh"
[(set (match_operand:V8HI 0 "register_operand" "=v")
(unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")
- (match_operand:V8HI 2 "register_operand" "v")] 52))]
+ (match_operand:V8HI 2 "register_operand" "v")]
+ UNSPEC_VCMPEQUH))]
"TARGET_ALTIVEC"
"vcmpequh %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -520,7 +547,8 @@
(define_insn "altivec_vcmpequw"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V4SI 2 "register_operand" "v")] 53))]
+ (match_operand:V4SI 2 "register_operand" "v")]
+ UNSPEC_VCMPEQUW))]
"TARGET_ALTIVEC"
"vcmpequw %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -528,7 +556,8 @@
(define_insn "altivec_vcmpeqfp"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v")
- (match_operand:V4SF 2 "register_operand" "v")] 54))]
+ (match_operand:V4SF 2 "register_operand" "v")]
+ UNSPEC_VCMPEQFP))]
"TARGET_ALTIVEC"
"vcmpeqfp %0,%1,%2"
[(set_attr "type" "veccmp")])
@@ -536,7 +565,8 @@
(define_insn "altivec_vcmpgefp"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v")
- (match_operand:V4SF 2 "register_operand" "v")] 55))]
+ (match_operand:V4SF 2 "register_operand" "v")]
+ UNSPEC_VCMPGEFP))]
"TARGET_ALTIVEC"
"vcmpgefp %0,%1,%2"
[(set_attr "type" "veccmp")])
@@ -544,7 +574,8 @@
(define_insn "altivec_vcmpgtub"
[(set (match_operand:V16QI 0 "register_operand" "=v")
(unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
- (match_operand:V16QI 2 "register_operand" "v")] 56))]
+ (match_operand:V16QI 2 "register_operand" "v")]
+ UNSPEC_VCMPGTUB))]
"TARGET_ALTIVEC"
"vcmpgtub %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -552,7 +583,8 @@
(define_insn "altivec_vcmpgtsb"
[(set (match_operand:V16QI 0 "register_operand" "=v")
(unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
- (match_operand:V16QI 2 "register_operand" "v")] 57))]
+ (match_operand:V16QI 2 "register_operand" "v")]
+ UNSPEC_VCMPGTSB))]
"TARGET_ALTIVEC"
"vcmpgtsb %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -560,7 +592,8 @@
(define_insn "altivec_vcmpgtuh"
[(set (match_operand:V8HI 0 "register_operand" "=v")
(unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")
- (match_operand:V8HI 2 "register_operand" "v")] 58))]
+ (match_operand:V8HI 2 "register_operand" "v")]
+ UNSPEC_VCMPGTUH))]
"TARGET_ALTIVEC"
"vcmpgtuh %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -568,7 +601,8 @@
(define_insn "altivec_vcmpgtsh"
[(set (match_operand:V8HI 0 "register_operand" "=v")
(unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")
- (match_operand:V8HI 2 "register_operand" "v")] 59))]
+ (match_operand:V8HI 2 "register_operand" "v")]
+ UNSPEC_VCMPGTSH))]
"TARGET_ALTIVEC"
"vcmpgtsh %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -576,7 +610,8 @@
(define_insn "altivec_vcmpgtuw"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V4SI 2 "register_operand" "v")] 60))]
+ (match_operand:V4SI 2 "register_operand" "v")]
+ UNSPEC_VCMPGTUW))]
"TARGET_ALTIVEC"
"vcmpgtuw %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -584,7 +619,8 @@
(define_insn "altivec_vcmpgtsw"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V4SI 2 "register_operand" "v")] 61))]
+ (match_operand:V4SI 2 "register_operand" "v")]
+ UNSPEC_VCMPGTSW))]
"TARGET_ALTIVEC"
"vcmpgtsw %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -592,7 +628,8 @@
(define_insn "altivec_vcmpgtfp"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v")
- (match_operand:V4SF 2 "register_operand" "v")] 62))]
+ (match_operand:V4SF 2 "register_operand" "v")]
+ UNSPEC_VCMPGTFP))]
"TARGET_ALTIVEC"
"vcmpgtfp %0,%1,%2"
[(set_attr "type" "veccmp")])
@@ -1640,11 +1677,146 @@
"vrefp %0,%1"
[(set_attr "type" "vecfloat")])
+(define_expand "vcondv4si"
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v")
+ (match_operand:V4SI 3 "comparison_operator" "")
+ (match_operand:V4SI 4 "register_operand" "v")
+ (match_operand:V4SI 5 "register_operand" "v")
+ ] UNSPEC_VCOND_V4SI))]
+ "TARGET_ALTIVEC"
+ "
+{
+ if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
+ operands[3], operands[4], operands[5]))
+ DONE;
+ else
+ FAIL;
+}
+ ")
+
+(define_expand "vconduv4si"
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v")
+ (match_operand:V4SI 3 "comparison_operator" "")
+ (match_operand:V4SI 4 "register_operand" "v")
+ (match_operand:V4SI 5 "register_operand" "v")
+ ] UNSPEC_VCONDU_V4SI))]
+ "TARGET_ALTIVEC"
+ "
+{
+ if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
+ operands[3], operands[4], operands[5]))
+ DONE;
+ else
+ FAIL;
+}
+ ")
+
+(define_expand "vcondv4sf"
+ [(set (match_operand:V4SF 0 "register_operand" "=v")
+ (unspec:V4SF [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SF 2 "register_operand" "v")
+ (match_operand:V4SF 3 "comparison_operator" "")
+ (match_operand:V4SF 4 "register_operand" "v")
+ (match_operand:V4SF 5 "register_operand" "v")
+ ] UNSPEC_VCOND_V4SF))]
+ "TARGET_ALTIVEC"
+ "
+{
+ if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
+ operands[3], operands[4], operands[5]))
+ DONE;
+ else
+ FAIL;
+}
+ ")
+
+(define_expand "vcondv8hi"
+ [(set (match_operand:V4SF 0 "register_operand" "=v")
+ (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V8HI 2 "register_operand" "v")
+ (match_operand:V8HI 3 "comparison_operator" "")
+ (match_operand:V8HI 4 "register_operand" "v")
+ (match_operand:V8HI 5 "register_operand" "v")
+ ] UNSPEC_VCOND_V8HI))]
+ "TARGET_ALTIVEC"
+ "
+{
+ if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
+ operands[3], operands[4], operands[5]))
+ DONE;
+ else
+ FAIL;
+}
+ ")
+
+(define_expand "vconduv8hi"
+ [(set (match_operand:V4SF 0 "register_operand" "=v")
+ (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V8HI 2 "register_operand" "v")
+ (match_operand:V8HI 3 "comparison_operator" "")
+ (match_operand:V8HI 4 "register_operand" "v")
+ (match_operand:V8HI 5 "register_operand" "v")
+ ] UNSPEC_VCONDU_V8HI))]
+ "TARGET_ALTIVEC"
+ "
+{
+ if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
+ operands[3], operands[4], operands[5]))
+ DONE;
+ else
+ FAIL;
+}
+ ")
+
+(define_expand "vcondv16qi"
+ [(set (match_operand:V4SF 0 "register_operand" "=v")
+ (unspec:V16QI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V16QI 2 "register_operand" "v")
+ (match_operand:V16QI 3 "comparison_operator" "")
+ (match_operand:V16QI 4 "register_operand" "v")
+ (match_operand:V16QI 5 "register_operand" "v")
+ ] UNSPEC_VCOND_V16QI))]
+ "TARGET_ALTIVEC"
+ "
+{
+ if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
+ operands[3], operands[4], operands[5]))
+ DONE;
+ else
+ FAIL;
+}
+ ")
+
+(define_expand "vconduv16qi"
+ [(set (match_operand:V4SF 0 "register_operand" "=v")
+ (unspec:V16QI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V16QI 2 "register_operand" "v")
+ (match_operand:V16QI 3 "comparison_operator" "")
+ (match_operand:V16QI 4 "register_operand" "v")
+ (match_operand:V16QI 5 "register_operand" "v")
+ ] UNSPEC_VCONDU_V16QI))]
+ "TARGET_ALTIVEC"
+ "
+{
+ if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
+ operands[3], operands[4], operands[5]))
+ DONE;
+ else
+ FAIL;
+}
+ ")
+
+
(define_insn "altivec_vsel_4si"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
(match_operand:V4SI 2 "register_operand" "v")
- (match_operand:V4SI 3 "register_operand" "v")] 159))]
+ (match_operand:V4SI 3 "register_operand" "v")]
+ UNSPEC_VSEL4SI))]
"TARGET_ALTIVEC"
"vsel %0,%1,%2,%3"
[(set_attr "type" "vecperm")])
@@ -1653,7 +1825,8 @@
[(set (match_operand:V4SF 0 "register_operand" "=v")
(unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")
(match_operand:V4SF 2 "register_operand" "v")
- (match_operand:V4SI 3 "register_operand" "v")] 160))]
+ (match_operand:V4SI 3 "register_operand" "v")]
+ UNSPEC_VSEL4SF))]
"TARGET_ALTIVEC"
"vsel %0,%1,%2,%3"
[(set_attr "type" "vecperm")])
@@ -1662,7 +1835,8 @@
[(set (match_operand:V8HI 0 "register_operand" "=v")
(unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")
(match_operand:V8HI 2 "register_operand" "v")
- (match_operand:V8HI 3 "register_operand" "v")] 161))]
+ (match_operand:V8HI 3 "register_operand" "v")]
+ UNSPEC_VSEL8HI))]
"TARGET_ALTIVEC"
"vsel %0,%1,%2,%3"
[(set_attr "type" "vecperm")])
@@ -1671,7 +1845,8 @@
[(set (match_operand:V16QI 0 "register_operand" "=v")
(unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
(match_operand:V16QI 2 "register_operand" "v")
- (match_operand:V16QI 3 "register_operand" "v")] 162))]
+ (match_operand:V16QI 3 "register_operand" "v")]
+ UNSPEC_VSEL16QI))]
"TARGET_ALTIVEC"
"vsel %0,%1,%2,%3"
[(set_attr "type" "vecperm")])
diff --git a/gcc/config/rs6000/rs6000-protos.h b/gcc/config/rs6000/rs6000-protos.h
index 32034dedab7..d3a3122ed5c 100644
--- a/gcc/config/rs6000/rs6000-protos.h
+++ b/gcc/config/rs6000/rs6000-protos.h
@@ -124,6 +124,7 @@ extern char * output_cbranch (rtx, const char *, int, rtx);
extern char * output_e500_flip_eq_bit (rtx, rtx);
extern rtx rs6000_emit_set_const (rtx, enum machine_mode, rtx, int);
extern int rs6000_emit_cmove (rtx, rtx, rtx, rtx);
+extern int rs6000_emit_vector_cond_expr (rtx, rtx, rtx, rtx, rtx, rtx);
extern void rs6000_emit_minmax (rtx, enum rtx_code, rtx, rtx);
extern void output_toc (FILE *, rtx, int, enum machine_mode);
extern void rs6000_initialize_trampoline (rtx, rtx, rtx);
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index be377ebf440..0d5c8b4d4b0 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -760,7 +760,15 @@ static tree rs6000_build_builtin_va_list (void);
static tree rs6000_gimplify_va_arg (tree, tree, tree *, tree *);
static bool rs6000_must_pass_in_stack (enum machine_mode, tree);
static bool rs6000_vector_mode_supported_p (enum machine_mode);
+static int get_vec_cmp_insn (enum rtx_code, enum machine_mode,
+ enum machine_mode);
+static rtx rs6000_emit_vector_compare (enum rtx_code, rtx, rtx,
+ enum machine_mode);
+static int get_vsel_insn (enum machine_mode);
+static void rs6000_emit_vector_select (rtx, rtx, rtx, rtx);
+
+const int INSN_NOT_AVAILABLE = -1;
static enum machine_mode rs6000_eh_return_filter_mode (void);
/* Hash table stuff for keeping track of TOC entries. */
@@ -11202,6 +11210,271 @@ output_e500_flip_eq_bit (rtx dst, rtx src)
return string;
}
+/* Return insn index for the vector compare instruction for given CODE,
+ and DEST_MODE, OP_MODE. Return INSN_NOT_AVAILABLE if valid insn is
+ not available. */
+
+static int
+get_vec_cmp_insn (enum rtx_code code,
+ enum machine_mode dest_mode,
+ enum machine_mode op_mode)
+{
+ if (!TARGET_ALTIVEC)
+ return INSN_NOT_AVAILABLE;
+
+ switch (code)
+ {
+ case EQ:
+ if (dest_mode == V16QImode && op_mode == V16QImode)
+ return UNSPEC_VCMPEQUB;
+ if (dest_mode == V8HImode && op_mode == V8HImode)
+ return UNSPEC_VCMPEQUH;
+ if (dest_mode == V4SImode && op_mode == V4SImode)
+ return UNSPEC_VCMPEQUW;
+ if (dest_mode == V4SImode && op_mode == V4SFmode)
+ return UNSPEC_VCMPEQFP;
+ break;
+ case GE:
+ if (dest_mode == V4SImode && op_mode == V4SFmode)
+ return UNSPEC_VCMPGEFP;
+ case GT:
+ if (dest_mode == V16QImode && op_mode == V16QImode)
+ return UNSPEC_VCMPGTSB;
+ if (dest_mode == V8HImode && op_mode == V8HImode)
+ return UNSPEC_VCMPGTSH;
+ if (dest_mode == V4SImode && op_mode == V4SImode)
+ return UNSPEC_VCMPGTSW;
+ if (dest_mode == V4SImode && op_mode == V4SFmode)
+ return UNSPEC_VCMPGTFP;
+ break;
+ case GTU:
+ if (dest_mode == V16QImode && op_mode == V16QImode)
+ return UNSPEC_VCMPGTUB;
+ if (dest_mode == V8HImode && op_mode == V8HImode)
+ return UNSPEC_VCMPGTUH;
+ if (dest_mode == V4SImode && op_mode == V4SImode)
+ return UNSPEC_VCMPGTUW;
+ break;
+ default:
+ break;
+ }
+ return INSN_NOT_AVAILABLE;
+}
+
+/* Emit vector compare for operands OP0 and OP1 using code RCODE.
+ DMODE is expected destination mode. This is a recursive function. */
+
+static rtx
+rs6000_emit_vector_compare (enum rtx_code rcode,
+ rtx op0, rtx op1,
+ enum machine_mode dmode)
+{
+ int vec_cmp_insn;
+ rtx mask;
+ enum machine_mode dest_mode;
+ enum machine_mode op_mode = GET_MODE (op1);
+
+#ifdef ENABLE_CHECKING
+ if (!TARGET_ALTIVEC)
+ abort ();
+
+ if (GET_MODE (op0) != GET_MODE (op1))
+ abort ();
+#endif
+
+ /* Floating point vector compare instructions uses destination V4SImode.
+ Move destination to appropriate mode later. */
+ if (dmode == V4SFmode)
+ dest_mode = V4SImode;
+ else
+ dest_mode = dmode;
+
+ mask = gen_reg_rtx (dest_mode);
+ vec_cmp_insn = get_vec_cmp_insn (rcode, dest_mode, op_mode);
+
+ if (vec_cmp_insn == INSN_NOT_AVAILABLE)
+ {
+ bool swap_operands = false;
+ bool try_again = false;
+ switch (rcode)
+ {
+ case LT:
+ rcode = GT;
+ swap_operands = true;
+ try_again = true;
+ break;
+ case LTU:
+ rcode = GTU;
+ swap_operands = true;
+ try_again = true;
+ break;
+ case NE:
+ /* Treat A != B as ~(A==B). */
+ {
+ enum insn_code nor_code;
+ rtx eq_rtx = rs6000_emit_vector_compare (EQ, op0, op1,
+ dest_mode);
+
+ nor_code = one_cmpl_optab->handlers[(int)dest_mode].insn_code;
+ if (nor_code == CODE_FOR_nothing)
+ abort ();
+ emit_insn (GEN_FCN (nor_code) (mask, eq_rtx));
+
+ if (dmode != dest_mode)
+ {
+ rtx temp = gen_reg_rtx (dest_mode);
+ convert_move (temp, mask, 0);
+ return temp;
+ }
+ return mask;
+ }
+ break;
+ case GE:
+ case GEU:
+ case LE:
+ case LEU:
+ /* Try GT/GTU/LT/LTU OR EQ */
+ {
+ rtx c_rtx, eq_rtx;
+ enum insn_code ior_code;
+ enum rtx_code new_code;
+
+ if (rcode == GE)
+ new_code = GT;
+ else if (rcode == GEU)
+ new_code = GTU;
+ else if (rcode == LE)
+ new_code = LT;
+ else if (rcode == LEU)
+ new_code = LTU;
+ else
+ abort ();
+
+ c_rtx = rs6000_emit_vector_compare (new_code,
+ op0, op1, dest_mode);
+ eq_rtx = rs6000_emit_vector_compare (EQ, op0, op1,
+ dest_mode);
+
+ ior_code = ior_optab->handlers[(int)dest_mode].insn_code;
+ if (ior_code == CODE_FOR_nothing)
+ abort ();
+ emit_insn (GEN_FCN (ior_code) (mask, c_rtx, eq_rtx));
+ if (dmode != dest_mode)
+ {
+ rtx temp = gen_reg_rtx (dest_mode);
+ convert_move (temp, mask, 0);
+ return temp;
+ }
+ return mask;
+ }
+ break;
+ default:
+ abort ();
+ }
+
+ if (try_again)
+ {
+ vec_cmp_insn = get_vec_cmp_insn (rcode, dest_mode, op_mode);
+ if (vec_cmp_insn == INSN_NOT_AVAILABLE)
+ /* You only get two chances. */
+ abort ();
+ }
+
+ if (swap_operands)
+ {
+ rtx tmp;
+ tmp = op0;
+ op0 = op1;
+ op1 = tmp;
+ }
+ }
+
+ emit_insn (gen_rtx_fmt_ee (SET,
+ VOIDmode,
+ mask,
+ gen_rtx_fmt_Ei (UNSPEC, dest_mode,
+ gen_rtvec (2, op0, op1),
+ vec_cmp_insn)));
+ if (dmode != dest_mode)
+ {
+ rtx temp = gen_reg_rtx (dest_mode);
+ convert_move (temp, mask, 0);
+ return temp;
+ }
+ return mask;
+}
+
+/* Return vector select instruction for MODE. Return INSN_NOT_AVAILABLE, if
+ valid insn doesn exist for given mode. */
+
+static int
+get_vsel_insn (enum machine_mode mode)
+{
+ switch (mode)
+ {
+ case V4SImode:
+ return UNSPEC_VSEL4SI;
+ break;
+ case V4SFmode:
+ return UNSPEC_VSEL4SF;
+ break;
+ case V8HImode:
+ return UNSPEC_VSEL8HI;
+ break;
+ case V16QImode:
+ return UNSPEC_VSEL16QI;
+ break;
+ default:
+ return INSN_NOT_AVAILABLE;
+ break;
+ }
+ return INSN_NOT_AVAILABLE;
+}
+
+/* Emit vector select insn where DEST is destination using
+ operands OP1, OP2 and MASK. */
+
+static void
+rs6000_emit_vector_select (rtx dest, rtx op1, rtx op2, rtx mask)
+{
+ rtx t, temp;
+ enum machine_mode dest_mode = GET_MODE (dest);
+ int vsel_insn_index = get_vsel_insn (GET_MODE (dest));
+
+ temp = gen_reg_rtx (dest_mode);
+
+ t = gen_rtx_fmt_ee (SET, VOIDmode, temp,
+ gen_rtx_fmt_Ei (UNSPEC, dest_mode,
+ gen_rtvec (3, op1, op2, mask),
+ vsel_insn_index));
+ emit_insn (t);
+ emit_move_insn (dest, temp);
+ return;
+}
+
+/* Emit vector conditional expression.
+ DEST is destination. OP1 and OP2 are two VEC_COND_EXPR operands.
+ CC_OP0 and CC_OP1 are the two operands for the relation operation COND. */
+
+int
+rs6000_emit_vector_cond_expr (rtx dest, rtx op1, rtx op2,
+ rtx cond, rtx cc_op0, rtx cc_op1)
+{
+ enum machine_mode dest_mode = GET_MODE (dest);
+ enum rtx_code rcode = GET_CODE (cond);
+ rtx mask;
+
+ if (!TARGET_ALTIVEC)
+ return 0;
+
+ /* Get the vector mask for the given relational operations. */
+ mask = rs6000_emit_vector_compare (rcode, cc_op0, cc_op1, dest_mode);
+
+ rs6000_emit_vector_select (dest, op1, op2, mask);
+
+ return 1;
+}
+
/* Emit a conditional move: move TRUE_COND to DEST if OP of the
operands of the last comparison is nonzero/true, FALSE_COND if it
is zero/false. Return 0 if the hardware has no such operation. */
@@ -11216,6 +11489,7 @@ rs6000_emit_cmove (rtx dest, rtx op, rtx true_cond, rtx false_cond)
enum machine_mode compare_mode = GET_MODE (op0);
enum machine_mode result_mode = GET_MODE (dest);
rtx temp;
+ bool is_against_zero;
/* These modes should always match. */
if (GET_MODE (op1) != compare_mode
@@ -11240,6 +11514,17 @@ rs6000_emit_cmove (rtx dest, rtx op, rtx true_cond, rtx false_cond)
&& GET_MODE_CLASS (compare_mode) == MODE_FLOAT)
return 0;
+ is_against_zero = op1 == CONST0_RTX (compare_mode);
+
+ /* A floating-point subtract might overflow, underflow, or produce
+ an inexact result, thus changing the floating-point flags, so it
+ can't be generated if we care about that. It's safe if one side
+ of the construct is zero, since then no subtract will be
+ generated. */
+ if (GET_MODE_CLASS (compare_mode) == MODE_FLOAT
+ && flag_trapping_math && ! is_against_zero)
+ return 0;
+
/* Eliminate half of the comparisons by switching operands, this
makes the remaining code simpler. */
if (code == UNLT || code == UNGT || code == UNORDERED || code == NE
@@ -11272,14 +11557,18 @@ rs6000_emit_cmove (rtx dest, rtx op, rtx true_cond, rtx false_cond)
|| (! rtx_equal_p (op0, true_cond)
&& ! rtx_equal_p (op1, true_cond))))
return 0;
+
/* At this point we know we can use fsel. */
/* Reduce the comparison to a comparison against zero. */
- temp = gen_reg_rtx (compare_mode);
- emit_insn (gen_rtx_SET (VOIDmode, temp,
- gen_rtx_MINUS (compare_mode, op0, op1)));
- op0 = temp;
- op1 = CONST0_RTX (compare_mode);
+ if (! is_against_zero)
+ {
+ temp = gen_reg_rtx (compare_mode);
+ emit_insn (gen_rtx_SET (VOIDmode, temp,
+ gen_rtx_MINUS (compare_mode, op0, op1)));
+ op0 = temp;
+ op1 = CONST0_RTX (compare_mode);
+ }
/* If we don't care about NaNs we can reduce some of the comparisons
down to faster ones. */
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index 79a44a0ef57..59bef4137ea 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -1110,12 +1110,12 @@ extern int fixuplabelno;
#ifdef HAVE_LD_PIE
#define STARTFILE_LINUX_SPEC "\
-%{!shared: %{pg|p:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \
+%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \
%{mnewlib:ecrti.o%s;:crti.o%s} \
%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
#else
#define STARTFILE_LINUX_SPEC "\
-%{!shared: %{pg|p:gcrt1.o%s;:crt1.o%s}} \
+%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \
%{mnewlib:ecrti.o%s;:crti.o%s} \
%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
#endif
diff --git a/gcc/config/s390/s390-protos.h b/gcc/config/s390/s390-protos.h
index 78b90a8b32c..4e88c1d0123 100644
--- a/gcc/config/s390/s390-protos.h
+++ b/gcc/config/s390/s390-protos.h
@@ -37,7 +37,6 @@ extern int const0_operand (rtx, enum machine_mode);
extern int consttable_operand (rtx, enum machine_mode);
extern int larl_operand (rtx, enum machine_mode);
extern int s_operand (rtx, enum machine_mode);
-extern int s_imm_operand (rtx, enum machine_mode);
extern int shift_count_operand (rtx, enum machine_mode);
extern int bras_sym_operand (rtx, enum machine_mode);
extern int load_multiple_operation (rtx, enum machine_mode);
@@ -88,6 +87,8 @@ extern rtx s390_emit_call (rtx, rtx, rtx, rtx);
extern void s390_expand_logical_operator (enum rtx_code,
enum machine_mode, rtx *);
extern bool s390_logical_operator_ok_p (rtx *);
+extern void s390_narrow_logical_operator (enum rtx_code, rtx *, rtx *);
+extern bool s390_pool_operand (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 c1414cf48f3..1d4d813458b 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -195,9 +195,9 @@ enum processor_flags s390_arch_flags;
const char *s390_tune_string; /* for -mtune=<xxx> */
const char *s390_arch_string; /* for -march=<xxx> */
-/* String to specify backchain mode. */
-const char *s390_backchain_string = ""; /* "" no-backchain ,"1" backchain,
- "2" kernel-backchain */
+/* String to specify backchain mode:
+ "" no-backchain, "1" backchain, "2" kernel-backchain. */
+const char *s390_backchain_string = TARGET_DEFAULT_BACKCHAIN;
const char *s390_warn_framesize_string;
const char *s390_warn_dynamicstack_string;
@@ -279,7 +279,6 @@ static int s390_match_ccmode_set (rtx, enum machine_mode);
static int s390_branch_condition_mask (rtx);
static const char *s390_branch_condition_mnemonic (rtx, int);
static int check_mode (rtx, enum machine_mode *);
-static int general_s_operand (rtx, enum machine_mode, int);
static int s390_short_displacement (rtx);
static int s390_decompose_address (rtx, struct s390_address *);
static rtx get_thread_pointer (void);
@@ -1167,6 +1166,27 @@ s390_logical_operator_ok_p (rtx *operands)
return true;
}
+/* Narrow logical operation CODE of memory operand MEMOP with immediate
+ operand IMMOP to switch from SS to SI type instructions. */
+
+void
+s390_narrow_logical_operator (enum rtx_code code, rtx *memop, rtx *immop)
+{
+ int def = code == AND ? -1 : 0;
+ HOST_WIDE_INT mask;
+ int part;
+
+ gcc_assert (GET_CODE (*memop) == MEM);
+ gcc_assert (!MEM_VOLATILE_P (*memop));
+
+ mask = s390_extract_part (*immop, QImode, def);
+ part = s390_single_part (*immop, GET_MODE (*memop), QImode, def);
+ gcc_assert (part >= 0);
+
+ *memop = adjust_address (*memop, QImode, part);
+ *immop = gen_int_mode (mask, QImode);
+}
+
/* Change optimizations to be performed, depending on the
optimization level.
@@ -1423,15 +1443,12 @@ larl_operand (register rtx op, enum machine_mode mode)
return 0;
}
-/* Helper routine to implement s_operand and s_imm_operand.
+/* Return true if OP is a valid S-type operand.
OP is the current operation.
- MODE is the current operation mode.
- ALLOW_IMMEDIATE specifies whether immediate operands should
- be accepted or not. */
+ MODE is the current operation mode. */
-static int
-general_s_operand (register rtx op, enum machine_mode mode,
- int allow_immediate)
+int
+s_operand (rtx op, enum machine_mode mode)
{
struct s390_address addr;
@@ -1447,58 +1464,49 @@ general_s_operand (register rtx op, enum machine_mode mode,
&& GET_CODE (SUBREG_REG (op)) == MEM)
op = SUBREG_REG (op);
- switch (GET_CODE (op))
- {
- /* Constants are OK as s-operand if ALLOW_IMMEDIATE
- is true and we are still before reload. */
- case CONST_INT:
- case CONST_DOUBLE:
- if (!allow_immediate || reload_completed)
- return 0;
- return 1;
-
- /* Memory operands are OK unless they already use an
- index register. */
- case MEM:
- if (!s390_decompose_address (XEXP (op, 0), &addr))
- 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
- entries from being accepted. */
- if (!allow_immediate
- && addr.base && REGNO (addr.base) == BASE_REGNUM)
- return 0;
- return 1;
-
- default:
- break;
- }
+ if (GET_CODE (op) != MEM)
+ return 0;
+ if (!s390_decompose_address (XEXP (op, 0), &addr))
+ return 0;
+ if (addr.indx)
+ return 0;
- return 0;
+ return 1;
}
-/* Return true if OP is a valid S-type operand.
- OP is the current operation.
- MODE is the current operation mode. */
+/* Return true if OP is a memory operand pointing to the
+ literal pool, or an immediate operand. */
-int
-s_operand (register rtx op, enum machine_mode mode)
+bool
+s390_pool_operand (rtx op)
{
- return general_s_operand (op, mode, 0);
-}
+ struct s390_address addr;
-/* Return true if OP is a valid S-type operand or an immediate
- operand that can be addressed as S-type operand by forcing
- it into the literal pool.
- OP is the current operation.
- MODE is the current operation mode. */
+ /* Just like memory_operand, allow (subreg (mem ...))
+ after reload. */
+ if (reload_completed
+ && GET_CODE (op) == SUBREG
+ && GET_CODE (SUBREG_REG (op)) == MEM)
+ op = SUBREG_REG (op);
-int
-s_imm_operand (register rtx op, enum machine_mode mode)
-{
- return general_s_operand (op, mode, 1);
+ switch (GET_CODE (op))
+ {
+ case CONST_INT:
+ case CONST_DOUBLE:
+ return true;
+
+ case MEM:
+ if (!s390_decompose_address (XEXP (op, 0), &addr))
+ return false;
+ if (addr.base && REG_P (addr.base) && REGNO (addr.base) == BASE_REGNUM)
+ return true;
+ if (addr.indx && REG_P (addr.indx) && REGNO (addr.indx) == BASE_REGNUM)
+ return true;
+ return false;
+
+ default:
+ return false;
+ }
}
/* Return true if OP a valid shift count operand.
@@ -1577,6 +1585,21 @@ s390_extra_constraint_str (rtx op, int c, const char * str)
if (c != str[0])
abort ();
+ /* Check for offsettable variants of memory constraints. */
+ if (c == 'A')
+ {
+ /* Only accept non-volatile MEMs. */
+ if (!MEM_P (op) || MEM_VOLATILE_P (op))
+ return 0;
+
+ if ((reload_completed || reload_in_progress)
+ ? !offsettable_memref_p (op)
+ : !offsettable_nonstrict_memref_p (op))
+ return 0;
+
+ c = str[1];
+ }
+
switch (c)
{
case 'Q':
@@ -1671,7 +1694,7 @@ s390_const_ok_for_constraint_p (HOST_WIDE_INT value,
{
enum machine_mode mode, part_mode;
int def;
- unsigned char part;
+ int part, part_goal;
if (c != str[0])
abort ();
@@ -1695,7 +1718,10 @@ s390_const_ok_for_constraint_p (HOST_WIDE_INT value,
return value == 2147483647;
case 'N':
- part = str[1] - '0';
+ if (str[1] == 'x')
+ part_goal = -1;
+ else
+ part_goal = str[1] - '0';
switch (str[2])
{
@@ -1722,7 +1748,10 @@ s390_const_ok_for_constraint_p (HOST_WIDE_INT value,
if (GET_MODE_SIZE (mode) <= GET_MODE_SIZE (part_mode))
return 0;
- if (s390_single_part (GEN_INT (value), mode, part_mode, def) != part)
+ part = s390_single_part (GEN_INT (value), mode, part_mode, def);
+ if (part < 0)
+ return 0;
+ if (part_goal != -1 && part_goal != part)
return 0;
break;
@@ -6190,8 +6219,9 @@ s390_register_info (int live_regs[])
cfun_frame_layout.last_save_gpr = 6;
/* Mark f0, f2 for 31 bit and f0-f4 for 64 bit to be saved. */
- for (i = 0; i < (TARGET_64BIT ? 4 : 2); i++)
- cfun_set_fpr_bit (i);
+ if (TARGET_HARD_FLOAT)
+ for (i = 0; i < (TARGET_64BIT ? 4 : 2); i++)
+ cfun_set_fpr_bit (i);
}
if (!TARGET_64BIT)
@@ -8374,6 +8404,12 @@ s390_conditional_register_usage (void)
for (i = 18; i < 20; i++)
call_used_regs[i] = call_really_used_regs[i] = 0;
}
+
+ if (TARGET_SOFT_FLOAT)
+ {
+ for (i = 16; i < 32; i++)
+ call_used_regs[i] = fixed_regs[i] = 1;
+ }
}
/* Corresponding function to eh_return expander. */
diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h
index 4d50395b67c..11b6d84ab6d 100644
--- a/gcc/config/s390/s390.h
+++ b/gcc/config/s390/s390.h
@@ -126,11 +126,13 @@ extern int target_flags;
#define TARGET_IEEE_FLOAT 1
#ifdef DEFAULT_TARGET_64BIT
-#define TARGET_DEFAULT 0x31
+#define TARGET_DEFAULT (MASK_64BIT | MASK_ZARCH | MASK_HARD_FLOAT)
#else
-#define TARGET_DEFAULT 0x1
+#define TARGET_DEFAULT MASK_HARD_FLOAT
#endif
+#define TARGET_DEFAULT_BACKCHAIN ""
+
#define TARGET_SWITCHES \
{ { "hard-float", 1, N_("Use hardware fp")}, \
{ "soft-float", -1, N_("Don't use hardware fp")}, \
@@ -542,13 +544,14 @@ extern const enum reg_class regclass_map[FIRST_PSEUDO_REGISTER];
#define EXTRA_CONSTRAINT_STR(OP, C, STR) \
s390_extra_constraint_str ((OP), (C), (STR))
-#define EXTRA_MEMORY_CONSTRAINT(C, STR) \
- ((C) == 'Q' || (C) == 'R' || (C) == 'S' || (C) == 'T')
-#define EXTRA_ADDRESS_CONSTRAINT(C, STR) \
+#define EXTRA_MEMORY_CONSTRAINT(C, STR) \
+ ((C) == 'Q' || (C) == 'R' || (C) == 'S' || (C) == 'T' || (C) == 'A')
+#define EXTRA_ADDRESS_CONSTRAINT(C, STR) \
((C) == 'U' || (C) == 'W' || (C) == 'Y')
-#define CONSTRAINT_LEN(C, STR) \
- ((C) == 'N' ? 5 : DEFAULT_CONSTRAINT_LEN ((C), (STR)))
+#define CONSTRAINT_LEN(C, STR) \
+ ((C) == 'N' ? 5 : \
+ (C) == 'A' ? 2 : DEFAULT_CONSTRAINT_LEN ((C), (STR)))
/* Stack layout and calling conventions. */
@@ -1015,7 +1018,6 @@ do { \
/* Define the codes that are matched by predicates in aux-output.c. */
#define PREDICATE_CODES \
{"s_operand", { SUBREG, MEM }}, \
- {"s_imm_operand", { CONST_INT, CONST_DOUBLE, SUBREG, MEM }}, \
{"shift_count_operand", { REG, SUBREG, PLUS, CONST_INT }}, \
{"bras_sym_operand",{ SYMBOL_REF, CONST }}, \
{"larl_operand", { SYMBOL_REF, CONST, CONST_INT, CONST_DOUBLE }}, \
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index 5a649932329..7d59f0c0f7e 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -34,17 +34,21 @@
;; (-524288..524287) for long displacement
;; M -- Constant integer with a value of 0x7fffffff.
;; N -- Multiple letter constraint followed by 4 parameter letters.
-;; 0..9: number of the part counting from most to least significant
-;; 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)
+;; 0..9,x: number of the part counting from most to least significant
+;; 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.
+;; has a value different from its other parts. If the letter x
+;; is specified instead of a part number, the constraint matches
+;; if there is any single part with non-default value.
;; Q -- Memory reference without index register and with short displacement.
;; R -- Memory reference with index register and short displacement.
;; S -- Memory reference without index register but with long displacement.
;; T -- Memory reference with index register and long displacement.
+;; A -- Multiple letter constraint followed by Q, R, S, or T:
+;; Offsettable memory reference of type specified by second letter.
;; U -- Pointer with short displacement.
;; W -- Pointer with long displacement.
;; Y -- Shift count operand.
@@ -517,6 +521,39 @@
[(set_attr "op_type" "RS,RSY")])
+; Compare (equality) instructions
+
+(define_insn "*cmpdi_cct"
+ [(set (reg 33)
+ (compare (match_operand:DI 0 "nonimmediate_operand" "d,d,d,m,Q")
+ (match_operand:DI 1 "general_operand" "d,K,m,d,Q")))]
+ "s390_match_ccmode (insn, CCTmode) && TARGET_64BIT
+ && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))"
+ "@
+ cgr\t%0,%1
+ cghi\t%0,%c1
+ cg\t%0,%1
+ cg\t%1,%0
+ clc\t%O0(8,%R0),%1"
+ [(set_attr "op_type" "RRE,RI,RXY,RXY,SS")])
+
+(define_insn "*cmpsi_cct"
+ [(set (reg 33)
+ (compare (match_operand:SI 0 "nonimmediate_operand" "d,d,d,d,R,T,Q")
+ (match_operand:SI 1 "general_operand" "d,K,R,T,d,d,Q")))]
+ "s390_match_ccmode (insn, CCTmode)
+ && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))"
+ "@
+ cr\t%0,%1
+ chi\t%0,%c1
+ c\t%0,%1
+ cy\t%0,%1
+ c\t%1,%0
+ cy\t%1,%0
+ clc\t%O0(4,%R0),%1"
+ [(set_attr "op_type" "RR,RI,RX,RXY,RX,RXY,SS")])
+
+
; Compare (signed) instructions
(define_insn "*cmpdi_ccs_sign"
@@ -569,7 +606,7 @@
[(set (reg 33)
(compare (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "d,m"))
(match_operand:DI 0 "register_operand" "d,d")))]
- "s390_match_ccmode(insn, CCURmode) && TARGET_64BIT"
+ "s390_match_ccmode (insn, CCURmode) && TARGET_64BIT"
"@
clgfr\t%0,%1
clgf\t%0,%1"
@@ -577,86 +614,56 @@
(define_insn "*cmpdi_ccu"
[(set (reg 33)
- (compare (match_operand:DI 0 "register_operand" "d,d")
- (match_operand:DI 1 "general_operand" "d,m")))]
- "s390_match_ccmode(insn, CCUmode) && TARGET_64BIT"
+ (compare (match_operand:DI 0 "nonimmediate_operand" "d,d,Q")
+ (match_operand:DI 1 "general_operand" "d,m,Q")))]
+ "s390_match_ccmode (insn, CCUmode) && TARGET_64BIT
+ && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))"
"@
clgr\t%0,%1
- clg\t%0,%1"
- [(set_attr "op_type" "RRE,RXY")])
+ clg\t%0,%1
+ clc\t%O0(8,%R0),%1"
+ [(set_attr "op_type" "RRE,RXY,SS")])
(define_insn "*cmpsi_ccu"
[(set (reg 33)
- (compare (match_operand:SI 0 "register_operand" "d,d,d")
- (match_operand:SI 1 "general_operand" "d,R,T")))]
- "s390_match_ccmode(insn, CCUmode)"
+ (compare (match_operand:SI 0 "nonimmediate_operand" "d,d,d,Q")
+ (match_operand:SI 1 "general_operand" "d,R,T,Q")))]
+ "s390_match_ccmode (insn, CCUmode)
+ && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))"
"@
clr\t%0,%1
cl\t%0,%1
- cly\t%0,%1"
- [(set_attr "op_type" "RR,RX,RXY")])
+ cly\t%0,%1
+ clc\t%O0(4,%R0),%1"
+ [(set_attr "op_type" "RR,RX,RXY,SS")])
(define_insn "*cmphi_ccu"
[(set (reg 33)
- (compare (match_operand:HI 0 "register_operand" "d,d")
- (match_operand:HI 1 "s_imm_operand" "Q,S")))]
- "s390_match_ccmode(insn, CCUmode)"
+ (compare (match_operand:HI 0 "nonimmediate_operand" "d,d,Q")
+ (match_operand:HI 1 "general_operand" "Q,S,Q")))]
+ "s390_match_ccmode (insn, CCUmode)
+ && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))
+ && !register_operand (operands[1], HImode)"
"@
clm\t%0,3,%1
- clmy\t%0,3,%1"
- [(set_attr "op_type" "RS,RSY")])
+ clmy\t%0,3,%1
+ clc\t%O0(2,%R0),%1"
+ [(set_attr "op_type" "RS,RSY,SS")])
(define_insn "*cmpqi_ccu"
[(set (reg 33)
- (compare (match_operand:QI 0 "register_operand" "d,d")
- (match_operand:QI 1 "s_imm_operand" "Q,S")))]
- "s390_match_ccmode(insn, CCUmode)"
+ (compare (match_operand:QI 0 "nonimmediate_operand" "d,d,Q,S,Q")
+ (match_operand:QI 1 "general_operand" "Q,S,n,n,Q")))]
+ "s390_match_ccmode (insn, CCUmode)
+ && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))
+ && !register_operand (operands[1], QImode)"
"@
clm\t%0,1,%1
- clmy\t%0,1,%1"
- [(set_attr "op_type" "RS,RSY")])
-
-(define_insn "*cli"
- [(set (reg 33)
- (compare (match_operand:QI 0 "memory_operand" "Q,S")
- (match_operand:QI 1 "immediate_operand" "n,n")))]
- "s390_match_ccmode (insn, CCUmode)"
- "@
+ clmy\t%0,1,%1
cli\t%0,%b1
- cliy\t%0,%b1"
- [(set_attr "op_type" "SI,SIY")])
-
-(define_insn "*cmpdi_ccu_mem"
- [(set (reg 33)
- (compare (match_operand:DI 0 "s_operand" "Q")
- (match_operand:DI 1 "s_imm_operand" "Q")))]
- "s390_match_ccmode(insn, CCUmode)"
- "clc\t%O0(8,%R0),%1"
- [(set_attr "op_type" "SS")])
-
-(define_insn "*cmpsi_ccu_mem"
- [(set (reg 33)
- (compare (match_operand:SI 0 "s_operand" "Q")
- (match_operand:SI 1 "s_imm_operand" "Q")))]
- "s390_match_ccmode(insn, CCUmode)"
- "clc\t%O0(4,%R0),%1"
- [(set_attr "op_type" "SS")])
-
-(define_insn "*cmphi_ccu_mem"
- [(set (reg 33)
- (compare (match_operand:HI 0 "s_operand" "Q")
- (match_operand:HI 1 "s_imm_operand" "Q")))]
- "s390_match_ccmode(insn, CCUmode)"
- "clc\t%O0(2,%R0),%1"
- [(set_attr "op_type" "SS")])
-
-(define_insn "*cmpqi_ccu_mem"
- [(set (reg 33)
- (compare (match_operand:QI 0 "s_operand" "Q")
- (match_operand:QI 1 "s_imm_operand" "Q")))]
- "s390_match_ccmode(insn, CCUmode)"
- "clc\t%O0(1,%R0),%1"
- [(set_attr "op_type" "SS")])
+ cliy\t%0,%b1
+ clc\t%O0(1,%R0),%1"
+ [(set_attr "op_type" "RS,RSY,SI,SIY,SS")])
; DF instructions
@@ -1264,7 +1271,7 @@
(define_insn "*movstricthi"
[(set (strict_low_part (match_operand:HI 0 "register_operand" "+d,d"))
- (match_operand:HI 1 "s_imm_operand" "Q,S"))
+ (match_operand:HI 1 "memory_operand" "Q,S"))
(clobber (reg:CC 33))]
""
"@
@@ -5131,11 +5138,11 @@
[(set_attr "op_type" "RRE,RXY")])
(define_insn "*anddi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,d,d,d,d,d,Q")
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,d,d,d,d,d,AQ,Q")
(and:DI (match_operand:DI 1 "nonimmediate_operand"
- "%d,o,0,0,0,0,0,0,0")
+ "%d,o,0,0,0,0,0,0,0,0")
(match_operand:DI 2 "general_operand"
- "M,M,N0HDF,N1HDF,N2HDF,N3HDF,d,m,Q")))
+ "M,M,N0HDF,N1HDF,N2HDF,N3HDF,d,m,NxQDF,Q")))
(clobber (reg:CC 33))]
"TARGET_64BIT && s390_logical_operator_ok_p (operands)"
"@
@@ -5147,8 +5154,19 @@
nill\t%0,%j2
ngr\t%0,%2
ng\t%0,%2
+ #
nc\t%O0(8,%R0),%2"
- [(set_attr "op_type" "RRE,RXE,RI,RI,RI,RI,RRE,RXY,SS")])
+ [(set_attr "op_type" "RRE,RXE,RI,RI,RI,RI,RRE,RXY,SI,SS")])
+
+(define_split
+ [(set (match_operand:DI 0 "s_operand" "")
+ (and:DI (match_dup 0) (match_operand:DI 1 "immediate_operand" "")))
+ (clobber (reg:CC 33))]
+ "reload_completed"
+ [(parallel
+ [(set (match_dup 0) (and:QI (match_dup 0) (match_dup 1)))
+ (clobber (reg:CC 33))])]
+ "s390_narrow_logical_operator (AND, &operands[0], &operands[1]);")
(define_expand "anddi3"
[(set (match_operand:DI 0 "nonimmediate_operand" "")
@@ -5192,9 +5210,11 @@
[(set_attr "op_type" "RR,RX,RXY")])
(define_insn "*andsi3_zarch"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,d,d,d,d,Q")
- (and:SI (match_operand:SI 1 "nonimmediate_operand" "%d,o,0,0,0,0,0,0")
- (match_operand:SI 2 "general_operand" "M,M,N0HSF,N1HSF,d,R,T,Q")))
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,d,d,d,d,AQ,Q")
+ (and:SI (match_operand:SI 1 "nonimmediate_operand"
+ "%d,o,0,0,0,0,0,0,0")
+ (match_operand:SI 2 "general_operand"
+ "M,M,N0HSF,N1HSF,d,R,T,NxQSF,Q")))
(clobber (reg:CC 33))]
"TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
"@
@@ -5205,20 +5225,32 @@
nr\t%0,%2
n\t%0,%2
ny\t%0,%2
+ #
nc\t%O0(4,%R0),%2"
- [(set_attr "op_type" "RRE,RXE,RI,RI,RR,RX,RXY,SS")])
+ [(set_attr "op_type" "RRE,RXE,RI,RI,RR,RX,RXY,SI,SS")])
(define_insn "*andsi3_esa"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,Q")
- (and:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,0")
- (match_operand:SI 2 "general_operand" "d,R,Q")))
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,AQ,Q")
+ (and:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,0,0")
+ (match_operand:SI 2 "general_operand" "d,R,NxQSF,Q")))
(clobber (reg:CC 33))]
"!TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
"@
nr\t%0,%2
n\t%0,%2
+ #
nc\t%O0(4,%R0),%2"
- [(set_attr "op_type" "RR,RX,SS")])
+ [(set_attr "op_type" "RR,RX,SI,SS")])
+
+(define_split
+ [(set (match_operand:SI 0 "s_operand" "")
+ (and:SI (match_dup 0) (match_operand:SI 1 "immediate_operand" "")))
+ (clobber (reg:CC 33))]
+ "reload_completed"
+ [(parallel
+ [(set (match_dup 0) (and:QI (match_dup 0) (match_dup 1)))
+ (clobber (reg:CC 33))])]
+ "s390_narrow_logical_operator (AND, &operands[0], &operands[1]);")
(define_expand "andsi3"
[(set (match_operand:SI 0 "nonimmediate_operand" "")
@@ -5233,27 +5265,39 @@
;
(define_insn "*andhi3_zarch"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=d,d,Q")
- (and:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0,0")
- (match_operand:HI 2 "general_operand" "d,n,Q")))
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=d,d,AQ,Q")
+ (and:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0,0,0")
+ (match_operand:HI 2 "general_operand" "d,n,NxQHF,Q")))
(clobber (reg:CC 33))]
"TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
"@
nr\t%0,%2
nill\t%0,%x2
+ #
nc\t%O0(2,%R0),%2"
- [(set_attr "op_type" "RR,RI,SS")])
+ [(set_attr "op_type" "RR,RI,SI,SS")])
(define_insn "*andhi3_esa"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=d,Q")
- (and:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0")
- (match_operand:HI 2 "general_operand" "d,Q")))
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=d,AQ,Q")
+ (and:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0,0")
+ (match_operand:HI 2 "general_operand" "d,NxQHF,Q")))
(clobber (reg:CC 33))]
"!TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
"@
nr\t%0,%2
+ #
nc\t%O0(2,%R0),%2"
- [(set_attr "op_type" "RR,SS")])
+ [(set_attr "op_type" "RR,SI,SS")])
+
+(define_split
+ [(set (match_operand:HI 0 "s_operand" "")
+ (and:HI (match_dup 0) (match_operand:HI 1 "immediate_operand" "")))
+ (clobber (reg:CC 33))]
+ "reload_completed"
+ [(parallel
+ [(set (match_dup 0) (and:QI (match_dup 0) (match_dup 1)))
+ (clobber (reg:CC 33))])]
+ "s390_narrow_logical_operator (AND, &operands[0], &operands[1]);")
(define_expand "andhi3"
[(set (match_operand:HI 0 "nonimmediate_operand" "")
@@ -5336,10 +5380,10 @@
[(set_attr "op_type" "RRE,RXY")])
(define_insn "*iordi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,d,d,d,Q")
- (ior:DI (match_operand:DI 1 "nonimmediate_operand" "0,0,0,0,0,0,0")
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,d,d,d,AQ,Q")
+ (ior:DI (match_operand:DI 1 "nonimmediate_operand" "0,0,0,0,0,0,0,0")
(match_operand:DI 2 "general_operand"
- "N0HD0,N1HD0,N2HD0,N3HD0,d,m,Q")))
+ "N0HD0,N1HD0,N2HD0,N3HD0,d,m,NxQD0,Q")))
(clobber (reg:CC 33))]
"TARGET_64BIT && s390_logical_operator_ok_p (operands)"
"@
@@ -5349,8 +5393,19 @@
oill\t%0,%i2
ogr\t%0,%2
og\t%0,%2
+ #
oc\t%O0(8,%R0),%2"
- [(set_attr "op_type" "RI,RI,RI,RI,RRE,RXY,SS")])
+ [(set_attr "op_type" "RI,RI,RI,RI,RRE,RXY,SI,SS")])
+
+(define_split
+ [(set (match_operand:DI 0 "s_operand" "")
+ (ior:DI (match_dup 0) (match_operand:DI 1 "immediate_operand" "")))
+ (clobber (reg:CC 33))]
+ "reload_completed"
+ [(parallel
+ [(set (match_dup 0) (ior:QI (match_dup 0) (match_dup 1)))
+ (clobber (reg:CC 33))])]
+ "s390_narrow_logical_operator (IOR, &operands[0], &operands[1]);")
(define_expand "iordi3"
[(set (match_operand:DI 0 "nonimmediate_operand" "")
@@ -5392,9 +5447,9 @@
[(set_attr "op_type" "RR,RX,RXY")])
(define_insn "*iorsi3_zarch"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,d,d,Q")
- (ior:SI (match_operand:SI 1 "nonimmediate_operand" "0,0,0,0,0,0")
- (match_operand:SI 2 "general_operand" "N0HS0,N1HS0,d,R,T,Q")))
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,d,d,AQ,Q")
+ (ior:SI (match_operand:SI 1 "nonimmediate_operand" "0,0,0,0,0,0,0")
+ (match_operand:SI 2 "general_operand" "N0HS0,N1HS0,d,R,T,NxQS0,Q")))
(clobber (reg:CC 33))]
"TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
"@
@@ -5403,20 +5458,32 @@
or\t%0,%2
o\t%0,%2
oy\t%0,%2
+ #
oc\t%O0(4,%R0),%2"
- [(set_attr "op_type" "RI,RI,RR,RX,RXY,SS")])
+ [(set_attr "op_type" "RI,RI,RR,RX,RXY,SI,SS")])
(define_insn "*iorsi3_esa"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,Q")
- (ior:SI (match_operand:SI 1 "nonimmediate_operand" "0,0,0")
- (match_operand:SI 2 "general_operand" "d,R,Q")))
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,AQ,Q")
+ (ior:SI (match_operand:SI 1 "nonimmediate_operand" "0,0,0,0")
+ (match_operand:SI 2 "general_operand" "d,R,NxQS0,Q")))
(clobber (reg:CC 33))]
"!TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
"@
or\t%0,%2
o\t%0,%2
+ #
oc\t%O0(4,%R0),%2"
- [(set_attr "op_type" "RR,RX,SS")])
+ [(set_attr "op_type" "RR,RX,SI,SS")])
+
+(define_split
+ [(set (match_operand:SI 0 "s_operand" "")
+ (ior:SI (match_dup 0) (match_operand:SI 1 "immediate_operand" "")))
+ (clobber (reg:CC 33))]
+ "reload_completed"
+ [(parallel
+ [(set (match_dup 0) (ior:QI (match_dup 0) (match_dup 1)))
+ (clobber (reg:CC 33))])]
+ "s390_narrow_logical_operator (IOR, &operands[0], &operands[1]);")
(define_expand "iorsi3"
[(set (match_operand:SI 0 "nonimmediate_operand" "")
@@ -5431,27 +5498,39 @@
;
(define_insn "*iorhi3_zarch"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=d,d,Q")
- (ior:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0,0")
- (match_operand:HI 2 "general_operand" "d,n,Q")))
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=d,d,AQ,Q")
+ (ior:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0,0,0")
+ (match_operand:HI 2 "general_operand" "d,n,NxQH0,Q")))
(clobber (reg:CC 33))]
"TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
"@
or\t%0,%2
oill\t%0,%x2
+ #
oc\t%O0(2,%R0),%2"
- [(set_attr "op_type" "RR,RI,SS")])
+ [(set_attr "op_type" "RR,RI,SI,SS")])
(define_insn "*iorhi3_esa"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=d,Q")
- (ior:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0")
- (match_operand:HI 2 "general_operand" "d,Q")))
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=d,AQ,Q")
+ (ior:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0,0")
+ (match_operand:HI 2 "general_operand" "d,NxQH0,Q")))
(clobber (reg:CC 33))]
"!TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
"@
or\t%0,%2
+ #
oc\t%O0(2,%R0),%2"
- [(set_attr "op_type" "RR,SS")])
+ [(set_attr "op_type" "RR,SI,SS")])
+
+(define_split
+ [(set (match_operand:HI 0 "s_operand" "")
+ (ior:HI (match_dup 0) (match_operand:HI 1 "immediate_operand" "")))
+ (clobber (reg:CC 33))]
+ "reload_completed"
+ [(parallel
+ [(set (match_dup 0) (ior:QI (match_dup 0) (match_dup 1)))
+ (clobber (reg:CC 33))])]
+ "s390_narrow_logical_operator (IOR, &operands[0], &operands[1]);")
(define_expand "iorhi3"
[(set (match_operand:HI 0 "nonimmediate_operand" "")
@@ -5534,16 +5613,27 @@
[(set_attr "op_type" "RRE,RXY")])
(define_insn "*xordi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,Q")
- (xor:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0,0")
- (match_operand:DI 2 "general_operand" "d,m,Q")))
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,AQ,Q")
+ (xor:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0,0,0")
+ (match_operand:DI 2 "general_operand" "d,m,NxQD0,Q")))
(clobber (reg:CC 33))]
"TARGET_64BIT && s390_logical_operator_ok_p (operands)"
"@
xgr\t%0,%2
xg\t%0,%2
+ #
xc\t%O0(8,%R0),%2"
- [(set_attr "op_type" "RRE,RXY,SS")])
+ [(set_attr "op_type" "RRE,RXY,SI,SS")])
+
+(define_split
+ [(set (match_operand:DI 0 "s_operand" "")
+ (xor:DI (match_dup 0) (match_operand:DI 1 "immediate_operand" "")))
+ (clobber (reg:CC 33))]
+ "reload_completed"
+ [(parallel
+ [(set (match_dup 0) (xor:QI (match_dup 0) (match_dup 1)))
+ (clobber (reg:CC 33))])]
+ "s390_narrow_logical_operator (XOR, &operands[0], &operands[1]);")
(define_expand "xordi3"
[(set (match_operand:DI 0 "nonimmediate_operand" "")
@@ -5585,17 +5675,28 @@
[(set_attr "op_type" "RR,RX,RXY")])
(define_insn "*xorsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,Q")
- (xor:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,0,0")
- (match_operand:SI 2 "general_operand" "d,R,T,Q")))
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,AQ,Q")
+ (xor:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,0,0,0")
+ (match_operand:SI 2 "general_operand" "d,R,T,NxQS0,Q")))
(clobber (reg:CC 33))]
"s390_logical_operator_ok_p (operands)"
"@
xr\t%0,%2
x\t%0,%2
xy\t%0,%2
+ #
xc\t%O0(4,%R0),%2"
- [(set_attr "op_type" "RR,RX,RXY,SS")])
+ [(set_attr "op_type" "RR,RX,RXY,SI,SS")])
+
+(define_split
+ [(set (match_operand:SI 0 "s_operand" "")
+ (xor:SI (match_dup 0) (match_operand:SI 1 "immediate_operand" "")))
+ (clobber (reg:CC 33))]
+ "reload_completed"
+ [(parallel
+ [(set (match_dup 0) (xor:QI (match_dup 0) (match_dup 1)))
+ (clobber (reg:CC 33))])]
+ "s390_narrow_logical_operator (XOR, &operands[0], &operands[1]);")
(define_expand "xorsi3"
[(set (match_operand:SI 0 "nonimmediate_operand" "")
@@ -5610,15 +5711,26 @@
;
(define_insn "*xorhi3"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=d,Q")
- (xor:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0")
- (match_operand:HI 2 "general_operand" "d,Q")))
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=d,AQ,Q")
+ (xor:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0,0")
+ (match_operand:HI 2 "general_operand" "d,NxQH0,Q")))
(clobber (reg:CC 33))]
"s390_logical_operator_ok_p (operands)"
"@
xr\t%0,%2
+ #
xc\t%O0(2,%R0),%2"
- [(set_attr "op_type" "RR,SS")])
+ [(set_attr "op_type" "RR,SI,SS")])
+
+(define_split
+ [(set (match_operand:HI 0 "s_operand" "")
+ (xor:HI (match_dup 0) (match_operand:HI 1 "immediate_operand" "")))
+ (clobber (reg:CC 33))]
+ "reload_completed"
+ [(parallel
+ [(set (match_dup 0) (xor:QI (match_dup 0) (match_dup 1)))
+ (clobber (reg:CC 33))])]
+ "s390_narrow_logical_operator (XOR, &operands[0], &operands[1]);")
(define_expand "xorhi3"
[(set (match_operand:HI 0 "nonimmediate_operand" "")
diff --git a/gcc/config/s390/tpf.h b/gcc/config/s390/tpf.h
index 8ba13e25412..e6a016a7771 100644
--- a/gcc/config/s390/tpf.h
+++ b/gcc/config/s390/tpf.h
@@ -54,9 +54,13 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#undef STACK_POINTER_OFFSET
#define STACK_POINTER_OFFSET 448
-/* When building for TPF, set a generic default target that is 64 bits. */
+/* When building for TPF, set a generic default target that is 64 bits.
+ Also, enable TPF profiling support and the standard backchain by default. */
#undef TARGET_DEFAULT
-#define TARGET_DEFAULT 0xb3
+#define TARGET_DEFAULT (MASK_64BIT | MASK_ZARCH | MASK_HARD_FLOAT \
+ | MASK_TPF_PROFILING)
+#undef TARGET_DEFAULT_BACKCHAIN
+#define TARGET_DEFAULT_BACKCHAIN "1"
/* Exception handling. */
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 349d981ccc9..d88e159bd1f 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -9413,7 +9413,7 @@ int
sh_dwarf_calling_convention (tree func)
{
if (sh_attr_renesas_p (func))
- return DW_CC_renesas_sh;
+ return DW_CC_GNU_renesas_sh;
return DW_CC_normal;
}
@@ -10095,7 +10095,7 @@ sh_init_cumulative_args (CUMULATIVE_ARGS * pcum,
pcum->prototype_p = FALSE;
if (mode != VOIDmode)
{
- pcum->call_cookie =
+ pcum->call_cookie =
CALL_COOKIE_RET_TRAMP (TARGET_SHCOMPACT
&& GET_MODE_SIZE (mode) > 4
&& BASE_RETURN_VALUE_REG (mode) == FIRST_RET_REG);
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index 5adcac22664..dd9f216b587 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -6869,8 +6869,8 @@
(define_insn "tls_global_dynamic"
[(set (match_operand:SI 0 "register_operand" "=&z")
- (call (unspec:SI [(match_operand:SI 1 "" "")]
- UNSPEC_TLSGD)
+ (call (mem:SI (unspec:SI [(match_operand:SI 1 "" "")]
+ UNSPEC_TLSGD))
(const_int 0)))
(use (reg:PSI FPSCR_REG))
(use (reg:SI PIC_REG))
@@ -6898,8 +6898,8 @@ mov.l\\t1f,r4\\n\\
(define_insn "tls_local_dynamic"
[(set (match_operand:SI 0 "register_operand" "=&z")
- (call (unspec:SI [(match_operand:SI 1 "" "")]
- UNSPEC_TLSLDM)
+ (call (mem:SI (unspec:SI [(match_operand:SI 1 "" "")]
+ UNSPEC_TLSLDM))
(const_int 0)))
(use (reg:PSI FPSCR_REG))
(use (reg:SI PIC_REG))
@@ -10951,17 +10951,45 @@ mov.l\\t1f,r0\\n\\
"byterev %1, %0"
[(set_attr "type" "arith_media")])
-(define_insn "prefetch"
+(define_insn "prefetch_media"
[(prefetch (match_operand:QI 0 "address_operand" "p")
(match_operand:SI 1 "const_int_operand" "n")
(match_operand:SI 2 "const_int_operand" "n"))]
- "TARGET_SHMEDIA || TARGET_HARD_SH4"
+ "TARGET_SHMEDIA"
"*
{
- if (TARGET_HARD_SH4)
- return \"pref @%0\";
operands[0] = gen_rtx_MEM (QImode, operands[0]);
output_asm_insn (\"ld%M0.b %m0,r63\", operands);
return \"\";
}"
[(set_attr "type" "other")])
+
+(define_insn "prefetch_i4"
+ [(prefetch (match_operand:SI 0 "register_operand" "r")
+ (match_operand:SI 1 "const_int_operand" "n")
+ (match_operand:SI 2 "const_int_operand" "n"))]
+ "TARGET_HARD_SH4"
+ "*
+{
+ return \"pref @%0\";
+}"
+ [(set_attr "type" "other")])
+
+(define_expand "prefetch"
+ [(prefetch (match_operand:QI 0 "address_operand" "p")
+ (match_operand:SI 1 "const_int_operand" "n")
+ (match_operand:SI 2 "const_int_operand" "n"))]
+ "TARGET_SHMEDIA || TARGET_HARD_SH4"
+ "
+{
+ if (TARGET_HARD_SH4 && ! register_operand (operands[0], SImode))
+ {
+ rtx reg = gen_reg_rtx (SImode);
+ emit_move_insn (reg, operands[0]);
+ operands[0] = reg;
+ }
+
+ emit_insn ((TARGET_SHMEDIA ? gen_prefetch_media : gen_prefetch_i4)
+ (operands[0], operands[1], operands[2]));
+ DONE;
+}")
diff --git a/gcc/config/sh/symbian.c b/gcc/config/sh/symbian.c
index e4b0d2bc225..02b95f5970d 100644
--- a/gcc/config/sh/symbian.c
+++ b/gcc/config/sh/symbian.c
@@ -559,8 +559,7 @@ symbian_possibly_export_base_class (tree base_class)
tree methods;
int len;
- if (! (TYPE_POLYMORPHIC_P (base_class)
- || TYPE_USES_VIRTUAL_BASECLASSES (base_class)))
+ if (! (TYPE_CONTAINS_VPTR_P (base_class)))
return;
methods = CLASSTYPE_METHOD_VEC (base_class);
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index aa1fa0905b1..3f75954e6cc 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -1547,23 +1547,7 @@ input_operand (rtx op, enum machine_mode mode)
/* Check for valid MEM forms. */
if (GET_CODE (op) == MEM)
- {
- rtx inside = XEXP (op, 0);
-
- if (GET_CODE (inside) == LO_SUM)
- {
- /* We can't allow these because all of the splits
- (eventually as they trickle down into DFmode
- splits) require offsettable memory references. */
- if (! TARGET_V9
- && GET_MODE (op) == TFmode)
- return 0;
-
- return (register_operand (XEXP (inside, 0), Pmode)
- && CONSTANT_P (XEXP (inside, 1)));
- }
- return memory_address_p (mode, inside);
- }
+ return memory_address_p (mode, XEXP (op, 0));
return 0;
}
@@ -3516,15 +3500,14 @@ legitimate_address_p (enum machine_mode mode, rtx addr, int strict)
else if ((REG_P (rs1) || GET_CODE (rs1) == SUBREG)
&& (REG_P (rs2) || GET_CODE (rs2) == SUBREG))
{
- /* We prohibit REG + REG for TFmode when there are no instructions
- which accept REG+REG instructions. We do this because REG+REG
- is not an offsetable address. If we get the situation in reload
+ /* We prohibit REG + REG for TFmode when there are no quad move insns
+ and we consequently need to split. We do this because REG+REG
+ is not an offsettable address. If we get the situation in reload
where source and destination of a movtf pattern are both MEMs with
REG+REG address, then only one of them gets converted to an
- offsetable address. */
+ offsettable address. */
if (mode == TFmode
- && !(TARGET_FPU && TARGET_ARCH64 && TARGET_V9
- && TARGET_HARD_QUAD))
+ && ! (TARGET_FPU && TARGET_ARCH64 && TARGET_HARD_QUAD))
return 0;
/* We prohibit REG + REG on ARCH32 if not optimizing for
@@ -3557,10 +3540,25 @@ legitimate_address_p (enum machine_mode mode, rtx addr, int strict)
if (! CONSTANT_P (imm1) || tls_symbolic_operand (rs1))
return 0;
- /* We can't allow TFmode, because an offset greater than or equal to the
- alignment (8) may cause the LO_SUM to overflow if !v9. */
- if (mode == TFmode && !TARGET_V9)
- return 0;
+ if (USE_AS_OFFSETABLE_LO10)
+ {
+ /* We can't allow TFmode, because an offset greater than or equal to
+ the alignment (8) may cause the LO_SUM to overflow if !v9. */
+ if (mode == TFmode && ! TARGET_V9)
+ return 0;
+ }
+ else
+ {
+ /* We prohibit LO_SUM for TFmode when there are no quad move insns
+ and we consequently need to split. We do this because LO_SUM
+ is not an offsettable address. If we get the situation in reload
+ where source and destination of a movtf pattern are both MEMs with
+ LO_SUM address, then only one of them gets converted to an
+ offsettable address. */
+ if (mode == TFmode
+ && ! (TARGET_FPU && TARGET_ARCH64 && TARGET_HARD_QUAD))
+ return 0;
+ }
}
else if (GET_CODE (addr) == CONST_INT && SMALL_INT (addr))
return 1;
@@ -6024,7 +6022,7 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
bool indirect;
tree ptrtype = build_pointer_type (type);
- if (pass_by_reference (NULL, TYPE_MODE (type), type, 0))
+ if (pass_by_reference (NULL, TYPE_MODE (type), type, false))
{
indirect = true;
size = rsize = UNITS_PER_WORD;
@@ -6044,7 +6042,7 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
align = 2 * UNITS_PER_WORD;
/* SPARC-V9 ABI states that structures up to 16 bytes in size
- are given whole slots as needed. */
+ are left-justified in their slots. */
if (AGGREGATE_TYPE_P (type))
{
if (size == 0)
@@ -6074,7 +6072,7 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
if (indirect)
{
addr = fold_convert (build_pointer_type (ptrtype), addr);
- addr = build_fold_indirect_ref (addr);
+ addr = build_va_arg_indirect_ref (addr);
}
/* If the address isn't aligned properly for the type,
we may need to copy to a temporary.
@@ -6103,7 +6101,7 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
incr = build2 (MODIFY_EXPR, ptr_type_node, valist, incr);
gimplify_and_add (incr, post_p);
- return build_fold_indirect_ref (addr);
+ return build_va_arg_indirect_ref (addr);
}
/* Return the string to output an unconditional branch to LABEL, which is
@@ -8543,7 +8541,7 @@ sparc_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
{
/* We will emit a regular sibcall below, so we need to instruct
output_sibcall that we are in a leaf function. */
- sparc_leaf_function_p = 1;
+ sparc_leaf_function_p = current_function_uses_only_leaf_regs = 1;
/* This will cause final.c to invoke leaf_renumber_regs so we
must behave as if we were in a not-yet-leafified function. */
@@ -8553,7 +8551,7 @@ sparc_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
{
/* We will emit the sibcall manually below, so we will need to
manually spill non-leaf registers. */
- sparc_leaf_function_p = 0;
+ sparc_leaf_function_p = current_function_uses_only_leaf_regs = 0;
/* We really are in a leaf function. */
int_arg_first = SPARC_OUTGOING_INT_ARG_FIRST;
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 13117b89f60..80ea39131e9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,100 @@
+2004-10-08 Kazu Hirata <kazu@cs.umass.edu>
+
+ * pt.c, search.c: Fix comment typos.
+
+2004-10-08 Nathan Sidwell <nathan@codesourcery.com>
+
+ * cp-tree.h (dfs_walk, dfs_walk_real, dfs_unmark, markedp,
+ unmarkedp): Remove.
+ (dfs_skip_bases, dfs_walk_all, dfs_walk_once): New.
+ * class.c (struct find_final_overrider_data): Remove most_derived,
+ vpath_list and vpath fields. Add path field.
+ (dfs_find_final_ocerrider_1): Add DEPTH parameter. Adjust.
+ (dfs_find_final_overrider): Rename to ...
+ (dfs_find_final_overrider_pre): ... here. Adjust.
+ (dfs_find_final_overrider_post): Adjust.
+ (dfs_find_final_overrider_q): Fold into
+ dfs_find_final_overrider_pre.
+ (find_final_overrider): Adjust dfs searching.
+ (dfs_modify_vtables): Don't mark binfo here.
+ (modify_all_vtables): Use dfs_walk_once.
+ (build_vtt_inits): Likwise. Use dfs_walk_all.
+ (dfs_build_secondary_vptr_vtt_inits): Don't mark binfo here.
+ Return dfs_skip_bases as appropriate.
+ (dfs_fixup_binfo_vtbls): Return dfs_skip_bases as appropriate.
+ * init.c (dfs_initialized_vtbl_ptrs): Return dfs_skip_bases as
+ appropriate. Don't mark binfo here.
+ (initialize_vtbl_ptrs): Use dfs_walk_once.
+ * search.c (struct vbase_info): Remove unused struct.
+ (access_in_type): Use dfs_walk_once.
+ (dfs_access_in_type): Don't mark binfo here.
+ (dfs_accessible_queue_p, dfs_accessible_p) Remove.
+ Fold into ...
+ (accessible_r): ... here. New. Specialize dfs_walk_once.
+ (accessible_p): Use accessible_r.
+ (lookup_field_queue_p): Remove. Fold into ...
+ (lookup_field_r): ... here. Adjust.
+ (lookup_member): Use dfs_walk_all.
+ (dfs_walk_real, dfs_walk): Replace with ...
+ (dfs_walk_all, dfs_walk_once): ... these.
+ (dfs_walk_once_r, dfs_unmark_r): Workers for dfs_walk_once.
+ (dfs_unmark, unmarkedp, markedp): Remove.
+ (dfs_get_pure_virtuals): Don't mark binfo here.
+ (get_pure_virtuals): Use dfs_walk_once.
+ (dfs_debug_unmarked_p): Remove. Fold into ...
+ (dfs_debug_mark): ... here.
+ (note_debug_info_needed): Use dfs_walk_all.
+
+2004-10-07 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * pt.c (tsubst_expr) <case ASM_EXPR>: Look passed the
+ CLEANUP_POINT_EXPR to get the asm expression.
+
+2004-10-07 Mark Mitchell <mark@codesourcery.com>
+
+ * cp-tree.h (ICS_USER_FLAG): Remove comment about obsolete flag.
+ (DECL_MEMBER_TEMPLATE_P): New macro.
+ (is_member_template): Remove.
+ (class_method_index_for_fn): New function.
+ * pt.c (build_over_call): Use DECL_MEMBER_TEMPLATE_P.
+ * class.c (finish_struct_methods): Remove out-of-date comment.
+ * decl.c (copy_fn_p): Use DECL_MBMER_TEMPLATE_P.
+ * decl2.c (check_classfn): Use DECL_MEMBER_TEMPLATE_P and
+ class_method_index_for_fn.
+ * pt.c (is_member_template): Remove.
+ (is_member_template_class): Likewise.
+ (optimize_specialization_lookup_p): New function.
+ (retrieve_specialization): Optimize lookups for members that are
+ not member templates.
+ (register_specialization): Adjust accordingly.
+ (build_template_decl): Add member_template_p parameter. Set
+ DECL_MEMBER_TEMPLATE_P.
+ (process_partial_specialization): Adjust call to
+ retrieve_specialization.
+ (push_template_decl_real): Determine whether the template is a
+ member template.
+ (lookup_template_class): Use retrieve_specialization.
+ (tsubst_decl): Adjust call to retrieve_specialization.
+ (tsubst_exception_specification): New function.
+ (tsubst): Use it.
+ (tsubst_copy): Use DECL_MEMBER_TEMPLATE_P.
+ (instantiate_template): Adjust call to retrieve_specialization.
+ (regenerate_decl_from_template): Do not actually generate a new
+ DECL.
+ (instantiate_decl): Adjust call to retrieve_specialization.
+ (class_method_index_for_fn): New method.
+
+2004-10-07 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * parser.c (cp_parser_asm_definition): Look passed the
+ CLEANUP_POINT_EXPR to get the asm expression.
+
+2004-10-06 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c++/17368
+ * semantics.c (finish_asm_stmt): Asm expressions need cleanup
+ also.
+
2004-10-05 Gabriel Dos Reis <gdr@integrable-solutions.net>
Convert diagnostics to use quoting flag q 6/n
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index bd607abb9a3..7d4e9634e4c 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -4614,7 +4614,7 @@ build_over_call (struct z_candidate *cand, int flags)
primary template because `B<T>::g' and `B<int>::g' may have
different access. */
if (DECL_TEMPLATE_INFO (fn)
- && is_member_template (DECL_TI_TEMPLATE (fn)))
+ && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
perform_or_defer_access_check (cand->access_path,
DECL_TI_TEMPLATE (fn));
else
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index c2ac0a699d2..d93ee228796 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -155,9 +155,8 @@ static void add_vcall_offset_vtbl_entries_1 (tree, vtbl_init_data *);
static void build_vcall_offset_vtbl_entries (tree, vtbl_init_data *);
static void add_vcall_offset (tree, tree, vtbl_init_data *);
static void layout_vtable_decl (tree, int);
-static tree dfs_find_final_overrider (tree, void *);
+static tree dfs_find_final_overrider_pre (tree, void *);
static tree dfs_find_final_overrider_post (tree, void *);
-static tree dfs_find_final_overrider_q (tree, int, void *);
static tree find_final_overrider (tree, tree, tree);
static int make_new_vtable (tree, tree);
static int maybe_indent_hierarchy (FILE *, int, int);
@@ -171,15 +170,14 @@ static void dump_thunk (FILE *, int, tree);
static tree build_vtable (tree, tree, tree);
static void initialize_vtable (tree, tree);
static void layout_nonempty_base_or_field (record_layout_info,
- tree, tree, splay_tree);
+ tree, tree, splay_tree);
static tree end_of_class (tree, int);
static bool layout_empty_base (tree, tree, splay_tree);
static void accumulate_vtbl_inits (tree, tree, tree, tree, tree);
static tree dfs_accumulate_vtbl_inits (tree, tree, tree, tree,
tree);
static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
-static void build_vcall_and_vbase_vtbl_entries (tree,
- vtbl_init_data *);
+static void build_vcall_and_vbase_vtbl_entries (tree, vtbl_init_data *);
static void clone_constructors_and_destructors (tree);
static tree build_clone (tree, tree);
static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
@@ -192,11 +190,11 @@ static tree dfs_fixup_binfo_vtbls (tree, void *);
static int record_subobject_offset (tree, tree, splay_tree);
static int check_subobject_offset (tree, tree, splay_tree);
static int walk_subobject_offsets (tree, subobject_offset_fn,
- tree, splay_tree, tree, int);
+ tree, splay_tree, tree, int);
static void record_subobject_offsets (tree, tree, splay_tree, int);
static int layout_conflict_p (tree, tree, splay_tree, int);
static int splay_tree_compare_integer_csts (splay_tree_key k1,
- splay_tree_key k2);
+ splay_tree_key k2);
static void warn_about_ambiguous_bases (tree);
static bool type_requires_array_cookie (tree);
static bool contains_empty_class_p (tree);
@@ -1657,17 +1655,7 @@ resort_type_method_vec (void* obj,
}
}
-/* Warn about duplicate methods in fn_fields. Also compact method
- lists so that lookup can be made faster.
-
- Data Structure: List of method lists. The outer list is a
- TREE_LIST, whose TREE_PURPOSE field is the field name and the
- TREE_VALUE is the DECL_CHAIN of the FUNCTION_DECLs. TREE_CHAIN
- links the entire list of methods for TYPE_METHODS. Friends are
- chained in the same way as member functions (? TREE_CHAIN or
- DECL_CHAIN), but they live in the TREE_TYPE field of the outer
- list. That allows them to be quickly deleted, and requires no
- extra storage.
+/* Warn about duplicate methods in fn_fields.
Sort methods that are not special (i.e., constructors, destructors,
and type conversion operators) so that we can find them faster in
@@ -1686,11 +1674,9 @@ finish_struct_methods (tree t)
len = VEC_length (tree, method_vec);
- /* First fill in entry 0 with the constructors, entry 1 with destructors,
- and the next few with type conversion operators (if any). */
+ /* Clear DECL_IN_AGGR_P for all functions. */
for (fn_fields = TYPE_METHODS (t); fn_fields;
fn_fields = TREE_CHAIN (fn_fields))
- /* Clear out this flag. */
DECL_IN_AGGR_P (fn_fields) = 0;
if (TYPE_HAS_DESTRUCTOR (t) && !CLASSTYPE_DESTRUCTORS (t))
@@ -1800,15 +1786,10 @@ typedef struct find_final_overrider_data_s {
tree fn;
/* The base class in which the function was declared. */
tree declaring_base;
- /* The most derived class in the hierarchy. */
- tree most_derived_type;
/* The candidate overriders. */
tree candidates;
- /* Each entry in this array is the next-most-derived class for a
- virtual base class along the current path. */
- tree *vpath_list;
- /* A pointer one past the top of the VPATH_LIST. */
- tree *vpath;
+ /* Path to most derived. */
+ VEC (tree) *path;
} find_final_overrider_data;
/* Add the overrider along the current path to FFOD->CANDIDATES.
@@ -1816,22 +1797,18 @@ typedef struct find_final_overrider_data_s {
static bool
dfs_find_final_overrider_1 (tree binfo,
- tree *vpath,
- find_final_overrider_data *ffod)
+ find_final_overrider_data *ffod,
+ unsigned depth)
{
tree method;
/* If BINFO is not the most derived type, try a more derived class.
A definition there will overrider a definition here. */
- if (!same_type_p (BINFO_TYPE (binfo), ffod->most_derived_type))
+ if (depth)
{
- tree derived;
-
- if (BINFO_VIRTUAL_P (binfo))
- derived = *--vpath;
- else
- derived = BINFO_INHERITANCE_CHAIN (binfo);
- if (dfs_find_final_overrider_1 (derived, vpath, ffod))
+ depth--;
+ if (dfs_find_final_overrider_1
+ (VEC_index (tree, ffod->path, depth), ffod, depth))
return true;
}
@@ -1865,36 +1842,23 @@ dfs_find_final_overrider_1 (tree binfo,
/* Called from find_final_overrider via dfs_walk. */
static tree
-dfs_find_final_overrider (tree binfo, void* data)
+dfs_find_final_overrider_pre (tree binfo, void *data)
{
find_final_overrider_data *ffod = (find_final_overrider_data *) data;
if (binfo == ffod->declaring_base)
- dfs_find_final_overrider_1 (binfo, ffod->vpath, ffod);
+ dfs_find_final_overrider_1 (binfo, ffod, VEC_length (tree, ffod->path));
+ VEC_safe_push (tree, ffod->path, binfo);
return NULL_TREE;
}
static tree
-dfs_find_final_overrider_q (tree derived, int ix, void *data)
-{
- tree binfo = BINFO_BASE_BINFO (derived, ix);
- find_final_overrider_data *ffod = (find_final_overrider_data *) data;
-
- if (BINFO_VIRTUAL_P (binfo))
- *ffod->vpath++ = derived;
-
- return binfo;
-}
-
-static tree
-dfs_find_final_overrider_post (tree binfo, void *data)
+dfs_find_final_overrider_post (tree binfo ATTRIBUTE_UNUSED, void *data)
{
find_final_overrider_data *ffod = (find_final_overrider_data *) data;
+ VEC_pop (tree, ffod->path);
- if (BINFO_VIRTUAL_P (binfo))
- ffod->vpath--;
-
return NULL_TREE;
}
@@ -1932,23 +1896,14 @@ find_final_overrider (tree derived, tree binfo, tree fn)
/* Determine the depth of the hierarchy. */
ffod.fn = fn;
ffod.declaring_base = binfo;
- ffod.most_derived_type = BINFO_TYPE (derived);
ffod.candidates = NULL_TREE;
- /* The virtual depth cannot be greater than the number of virtual
- bases. */
- ffod.vpath_list = (tree *) xcalloc
- (VEC_length (tree, CLASSTYPE_VBASECLASSES (BINFO_TYPE (derived))),
- sizeof (tree));
- ffod.vpath = ffod.vpath_list;
+ ffod.path = VEC_alloc (tree, 30);
- dfs_walk_real (derived,
- dfs_find_final_overrider,
- dfs_find_final_overrider_post,
- dfs_find_final_overrider_q,
- &ffod);
-
- free (ffod.vpath_list);
+ dfs_walk_all (derived, dfs_find_final_overrider_pre,
+ dfs_find_final_overrider_post, &ffod);
+ VEC_free (tree, ffod.path);
+
/* If there was no winner, issue an error message. */
if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
{
@@ -2220,8 +2175,6 @@ dfs_modify_vtables (tree binfo, void* data)
&virtuals, ix);
}
- BINFO_MARKED (binfo) = 1;
-
return NULL_TREE;
}
@@ -2241,8 +2194,7 @@ modify_all_vtables (tree t, tree virtuals)
tree *fnsp;
/* Update all of the vtables. */
- dfs_walk (binfo, dfs_modify_vtables, unmarkedp, t);
- dfs_walk (binfo, dfs_unmark, markedp, t);
+ dfs_walk_once (binfo, NULL, dfs_modify_vtables, t);
/* Add virtual functions not already in our primary vtable. These
will be both those introduced by this class, and those overridden
@@ -6775,7 +6727,7 @@ build_vtt_inits (tree binfo, tree t, tree *inits, tree *index)
/* Recursively add the secondary VTTs for non-virtual bases. */
for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
if (!BINFO_VIRTUAL_P (b))
- inits = build_vtt_inits (BINFO_BASE_BINFO (binfo, i), t, inits, index);
+ inits = build_vtt_inits (b, t, inits, index);
/* Add secondary virtual pointers for all subobjects of BINFO with
either virtual bases or reachable along a virtual path, except
@@ -6785,9 +6737,7 @@ build_vtt_inits (tree binfo, tree t, tree *inits, tree *index)
data.inits = NULL;
data.type_being_constructed = BINFO_TYPE (binfo);
- dfs_walk_real (binfo, dfs_build_secondary_vptr_vtt_inits,
- NULL, unmarkedp, &data);
- dfs_walk (binfo, dfs_unmark, markedp, 0);
+ dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
*index = data.index;
@@ -6814,7 +6764,7 @@ build_vtt_inits (tree binfo, tree t, tree *inits, tree *index)
}
else
/* Remove the ctor vtables we created. */
- dfs_walk (binfo, dfs_fixup_binfo_vtbls, 0, binfo);
+ dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
return inits;
}
@@ -6827,27 +6777,25 @@ dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
{
secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
- BINFO_MARKED (binfo) = 1;
-
/* We don't care about bases that don't have vtables. */
if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
- return NULL_TREE;
+ return dfs_skip_bases;
/* We're only interested in proper subobjects of the type being
constructed. */
if (same_type_p (BINFO_TYPE (binfo), data->type_being_constructed))
return NULL_TREE;
- /* We're not interested in non-virtual primary bases. */
- if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
- return NULL_TREE;
-
/* We're only interested in bases with virtual bases or reachable
via a virtual path from the type being constructed. */
- if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
- && !binfo_via_virtual (binfo, data->type_being_constructed))
+ if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
+ || binfo_via_virtual (binfo, data->type_being_constructed)))
+ return dfs_skip_bases;
+
+ /* We're not interested in non-virtual primary bases. */
+ if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
return NULL_TREE;
-
+
/* Record the index where this secondary vptr can be found. */
if (data->top_level_p)
{
@@ -6885,9 +6833,18 @@ dfs_fixup_binfo_vtbls (tree binfo, void* data)
{
tree vtable = BINFO_VTABLE (binfo);
+ if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
+ /* If this class has no vtable, none of its bases do. */
+ return dfs_skip_bases;
+
+ if (!vtable)
+ /* This might be a primary base, so have no vtable in this
+ hierarchy. */
+ return NULL_TREE;
+
/* If we scribbled the construction vtable vptr into BINFO, clear it
out now. */
- if (vtable && TREE_CODE (vtable) == TREE_LIST
+ if (TREE_CODE (vtable) == TREE_LIST
&& (TREE_PURPOSE (vtable) == (tree) data))
BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 5ff38b72575..826bd51cf29 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -39,7 +39,6 @@ struct diagnostic_context;
DELETE_EXPR_USE_GLOBAL (in DELETE_EXPR).
COMPOUND_EXPR_OVERLOADED (in COMPOUND_EXPR).
TREE_INDIRECT_USING (in NAMESPACE_DECL).
- ICS_USER_FLAG (in _CONV)
CLEANUP_P (in TRY_BLOCK)
AGGR_INIT_VIA_CTOR_P (in AGGR_INIT_EXPR)
PTRMEM_OK_P (in ADDR_EXPR, OFFSET_REF)
@@ -90,6 +89,7 @@ struct diagnostic_context;
DECL_MUTABLE_P (in FIELD_DECL)
1: C_TYPEDEF_EXPLICITLY_SIGNED (in TYPE_DECL).
DECL_TEMPLATE_INSTANTIATED (in a VAR_DECL or a FUNCTION_DECL)
+ DECL_MEMBER_TEMPLATE_P (in TEMPLATE_DECL)
2: DECL_THIS_EXTERN (in VAR_DECL or FUNCTION_DECL).
DECL_IMPLICIT_TYPEDEF_P (in a TYPE_DECL)
3: DECL_IN_AGGR_P.
@@ -2177,6 +2177,11 @@ struct lang_decl GTY(())
#define INNERMOST_TEMPLATE_PARMS(NODE) TREE_VALUE (NODE)
+/* Nonzero if NODE (a TEMPLATE_DECL) is a member template, in the
+ sense of [temp.mem]. */
+#define DECL_MEMBER_TEMPLATE_P(NODE) \
+ (DECL_LANG_FLAG_1 (TEMPLATE_DECL_CHECK (NODE)))
+
/* Nonzero if the NODE corresponds to the template parameters for a
member template, whose inline definition is being processed after
the class definition is complete. */
@@ -3930,7 +3935,6 @@ extern tree instantiate_decl (tree, int, int);
extern int push_tinst_level (tree);
extern void pop_tinst_level (void);
extern int more_specialized_class (tree, tree, tree);
-extern int is_member_template (tree);
extern int comp_template_parms (tree, tree);
extern int template_class_depth (tree);
extern int is_specialization_of (tree, tree);
@@ -3990,6 +3994,7 @@ extern int accessible_p (tree, tree);
extern tree lookup_field_1 (tree, tree, bool);
extern tree lookup_field (tree, tree, int, bool);
extern int lookup_fnfields_1 (tree, tree);
+extern int class_method_index_for_fn (tree, tree);
extern tree lookup_fnfields (tree, tree, int);
extern tree lookup_member (tree, tree, int, bool);
extern int look_for_overrides (tree, tree);
@@ -4009,18 +4014,11 @@ extern tree binfo_from_vbase (tree);
extern tree binfo_for_vbase (tree, tree);
extern tree look_for_overrides_here (tree, tree);
extern int check_final_overrider (tree, tree);
-extern tree dfs_walk (tree,
- tree (*) (tree, void *),
- tree (*) (tree, int, void *),
- void *);
-extern tree dfs_walk_real (tree,
- tree (*) (tree, void *),
- tree (*) (tree, void *),
- tree (*) (tree, int, void *),
- void *);
-extern tree dfs_unmark (tree, void *);
-extern tree markedp (tree, int, void *);
-extern tree unmarkedp (tree, int, void *);
+#define dfs_skip_bases ((tree)1)
+extern tree dfs_walk_all (tree, tree (*) (tree, void *),
+ tree (*) (tree, void *), void *);
+extern tree dfs_walk_once (tree, tree (*) (tree, void *),
+ tree (*) (tree, void *), void *);
extern tree binfo_via_virtual (tree, tree);
extern tree build_baselink (tree, tree, tree, tree);
extern tree adjust_result_of_qualified_name_lookup
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 078e2f9326d..919b619cc83 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -8477,7 +8477,8 @@ copy_fn_p (tree d)
gcc_assert (DECL_FUNCTION_MEMBER_P (d));
- if (DECL_TEMPLATE_INFO (d) && is_member_template (DECL_TI_TEMPLATE (d)))
+ if (DECL_TEMPLATE_INFO (d)
+ && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))
/* Instantiations of template member functions are never copy
functions. Note that member functions of templated classes are
represented as template functions internally, and we must
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 3c1f9b4ed9a..896fdfc1834 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -596,7 +596,7 @@ check_classfn (tree ctype, tree function, tree template_parms)
if (DECL_USE_TEMPLATE (function)
&& !(TREE_CODE (function) == TEMPLATE_DECL
&& DECL_TEMPLATE_SPECIALIZATION (function))
- && is_member_template (DECL_TI_TEMPLATE (function)))
+ && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (function)))
/* Since this is a specialization of a member template,
we're not going to find the declaration in the class.
For example, in:
@@ -622,11 +622,7 @@ check_classfn (tree ctype, tree function, tree template_parms)
/* OK, is this a definition of a member template? */
is_template = (template_parms != NULL_TREE);
- ix = lookup_fnfields_1 (complete_type (ctype),
- DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
- DECL_DESTRUCTOR_P (function) ? dtor_identifier :
- DECL_NAME (function));
-
+ ix = class_method_index_for_fn (complete_type (ctype), function);
if (ix >= 0)
{
VEC(tree) *methods = CLASSTYPE_METHOD_VEC (ctype);
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 12886836d1b..ceb6d690a6a 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -101,8 +101,10 @@ finish_init_stmts (bool is_global, tree stmt_expr, tree compound_stmt)
static tree
dfs_initialize_vtbl_ptrs (tree binfo, void *data)
{
- if ((!BINFO_PRIMARY_P (binfo) || BINFO_VIRTUAL_P (binfo))
- && TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
+ if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
+ return dfs_skip_bases;
+
+ if (!BINFO_PRIMARY_P (binfo) || BINFO_VIRTUAL_P (binfo))
{
tree base_ptr = TREE_VALUE ((tree) data);
@@ -111,8 +113,6 @@ dfs_initialize_vtbl_ptrs (tree binfo, void *data)
expand_virtual_init (binfo, base_ptr);
}
- BINFO_MARKED (binfo) = 1;
-
return NULL_TREE;
}
@@ -132,9 +132,7 @@ initialize_vtbl_ptrs (tree addr)
class. We do these in pre-order because we can't find the virtual
bases for a class until we've initialized the vtbl for that
class. */
- dfs_walk_real (TYPE_BINFO (type), dfs_initialize_vtbl_ptrs,
- NULL, unmarkedp, list);
- dfs_walk (TYPE_BINFO (type), dfs_unmark, markedp, type);
+ dfs_walk_once (TYPE_BINFO (type), dfs_initialize_vtbl_ptrs, NULL, list);
}
/* Return an expression for the zero-initialization of an object with
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 79342dbf576..9bd3f1805b6 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -10389,7 +10389,13 @@ cp_parser_asm_definition (cp_parser* parser)
inputs, clobbers);
/* If the extended syntax was not used, mark the ASM_EXPR. */
if (!extended_p)
- ASM_INPUT_P (asm_stmt) = 1;
+ {
+ tree temp = asm_stmt;
+ if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
+ temp = TREE_OPERAND (temp, 0);
+
+ ASM_INPUT_P (temp) = 1;
+ }
}
else
assemble_asm (string);
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 3813c38ed41..9a869eaecd2 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -117,12 +117,9 @@ static int for_each_template_parm (tree, tree_fn_t, void*, htab_t);
static tree build_template_parm_index (int, int, int, tree, tree);
static int inline_needs_template_parms (tree);
static void push_inline_template_parms_recursive (tree, int);
-static tree retrieve_specialization (tree, tree);
static tree retrieve_local_specialization (tree);
-static tree register_specialization (tree, tree, tree);
static void register_local_specialization (tree, tree);
static tree reduce_template_parm_level (tree, tree, int);
-static tree build_template_decl (tree, tree);
static int mark_template_parm (tree, void *);
static int template_parm_this_level_p (tree, void *);
static tree tsubst_friend_function (tree, tree);
@@ -441,67 +438,6 @@ maybe_end_member_template_processing (void)
}
}
-/* Returns nonzero iff T is a member template function. We must be
- careful as in
-
- template <class T> class C { void f(); }
-
- Here, f is a template function, and a member, but not a member
- template. This function does not concern itself with the origin of
- T, only its present state. So if we have
-
- template <class T> class C { template <class U> void f(U); }
-
- then neither C<int>::f<char> nor C<T>::f<double> is considered
- to be a member template. But, `template <class U> void
- C<int>::f(U)' is considered a member template. */
-
-int
-is_member_template (tree t)
-{
- if (!DECL_FUNCTION_TEMPLATE_P (t))
- /* Anything that isn't a function or a template function is
- certainly not a member template. */
- return 0;
-
- /* A local class can't have member templates. */
- if (decl_function_context (t))
- return 0;
-
- return (DECL_FUNCTION_MEMBER_P (DECL_TEMPLATE_RESULT (t))
- /* If there are more levels of template parameters than
- there are template classes surrounding the declaration,
- then we have a member template. */
- && (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (t)) >
- template_class_depth (DECL_CONTEXT (t))));
-}
-
-#if 0 /* UNUSED */
-/* Returns nonzero iff T is a member template class. See
- is_member_template for a description of what precisely constitutes
- a member template. */
-
-int
-is_member_template_class (tree t)
-{
- if (!DECL_CLASS_TEMPLATE_P (t))
- /* Anything that isn't a class template, is certainly not a member
- template. */
- return 0;
-
- if (!DECL_CLASS_SCOPE_P (t))
- /* Anything whose context isn't a class type is surely not a
- member template. */
- return 0;
-
- /* If there are more levels of template parameters than there are
- template classes surrounding the declaration, then we have a
- member template. */
- return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (t)) >
- template_class_depth (DECL_CONTEXT (t)));
-}
-#endif
-
/* Return a new template argument vector which contains all of ARGS,
but has as its innermost set of arguments the EXTRA_ARGS. */
@@ -826,30 +762,122 @@ maybe_process_partial_specialization (tree type)
error ("explicit specialization of non-template %qT", type);
}
+/* Returns nonzero if we can optimize the retrieval of specializations
+ for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
+ do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
+
+static inline bool
+optimize_specialization_lookup_p (tree tmpl)
+{
+ return (DECL_FUNCTION_TEMPLATE_P (tmpl)
+ && DECL_CLASS_SCOPE_P (tmpl)
+ /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
+ parameter. */
+ && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
+ && !DECL_MEMBER_TEMPLATE_P (tmpl)
+ && !DECL_CONV_FN_P (tmpl)
+ /* It is possible to have a template that is not a member
+ template and is not a member of a template class:
+
+ template <typename T>
+ struct S { friend A::f(); };
+
+ Here, the friend function is a template, but the context does
+ not have template information. The optimized lookup relies
+ on having ARGS be the template arguments for both the class
+ and the function template. */
+ && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
+}
+
/* Retrieve the specialization (in the sense of [temp.spec] - a
specialization is either an instantiation or an explicit
specialization) of TMPL for the given template ARGS. If there is
no such specialization, return NULL_TREE. The ARGS are a vector of
arguments, or a vector of vectors of arguments, in the case of
- templates with more than one level of parameters. */
+ templates with more than one level of parameters.
+
+ If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
+ then we search for a partial specialization matching ARGS. This
+ parameter is ignored if TMPL is not a class template. */
static tree
-retrieve_specialization (tree tmpl, tree args)
+retrieve_specialization (tree tmpl, tree args,
+ bool class_specializations_p)
{
- tree s;
-
gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
/* There should be as many levels of arguments as there are
levels of parameters. */
gcc_assert (TMPL_ARGS_DEPTH (args)
== TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
-
- for (s = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
- s != NULL_TREE;
- s = TREE_CHAIN (s))
- if (comp_template_args (TREE_PURPOSE (s), args))
- return TREE_VALUE (s);
+
+ if (optimize_specialization_lookup_p (tmpl))
+ {
+ tree class_template;
+ tree class_specialization;
+ VEC(tree) *methods;
+ tree fns;
+ int idx;
+
+ /* The template arguments actually apply to the containing
+ class. Find the class specialization with those
+ arguments. */
+ class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
+ class_specialization
+ = retrieve_specialization (class_template, args,
+ /*class_specializations_p=*/false);
+ if (!class_specialization)
+ return NULL_TREE;
+ /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
+ for the specialization. */
+ idx = class_method_index_for_fn (class_specialization, tmpl);
+ if (idx == -1)
+ return NULL_TREE;
+ /* Iterate through the methods with the indicated name, looking
+ for the one that has an instance of TMPL. */
+ methods = CLASSTYPE_METHOD_VEC (class_specialization);
+ for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
+ {
+ tree fn = OVL_CURRENT (fns);
+ if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
+ return fn;
+ }
+ return NULL_TREE;
+ }
+ else
+ {
+ tree *sp;
+ tree *head;
+
+ /* Class templates store their instantiations on the
+ DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
+ DECL_TEMPLATE_SPECIALIZATIONS list. */
+ if (!class_specializations_p
+ && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
+ sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
+ else
+ sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
+ head = sp;
+ /* Iterate through the list until we find a matching template. */
+ while (*sp != NULL_TREE)
+ {
+ tree spec = *sp;
+
+ if (comp_template_args (TREE_PURPOSE (spec), args))
+ {
+ /* Use the move-to-front heuristic to speed up future
+ searches. */
+ if (spec != *head)
+ {
+ *sp = TREE_CHAIN (*sp);
+ TREE_CHAIN (spec) = *head;
+ *head = spec;
+ }
+ return TREE_VALUE (spec);
+ }
+ sp = &TREE_CHAIN (spec);
+ }
+ }
return NULL_TREE;
}
@@ -1035,7 +1063,7 @@ is_specialization_of_friend (tree decl, tree friend)
static tree
register_specialization (tree spec, tree tmpl, tree args)
{
- tree s;
+ tree fn;
gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
@@ -1059,73 +1087,67 @@ register_specialization (tree spec, tree tmpl, tree args)
gcc_assert (TMPL_ARGS_DEPTH (args)
== TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
- for (s = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
- s != NULL_TREE;
- s = TREE_CHAIN (s))
+ fn = retrieve_specialization (tmpl, args,
+ /*class_specializations_p=*/false);
+ /* We can sometimes try to re-register a specialization that we've
+ already got. In particular, regenerate_decl_from_template calls
+ duplicate_decls which will update the specialization list. But,
+ we'll still get called again here anyhow. It's more convenient
+ to simply allow this than to try to prevent it. */
+ if (fn == spec)
+ return spec;
+ else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
{
- tree fn = TREE_VALUE (s);
-
- /* We can sometimes try to re-register a specialization that we've
- already got. In particular, regenerate_decl_from_template
- calls duplicate_decls which will update the specialization
- list. But, we'll still get called again here anyhow. It's
- more convenient to simply allow this than to try to prevent it. */
- if (fn == spec)
- return spec;
- else if (DECL_TEMPLATE_SPECIALIZATION (spec)
- && comp_template_args (TREE_PURPOSE (s), args))
+ if (DECL_TEMPLATE_INSTANTIATION (fn))
{
- if (DECL_TEMPLATE_INSTANTIATION (fn))
+ if (TREE_USED (fn)
+ || DECL_EXPLICIT_INSTANTIATION (fn))
{
- if (TREE_USED (fn)
- || DECL_EXPLICIT_INSTANTIATION (fn))
- {
- error ("specialization of %qD after instantiation", fn);
- return spec;
- }
- else
- {
- /* This situation should occur only if the first
- specialization is an implicit instantiation, the
- second is an explicit specialization, and the
- implicit instantiation has not yet been used.
- That situation can occur if we have implicitly
- instantiated a member function and then
- specialized it later.
-
- We can also wind up here if a friend declaration
- that looked like an instantiation turns out to be
- a specialization:
-
- template <class T> void foo(T);
- class S { friend void foo<>(int) };
- template <> void foo(int);
-
- We transform the existing DECL in place so that
- any pointers to it become pointers to the updated
- declaration.
-
- If there was a definition for the template, but
- not for the specialization, we want this to look
- as if there were no definition, and vice
- versa. */
- DECL_INITIAL (fn) = NULL_TREE;
- duplicate_decls (spec, fn);
-
- return fn;
- }
+ error ("specialization of %qD after instantiation",
+ fn);
+ return spec;
}
- else if (DECL_TEMPLATE_SPECIALIZATION (fn))
+ else
{
- if (!duplicate_decls (spec, fn) && DECL_INITIAL (spec))
- /* Dup decl failed, but this is a new definition. Set
- the line number so any errors match this new
- definition. */
- DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
+ /* This situation should occur only if the first
+ specialization is an implicit instantiation, the
+ second is an explicit specialization, and the
+ implicit instantiation has not yet been used. That
+ situation can occur if we have implicitly
+ instantiated a member function and then specialized
+ it later.
+
+ We can also wind up here if a friend declaration that
+ looked like an instantiation turns out to be a
+ specialization:
+
+ template <class T> void foo(T);
+ class S { friend void foo<>(int) };
+ template <> void foo(int);
+
+ We transform the existing DECL in place so that any
+ pointers to it become pointers to the updated
+ declaration.
+
+ If there was a definition for the template, but not
+ for the specialization, we want this to look as if
+ there were no definition, and vice versa. */
+ DECL_INITIAL (fn) = NULL_TREE;
+ duplicate_decls (spec, fn);
return fn;
}
}
+ else if (DECL_TEMPLATE_SPECIALIZATION (fn))
+ {
+ if (!duplicate_decls (spec, fn) && DECL_INITIAL (spec))
+ /* Dup decl failed, but this is a new definition. Set the
+ line number so any errors match this new
+ definition. */
+ DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
+
+ return fn;
+ }
}
/* A specialization must be declared in the same namespace as the
@@ -1134,8 +1156,9 @@ register_specialization (tree spec, tree tmpl, tree args)
&& !check_specialization_namespace (tmpl))
DECL_CONTEXT (spec) = decl_namespace_context (tmpl);
- DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
- = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
+ if (!optimize_specialization_lookup_p (tmpl))
+ DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
+ = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
return spec;
}
@@ -2393,14 +2416,16 @@ current_template_args (void)
}
/* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
- template PARMS. Used by push_template_decl below. */
+ template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
+ a member template. Used by push_template_decl below. */
static tree
-build_template_decl (tree decl, tree parms)
+build_template_decl (tree decl, tree parms, bool member_template_p)
{
tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
DECL_TEMPLATE_PARMS (tmpl) = parms;
DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
+ DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
if (DECL_LANG_SPECIFIC (decl))
{
DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
@@ -2636,7 +2661,8 @@ process_partial_specialization (tree decl)
}
}
- if (retrieve_specialization (maintmpl, specargs))
+ if (retrieve_specialization (maintmpl, specargs,
+ /*class_specializations_p=*/true))
/* We've already got this specialization. */
return decl;
@@ -2826,6 +2852,9 @@ push_template_decl_real (tree decl, int is_friend)
int primary;
int is_partial;
int new_template_p = 0;
+ /* True if the template is a member template, in the sense of
+ [temp.mem]. */
+ bool member_template_p = false;
if (decl == error_mark_node)
return decl;
@@ -2862,6 +2891,8 @@ push_template_decl_real (tree decl, int is_friend)
if (primary)
{
+ if (DECL_CLASS_SCOPE_P (decl))
+ member_template_p = true;
if (current_lang_name == lang_name_c)
error ("template with C linkage");
else if (TREE_CODE (decl) == TYPE_DECL
@@ -2941,7 +2972,8 @@ push_template_decl_real (tree decl, int is_friend)
}
else
{
- tmpl = build_template_decl (decl, current_template_parms);
+ tmpl = build_template_decl (decl, current_template_parms,
+ member_template_p);
new_template_p = 1;
if (DECL_LANG_SPECIFIC (decl)
@@ -2984,7 +3016,7 @@ push_template_decl_real (tree decl, int is_friend)
if (DECL_FUNCTION_TEMPLATE_P (tmpl)
&& DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
&& DECL_TEMPLATE_SPECIALIZATION (decl)
- && is_member_template (tmpl))
+ && DECL_MEMBER_TEMPLATE_P (tmpl))
{
tree new_tmpl;
@@ -2996,7 +3028,8 @@ push_template_decl_real (tree decl, int is_friend)
args = DECL_TI_ARGS (decl);
new_tmpl
- = build_template_decl (decl, current_template_parms);
+ = build_template_decl (decl, current_template_parms,
+ member_template_p);
DECL_TEMPLATE_RESULT (new_tmpl) = decl;
TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
DECL_TI_TEMPLATE (decl) = new_tmpl;
@@ -4342,7 +4375,6 @@ lookup_template_class (tree d1,
tree gen_tmpl;
tree type_decl;
tree found = NULL_TREE;
- tree *tp;
int arg_depth;
int parm_depth;
int is_partial_instantiation;
@@ -4466,22 +4498,11 @@ lookup_template_class (tree d1,
if (found)
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
- for (tp = &DECL_TEMPLATE_INSTANTIATIONS (template);
- *tp;
- tp = &TREE_CHAIN (*tp))
- if (comp_template_args (TREE_PURPOSE (*tp), arglist))
- {
- found = *tp;
-
- /* Use the move-to-front heuristic to speed up future
- searches. */
- *tp = TREE_CHAIN (*tp);
- TREE_CHAIN (found)
- = DECL_TEMPLATE_INSTANTIATIONS (template);
- DECL_TEMPLATE_INSTANTIATIONS (template) = found;
-
- POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, TREE_VALUE (found));
- }
+ /* If we already have this specialization, return it. */
+ found = retrieve_specialization (template, arglist,
+ /*class_specializations_p=*/false);
+ if (found)
+ POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
/* This type is a "partial instantiation" if any of the template
arguments still involve template parameters. Note that we set
@@ -6069,7 +6090,8 @@ tsubst_decl (tree t, tree args, tree type, tsubst_flags_t complain)
changed. */
gcc_assert (full_args != tmpl_args);
- spec = retrieve_specialization (t, full_args);
+ spec = retrieve_specialization (t, full_args,
+ /*class_specializations_p=*/true);
if (spec != NULL_TREE)
{
r = spec;
@@ -6181,7 +6203,8 @@ tsubst_decl (tree t, tree args, tree type, tsubst_flags_t complain)
args, complain, in_decl);
/* Check to see if we already have this specialization. */
- spec = retrieve_specialization (gen_tmpl, argvec);
+ spec = retrieve_specialization (gen_tmpl, argvec,
+ /*class_specializations_p=*/false);
if (spec)
{
@@ -6467,7 +6490,8 @@ tsubst_decl (tree t, tree args, tree type, tsubst_flags_t complain)
tmpl = DECL_TI_TEMPLATE (t);
gen_tmpl = most_general_template (tmpl);
argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
- spec = retrieve_specialization (gen_tmpl, argvec);
+ spec = retrieve_specialization (gen_tmpl, argvec,
+ /*class_specializations_p=*/false);
}
else
spec = retrieve_local_specialization (t);
@@ -6657,6 +6681,39 @@ tsubst_function_type (tree t,
return fntype;
}
+/* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
+ ARGS into that specification, and return the substituted
+ specification. If there is no specification, return NULL_TREE. */
+
+static tree
+tsubst_exception_specification (tree fntype,
+ tree args,
+ tsubst_flags_t complain,
+ tree in_decl)
+{
+ tree specs;
+ tree new_specs;
+
+ specs = TYPE_RAISES_EXCEPTIONS (fntype);
+ new_specs = NULL_TREE;
+ if (specs)
+ {
+ if (! TREE_VALUE (specs))
+ new_specs = specs;
+ else
+ while (specs)
+ {
+ tree spec;
+ spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
+ if (spec == error_mark_node)
+ return spec;
+ new_specs = add_exception_specifier (new_specs, spec, complain);
+ specs = TREE_CHAIN (specs);
+ }
+ }
+ return new_specs;
+}
+
/* Substitute into the PARMS of a call-declarator. */
static tree
@@ -7089,32 +7146,16 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
case METHOD_TYPE:
{
tree fntype;
- tree raises;
-
+ tree specs;
fntype = tsubst_function_type (t, args, complain, in_decl);
if (fntype == error_mark_node)
return error_mark_node;
/* Substitute the exception specification. */
- raises = TYPE_RAISES_EXCEPTIONS (t);
- if (raises)
- {
- tree list = NULL_TREE;
-
- if (! TREE_VALUE (raises))
- list = raises;
- else
- for (; raises != NULL_TREE; raises = TREE_CHAIN (raises))
- {
- tree spec = TREE_VALUE (raises);
-
- spec = tsubst (spec, args, complain, in_decl);
- if (spec == error_mark_node)
- return spec;
- list = add_exception_specifier (list, spec, complain);
- }
- fntype = build_exception_variant (fntype, list);
- }
+ specs = tsubst_exception_specification (t, args, complain,
+ in_decl);
+ if (specs)
+ fntype = build_exception_variant (fntype, specs);
return fntype;
}
case ARRAY_TYPE:
@@ -7537,7 +7578,7 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
args, complain, in_decl);
- else if (is_member_template (t))
+ else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
return tsubst (t, args, complain, in_decl);
else if (DECL_CLASS_SCOPE_P (t)
&& uses_template_parms (DECL_CONTEXT (t)))
@@ -8017,7 +8058,12 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
tsubst_expr (ASM_INPUTS (t), args, complain, in_decl),
tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
- ASM_INPUT_P (tmp) = ASM_INPUT_P (t);
+ {
+ tree asm_expr = tmp;
+ if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
+ asm_expr = TREE_OPERAND (asm_expr, 0);
+ ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
+ }
break;
case TRY_BLOCK:
@@ -8736,7 +8782,8 @@ instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
}
/* Check to see if we already have this specialization. */
- spec = retrieve_specialization (tmpl, targ_ptr);
+ spec = retrieve_specialization (tmpl, targ_ptr,
+ /*class_specializations_p=*/false);
if (spec != NULL_TREE)
return spec;
@@ -8750,7 +8797,8 @@ instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
targ_ptr);
/* Check to see if we already have this specialization. */
- spec = retrieve_specialization (gen_tmpl, targ_ptr);
+ spec = retrieve_specialization (gen_tmpl, targ_ptr,
+ /*class_specializations_p=*/false);
if (spec != NULL_TREE)
return spec;
}
@@ -10808,75 +10856,76 @@ do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
static void
regenerate_decl_from_template (tree decl, tree tmpl)
{
- /* The most general version of TMPL. */
- tree gen_tmpl;
/* The arguments used to instantiate DECL, from the most general
template. */
tree args;
tree code_pattern;
- tree new_decl;
- bool unregistered;
args = DECL_TI_ARGS (decl);
code_pattern = DECL_TEMPLATE_RESULT (tmpl);
- /* Unregister the specialization so that when we tsubst we will not
- just return DECL. We don't have to unregister DECL from TMPL
- because if would only be registered there if it were a partial
- instantiation of a specialization, which it isn't: it's a full
- instantiation. */
- gen_tmpl = most_general_template (tmpl);
- unregistered = reregister_specialization (decl, gen_tmpl,
- /*new_spec=*/NULL_TREE);
-
- /* If the DECL was not unregistered then something peculiar is
- happening: we created a specialization but did not call
- register_specialization for it. */
- gcc_assert (unregistered);
-
/* Make sure that we can see identifiers, and compute access
correctly. */
push_access_scope (decl);
- /* Do the substitution to get the new declaration. */
- new_decl = tsubst (code_pattern, args, tf_error, NULL_TREE);
+ if (TREE_CODE (decl) == FUNCTION_DECL)
+ {
+ tree decl_parm;
+ tree pattern_parm;
+ tree specs;
+ int args_depth;
+ int parms_depth;
+
+ args_depth = TMPL_ARGS_DEPTH (args);
+ parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
+ if (args_depth > parms_depth)
+ args = get_innermost_template_args (args, parms_depth);
+
+ specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
+ args, tf_error, NULL_TREE);
+ if (specs)
+ TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
+ specs);
+
+ /* Merge parameter declarations. */
+ decl_parm = skip_artificial_parms_for (decl,
+ DECL_ARGUMENTS (decl));
+ pattern_parm
+ = skip_artificial_parms_for (code_pattern,
+ DECL_ARGUMENTS (code_pattern));
+ while (decl_parm)
+ {
+ tree parm_type;
+
+ if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
+ DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
+ parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
+ NULL_TREE);
+ if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
+ TREE_TYPE (decl_parm) = parm_type;
+ decl_parm = TREE_CHAIN (decl_parm);
+ pattern_parm = TREE_CHAIN (pattern_parm);
+ }
- if (TREE_CODE (decl) == VAR_DECL)
+ /* Merge additional specifiers from the CODE_PATTERN. */
+ if (DECL_DECLARED_INLINE_P (code_pattern)
+ && !DECL_DECLARED_INLINE_P (decl))
+ DECL_DECLARED_INLINE_P (decl) = 1;
+ if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
+ DECL_INLINE (decl) = 1;
+ }
+ else if (TREE_CODE (decl) == VAR_DECL)
{
- /* Set up DECL_INITIAL, since tsubst doesn't. */
- if (!DECL_INITIALIZED_IN_CLASS_P (decl))
- DECL_INITIAL (new_decl) =
+ if (!DECL_INITIALIZED_IN_CLASS_P (decl)
+ && DECL_INITIAL (code_pattern))
+ DECL_INITIAL (decl) =
tsubst_expr (DECL_INITIAL (code_pattern), args,
tf_error, DECL_TI_TEMPLATE (decl));
}
- else if (TREE_CODE (decl) == FUNCTION_DECL)
- {
- /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
- new decl. */
- DECL_INITIAL (new_decl) = error_mark_node;
- /* And don't complain about a duplicate definition. */
- DECL_INITIAL (decl) = NULL_TREE;
- }
+ else
+ gcc_unreachable ();
pop_access_scope (decl);
-
- /* The immediate parent of the new template is still whatever it was
- before, even though tsubst sets DECL_TI_TEMPLATE up as the most
- general template. We also reset the DECL_ASSEMBLER_NAME since
- tsubst always calculates the name as if the function in question
- were really a template instance, and sometimes, with friend
- functions, this is not so. See tsubst_friend_function for
- details. */
- DECL_TI_TEMPLATE (new_decl) = DECL_TI_TEMPLATE (decl);
- COPY_DECL_ASSEMBLER_NAME (decl, new_decl);
- COPY_DECL_RTL (decl, new_decl);
- DECL_USE_TEMPLATE (new_decl) = DECL_USE_TEMPLATE (decl);
-
- /* Call duplicate decls to merge the old and new declarations. */
- duplicate_decls (new_decl, decl);
-
- /* Now, re-register the specialization. */
- register_specialization (decl, gen_tmpl, args);
}
/* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
@@ -10994,7 +11043,8 @@ instantiate_decl (tree d, int defer_ok, int undefined_ok)
DECL_TEMPLATE_SPECIALIZATION. */
gen_tmpl = most_general_template (tmpl);
gen_args = DECL_TI_ARGS (d);
- spec = retrieve_specialization (gen_tmpl, gen_args);
+ spec = retrieve_specialization (gen_tmpl, gen_args,
+ /*class_specializations_p=*/false);
if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
return spec;
diff --git a/gcc/cp/search.c b/gcc/cp/search.c
index 47d08f34c74..cd6e9b2dc65 100644
--- a/gcc/cp/search.c
+++ b/gcc/cp/search.c
@@ -36,29 +36,20 @@ Boston, MA 02111-1307, USA. */
#include "toplev.h"
#include "stack.h"
-struct vbase_info
-{
- /* The class dominating the hierarchy. */
- tree type;
- /* A pointer to a complete object of the indicated TYPE. */
- tree decl_ptr;
- tree inits;
-};
-
static int is_subobject_of_p (tree, tree);
static base_kind lookup_base_r (tree, tree, base_access, bool, tree *);
static int dynamic_cast_base_recurse (tree, tree, bool, tree *);
-static tree dfs_debug_unmarkedp (tree, int, void *);
static tree dfs_debug_mark (tree, void *);
+static tree dfs_walk_once_r (tree, tree (*pre_fn) (tree, void *),
+ tree (*post_fn) (tree, void *), void *data);
+static void dfs_unmark_r (tree);
static int check_hidden_convs (tree, int, int, tree, tree, tree);
static tree split_conversions (tree, tree, tree, tree);
static int lookup_conversions_r (tree, int, int,
tree, tree, tree, tree, tree *, tree *);
static int look_for_overrides_r (tree, tree);
-static tree lookup_field_queue_p (tree, int, void *);
static tree lookup_field_r (tree, void *);
-static tree dfs_accessible_queue_p (tree, int, void *);
-static tree dfs_accessible_p (tree, void *);
+static tree accessible_r (tree, bool);
static tree dfs_access_in_type (tree, void *);
static access_kind access_in_type (tree, tree);
static int protected_accessible_p (tree, tree, tree);
@@ -663,10 +654,6 @@ dfs_access_in_type (tree binfo, void *data)
/* Note the access to DECL in TYPE. */
SET_BINFO_ACCESS (binfo, access);
- /* Mark TYPE as visited so that if we reach it again we do not
- duplicate our efforts here. */
- BINFO_MARKED (binfo) = 1;
-
return NULL_TREE;
}
@@ -688,47 +675,11 @@ access_in_type (tree type, tree decl)
The algorithm we use is to make a post-order depth-first traversal
of the base-class hierarchy. As we come up the tree, we annotate
each node with the most lenient access. */
- dfs_walk_real (binfo, 0, dfs_access_in_type, unmarkedp, decl);
- dfs_walk (binfo, dfs_unmark, markedp, 0);
+ dfs_walk_once (binfo, NULL, dfs_access_in_type, decl);
return BINFO_ACCESS (binfo);
}
-/* Called from accessible_p via dfs_walk. */
-
-static tree
-dfs_accessible_queue_p (tree derived, int ix, void *data ATTRIBUTE_UNUSED)
-{
- tree binfo = BINFO_BASE_BINFO (derived, ix);
-
- if (BINFO_MARKED (binfo))
- return NULL_TREE;
-
- /* If this class is inherited via private or protected inheritance,
- then we can't see it, unless we are a friend of the derived class. */
- if (BINFO_BASE_ACCESS (derived, ix) != access_public_node
- && !is_friend (BINFO_TYPE (derived), current_scope ()))
- return NULL_TREE;
-
- return binfo;
-}
-
-/* Called from accessible_p via dfs_walk. */
-
-static tree
-dfs_accessible_p (tree binfo, void *data ATTRIBUTE_UNUSED)
-{
- access_kind access;
-
- BINFO_MARKED (binfo) = 1;
- access = BINFO_ACCESS (binfo);
- if (access != ak_none
- && is_friend (BINFO_TYPE (binfo), current_scope ()))
- return binfo;
-
- return NULL_TREE;
-}
-
/* Returns nonzero if it is OK to access DECL through an object
indicated by BINFO in the context of DERIVED. */
@@ -855,6 +806,43 @@ friend_accessible_p (tree scope, tree decl, tree binfo)
return 0;
}
+static tree
+accessible_r (tree binfo, bool once)
+{
+ tree rval = NULL_TREE;
+ unsigned ix;
+ tree base_binfo;
+
+ /* Find the next child binfo to walk. */
+ for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
+ {
+ bool mark = once && BINFO_VIRTUAL_P (base_binfo);
+
+ if (mark && BINFO_MARKED (base_binfo))
+ continue;
+
+ /* If the base is inherited via private or protected
+ inheritance, then we can't see it, unless we are a friend of
+ the current binfo. */
+ if (BINFO_BASE_ACCESS (binfo, ix) != access_public_node
+ && !is_friend (BINFO_TYPE (binfo), current_scope ()))
+ continue;
+
+ if (mark)
+ BINFO_MARKED (base_binfo) = 1;
+
+ rval = accessible_r (base_binfo, once);
+ if (rval)
+ return rval;
+ }
+
+ if (BINFO_ACCESS (binfo) != ak_none
+ && is_friend (BINFO_TYPE (binfo), current_scope ()))
+ rval = binfo;
+
+ return rval;
+}
+
/* DECL is a declaration from a base class of TYPE, which was the
class used to name DECL. Return nonzero if, in the current
context, DECL is accessible. If TYPE is actually a BINFO node,
@@ -941,12 +929,28 @@ accessible_p (tree type, tree decl)
{
/* Walk the hierarchy again, looking for a base class that allows
access. */
- t = dfs_walk (binfo, dfs_accessible_p, dfs_accessible_queue_p, 0);
- /* Clear any mark bits. Note that we have to walk the whole tree
- here, since we have aborted the previous walk from some point
- deep in the tree. */
- dfs_walk (binfo, dfs_unmark, 0, 0);
+ t = accessible_r
+ (binfo, CLASSTYPE_DIAMOND_SHAPED_P (BINFO_TYPE (binfo)));
+ if (!CLASSTYPE_DIAMOND_SHAPED_P (BINFO_TYPE (binfo)))
+ ;/* We are not diamond shaped, and therefore cannot
+ encounter the same binfo twice. */
+ else if (!BINFO_INHERITANCE_CHAIN (binfo))
+ {
+ /* We are at the top of the hierarchy, and can use the
+ CLASSTYPE_VBASECLASSES list for unmarking the virtual
+ bases. */
+ VEC (tree) *vbases;
+ unsigned ix;
+ tree base_binfo;
+
+ for (vbases = CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)), ix = 0;
+ VEC_iterate (tree, vbases, ix, base_binfo); ix++)
+ BINFO_MARKED (base_binfo) = 0;
+ }
+ else
+ dfs_unmark_r (binfo);
+
return t != NULL_TREE;
}
}
@@ -969,33 +973,6 @@ struct lookup_field_info {
const char *errstr;
};
-/* Returns nonzero if BINFO is not hidden by the value found by the
- lookup so far. If BINFO is hidden, then there's no need to look in
- it. DATA is really a struct lookup_field_info. Called from
- lookup_field via breadth_first_search. */
-
-static tree
-lookup_field_queue_p (tree derived, int ix, void *data)
-{
- tree binfo = BINFO_BASE_BINFO (derived, ix);
- struct lookup_field_info *lfi = (struct lookup_field_info *) data;
-
- /* Don't look for constructors or destructors in base classes. */
- if (IDENTIFIER_CTOR_OR_DTOR_P (lfi->name))
- return NULL_TREE;
-
- /* If this base class is hidden by the best-known value so far, we
- don't need to look. */
- if (lfi->rval_binfo && derived == lfi->rval_binfo)
- return NULL_TREE;
-
- /* If this is a dependent base, don't look in it. */
- if (BINFO_DEPENDENT_BASE_P (binfo))
- return NULL_TREE;
-
- return binfo;
-}
-
/* Within the scope of a template class, you can refer to the to the
current specialization with the name of the template itself. For
example:
@@ -1075,6 +1052,16 @@ lookup_field_r (tree binfo, void *data)
tree type = BINFO_TYPE (binfo);
tree nval = NULL_TREE;
+ /* If this is a dependent base, don't look in it. */
+ if (BINFO_DEPENDENT_BASE_P (binfo))
+ return NULL_TREE;
+
+ /* If this base class is hidden by the best-known value so far, we
+ don't need to look. */
+ if (lfi->rval_binfo && BINFO_INHERITANCE_CHAIN (binfo) == lfi->rval_binfo
+ && !BINFO_VIRTUAL_P (binfo))
+ return dfs_skip_bases;
+
/* First, look for a function. There can't be a function and a data
member with the same name, and if there's a function and a type
with the same name, the type is hidden by the function. */
@@ -1092,7 +1079,7 @@ lookup_field_r (tree binfo, void *data)
/* If there is no declaration with the indicated name in this type,
then there's nothing to do. */
if (!nval)
- return NULL_TREE;
+ goto done;
/* If we're looking up a type (as with an elaborated type specifier)
we ignore all non-types we find. */
@@ -1119,14 +1106,14 @@ lookup_field_r (tree binfo, void *data)
if (e != NULL)
nval = TYPE_MAIN_DECL (e->type);
else
- return NULL_TREE;
+ goto done;
}
}
/* You must name a template base class with a template-id. */
if (!same_type_p (type, lfi->type)
&& template_self_reference_p (type, nval))
- return NULL_TREE;
+ goto done;
/* If the lookup already found a match, and the new value doesn't
hide the old one, we might have an ambiguity. */
@@ -1165,6 +1152,10 @@ lookup_field_r (tree binfo, void *data)
lfi->rval_binfo = binfo;
}
+ done:
+ /* Don't look for constructors or destructors in base classes. */
+ if (IDENTIFIER_CTOR_OR_DTOR_P (lfi->name))
+ return dfs_skip_bases;
return NULL_TREE;
}
@@ -1251,8 +1242,7 @@ lookup_member (tree xbasetype, tree name, int protect, bool want_type)
lfi.type = type;
lfi.name = name;
lfi.want_type = want_type;
- dfs_walk_real (basetype_path, &lookup_field_r, 0,
- &lookup_field_queue_p, &lfi);
+ dfs_walk_all (basetype_path, &lookup_field_r, NULL, &lfi);
rval = lfi.rval;
rval_binfo = lfi.rval_binfo;
if (rval_binfo)
@@ -1464,6 +1454,22 @@ lookup_fnfields_1 (tree type, tree name)
return -1;
}
+/* Like lookup_fnfields_1, except that the name is extracted from
+ FUNCTION, which is a FUNCTION_DECL or a TEMPLATE_DECL. */
+
+int
+class_method_index_for_fn (tree class_type, tree function)
+{
+ gcc_assert (TREE_CODE (function) == FUNCTION_DECL
+ || DECL_FUNCTION_TEMPLATE_P (function));
+
+ return lookup_fnfields_1 (class_type,
+ DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
+ DECL_DESTRUCTOR_P (function) ? dtor_identifier :
+ DECL_NAME (function));
+}
+
+
/* DECL is the result of a qualified name lookup. QUALIFYING_SCOPE is
the class or namespace used to qualify the name. CONTEXT_CLASS is
the class corresponding to the object in which DECL will be used.
@@ -1510,66 +1516,158 @@ adjust_result_of_qualified_name_lookup (tree decl,
/* Walk the class hierarchy within BINFO, in a depth-first traversal.
- PREFN is called in preorder, while POSTFN is called in postorder.
- If they ever returns a non-NULL value, that value is immediately
- returned and the walk is terminated. Both PREFN and POSTFN can be
- NULL. At each node, PREFN and POSTFN are passed the binfo to
- examine. Before each base-binfo of BINFO is walked, QFN is called.
- If the value returned is nonzero, the base-binfo is walked;
- otherwise it is not. If QFN is NULL, it is treated as a function
- which always returns 1. All callbacks are passed DATA whenever
- they are called. */
+ PRE_FN is called in preorder, while POST_FN is called in postorder.
+ If PRE_FN returns DFS_SKIP_BASES, child binfos will not be
+ walked. If PRE_FN or POST_FN returns a different non-NULL value,
+ that value is immediately returned and the walk is terminated. One
+ of PRE_FN and POST_FN can be NULL. At each node, PRE_FN and
+ POST_FN are passed the binfo to examine and the caller's DATA
+ value. All paths are walked, thus virtual and morally virtual
+ binfos can be multiply walked. */
tree
-dfs_walk_real (tree binfo,
- tree (*prefn) (tree, void *),
- tree (*postfn) (tree, void *),
- tree (*qfn) (tree, int, void *),
- void *data)
+dfs_walk_all (tree binfo, tree (*pre_fn) (tree, void *),
+ tree (*post_fn) (tree, void *), void *data)
{
- int i;
+ tree rval;
+ unsigned ix;
tree base_binfo;
- tree rval = NULL_TREE;
-
+
/* Call the pre-order walking function. */
- if (prefn)
+ if (pre_fn)
{
- rval = (*prefn) (binfo, data);
+ rval = pre_fn (binfo, data);
+ if (rval)
+ {
+ if (rval == dfs_skip_bases)
+ goto skip_bases;
+ return rval;
+ }
+ }
+
+ /* Find the next child binfo to walk. */
+ for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
+ {
+ rval = dfs_walk_all (base_binfo, pre_fn, post_fn, data);
if (rval)
return rval;
}
- /* Process the basetypes. */
- for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
+ skip_bases:
+ /* Call the post-order walking function. */
+ if (post_fn)
+ return post_fn (binfo, data);
+ return NULL_TREE;
+}
+
+/* Worker for dfs_walk_once. This behaves as dfs_walk_all, except
+ that binfos are walked at most once. */
+
+static tree
+dfs_walk_once_r (tree binfo, tree (*pre_fn) (tree, void *),
+ tree (*post_fn) (tree, void *), void *data)
+{
+ tree rval;
+ unsigned ix;
+ tree base_binfo;
+
+ /* Call the pre-order walking function. */
+ if (pre_fn)
{
- if (qfn)
+ rval = pre_fn (binfo, data);
+ if (rval)
{
- base_binfo = (*qfn) (binfo, i, data);
- if (!base_binfo)
+ if (rval == dfs_skip_bases)
+ goto skip_bases;
+
+ return rval;
+ }
+ }
+
+ /* Find the next child binfo to walk. */
+ for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
+ {
+ if (BINFO_VIRTUAL_P (base_binfo))
+ {
+ if (BINFO_MARKED (base_binfo))
continue;
+ BINFO_MARKED (base_binfo) = 1;
}
- rval = dfs_walk_real (base_binfo, prefn, postfn, qfn, data);
+
+ rval = dfs_walk_once_r (base_binfo, pre_fn, post_fn, data);
if (rval)
return rval;
}
-
+
+ skip_bases:
/* Call the post-order walking function. */
- if (postfn)
- rval = (*postfn) (binfo, data);
+ if (post_fn)
+ return post_fn (binfo, data);
- return rval;
+ return NULL_TREE;
+}
+
+/* Worker for dfs_walk_once. Recursively unmark the virtual base binfos of
+ BINFO. */
+
+static void
+dfs_unmark_r (tree binfo)
+{
+ unsigned ix;
+ tree base_binfo;
+
+ /* Process the basetypes. */
+ for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
+ {
+ if (BINFO_VIRTUAL_P (base_binfo))
+ {
+ if (!BINFO_MARKED (base_binfo))
+ continue;
+ BINFO_MARKED (base_binfo) = 0;
+ }
+ /* Only walk, if it can contain more virtual bases. */
+ if (CLASSTYPE_VBASECLASSES (BINFO_TYPE (base_binfo)))
+ dfs_unmark_r (base_binfo);
+ }
}
-/* Exactly like dfs_walk_real, except that there is no pre-order
- function call and FN is called in post-order. */
+/* Like dfs_walk_all, except that binfos are not multiply walked. For
+ non-diamond shaped hierarchies this is the same as dfs_walk_all.
+ For diamond shaped hierarchies we must mark the virtual bases, to
+ avoid multiple walks. */
tree
-dfs_walk (tree binfo,
- tree (*fn) (tree, void *),
- tree (*qfn) (tree, int, void *),
- void *data)
+dfs_walk_once (tree binfo, tree (*pre_fn) (tree, void *),
+ tree (*post_fn) (tree, void *), void *data)
{
- return dfs_walk_real (binfo, 0, fn, qfn, data);
+ tree rval;
+
+ gcc_assert (pre_fn || post_fn);
+
+ if (!CLASSTYPE_DIAMOND_SHAPED_P (BINFO_TYPE (binfo)))
+ /* We are not diamond shaped, and therefore cannot encounter the
+ same binfo twice. */
+ rval = dfs_walk_all (binfo, pre_fn, post_fn, data);
+ else
+ {
+ rval = dfs_walk_once_r (binfo, pre_fn, post_fn, data);
+ if (!BINFO_INHERITANCE_CHAIN (binfo))
+ {
+ /* We are at the top of the hierarchy, and can use the
+ CLASSTYPE_VBASECLASSES list for unmarking the virtual
+ bases. */
+ VEC (tree) *vbases;
+ unsigned ix;
+ tree base_binfo;
+
+ for (vbases = CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)), ix = 0;
+ VEC_iterate (tree, vbases, ix, base_binfo); ix++)
+ BINFO_MARKED (base_binfo) = 0;
+ }
+ else
+ dfs_unmark_r (binfo);
+ }
+ return rval;
}
/* Check that virtual overrider OVERRIDER is acceptable for base function
@@ -1789,8 +1887,6 @@ dfs_get_pure_virtuals (tree binfo, void *data)
VEC_safe_push (tree, CLASSTYPE_PURE_VIRTUALS (type),
BV_FN (virtuals));
}
-
- BINFO_MARKED (binfo) = 1;
return NULL_TREE;
}
@@ -1809,40 +1905,9 @@ get_pure_virtuals (tree type)
(A primary base is not interesting because the derived class of
which it is a primary base will contain vtable entries for the
pure virtuals in the base class. */
- dfs_walk (TYPE_BINFO (type), dfs_get_pure_virtuals, unmarkedp, type);
- dfs_walk (TYPE_BINFO (type), dfs_unmark, markedp, type);
+ dfs_walk_once (TYPE_BINFO (type), NULL, dfs_get_pure_virtuals, type);
}
-/* DEPTH-FIRST SEARCH ROUTINES. */
-
-tree
-markedp (tree derived, int ix, void *data ATTRIBUTE_UNUSED)
-{
- tree binfo = BINFO_BASE_BINFO (derived, ix);
-
- return BINFO_MARKED (binfo) ? binfo : NULL_TREE;
-}
-
-tree
-unmarkedp (tree derived, int ix, void *data ATTRIBUTE_UNUSED)
-{
- tree binfo = BINFO_BASE_BINFO (derived, ix);
-
- return !BINFO_MARKED (binfo) ? binfo : NULL_TREE;
-}
-
-/* The worker functions for `dfs_walk'. These do not need to
- test anything (vis a vis marking) if they are paired with
- a predicate function (above). */
-
-tree
-dfs_unmark (tree binfo, void *data ATTRIBUTE_UNUSED)
-{
- BINFO_MARKED (binfo) = 0;
- return NULL_TREE;
-}
-
-
/* Debug info for C++ classes can get very large; try to avoid
emitting it everywhere.
@@ -1889,23 +1954,14 @@ dfs_debug_mark (tree binfo, void *data ATTRIBUTE_UNUSED)
{
tree t = BINFO_TYPE (binfo);
+ if (CLASSTYPE_DEBUG_REQUESTED (t))
+ return dfs_skip_bases;
+
CLASSTYPE_DEBUG_REQUESTED (t) = 1;
return NULL_TREE;
}
-/* Returns BINFO if we haven't already noted that we want debugging
- info for this base class. */
-
-static tree
-dfs_debug_unmarkedp (tree derived, int ix, void *data ATTRIBUTE_UNUSED)
-{
- tree binfo = BINFO_BASE_BINFO (derived, ix);
-
- return (!CLASSTYPE_DEBUG_REQUESTED (BINFO_TYPE (binfo))
- ? binfo : NULL_TREE);
-}
-
/* Write out the debugging information for TYPE, whose vtable is being
emitted. Also walk through our bases and note that we want to
write out information for them. This avoids the problem of not
@@ -1922,7 +1978,7 @@ note_debug_info_needed (tree type)
rest_of_type_compilation (type, toplevel_bindings_p ());
}
- dfs_walk (TYPE_BINFO (type), dfs_debug_mark, dfs_debug_unmarkedp, 0);
+ dfs_walk_all (TYPE_BINFO (type), dfs_debug_mark, NULL, 0);
}
void
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 5bb6f3b4d59..78d2683f6ef 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -1178,6 +1178,7 @@ finish_asm_stmt (int volatile_p, tree string, tree output_operands,
output_operands, input_operands,
clobbers);
ASM_VOLATILE_P (r) = volatile_p;
+ r = maybe_cleanup_point_expr (r);
return add_stmt (r);
}
diff --git a/gcc/dbxout.c b/gcc/dbxout.c
index 8dd153e151a..bab43cb5f34 100644
--- a/gcc/dbxout.c
+++ b/gcc/dbxout.c
@@ -2182,22 +2182,24 @@ dbxout_symbol (tree decl, int local ATTRIBUTE_UNUSED)
a different name. In that case we also want to output
that. */
- if ((TREE_CODE (t) == RECORD_TYPE
+ if (TREE_CODE (t) == RECORD_TYPE
|| TREE_CODE (t) == UNION_TYPE
|| TREE_CODE (t) == QUAL_UNION_TYPE
|| TREE_CODE (t) == ENUMERAL_TYPE)
- && TYPE_STUB_DECL (t)
- && TYPE_STUB_DECL (t) != decl
- && DECL_P (TYPE_STUB_DECL (t))
- && ! DECL_IGNORED_P (TYPE_STUB_DECL (t)))
{
- debug_queue_symbol (TYPE_STUB_DECL (t));
- if (TYPE_NAME (t)
- && TYPE_NAME (t) != TYPE_STUB_DECL (t)
- && TYPE_NAME (t) != decl
- && DECL_P (TYPE_NAME (t)))
- debug_queue_symbol (TYPE_NAME (t));
- }
+ if (TYPE_STUB_DECL (t)
+ && TYPE_STUB_DECL (t) != decl
+ && DECL_P (TYPE_STUB_DECL (t))
+ && ! DECL_IGNORED_P (TYPE_STUB_DECL (t)))
+ {
+ debug_queue_symbol (TYPE_STUB_DECL (t));
+ if (TYPE_NAME (t)
+ && TYPE_NAME (t) != TYPE_STUB_DECL (t)
+ && TYPE_NAME (t) != decl
+ && DECL_P (TYPE_NAME (t)))
+ debug_queue_symbol (TYPE_NAME (t));
+ }
+ }
else if (TYPE_NAME (t)
&& TYPE_NAME (t) != decl
&& DECL_P (TYPE_NAME (t)))
diff --git a/gcc/defaults.h b/gcc/defaults.h
index bdcefdb9827..d842742e760 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -334,16 +334,6 @@ do { fputs (integer_asm_op (POINTER_SIZE / BITS_PER_UNIT, TRUE), FILE); \
#endif
#endif
-/* By default, we generate a label at the beginning and end of the
- text section, and compute the size of the text section by
- subtracting the two. However, on some platforms that doesn't
- work, and we use the section itself, rather than a label at the
- beginning of it, to indicate the start of the section. On such
- platforms, define this to zero. */
-#ifndef DWARF2_GENERATE_TEXT_SECTION_LABEL
-#define DWARF2_GENERATE_TEXT_SECTION_LABEL 1
-#endif
-
/* Number of hardware registers that go into the DWARF-2 unwind info.
If not defined, equals FIRST_PSEUDO_REGISTER */
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index dd3e706f825..18cff6a442a 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -3489,7 +3489,7 @@ The stock GNU binutils 2.15 release is broken on this platform because of a
single bug. It has been fixed on the 2.15 branch in the CVS repository.
You can obtain a working version by checking out the binutils-2_15-branch
from the CVS repository or applying the patch
-`http://sources.redhat.com/ml/binutils-cvs/2004-09/msg00036.html' to the
+@uref{http://sources.redhat.com/ml/binutils-cvs/2004-09/msg00036.html} to the
release.
Sun bug 4296832 turns up when compiling X11 headers with GCC 2.95 or
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index c22ae29905b..71c72c84603 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -8090,13 +8090,6 @@ Dwarf 2 frame information. If @code{DWARF2_UNWIND_INFO}
information not matter how you define @code{DWARF2_FRAME_INFO}.
@end defmac
-@defmac DWARF2_GENERATE_TEXT_SECTION_LABEL
-By default, the Dwarf 2 debugging information generator will generate a
-label to mark the beginning of the text section. If it is better simply
-to use the name of the text section itself, rather than an explicit label,
-to indicate the beginning of the text section, define this macro to zero.
-@end defmac
-
@defmac DWARF2_ASM_LINE_DEBUG_INFO
Define this macro to be a nonzero value if the assembler can generate Dwarf 2
line debug info sections. This will result in much more compact line number
diff --git a/gcc/dwarf2.h b/gcc/dwarf2.h
index 4199aa4f6ba..aa550176024 100644
--- a/gcc/dwarf2.h
+++ b/gcc/dwarf2.h
@@ -1,7 +1,7 @@
/* Declarations and definitions of codes relating to the DWARF2 symbolic
debugging information format.
- Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002
- Free Software Foundation, Inc.
+ Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
+ 2003, 2004 Free Software Foundation, Inc.
Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
Office (AJPO), Florida State University and Silicon Graphics Inc.
@@ -10,22 +10,22 @@
Derived from the DWARF 1 implementation written by Ron Guilmette
(rfg@netcom.com), November 1990.
-This file is part of GCC.
+ 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 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.
+ 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. */
+ 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. */
/* This file is derived from the DWARF specification (a public document)
Revision 2.0.0 (July 27, 1993) developed by the UNIX International
@@ -41,6 +41,92 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#ifndef GCC_DWARF2_H
#define GCC_DWARF2_H
+/* Structure found in the .debug_line section. */
+typedef struct
+{
+ unsigned char li_length [4];
+ unsigned char li_version [2];
+ unsigned char li_prologue_length [4];
+ unsigned char li_min_insn_length [1];
+ unsigned char li_default_is_stmt [1];
+ unsigned char li_line_base [1];
+ unsigned char li_line_range [1];
+ unsigned char li_opcode_base [1];
+}
+DWARF2_External_LineInfo;
+
+typedef struct
+{
+ unsigned long li_length;
+ unsigned short li_version;
+ unsigned int li_prologue_length;
+ unsigned char li_min_insn_length;
+ unsigned char li_default_is_stmt;
+ int li_line_base;
+ unsigned char li_line_range;
+ unsigned char li_opcode_base;
+}
+DWARF2_Internal_LineInfo;
+
+/* Structure found in .debug_pubnames section. */
+typedef struct
+{
+ unsigned char pn_length [4];
+ unsigned char pn_version [2];
+ unsigned char pn_offset [4];
+ unsigned char pn_size [4];
+}
+DWARF2_External_PubNames;
+
+typedef struct
+{
+ unsigned long pn_length;
+ unsigned short pn_version;
+ unsigned long pn_offset;
+ unsigned long pn_size;
+}
+DWARF2_Internal_PubNames;
+
+/* Structure found in .debug_info section. */
+typedef struct
+{
+ unsigned char cu_length [4];
+ unsigned char cu_version [2];
+ unsigned char cu_abbrev_offset [4];
+ unsigned char cu_pointer_size [1];
+}
+DWARF2_External_CompUnit;
+
+typedef struct
+{
+ unsigned long cu_length;
+ unsigned short cu_version;
+ unsigned long cu_abbrev_offset;
+ unsigned char cu_pointer_size;
+}
+DWARF2_Internal_CompUnit;
+
+typedef struct
+{
+ unsigned char ar_length [4];
+ unsigned char ar_version [2];
+ unsigned char ar_info_offset [4];
+ unsigned char ar_pointer_size [1];
+ unsigned char ar_segment_size [1];
+}
+DWARF2_External_ARange;
+
+typedef struct
+{
+ unsigned long ar_length;
+ unsigned short ar_version;
+ unsigned long ar_info_offset;
+ unsigned char ar_pointer_size;
+ unsigned char ar_segment_size;
+}
+DWARF2_Internal_ARange;
+
+
/* Tag names and codes. */
enum dwarf_tag
{
@@ -103,12 +189,21 @@ enum dwarf_tag
DW_TAG_imported_unit = 0x3d,
/* SGI/MIPS Extensions. */
DW_TAG_MIPS_loop = 0x4081,
+ /* HP extensions. See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz . */
+ DW_TAG_HP_array_descriptor = 0x4090,
/* GNU extensions. */
DW_TAG_format_label = 0x4101, /* For FORTRAN 77 and Fortran 90. */
DW_TAG_function_template = 0x4102, /* For C++. */
DW_TAG_class_template = 0x4103, /* For C++. */
DW_TAG_GNU_BINCL = 0x4104,
- DW_TAG_GNU_EINCL = 0x4105
+ DW_TAG_GNU_EINCL = 0x4105,
+ /* Extensions for UPC. See: http://upc.gwu.edu/~upc. */
+ DW_TAG_upc_shared_type = 0x8765,
+ DW_TAG_upc_strict_type = 0x8766,
+ DW_TAG_upc_relaxed_type = 0x8767,
+ /* PGI (STMicroelectronics) extensions. No documentation available. */
+ DW_TAG_PGI_kanji_type = 0xA000,
+ DW_TAG_PGI_interface_block = 0xA020
};
#define DW_TAG_lo_user 0x4080
@@ -145,7 +240,6 @@ enum dwarf_form
};
/* Attribute names and codes. */
-
enum dwarf_attribute
{
DW_AT_sibling = 0x01,
@@ -223,7 +317,7 @@ enum dwarf_attribute
DW_AT_call_column = 0x57,
DW_AT_call_file = 0x58,
DW_AT_call_line = 0x59,
- /* SGI/MIPS Extensions. */
+ /* SGI/MIPS extensions. */
DW_AT_MIPS_fde = 0x2001,
DW_AT_MIPS_loop_begin = 0x2002,
DW_AT_MIPS_tail_loop_begin = 0x2003,
@@ -235,6 +329,21 @@ enum dwarf_attribute
DW_AT_MIPS_abstract_name = 0x2009,
DW_AT_MIPS_clone_origin = 0x200a,
DW_AT_MIPS_has_inlines = 0x200b,
+ /* HP extensions. */
+ DW_AT_HP_block_index = 0x2000,
+ DW_AT_HP_unmodifiable = 0x2001, /* Same as DW_AT_MIPS_fde. */
+ DW_AT_HP_actuals_stmt_list = 0x2010,
+ DW_AT_HP_proc_per_section = 0x2011,
+ DW_AT_HP_raw_data_ptr = 0x2012,
+ DW_AT_HP_pass_by_reference = 0x2013,
+ DW_AT_HP_opt_level = 0x2014,
+ DW_AT_HP_prof_version_id = 0x2015,
+ DW_AT_HP_opt_flags = 0x2016,
+ DW_AT_HP_cold_region_low_pc = 0x2017,
+ DW_AT_HP_cold_region_high_pc = 0x2018,
+ DW_AT_HP_all_variables_modifiable = 0x2019,
+ DW_AT_HP_linkage_name = 0x201a,
+ DW_AT_HP_prof_flags = 0x201b, /* In comp unit of procs_info for -g. */
/* GNU extensions. */
DW_AT_sf_names = 0x2101,
DW_AT_src_info = 0x2102,
@@ -243,8 +352,14 @@ enum dwarf_attribute
DW_AT_body_begin = 0x2105,
DW_AT_body_end = 0x2106,
DW_AT_GNU_vector = 0x2107,
- /* VMS Extensions. */
- DW_AT_VMS_rtnbeg_pd_address = 0x2201
+ /* VMS extensions. */
+ DW_AT_VMS_rtnbeg_pd_address = 0x2201,
+ /* UPC extension. */
+ DW_AT_upc_threads_scaled = 0x3210,
+ /* PGI (STMicroelectronics) extensions. */
+ DW_AT_PGI_lbase = 0x3a00,
+ DW_AT_PGI_soffset = 0x3a01,
+ DW_AT_PGI_lstride = 0x3a02
};
#define DW_AT_lo_user 0x2000 /* Implementation-defined range start. */
@@ -404,7 +519,15 @@ enum dwarf_location_atom
DW_OP_call4 = 0x99,
DW_OP_call_ref = 0x9a,
/* GNU extensions. */
- DW_OP_GNU_push_tls_address = 0xe0
+ DW_OP_GNU_push_tls_address = 0xe0,
+ /* HP extensions. */
+ DW_OP_HP_unknown = 0xe0, /* Ouch, the same as GNU_push_tls_address. */
+ DW_OP_HP_is_value = 0xe1,
+ DW_OP_HP_fltconst4 = 0xe2,
+ DW_OP_HP_fltconst8 = 0xe3,
+ DW_OP_HP_mod_range = 0xe4,
+ DW_OP_HP_unmod_range = 0xe5,
+ DW_OP_HP_tls = 0xe6
};
#define DW_OP_lo_user 0xe0 /* Implementation-defined range start. */
@@ -423,7 +546,15 @@ enum dwarf_type
DW_ATE_unsigned = 0x7,
DW_ATE_unsigned_char = 0x8,
/* DWARF 3. */
- DW_ATE_imaginary_float = 0x9
+ DW_ATE_imaginary_float = 0x9,
+ /* HP extensions. */
+ DW_ATE_HP_float80 = 0x80, /* Floating-point (80 bit). */
+ DW_ATE_HP_complex_float80 = 0x81, /* Complex floating-point (80 bit). */
+ DW_ATE_HP_float128 = 0x82, /* Floating-point (128 bit). */
+ DW_ATE_HP_complex_float128 = 0x83, /* Complex floating-point (128 bit). */
+ DW_ATE_HP_floathpintel = 0x84, /* Floating-point (82 bit IA64). */
+ DW_ATE_HP_imaginary_float80 = 0x85,
+ DW_ATE_HP_imaginary_float128 = 0x86
};
#define DW_ATE_lo_user 0x80
@@ -521,7 +652,18 @@ enum dwarf_line_number_x_ops
{
DW_LNE_end_sequence = 1,
DW_LNE_set_address = 2,
- DW_LNE_define_file = 3
+ DW_LNE_define_file = 3,
+ /* HP extensions. */
+ DW_LNE_HP_negate_is_UV_update = 0x11,
+ DW_LNE_HP_push_context = 0x12,
+ DW_LNE_HP_pop_context = 0x13,
+ DW_LNE_HP_set_file_line_column = 0x14,
+ DW_LNE_HP_set_routine_name = 0x15,
+ DW_LNE_HP_set_sequence = 0x16,
+ DW_LNE_HP_negate_post_semantics = 0x17,
+ DW_LNE_HP_negate_function_exit = 0x18,
+ DW_LNE_HP_negate_front_end_logical = 0x19,
+ DW_LNE_HP_define_proc = 0x20
};
/* Call frame information. */
@@ -545,17 +687,14 @@ enum dwarf_call_frame_info
DW_CFA_def_cfa = 0x0c,
DW_CFA_def_cfa_register = 0x0d,
DW_CFA_def_cfa_offset = 0x0e,
-
/* DWARF 3. */
DW_CFA_def_cfa_expression = 0x0f,
DW_CFA_expression = 0x10,
DW_CFA_offset_extended_sf = 0x11,
DW_CFA_def_cfa_sf = 0x12,
DW_CFA_def_cfa_offset_sf = 0x13,
-
/* SGI/MIPS specific. */
DW_CFA_MIPS_advance_loc8 = 0x1d,
-
/* GNU extensions. */
DW_CFA_GNU_window_save = 0x2d,
DW_CFA_GNU_args_size = 0x2e,
@@ -566,8 +705,8 @@ enum dwarf_call_frame_info
#define DW_CIE_VERSION 1
#define DW_CFA_extended 0
-#define DW_CFA_low_user 0x1c
-#define DW_CFA_high_user 0x3f
+#define DW_CFA_lo_user 0x1c
+#define DW_CFA_hi_user 0x3f
#define DW_CHILDREN_no 0x00
#define DW_CHILDREN_yes 0x01
@@ -593,10 +732,11 @@ enum dwarf_source_language
DW_LANG_Ada95 = 0x000d,
DW_LANG_Fortran95 = 0x000e,
/* MIPS. */
- DW_LANG_Mips_Assembler = 0x8001
+ DW_LANG_Mips_Assembler = 0x8001,
+ /* UPC. */
+ DW_LANG_Upc = 0x8765
};
-
#define DW_LANG_lo_user 0x8000 /* Implementation-defined range start. */
#define DW_LANG_hi_user 0xffff /* Implementation-defined range start. */
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 11bf0f8f3f6..4b976c10e6f 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -13262,10 +13262,7 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
DEBUG_ABBREV_SECTION_LABEL, 0);
- if (DWARF2_GENERATE_TEXT_SECTION_LABEL)
- ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
- else
- strcpy (text_section_label, stripattributes (TEXT_SECTION_NAME));
+ ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
DEBUG_INFO_SECTION_LABEL, 0);
@@ -13288,11 +13285,8 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
}
- if (DWARF2_GENERATE_TEXT_SECTION_LABEL)
- {
- text_section ();
- ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
- }
+ text_section ();
+ ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
}
/* A helper function for dwarf2out_finish called through
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 232381f2c5a..98981b8f247 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -3305,6 +3305,11 @@ expand_sdiv_pow2 (enum machine_mode mode, rtx op0, HOST_WIDE_INT d)
{
rtx temp2;
+ /* ??? emit_conditional_move forces a stack adjustment via
+ compare_from_rtx so, if the sequence is discarded, it will
+ be lost. Do it now instead. */
+ do_pending_stack_adjust ();
+
start_sequence ();
temp2 = copy_to_mode_reg (mode, op0);
temp = expand_binop (mode, add_optab, temp2, GEN_INT (d-1),
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 4260ff4ee6d..538486dcf90 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,37 @@
+2004-10-07 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
+
+ PR fortran/17676
+ * resolve.c (resolve_operator): Use correct operator name in message.
+
+2004-10-07 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
+
+ * primary.c (match_boz_constant): Allow kind parameter suffixes.
+ Move standard warning further to the front.
+
+2004-10-07 Kazu Hirata <kazu@cs.umass.edu>
+
+ * trans-stmt.c: Fix a comment typo.
+
+2004-10-07 Paul Brook <paul@codesourcery.com>
+
+ PR fortran/17678
+ * trans-array.c (gfc_trans_deferred_array): Leave use associated
+ variables alone.
+
+2004-10-06 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
+
+ PR fortran/17568
+ * simplify.c (twos_complement): New function.
+ (gfc_simplify_ishft, gfc_simplify_ishftc): Revise.
+
+ * simplify.c (gfc_simplify_abs): Use mpfr_hypot for CABS.
+
+2004-10-06 Paul Brook <paul@codesourcery.com>
+
+ * trans-stmt.c (gfc_trans_simple_do): New function.
+ (gfc_trans_do): Use it. Evaluate iteration bounds before entering
+ loop. Update comments.
+
2004-10-04 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
PR fortran/17283
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index 45348e6a760..fe6645de21e 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -235,7 +235,7 @@ match_integer_constant (gfc_expr ** result, int signflag)
static match
match_boz_constant (gfc_expr ** result)
{
- int radix, delim, length, x_hex;
+ int radix, delim, length, x_hex, kind;
locus old_loc;
char *buffer;
gfc_expr *e;
@@ -272,6 +272,12 @@ match_boz_constant (gfc_expr ** result)
if (delim != '\'' && delim != '\"')
goto backup;
+ if (x_hex && pedantic
+ && (gfc_notify_std (GFC_STD_GNU, "Extension: Hexadecimal "
+ "constant at %C uses non-standard syntax.")
+ == FAILURE))
+ return MATCH_ERROR;
+
old_loc = gfc_current_locus;
length = match_digits (0, radix, NULL);
@@ -293,25 +299,25 @@ match_boz_constant (gfc_expr ** result)
memset (buffer, '\0', length + 1);
match_digits (0, radix, buffer);
- gfc_next_char ();
+ gfc_next_char (); /* Eat delimiter. */
+
+ kind = get_kind ();
+ if (kind == -1)
+ return MATCH_ERROR;
+ if (kind == -2)
+ kind = gfc_default_integer_kind;
+ else if (pedantic
+ && (gfc_notify_std (GFC_STD_GNU, "Extension: Kind parameter "
+ "suffix to boz literal constant at %C.")
+ == FAILURE))
+ return MATCH_ERROR;
- e = gfc_convert_integer (buffer, gfc_default_integer_kind, radix,
- &gfc_current_locus);
+ e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus);
if (gfc_range_check (e) != ARITH_OK)
{
- gfc_error ("Integer too big for default integer kind at %C");
-
- gfc_free_expr (e);
- return MATCH_ERROR;
- }
+ gfc_error ("Integer too big for integer kind %i at %C", kind);
- if (x_hex
- && pedantic
- && (gfc_notify_std (GFC_STD_GNU, "Extension: Hexadecimal "
- "constant at %C uses non-standard syntax.")
- == FAILURE))
- {
gfc_free_expr (e);
return MATCH_ERROR;
}
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 5169f5e8b0f..08f08da0cf2 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -1413,10 +1413,10 @@ resolve_operator (gfc_expr * e)
case INTRINSIC_USER:
if (op2 == NULL)
sprintf (msg, "Operand of user operator '%s' at %%L is %s",
- e->uop->ns->proc_name->name, gfc_typename (&op1->ts));
+ e->uop->name, gfc_typename (&op1->ts));
else
sprintf (msg, "Operands of user operator '%s' at %%L are %s/%s",
- e->uop->ns->proc_name->name, gfc_typename (&op1->ts),
+ e->uop->name, gfc_typename (&op1->ts),
gfc_typename (&op2->ts));
goto bad_op;
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index 2dffff845d9..253f68677a1 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -138,13 +138,44 @@ get_kind (bt type, gfc_expr * k, const char *name, int default_kind)
}
+/* Checks if X, which is assumed to represent a two's complement
+ integer of binary width BITSIZE, has the signbit set. If so, makes
+ X the corresponding negative number. */
+
+static void
+twos_complement (mpz_t x, int bitsize)
+{
+ mpz_t mask;
+ char mask_s[bitsize + 1];
+
+ if (mpz_tstbit (x, bitsize - 1) == 1)
+ {
+ /* The mpz_init_set_{u|s}i functions take a long argument, but
+ the widest integer the target supports might be wider, so we
+ have to go via an intermediate string. */
+ memset (mask_s, '1', bitsize);
+ mask_s[bitsize] = '\0';
+ mpz_init_set_str (mask, mask_s, 2);
+
+ /* We negate the number by hand, zeroing the high bits, and then
+ have it negated by GMP. */
+ mpz_com (x, x);
+ mpz_add_ui (x, x, 1);
+ mpz_and (x, x, mask);
+
+ mpz_neg (x, x);
+
+ mpz_clear (mask);
+ }
+}
+
+
/********************** Simplification functions *****************************/
gfc_expr *
gfc_simplify_abs (gfc_expr * e)
{
gfc_expr *result;
- mpfr_t a, b;
if (e->expr_type != EXPR_CONSTANT)
return NULL;
@@ -171,17 +202,9 @@ gfc_simplify_abs (gfc_expr * e)
result = gfc_constant_result (BT_REAL, e->ts.kind, &e->where);
gfc_set_model_kind (e->ts.kind);
- mpfr_init (a);
- mpfr_init (b);
- /* FIXME: Possible numerical problems. */
- mpfr_mul (a, e->value.complex.r, e->value.complex.r, GFC_RND_MODE);
- mpfr_mul (b, e->value.complex.i, e->value.complex.i, GFC_RND_MODE);
- mpfr_add (a, a, b, GFC_RND_MODE);
- mpfr_sqrt (result->value.real, a, GFC_RND_MODE);
-
- mpfr_clear (a);
- mpfr_clear (b);
+ mpfr_hypot (result->value.real, e->value.complex.r,
+ e->value.complex.i, GFC_RND_MODE);
result = range_check (result, "CABS");
break;
@@ -1557,8 +1580,7 @@ gfc_expr *
gfc_simplify_ishft (gfc_expr * e, gfc_expr * s)
{
gfc_expr *result;
- int shift, ashift, isize, k;
- long e_int;
+ int shift, ashift, isize, k, *bits, i;
if (e->expr_type != EXPR_CONSTANT || s->expr_type != EXPR_CONSTANT)
return NULL;
@@ -1586,10 +1608,6 @@ gfc_simplify_ishft (gfc_expr * e, gfc_expr * s)
return &gfc_bad_expr;
}
- e_int = mpz_get_si (e->value.integer);
- if (e_int > INT_MAX || e_int < INT_MIN)
- gfc_internal_error ("ISHFT: unable to extract integer");
-
result = gfc_constant_result (e->ts.type, e->ts.kind, &e->where);
if (shift == 0)
@@ -1597,13 +1615,43 @@ gfc_simplify_ishft (gfc_expr * e, gfc_expr * s)
mpz_set (result->value.integer, e->value.integer);
return range_check (result, "ISHFT");
}
+
+ bits = gfc_getmem (isize * sizeof (int));
+
+ for (i = 0; i < isize; i++)
+ bits[i] = mpz_tstbit (e->value.integer, i);
if (shift > 0)
- mpz_set_si (result->value.integer, e_int << shift);
+ {
+ for (i = 0; i < shift; i++)
+ mpz_clrbit (result->value.integer, i);
+
+ for (i = 0; i < isize - shift; i++)
+ {
+ if (bits[i] == 0)
+ mpz_clrbit (result->value.integer, i + shift);
+ else
+ mpz_setbit (result->value.integer, i + shift);
+ }
+ }
else
- mpz_set_si (result->value.integer, e_int >> ashift);
+ {
+ for (i = isize - 1; i >= isize - ashift; i--)
+ mpz_clrbit (result->value.integer, i);
+
+ for (i = isize - 1; i >= ashift; i--)
+ {
+ if (bits[i] == 0)
+ mpz_clrbit (result->value.integer, i - ashift);
+ else
+ mpz_setbit (result->value.integer, i - ashift);
+ }
+ }
+
+ twos_complement (result->value.integer, isize);
- return range_check (result, "ISHFT");
+ gfc_free (bits);
+ return result;
}
@@ -1651,6 +1699,12 @@ gfc_simplify_ishftc (gfc_expr * e, gfc_expr * s, gfc_expr * sz)
result = gfc_constant_result (e->ts.type, e->ts.kind, &e->where);
+ if (shift == 0)
+ {
+ mpz_set (result->value.integer, e->value.integer);
+ return result;
+ }
+
bits = gfc_getmem (isize * sizeof (int));
for (i = 0; i < isize; i++)
@@ -1658,20 +1712,13 @@ gfc_simplify_ishftc (gfc_expr * e, gfc_expr * s, gfc_expr * sz)
delta = isize - ashift;
- if (shift == 0)
- {
- mpz_set (result->value.integer, e->value.integer);
- gfc_free (bits);
- return range_check (result, "ISHFTC");
- }
-
- else if (shift > 0)
+ if (shift > 0)
{
for (i = 0; i < delta; i++)
{
if (bits[i] == 0)
mpz_clrbit (result->value.integer, i + shift);
- if (bits[i] == 1)
+ else
mpz_setbit (result->value.integer, i + shift);
}
@@ -1679,12 +1726,9 @@ gfc_simplify_ishftc (gfc_expr * e, gfc_expr * s, gfc_expr * sz)
{
if (bits[i] == 0)
mpz_clrbit (result->value.integer, i - delta);
- if (bits[i] == 1)
+ else
mpz_setbit (result->value.integer, i - delta);
}
-
- gfc_free (bits);
- return range_check (result, "ISHFTC");
}
else
{
@@ -1692,7 +1736,7 @@ gfc_simplify_ishftc (gfc_expr * e, gfc_expr * s, gfc_expr * sz)
{
if (bits[i] == 0)
mpz_clrbit (result->value.integer, i + delta);
- if (bits[i] == 1)
+ else
mpz_setbit (result->value.integer, i + delta);
}
@@ -1700,13 +1744,15 @@ gfc_simplify_ishftc (gfc_expr * e, gfc_expr * s, gfc_expr * sz)
{
if (bits[i] == 0)
mpz_clrbit (result->value.integer, i + shift);
- if (bits[i] == 1)
+ else
mpz_setbit (result->value.integer, i + shift);
}
-
- gfc_free (bits);
- return range_check (result, "ISHFTC");
}
+
+ twos_complement (result->value.integer, isize);
+
+ gfc_free (bits);
+ return result;
}
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index a6397d313fd..d36155dc364 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -3999,8 +3999,8 @@ gfc_trans_deferred_array (gfc_symbol * sym, tree body)
&& !INTEGER_CST_P (sym->ts.cl->backend_decl))
gfc_trans_init_string_length (sym->ts.cl, &fnblock);
- /* Parameter variables don't need anything special. */
- if (sym->attr.dummy)
+ /* Parameter and use associated variables don't need anything special. */
+ if (sym->attr.dummy || sym->attr.use_assoc)
{
gfc_add_expr_to_block (&fnblock, body);
diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c
index 8fd8ff801c2..501278aa909 100644
--- a/gcc/fortran/trans-stmt.c
+++ b/gcc/fortran/trans-stmt.c
@@ -485,13 +485,113 @@ gfc_trans_arithmetic_if (gfc_code * code)
}
+/* Translate the simple DO construct. This is where the loop variable has
+ integer type and step +-1. We can't use this in the general case
+ because integer overflow and floating point errors could give incorrect
+ results.
+ We translate a do loop from:
+
+ DO dovar = from, to, step
+ body
+ END DO
+
+ to:
+
+ [Evaluate loop bounds and step]
+ dovar = from;
+ if ((step > 0) ? (dovar <= to) : (dovar => to))
+ {
+ for (;;)
+ {
+ body;
+ cycle_label:
+ cond = (dovar == to);
+ dovar += step;
+ if (cond) goto end_label;
+ }
+ }
+ end_label:
+
+ This helps the optimizers by avoiding the extra induction variable
+ used in the general case. */
+
+static tree
+gfc_trans_simple_do (gfc_code * code, stmtblock_t *pblock, tree dovar,
+ tree from, tree to, tree step)
+{
+ stmtblock_t body;
+ tree type;
+ tree cond;
+ tree tmp;
+ tree cycle_label;
+ tree exit_label;
+
+ type = TREE_TYPE (dovar);
+
+ /* Initialize the DO variable: dovar = from. */
+ gfc_add_modify_expr (pblock, dovar, from);
+
+ /* Cycle and exit statements are implemented with gotos. */
+ cycle_label = gfc_build_label_decl (NULL_TREE);
+ exit_label = gfc_build_label_decl (NULL_TREE);
+
+ /* Put the labels where they can be found later. See gfc_trans_do(). */
+ code->block->backend_decl = tree_cons (cycle_label, exit_label, NULL);
+
+ /* Loop body. */
+ gfc_start_block (&body);
+
+ /* Main loop body. */
+ tmp = gfc_trans_code (code->block->next);
+ gfc_add_expr_to_block (&body, tmp);
+
+ /* Label for cycle statements (if needed). */
+ if (TREE_USED (cycle_label))
+ {
+ tmp = build1_v (LABEL_EXPR, cycle_label);
+ gfc_add_expr_to_block (&body, tmp);
+ }
+
+ /* Evaluate the loop condition. */
+ cond = build2 (EQ_EXPR, boolean_type_node, dovar, to);
+ cond = gfc_evaluate_now (cond, &body);
+
+ /* Increment the loop variable. */
+ tmp = build2 (PLUS_EXPR, type, dovar, step);
+ gfc_add_modify_expr (&body, dovar, tmp);
+
+ /* The loop exit. */
+ tmp = build1_v (GOTO_EXPR, exit_label);
+ TREE_USED (exit_label) = 1;
+ tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ());
+ gfc_add_expr_to_block (&body, tmp);
+
+ /* Finish the loop body. */
+ tmp = gfc_finish_block (&body);
+ tmp = build1_v (LOOP_EXPR, tmp);
+
+ /* Only execute the loop if the number of iterations is positive. */
+ if (tree_int_cst_sgn (step) > 0)
+ cond = fold (build2 (LE_EXPR, boolean_type_node, dovar, to));
+ else
+ cond = fold (build2 (GE_EXPR, boolean_type_node, dovar, to));
+ tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ());
+ gfc_add_expr_to_block (pblock, tmp);
+
+ /* Add the exit label. */
+ tmp = build1_v (LABEL_EXPR, exit_label);
+ gfc_add_expr_to_block (pblock, tmp);
+
+ return gfc_finish_block (pblock);
+}
+
/* Translate the DO construct. This obviously is one of the most
important ones to get right with any compiler, but especially
so for Fortran.
- Currently we calculate the loop count before entering the loop, but
- it may be possible to optimize if step is a constant. The main
- advantage is that the loop test is a single GENERIC node
+ We special case some loop forms as described in gfc_trans_simple_do.
+ For other cases we implement them with a separate loop count,
+ as described in the standard.
We translate a do loop from:
@@ -501,30 +601,24 @@ gfc_trans_arithmetic_if (gfc_code * code)
to:
- pre_dovar;
- pre_from;
- pre_to;
- pre_step;
- temp1=to_expr-from_expr;
- step_temp=step_expr;
- range_temp=step_tmp/range_temp;
- for ( ; range_temp > 0 ; range_temp = range_temp - 1)
+ [evaluate loop bounds and step]
+ count = to + step - from;
+ dovar = from;
+ for (;;)
{
body;
cycle_label:
- dovar_temp = dovar
- dovar=dovar_temp + step_temp;
+ dovar += step
+ count--;
+ if (count <=0) goto exit_label;
}
exit_label:
- Some optimization is done for empty do loops. We can't just let
- dovar=to because it's possible for from+range*loopcount!=to. Anyone
- who writes empty DO deserves sub-optimal (but correct) code anyway.
-
TODO: Large loop counts
- Does not work loop counts which do not fit into a signed integer kind,
+ The code above assumes the loop count fits into a signed integer kind,
i.e. Does not work for loop counts > 2^31 for integer(kind=4) variables
- We must support the full range. */
+ We must support the full range.
+ TODO: Real type do variables. */
tree
gfc_trans_do (gfc_code * code)
@@ -545,8 +639,7 @@ gfc_trans_do (gfc_code * code)
gfc_start_block (&block);
- /* Create GIMPLE versions of all expressions in the iterator. */
-
+ /* Evaluate all the expressions in the iterator. */
gfc_init_se (&se, NULL);
gfc_conv_expr_lhs (&se, code->ext.iterator->var);
gfc_add_block_to_block (&block, &se.pre);
@@ -556,21 +649,24 @@ gfc_trans_do (gfc_code * code)
gfc_init_se (&se, NULL);
gfc_conv_expr_type (&se, code->ext.iterator->start, type);
gfc_add_block_to_block (&block, &se.pre);
- from = se.expr;
+ from = gfc_evaluate_now (se.expr, &block);
gfc_init_se (&se, NULL);
gfc_conv_expr_type (&se, code->ext.iterator->end, type);
gfc_add_block_to_block (&block, &se.pre);
- to = se.expr;
+ to = gfc_evaluate_now (se.expr, &block);
gfc_init_se (&se, NULL);
gfc_conv_expr_type (&se, code->ext.iterator->step, type);
-
- /* We don't want this changing part way through. */
- gfc_make_safe_expr (&se);
gfc_add_block_to_block (&block, &se.pre);
- step = se.expr;
-
+ step = gfc_evaluate_now (se.expr, &block);
+
+ /* Special case simple loops. */
+ if (TREE_CODE (type) == INTEGER_TYPE
+ && (integer_onep (step)
+ || tree_int_cst_equal (step, integer_minus_one_node)))
+ return gfc_trans_simple_do (code, &block, dovar, from, to, step);
+
/* Initialize loop count. This code is executed before we enter the
loop body. We generate: count = (to + step - from) / step. */
diff --git a/gcc/function.c b/gcc/function.c
index 0545b05a5cd..4c8d6c409c1 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -2513,8 +2513,12 @@ assign_parm_setup_block_p (struct assign_parm_data_one *data)
return true;
#ifdef BLOCK_REG_PADDING
- if (data->locate.where_pad == (BYTES_BIG_ENDIAN ? upward : downward)
- && GET_MODE_SIZE (data->promoted_mode) < UNITS_PER_WORD)
+ /* Only assign_parm_setup_block knows how to deal with register arguments
+ that are padded at the least significant end. */
+ if (REG_P (data->entry_parm)
+ && GET_MODE_SIZE (data->promoted_mode) < UNITS_PER_WORD
+ && (BLOCK_REG_PADDING (data->passed_mode, data->passed_type, 1)
+ == (BYTES_BIG_ENDIAN ? upward : downward)))
return true;
#endif
diff --git a/gcc/hooks.c b/gcc/hooks.c
index 9470a4d84c6..d091583a2d3 100644
--- a/gcc/hooks.c
+++ b/gcc/hooks.c
@@ -55,13 +55,6 @@ hook_int_void_no_regs (void)
return NO_REGS;
}
-/* Generic hook that returns 1. */
-int
-hook_int_void_1 (void)
-{
- return 1;
-}
-
/* Generic hook that takes (bool) and returns false. */
bool
hook_bool_bool_false (bool a ATTRIBUTE_UNUSED)
@@ -152,11 +145,6 @@ hook_uint_uint_constcharptrptr_0 (unsigned int a ATTRIBUTE_UNUSED,
}
void
-hook_void_int (int b ATTRIBUTE_UNUSED)
-{
-}
-
-void
hook_void_tree (tree a ATTRIBUTE_UNUSED)
{
}
diff --git a/gcc/hooks.h b/gcc/hooks.h
index 10966a912a2..b0f47b7913f 100644
--- a/gcc/hooks.h
+++ b/gcc/hooks.h
@@ -40,7 +40,6 @@ extern bool hook_bool_rtx_int_int_intp_false (rtx, int, int, int *);
extern bool hook_bool_constcharptr_size_t_false (const char *, size_t);
extern void hook_void_void (void);
-extern void hook_void_int (int);
extern void hook_void_constcharptr (const char *);
extern void hook_void_FILEptr_constcharptr (FILE *, const char *);
extern void hook_void_tree (tree);
@@ -51,7 +50,6 @@ extern int hook_int_tree_tree_1 (tree, tree);
extern int hook_int_rtx_0 (rtx);
extern int hook_int_size_t_constcharptr_int_0 (size_t, const char *, int);
extern int hook_int_void_no_regs (void);
-extern int hook_int_void_1 (void);
extern unsigned hook_uint_uint_constcharptrptr_0 (unsigned, const char **);
diff --git a/gcc/lambda-code.c b/gcc/lambda-code.c
index cc6c9bcd04d..2f75db9f998 100644
--- a/gcc/lambda-code.c
+++ b/gcc/lambda-code.c
@@ -489,6 +489,168 @@ lcm (int a, int b)
return (abs (a) * abs (b) / gcd (a, b));
}
+/* Perform Fourier-Motzkin elimination to calculate the bounds of the
+ auxillary nest.
+ Fourier-Motzkin is a way of reducing systems of linear inequality so that
+ it is easy to calculate the answer and bounds.
+ A sketch of how it works:
+ Given a system of linear inequalities, ai * xj >= bk, you can always
+ rewrite the constraints so they are all of the form
+ a <= x, or x <= b, or x >= constant for some x in x1 ... xj (and some b
+ in b1 ... bk, and some a in a1...ai)
+ You can then eliminate this x from the non-constant inequalities by
+ rewriting these as a <= b, x >= constant, and delete the x variable.
+ You can then repeat this for any remaining x variables, and then we have
+ an easy to use variable <= constant (or no variables at all) form that we
+ can construct our bounds from.
+
+ In our case, each time we eliminate, we construct part of the bound from
+ the ith variable, then delete the ith variable.
+
+ Remember the constant are in our vector a, our coefficient matrix is A,
+ and our invariant coefficient matrix is B.
+
+ SIZE is the size of the matrices being passed.
+ DEPTH is the loop nest depth.
+ INVARIANTS is the number of loop invariants.
+ A, B, and a are the coefficient matrix, invariant coefficient, and a
+ vector of constants, respectively. */
+
+static lambda_loopnest
+compute_nest_using_fourier_motzkin (int size,
+ int depth,
+ int invariants,
+ lambda_matrix A,
+ lambda_matrix B,
+ lambda_vector a)
+{
+
+ int multiple, f1, f2;
+ int i, j, k;
+ lambda_linear_expression expression;
+ lambda_loop loop;
+ lambda_loopnest auxillary_nest;
+ lambda_matrix swapmatrix, A1, B1;
+ lambda_vector swapvector, a1;
+ int newsize;
+
+ A1 = lambda_matrix_new (128, depth);
+ B1 = lambda_matrix_new (128, invariants);
+ a1 = lambda_vector_new (128);
+
+ auxillary_nest = lambda_loopnest_new (depth, invariants);
+
+ for (i = depth - 1; i >= 0; i--)
+ {
+ loop = lambda_loop_new ();
+ LN_LOOPS (auxillary_nest)[i] = loop;
+ LL_STEP (loop) = 1;
+
+ for (j = 0; j < size; j++)
+ {
+ if (A[j][i] < 0)
+ {
+ /* Any linear expression in the matrix with a coefficient less
+ than 0 becomes part of the new lower bound. */
+ expression = lambda_linear_expression_new (depth, invariants);
+
+ for (k = 0; k < i; k++)
+ LLE_COEFFICIENTS (expression)[k] = A[j][k];
+
+ for (k = 0; k < invariants; k++)
+ LLE_INVARIANT_COEFFICIENTS (expression)[k] = -1 * B[j][k];
+
+ LLE_DENOMINATOR (expression) = -1 * A[j][i];
+ LLE_CONSTANT (expression) = -1 * a[j];
+
+ /* Ignore if identical to the existing lower bound. */
+ if (!lle_equal (LL_LOWER_BOUND (loop),
+ expression, depth, invariants))
+ {
+ LLE_NEXT (expression) = LL_LOWER_BOUND (loop);
+ LL_LOWER_BOUND (loop) = expression;
+ }
+
+ }
+ else if (A[j][i] > 0)
+ {
+ /* Any linear expression with a coefficient greater than 0
+ becomes part of the new upper bound. */
+ expression = lambda_linear_expression_new (depth, invariants);
+ for (k = 0; k < i; k++)
+ LLE_COEFFICIENTS (expression)[k] = -1 * A[j][k];
+
+ for (k = 0; k < invariants; k++)
+ LLE_INVARIANT_COEFFICIENTS (expression)[k] = B[j][k];
+
+ LLE_DENOMINATOR (expression) = A[j][i];
+ LLE_CONSTANT (expression) = a[j];
+
+ /* Ignore if identical to the existing upper bound. */
+ if (!lle_equal (LL_UPPER_BOUND (loop),
+ expression, depth, invariants))
+ {
+ LLE_NEXT (expression) = LL_UPPER_BOUND (loop);
+ LL_UPPER_BOUND (loop) = expression;
+ }
+
+ }
+ }
+
+ /* This portion creates a new system of linear inequalities by deleting
+ the i'th variable, reducing the system by one variable. */
+ newsize = 0;
+ for (j = 0; j < size; j++)
+ {
+ /* If the coefficient for the i'th variable is 0, then we can just
+ eliminate the variable straightaway. Otherwise, we have to
+ multiply through by the coefficients we are eliminating. */
+ if (A[j][i] == 0)
+ {
+ lambda_vector_copy (A[j], A1[newsize], depth);
+ lambda_vector_copy (B[j], B1[newsize], invariants);
+ a1[newsize] = a[j];
+ newsize++;
+ }
+ else if (A[j][i] > 0)
+ {
+ for (k = 0; k < size; k++)
+ {
+ if (A[k][i] < 0)
+ {
+ multiple = lcm (A[j][i], A[k][i]);
+ f1 = multiple / A[j][i];
+ f2 = -1 * multiple / A[k][i];
+
+ lambda_vector_add_mc (A[j], f1, A[k], f2,
+ A1[newsize], depth);
+ lambda_vector_add_mc (B[j], f1, B[k], f2,
+ B1[newsize], invariants);
+ a1[newsize] = f1 * a[j] + f2 * a[k];
+ newsize++;
+ }
+ }
+ }
+ }
+
+ swapmatrix = A;
+ A = A1;
+ A1 = swapmatrix;
+
+ swapmatrix = B;
+ B = B1;
+ B1 = swapmatrix;
+
+ swapvector = a;
+ a = a1;
+ a1 = swapvector;
+
+ size = newsize;
+ }
+
+ return auxillary_nest;
+}
+
/* Compute the loop bounds for the auxiliary space NEST.
Input system used is Ax <= b. TRANS is the unimodular transformation. */
@@ -496,18 +658,15 @@ static lambda_loopnest
lambda_compute_auxillary_space (lambda_loopnest nest,
lambda_trans_matrix trans)
{
- lambda_matrix A, B, A1, B1, temp0;
- lambda_vector a, a1, temp1;
+ lambda_matrix A, B, A1, B1;
+ lambda_vector a, a1;
lambda_matrix invertedtrans;
- int determinant, depth, invariants, size, newsize;
- int i, j, k;
- lambda_loopnest auxillary_nest;
+ int determinant, depth, invariants, size;
+ int i, j;
lambda_loop loop;
lambda_linear_expression expression;
lambda_lattice lattice;
- int multiple, f1, f2;
-
depth = LN_DEPTH (nest);
invariants = LN_INVARIANTS (nest);
@@ -623,136 +782,8 @@ lambda_compute_auxillary_space (lambda_loopnest nest,
/* A = A1 inv(U). */
lambda_matrix_mult (A1, invertedtrans, A, size, depth, depth);
- /* Perform Fourier-Motzkin elimination to calculate the bounds of the
- auxillary nest.
- Fourier-Motzkin is a way of reducing systems of linear inequality so that
- it is easy to calculate the answer and bounds.
- A sketch of how it works:
- Given a system of linear inequalities, ai * xj >= bk, you can always
- rewrite the constraints so they are all of the form
- a <= x, or x <= b, or x >= constant for some x in x1 ... xj (and some b
- in b1 ... bk, and some a in a1...ai)
- You can then eliminate this x from the non-constant inequalities by
- rewriting these as a <= b, x >= constant, and delete the x variable.
- You can then repeat this for any remaining x variables, and then we have
- an easy to use variable <= constant (or no variables at all) form that we
- can construct our bounds from.
-
- In our case, each time we eliminate, we construct part of the bound from
- the ith variable, then delete the ith variable.
-
- Remember the constant are in our vector a, our coefficient matrix is A,
- and our invariant coefficient matrix is B */
-
- /* Swap B and B1, and a1 and a. */
- temp0 = B1;
- B1 = B;
- B = temp0;
-
- temp1 = a1;
- a1 = a;
- a = temp1;
-
- auxillary_nest = lambda_loopnest_new (depth, invariants);
-
- for (i = depth - 1; i >= 0; i--)
- {
- loop = lambda_loop_new ();
- LN_LOOPS (auxillary_nest)[i] = loop;
- LL_STEP (loop) = 1;
-
- for (j = 0; j < size; j++)
- {
- if (A[j][i] < 0)
- {
- /* Lower bound. */
- expression = lambda_linear_expression_new (depth, invariants);
-
- for (k = 0; k < i; k++)
- LLE_COEFFICIENTS (expression)[k] = A[j][k];
- for (k = 0; k < invariants; k++)
- LLE_INVARIANT_COEFFICIENTS (expression)[k] = -1 * B[j][k];
- LLE_DENOMINATOR (expression) = -1 * A[j][i];
- LLE_CONSTANT (expression) = -1 * a[j];
- /* Ignore if identical to the existing lower bound. */
- if (!lle_equal (LL_LOWER_BOUND (loop),
- expression, depth, invariants))
- {
- LLE_NEXT (expression) = LL_LOWER_BOUND (loop);
- LL_LOWER_BOUND (loop) = expression;
- }
-
- }
- else if (A[j][i] > 0)
- {
- /* Upper bound. */
- expression = lambda_linear_expression_new (depth, invariants);
- for (k = 0; k < i; k++)
- LLE_COEFFICIENTS (expression)[k] = -1 * A[j][k];
- LLE_CONSTANT (expression) = a[j];
-
- for (k = 0; k < invariants; k++)
- LLE_INVARIANT_COEFFICIENTS (expression)[k] = B[j][k];
-
- LLE_DENOMINATOR (expression) = A[j][i];
- /* Ignore if identical to the existing upper bound. */
- if (!lle_equal (LL_UPPER_BOUND (loop),
- expression, depth, invariants))
- {
- LLE_NEXT (expression) = LL_UPPER_BOUND (loop);
- LL_UPPER_BOUND (loop) = expression;
- }
-
- }
- }
- /* creates a new system by deleting the i'th variable. */
- newsize = 0;
- for (j = 0; j < size; j++)
- {
- if (A[j][i] == 0)
- {
- lambda_vector_copy (A[j], A1[newsize], depth);
- lambda_vector_copy (B[j], B1[newsize], invariants);
- a1[newsize] = a[j];
- newsize++;
- }
- else if (A[j][i] > 0)
- {
- for (k = 0; k < size; k++)
- {
- if (A[k][i] < 0)
- {
- multiple = lcm (A[j][i], A[k][i]);
- f1 = multiple / A[j][i];
- f2 = -1 * multiple / A[k][i];
-
- lambda_vector_add_mc (A[j], f1, A[k], f2,
- A1[newsize], depth);
- lambda_vector_add_mc (B[j], f1, B[k], f2,
- B1[newsize], invariants);
- a1[newsize] = f1 * a[j] + f2 * a[k];
- newsize++;
- }
- }
- }
- }
-
- temp0 = A;
- A = A1;
- A1 = temp0;
-
- temp0 = B;
- B = B1;
- B1 = temp0;
-
- temp1 = a;
- a = a1;
- a1 = temp1;
-
- size = newsize;
- }
-
- return auxillary_nest;
+ return compute_nest_using_fourier_motzkin (size, depth, invariants,
+ A, B1, a1);
}
/* Compute the loop bounds for the target space, using the bounds of
@@ -1165,27 +1196,18 @@ gcc_tree_to_linear_expression (int depth, tree expr,
/* Return true if OP is invariant in LOOP and all outer loops. */
static bool
-invariant_in_loop (struct loop *loop, tree op)
+invariant_in_loop_and_outer_loops (struct loop *loop, tree op)
{
if (is_gimple_min_invariant (op))
return true;
if (loop->depth == 0)
return true;
- if (TREE_CODE (op) == SSA_NAME)
- {
- tree def;
- def = SSA_NAME_DEF_STMT (op);
- if (TREE_CODE (SSA_NAME_VAR (op)) == PARM_DECL
- && IS_EMPTY_STMT (def))
- return true;
- if (IS_EMPTY_STMT (def))
- return false;
- if (loop->outer
- && !invariant_in_loop (loop->outer, op))
- return false;
- return !flow_bb_inside_loop_p (loop, bb_for_stmt (def));
- }
- return false;
+ if (!expr_invariant_in_loop_p (loop, op))
+ return false;
+ if (loop->outer
+ && !invariant_in_loop_and_outer_loops (loop->outer, op))
+ return false;
+ return true;
}
/* Generate a lambda loop from a gcc loop LOOP. Return the new lambda loop,
@@ -1352,10 +1374,10 @@ gcc_loop_to_lambda_loop (struct loop *loop, int depth,
}
/* One part of the test may be a loop invariant tree. */
if (TREE_CODE (TREE_OPERAND (test, 1)) == SSA_NAME
- && invariant_in_loop (loop, TREE_OPERAND (test, 1)))
+ && invariant_in_loop_and_outer_loops (loop, TREE_OPERAND (test, 1)))
VEC_safe_push (tree, *invariants, TREE_OPERAND (test, 1));
else if (TREE_CODE (TREE_OPERAND (test, 0)) == SSA_NAME
- && invariant_in_loop (loop, TREE_OPERAND (test, 0)))
+ && invariant_in_loop_and_outer_loops (loop, TREE_OPERAND (test, 0)))
VEC_safe_push (tree, *invariants, TREE_OPERAND (test, 0));
/* The non-induction variable part of the test is the upper bound variable.
@@ -1433,9 +1455,10 @@ find_induction_var_from_exit_cond (struct loop *loop)
case LE_EXPR:
case NE_EXPR:
ivarop = TREE_OPERAND (test, 0);
- break;
+ break;
case GT_EXPR:
case GE_EXPR:
+ case EQ_EXPR:
ivarop = TREE_OPERAND (test, 1);
break;
default:
@@ -1898,15 +1921,12 @@ lambda_loopnest_to_gcc_loopnest (struct loop *old_loopnest,
dataflow_t imm = get_immediate_uses (SSA_NAME_DEF_STMT (oldiv));
for (j = 0; j < num_immediate_uses (imm); j++)
{
- size_t k;
tree stmt = immediate_use (imm, j);
- use_optype uses;
- get_stmt_operands (stmt);
- uses = STMT_USE_OPS (stmt);
- for (k = 0; k < NUM_USES (uses); k++)
+ use_operand_p use_p;
+ ssa_op_iter iter;
+ FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE)
{
- use_operand_p use = USE_OP_PTR (uses, k);
- if (USE_FROM_PTR (use) == oldiv)
+ if (USE_FROM_PTR (use_p) == oldiv)
{
tree newiv, stmts;
lambda_body_vector lbv;
@@ -1921,7 +1941,7 @@ lambda_loopnest_to_gcc_loopnest (struct loop *old_loopnest,
/* Insert the statements to build that
expression. */
bsi_insert_before (&bsi, stmts, BSI_SAME_STMT);
- SET_USE (use, newiv);
+ propagate_value (use_p, newiv);
modify_stmt (stmt);
}
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index 3c9e9704845..eaa55f41754 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -1022,7 +1022,7 @@ __moddi3 (DWtype u, DWtype v)
if (vv.s.high < 0)
vv.ll = -vv.ll;
- (void) __udivmoddi4 (uu.ll, vv.ll, &w);
+ (void) __udivmoddi4 (uu.ll, vv.ll, (UDWtype*)&w);
if (c)
w = -w;
diff --git a/gcc/loop-doloop.c b/gcc/loop-doloop.c
index 1b5ca4dc6d2..965e2e3edd8 100644
--- a/gcc/loop-doloop.c
+++ b/gcc/loop-doloop.c
@@ -257,20 +257,21 @@ add_test (rtx cond, basic_block bb, basic_block dest)
describes the loop, DESC describes the number of iterations of the
loop, and DOLOOP_INSN is the low-overhead looping insn to emit at the
end of the loop. CONDITION is the condition separated from the
- DOLOOP_SEQ. */
+ DOLOOP_SEQ. COUNT is the number of iterations of the LOOP. */
static void
doloop_modify (struct loop *loop, struct niter_desc *desc,
- rtx doloop_seq, rtx condition)
+ rtx doloop_seq, rtx condition, rtx count)
{
rtx counter_reg;
- rtx count, tmp, noloop = NULL_RTX;
+ rtx tmp, noloop = NULL_RTX;
rtx sequence;
rtx jump_insn;
rtx jump_label;
int nonneg = 0, irr;
bool increment_count;
basic_block loop_end = desc->out_edge->src;
+ enum machine_mode mode;
jump_insn = BB_END (loop_end);
@@ -291,8 +292,8 @@ doloop_modify (struct loop *loop, struct niter_desc *desc,
counter_reg = XEXP (condition, 0);
if (GET_CODE (counter_reg) == PLUS)
counter_reg = XEXP (counter_reg, 0);
+ mode = GET_MODE (counter_reg);
- count = copy_rtx (desc->niter_expr);
increment_count = false;
switch (GET_CODE (condition))
{
@@ -323,7 +324,7 @@ doloop_modify (struct loop *loop, struct niter_desc *desc,
Note that the maximum value loaded is iterations_max - 1. */
if (desc->niter_max
<= ((unsigned HOST_WIDEST_INT) 1
- << (GET_MODE_BITSIZE (GET_MODE (counter_reg)) - 1)))
+ << (GET_MODE_BITSIZE (mode) - 1)))
nonneg = 1;
break;
@@ -333,7 +334,7 @@ doloop_modify (struct loop *loop, struct niter_desc *desc,
}
if (increment_count)
- count = simplify_gen_binary (PLUS, desc->mode, count, const1_rtx);
+ count = simplify_gen_binary (PLUS, mode, count, const1_rtx);
/* Insert initialization of the count register into the loop header. */
start_sequence ();
@@ -438,12 +439,14 @@ doloop_optimize (struct loop *loop)
{
enum machine_mode mode;
rtx doloop_seq, doloop_pat, doloop_reg;
- rtx iterations;
+ rtx iterations, count;
rtx iterations_max;
rtx start_label;
rtx condition;
unsigned level, est_niter;
struct niter_desc *desc;
+ unsigned word_mode_size;
+ unsigned HOST_WIDE_INT word_mode_max;
if (dump_file)
fprintf (dump_file, "Doloop: Processing loop %d.\n", loop->num);
@@ -481,6 +484,7 @@ doloop_optimize (struct loop *loop)
return false;
}
+ count = copy_rtx (desc->niter_expr);
iterations = desc->const_iter ? desc->niter_expr : const0_rtx;
iterations_max = GEN_INT (desc->niter_max);
level = get_loop_level (loop) + 1;
@@ -492,8 +496,33 @@ doloop_optimize (struct loop *loop)
doloop_reg = gen_reg_rtx (mode);
doloop_seq = gen_doloop_end (doloop_reg, iterations, iterations_max,
GEN_INT (level), start_label);
- if (! doloop_seq && mode != word_mode)
+
+ word_mode_size = GET_MODE_BITSIZE (word_mode);
+ word_mode_max
+ = ((unsigned HOST_WIDE_INT) 1 << (word_mode_size - 1) << 1) - 1;
+ if (! doloop_seq
+ && mode != word_mode
+ /* Before trying mode different from the one in that # of iterations is
+ computed, we must be sure that the number of iterations fits into
+ the new mode. */
+ && (word_mode_size >= GET_MODE_BITSIZE (mode)
+ || desc->niter_max <= word_mode_max))
{
+ if (word_mode_size > GET_MODE_BITSIZE (mode))
+ {
+ count = simplify_gen_unary (ZERO_EXTEND, word_mode,
+ count, mode);
+ iterations = simplify_gen_unary (ZERO_EXTEND, word_mode,
+ iterations, mode);
+ iterations_max = simplify_gen_unary (ZERO_EXTEND, word_mode,
+ iterations_max, mode);
+ }
+ else
+ {
+ count = lowpart_subreg (word_mode, count, mode);
+ iterations = lowpart_subreg (word_mode, iterations, mode);
+ iterations_max = lowpart_subreg (word_mode, iterations_max, mode);
+ }
PUT_MODE (doloop_reg, word_mode);
doloop_seq = gen_doloop_end (doloop_reg, iterations, iterations_max,
GEN_INT (level), start_label);
@@ -528,7 +557,7 @@ doloop_optimize (struct loop *loop)
return false;
}
- doloop_modify (loop, desc, doloop_seq, condition);
+ doloop_modify (loop, desc, doloop_seq, condition, count);
return true;
}
diff --git a/gcc/loop-iv.c b/gcc/loop-iv.c
index e4d757a0798..7105aaddcbc 100644
--- a/gcc/loop-iv.c
+++ b/gcc/loop-iv.c
@@ -156,7 +156,7 @@ assign_luids (basic_block bb)
/* Generates a subreg to get the least significant part of EXPR (in mode
INNER_MODE) to OUTER_MODE. */
-static rtx
+rtx
lowpart_subreg (enum machine_mode outer_mode, rtx expr,
enum machine_mode inner_mode)
{
diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog
index 17b92d0154f..6e25d234fe2 100644
--- a/gcc/po/ChangeLog
+++ b/gcc/po/ChangeLog
@@ -1,3 +1,11 @@
+2004-10-08 Joseph S. Myers <jsm@polyomino.org.uk>
+
+ * gcc.pot: Regenerate.
+
+2004-10-07 Joseph S. Myers <jsm@polyomino.org.uk>
+
+ * de.po: Update.
+
2004-10-05 Zack Weinberg <zack@codesourcery.com>
* gcc.pot: Regenerate.
diff --git a/gcc/po/de.po b/gcc/po/de.po
index 8f7eb5dd01d..9b513d147e2 100644
--- a/gcc/po/de.po
+++ b/gcc/po/de.po
@@ -6,10 +6,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: gcc 3.4-b20040206\n"
+"Project-Id-Version: gcc 3.4.2\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2004-07-01 11:41-0700\n"
-"PO-Revision-Date: 2004-02-15 12:14+0100\n"
+"PO-Revision-Date: 2004-10-04 10:20+0100\n"
"Last-Translator: Roland Stigge <stigge@antcom.de>\n"
"Language-Team: German <de@li.org>\n"
"MIME-Version: 1.0\n"
@@ -121,7 +121,7 @@ msgstr "(Sie sollten also »%s« statt »%s« an »va_arg« übergeben)"
#. Call abort to encourage the user to fix the program.
#: builtins.c:4134 c-typeck.c:1733
msgid "if this code is reached, the program will abort"
-msgstr ""
+msgstr "Wenn dieser Code erreicht wird, wird das Programm abgebrochen."
#: builtins.c:4241
msgid "invalid arg to `__builtin_frame_address'"
@@ -284,9 +284,8 @@ msgid "invalid application of `%s' to a void type"
msgstr "ungültige Anwendung von »%s« auf einen void-Typen"
#: c-common.c:2951
-#, fuzzy
msgid "invalid application of `%s' to incomplete type `%T' "
-msgstr "ungültige Anwendung von »%s« auf einen unvollständigen Typen"
+msgstr "ungültige Anwendung von »%s« auf unvollständigen Typen »%T«"
#: c-common.c:2992
msgid "`__alignof' applied to a bit-field"
@@ -683,9 +682,8 @@ msgid "%J'%D' declared inline after its definition"
msgstr "%J»%D« nach der Definition als inline deklariert"
#: c-decl.c:1221
-#, fuzzy
msgid "%Jredefinition of parameter '%D'"
-msgstr "%JRedefinition des typedef »%D«"
+msgstr "%JRedefinition des Parameters »%D«"
#: c-decl.c:1230
msgid "%Jvolatile declaration of '%D' follows non-volatile declaration"
@@ -708,19 +706,16 @@ msgid "%Jredundant redeclaration of '%D'"
msgstr "%Jredundante Redeklaration von »%D«"
#: c-decl.c:1581
-#, fuzzy
msgid "%Jdeclaration of '%D' shadows a parameter"
-msgstr "Deklaration von »%s« überdeckt einen Parameter"
+msgstr "%JDeklaration von »%D« überdeckt einen Parameter"
#: c-decl.c:1583
-#, fuzzy
msgid "%Jdeclaration of '%D' shadows a global declaration"
-msgstr "Deklaration von »%s« überdeckt eine globale Deklaration"
+msgstr "%JDeklaration von »%D« überdeckt eine globale Deklaration"
#: c-decl.c:1585
-#, fuzzy
msgid "%Jdeclaration of '%D' shadows a previous local"
-msgstr "Deklaration von »%s« überdeckt einen vorhergehenden lokalen Bezeichner"
+msgstr "%JDeklaration von »%D« überdeckt einen vorhergehenden lokalen Bezeichner"
#: c-decl.c:1587 cp/name-lookup.c:969 cp/name-lookup.c:992
#: cp/name-lookup.c:1000
@@ -2108,9 +2103,8 @@ msgid "traditional C rejects string constant concatenation"
msgstr "traditionelles C weist Stringkonstantenverkettung zurück"
#: c-objc-common.c:82
-#, fuzzy
msgid "%Jfunction '%F' can never be inlined because it is suppressed using -fno-inline"
-msgstr "%JFunktion »%F« kann nie inline sein, da dies mit -fno-inline unterdrückt wird"
+msgstr "%JFunktion »%F« kann nie inline sein, da sie mit -fno-inline unterdrückt wird"
#: c-objc-common.c:92
msgid "%Jfunction '%F' can never be inlined because it might not be bound within this unit of translation"
@@ -2286,9 +2280,8 @@ msgid "ISO C forbids omitting the middle term of a ?: expression"
msgstr "ISO-C verbietet das Weglassen des mittleren Terms eines ?:-Ausdruckes"
#: c-parse.y:611 objc/objc-parse.y:636
-#, fuzzy
msgid "ISO C90 forbids compound literals"
-msgstr "ISO-C89 verbietet zusammengesetzte Literale"
+msgstr "ISO-C90 verbietet zusammengesetzte Literale"
#: c-parse.y:625 objc/objc-parse.y:650
msgid "ISO C forbids braced-groups within expressions"
@@ -2328,9 +2321,8 @@ msgid "ISO C forbids empty initializer braces"
msgstr "ISO-C verbietet leere Initialisierungsklammern"
#: c-parse.y:1441 objc/objc-parse.y:1491
-#, fuzzy
msgid "ISO C90 forbids specifying subobject to initialize"
-msgstr "ISO-C89 verbietet die Angabe von zu initialisierenden Unterobjekten"
+msgstr "ISO-C90 verbietet die Angabe von zu initialisierenden Unterobjekten"
#: c-parse.y:1444 objc/objc-parse.y:1494
msgid "obsolete use of designated initializer without `='"
@@ -2423,7 +2415,6 @@ msgid "`...' in old-style identifier list"
msgstr "»...« in einer Bezeichnerliste alten Stils"
#: /usr/share/bison/bison.simple:795
-#, fuzzy
msgid "parse error; also virtual memory exhausted"
msgstr "Syntaxfehler; auch virtueller Speicher verbraucht"
@@ -2503,9 +2494,9 @@ msgid "%s: created by version `%.*s', but this is version `%s'"
msgstr "%s: durch Version »%.*s« erzeugt, aber dies ist Version »%s«"
#: c-pch.c:313
-#, fuzzy, c-format
+#, c-format
msgid "%s: created using different flags"
-msgstr "%D mit anderem Zugriff redeklariert"
+msgstr "%s: mit anderen Marken erzeugt"
#: c-pch.c:326
#, c-format
@@ -7484,107 +7475,106 @@ msgid "trap mode not supported for VAX floats"
msgstr ""
#: config/alpha/alpha.c:394
-#, fuzzy
msgid "128-bit long double not supported for VAX floats"
-msgstr "ms-Bitfelder nicht unterstützt für objc"
+msgstr "128-bit long double nicht unterstützt für VAX floats"
#: config/alpha/alpha.c:422
#, c-format
msgid "L%d cache latency unknown for %s"
-msgstr ""
+msgstr "L%d Cache-Wartezeit unbekannt für %s"
#: config/alpha/alpha.c:437
#, c-format
msgid "bad value `%s' for -mmemory-latency"
-msgstr ""
+msgstr "Falscher Wert »%s« für -mmemory-latency"
#: config/alpha/alpha.c:5425
#, c-format
msgid "invalid %%H value"
-msgstr ""
+msgstr "Ungültiger %%H-Wert"
#: config/alpha/alpha.c:5446
#, c-format
msgid "invalid %%J value"
-msgstr ""
+msgstr "Ungültiger %%J-Wert"
#: config/alpha/alpha.c:5462 config/ia64/ia64.c:4263
#, c-format
msgid "invalid %%r value"
-msgstr ""
+msgstr "Ungültiger %%r-Wert"
#: config/alpha/alpha.c:5472 config/rs6000/rs6000.c:9241
#: config/xtensa/xtensa.c:2014
#, c-format
msgid "invalid %%R value"
-msgstr ""
+msgstr "Ungültiger %%R-Wert"
#: config/alpha/alpha.c:5478 config/rs6000/rs6000.c:9160
#: config/xtensa/xtensa.c:1981
#, c-format
msgid "invalid %%N value"
-msgstr ""
+msgstr "Ungültiger %%N-Wert"
#: config/alpha/alpha.c:5486 config/rs6000/rs6000.c:9188
#, c-format
msgid "invalid %%P value"
-msgstr ""
+msgstr "Ungültiger %%P-Wert"
#: config/alpha/alpha.c:5494
#, c-format
msgid "invalid %%h value"
-msgstr ""
+msgstr "Ungültiger %%h-Wert"
#: config/alpha/alpha.c:5502 config/xtensa/xtensa.c:2007
#, c-format
msgid "invalid %%L value"
-msgstr ""
+msgstr "Ungültiger %%L-Wert"
#: config/alpha/alpha.c:5541 config/rs6000/rs6000.c:9142
#, c-format
msgid "invalid %%m value"
-msgstr ""
+msgstr "Ungültiger %%m-Wert"
#: config/alpha/alpha.c:5549 config/rs6000/rs6000.c:9150
#, c-format
msgid "invalid %%M value"
-msgstr ""
+msgstr "Ungültiger %%M-Wert"
#: config/alpha/alpha.c:5593
#, c-format
msgid "invalid %%U value"
-msgstr ""
+msgstr "Ungültiger %%U-Wert"
#: config/alpha/alpha.c:5605 config/alpha/alpha.c:5619
#: config/rs6000/rs6000.c:9249
#, c-format
msgid "invalid %%s value"
-msgstr ""
+msgstr "Ungültiger %%s-Wert"
#: config/alpha/alpha.c:5642
#, c-format
msgid "invalid %%C value"
-msgstr ""
+msgstr "Ungültiger %%C-Wert"
#: config/alpha/alpha.c:5679 config/rs6000/rs6000.c:8979
#: config/rs6000/rs6000.c:8999
#, c-format
msgid "invalid %%E value"
-msgstr ""
+msgstr "Ungültiger %%E-Wert"
#: config/alpha/alpha.c:5704 config/alpha/alpha.c:5752
msgid "unknown relocation unspec"
-msgstr ""
+msgstr "Unbekanntes relocation unspec"
#: config/alpha/alpha.c:5713 config/rs6000/rs6000.c:9562
#, c-format
msgid "invalid %%xn code"
-msgstr ""
+msgstr "Ungültiger %%xn-Code"
#: config/alpha/alpha.c:6657 config/alpha/alpha.c:6660 config/s390/s390.c:6575
#: config/s390/s390.c:6578
msgid "bad builtin fcode"
-msgstr ""
+msgstr "Falscher eingebauter fcode"
#. Macro to define tables used to set the flags.
#. This is a list in braces of pairs in braces,
@@ -7595,96 +7585,96 @@ msgstr ""
#: config/i386/i386.h:331 config/ns32k/ns32k.h:140 config/s390/s390.h:124
#: config/sparc/sparc.h:543 config/sparc/sparc.h:548
msgid "Use hardware fp"
-msgstr ""
+msgstr "Hardware-FP verwenden"
#: config/alpha/alpha.h:294 config/i386/i386.h:328 config/i386/i386.h:330
#: config/sparc/sparc.h:545 config/sparc/sparc.h:550
msgid "Do not use hardware fp"
-msgstr ""
+msgstr "Hardware-FP nicht verwenden"
#: config/alpha/alpha.h:295
msgid "Use fp registers"
-msgstr ""
+msgstr "FP-Register verwenden"
#: config/alpha/alpha.h:297
msgid "Do not use fp registers"
-msgstr ""
+msgstr "FP-Register nicht verwenden"
#: config/alpha/alpha.h:298
msgid "Do not assume GAS"
-msgstr ""
+msgstr "Nicht GAS vermuten"
#: config/alpha/alpha.h:299
msgid "Assume GAS"
-msgstr ""
+msgstr "GAS vermuten"
#: config/alpha/alpha.h:301
msgid "Request IEEE-conformant math library routines (OSF/1)"
-msgstr ""
+msgstr "IEEE-konforme Mathematik-Bibliotheksroutinen (OSF/1) anfordern"
#: config/alpha/alpha.h:303
msgid "Emit IEEE-conformant code, without inexact exceptions"
-msgstr ""
+msgstr "IEEE-konformen Code erzeugen, ohne ungenaue Ausnahmen"
#: config/alpha/alpha.h:305
msgid "Emit IEEE-conformant code, with inexact exceptions"
-msgstr ""
+msgstr "IEEE-konformen Code erzeugen, mit ungenauen Ausnahmen"
#: config/alpha/alpha.h:307
msgid "Do not emit complex integer constants to read-only memory"
-msgstr ""
+msgstr "Keine komplexen Ganzzahlkonstanten im Nur-Lese-Speicher erzeugen"
#: config/alpha/alpha.h:308
msgid "Use VAX fp"
-msgstr ""
+msgstr "VAX-FP verwenden"
#: config/alpha/alpha.h:309
msgid "Do not use VAX fp"
-msgstr ""
+msgstr "VAX-FP nicht verwenden"
#: config/alpha/alpha.h:310
msgid "Emit code for the byte/word ISA extension"
-msgstr ""
+msgstr "Code für die Byte/Word-ISA-Erweiterung erzeugen"
#: config/alpha/alpha.h:313
msgid "Emit code for the motion video ISA extension"
-msgstr ""
+msgstr "Code für die Video-ISA-Erweiterung erzeugen"
#: config/alpha/alpha.h:316
msgid "Emit code for the fp move and sqrt ISA extension"
-msgstr ""
+msgstr "Code für die FP-Move und SQRT-ISA-Erweiterung erzeugen"
#: config/alpha/alpha.h:318
msgid "Emit code for the counting ISA extension"
-msgstr ""
+msgstr "Code für die zählende ISA-Erweiterung erzeugen"
#: config/alpha/alpha.h:321
msgid "Emit code using explicit relocation directives"
-msgstr ""
+msgstr "Code mit expliziten Auslagerungsanweisungen erzeugen"
#: config/alpha/alpha.h:324
msgid "Emit 16-bit relocations to the small data areas"
-msgstr ""
+msgstr "16-bit Auslagerungen in kleinen Datenbereichen erzeugen"
#: config/alpha/alpha.h:326
msgid "Emit 32-bit relocations to the small data areas"
-msgstr ""
+msgstr "32-bit Auslagerungen in kleinen Datenbereichen erzeugen"
#: config/alpha/alpha.h:328
msgid "Emit direct branches to local functions"
-msgstr ""
+msgstr "Direkte Zweige in lokalen Funktionen erzeugen"
#: config/alpha/alpha.h:331
msgid "Emit rdval instead of rduniq for thread pointer"
-msgstr ""
+msgstr "rdval statt rduniq für Zhread-Zeiger erzeugen"
#: config/alpha/alpha.h:333
msgid "Use 128-bit long double"
-msgstr ""
+msgstr "128-bit long double verwenden"
#: config/alpha/alpha.h:335
msgid "Use 64-bit long double"
-msgstr ""
+msgstr "64-bit long double verwenden"
#. For -mcpu=
#. For -mtune=
@@ -7695,154 +7685,154 @@ msgstr ""
#. For -mtls-size=
#: config/alpha/alpha.h:364
msgid "Use features of and schedule given CPU"
-msgstr ""
+msgstr "Für angegebene CPU planen und deren Eigenschaften verwenden"
#: config/alpha/alpha.h:366
msgid "Schedule given CPU"
-msgstr ""
+msgstr "Für angegebene CPU planen"
#: config/alpha/alpha.h:368
msgid "Control the generated fp rounding mode"
-msgstr ""
+msgstr "Den generierten FP-Rundungsmodus steuern"
#: config/alpha/alpha.h:370
msgid "Control the IEEE trap mode"
-msgstr ""
+msgstr "Den IEEE-Trap-Modus steuern"
#: config/alpha/alpha.h:372
msgid "Control the precision given to fp exceptions"
-msgstr ""
+msgstr "Die Präzision der FP-Ausnahmen steuern"
#: config/alpha/alpha.h:374
msgid "Tune expected memory latency"
-msgstr ""
+msgstr "Die erwartete Speicher-Wartezeit abstimmen"
#: config/alpha/alpha.h:376 config/ia64/ia64.h:267 config/rs6000/sysv4.h:90
msgid "Specify bit size of immediate TLS offsets"
-msgstr ""
+msgstr "Bit-Breite des unmittelbaren TLS-Versatzes angeben"
#: config/arc/arc.c:147
#, c-format
msgid "bad value (%s) for -mcpu switch"
-msgstr ""
+msgstr "Falscher Wert (%s) für -mcpu Schalter"
#: config/arc/arc.c:369
#, c-format
msgid "argument of `%s' attribute is not a string constant"
-msgstr ""
+msgstr "Argument des Attributes »%s« ist keine Zeichenkettenkonstante"
#: config/arc/arc.c:376
#, c-format
msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\""
-msgstr ""
+msgstr "Argument des Attributes »%s« ist nicht \"ilink1\" oder \"ilink2\""
#: config/arc/arc.c:1714 config/m32r/m32r.c:2352
#, c-format
msgid "invalid operand to %%R code"
-msgstr ""
+msgstr "Ungültiger Operand für %%R-Code"
#: config/arc/arc.c:1746 config/m32r/m32r.c:2375
#, c-format
msgid "invalid operand to %%H/%%L code"
-msgstr ""
+msgstr "Ungültiger Operand für %%H/%%L-Code"
#: config/arc/arc.c:1769 config/m32r/m32r.c:2446
#, c-format
msgid "invalid operand to %%U code"
-msgstr ""
+msgstr "Ungültiger Operand für %%U-Code"
#: config/arc/arc.c:1780
#, c-format
msgid "invalid operand to %%V code"
-msgstr ""
+msgstr "Ungültiger Operand für %%V-Code"
#. Unknown flag.
#: config/arc/arc.c:1787 config/m32r/m32r.c:2473 config/sparc/sparc.c:7010
msgid "invalid operand output code"
-msgstr ""
+msgstr "Ungültiger Operanden-Ausgabecode"
#: config/arm/arm.c:520
#, c-format
msgid "switch -mcpu=%s conflicts with -march= switch"
-msgstr ""
+msgstr "Schalter -mcpu=%s steht in Konflikt mit dem Schalter -march="
#: config/arm/arm.c:530 config/rs6000/rs6000.c:767 config/sparc/sparc.c:424
#, c-format
msgid "bad value (%s) for %s switch"
-msgstr ""
+msgstr "Falscher Wert (%s) für Schalter %s"
#: config/arm/arm.c:672
msgid "target CPU does not support APCS-32"
-msgstr ""
+msgstr "Ziel-CPU unterstützt nicht APCS-32"
#: config/arm/arm.c:677
msgid "target CPU does not support APCS-26"
-msgstr ""
+msgstr "Ziel-CPU unterstützt nicht APCS-26"
#: config/arm/arm.c:683
msgid "target CPU does not support interworking"
-msgstr ""
+msgstr "Ziel-CPU unterstützt keine Zusammenarbeit"
#: config/arm/arm.c:689
msgid "target CPU does not support THUMB instructions"
-msgstr ""
+msgstr "Ziel-CPU unterstützt keine THUMB-Befehle"
#: config/arm/arm.c:694
msgid "future releases of GCC will not support -mapcs-26"
-msgstr ""
+msgstr "Zukünftige Ausgaben des GCC werden nicht -mapcs-26 unterstützen"
#: config/arm/arm.c:706
msgid "enabling backtrace support is only meaningful when compiling for the Thumb"
-msgstr ""
+msgstr "Das Aktivieren der Ablaufverfolgung ist nur bei der Übersetzung für THUMB sinnvoll"
#: config/arm/arm.c:709
msgid "enabling callee interworking support is only meaningful when compiling for the Thumb"
-msgstr ""
+msgstr "Das Aktivieren der Unterstützung der Aufgerufenen-Zusammenarbeit ist nur bei der Übersetzung für THUMB sinnvoll"
#: config/arm/arm.c:712
msgid "enabling caller interworking support is only meaningful when compiling for the Thumb"
-msgstr ""
+msgstr "Das Aktivieren der Unterstützung der Aufrufer-Zusammenarbeit ist nur bei der Übersetzung für THUMB sinnvoll"
#: config/arm/arm.c:718
msgid "interworking forces APCS-32 to be used"
-msgstr ""
+msgstr "Zusammenarbeit erzingt die Verwendung von APCS-32"
#: config/arm/arm.c:724
msgid "-mapcs-stack-check incompatible with -mno-apcs-frame"
-msgstr ""
+msgstr "-mapcs-stack-check inkompatibel mit -mno-apcs-frame"
#: config/arm/arm.c:732
msgid "-fpic and -mapcs-reent are incompatible"
-msgstr ""
+msgstr "-fpic und -mapcs-reent sind inkompatibel"
#: config/arm/arm.c:735
msgid "APCS reentrant code not supported. Ignored"
-msgstr ""
+msgstr "APCS wieder einsprungsfähiger Code nicht unterstützt. Ignoriert."
#: config/arm/arm.c:743
msgid "-g with -mno-apcs-frame may not give sensible debugging"
-msgstr ""
+msgstr "-g mit -mno-apcs-frame könnte vernünftige Fehlersuche verhindern"
#: config/arm/arm.c:751
msgid "passing floating point arguments in fp regs not yet supported"
-msgstr ""
+msgstr "Die Übergabe von Fließkommaargumenten in FP-Registern wird noch nicht unterstützt"
#: config/arm/arm.c:795
#, c-format
msgid "invalid floating point emulation option: -mfpe-%s"
-msgstr ""
+msgstr "Ungültige Option für Fließkommaemulation: -mfpe-%s"
#: config/arm/arm.c:806
msgid "-mfpe switch not supported by ep9312 target cpu - ignored."
-msgstr ""
+msgstr "Schalter -mfpe wird von der Ziel-CPU ep9312 nicht unterstützt. Ignoriert."
#: config/arm/arm.c:826
msgid "structure size boundary can only be set to 8 or 32"
-msgstr ""
+msgstr "Grenze für Strukturgrößen kann nur auf 8 oder 32 gesetzt werden"
#: config/arm/arm.c:834
msgid "-mpic-register= is useless without -fpic"
-msgstr ""
+msgstr "-mpic-register= ist ohne -fpic nutzlos"
#: config/arm/arm.c:841
#, c-format
@@ -13260,9 +13250,8 @@ msgid "ignoring packed attribute on unpacked non-POD field `%#D'"
msgstr ""
#: cp/class.c:2939
-#, fuzzy
msgid "`%D' may not be static because it is a member of a union"
-msgstr "»%#D« ist kein Nicht-static-Datenelement von »%T«"
+msgstr "»%D« kann nicht static sein, da es ein union-Element ist"
#: cp/class.c:2944
msgid "`%D' may not have reference type `%T' because it is a member of a union"
@@ -14673,9 +14662,8 @@ msgid "use of enum `%#D' without previous declaration"
msgstr ""
#: cp/decl.c:9471
-#, fuzzy
msgid "redeclaration of `%T' as a non-template"
-msgstr "Deklaration von »%s« überdeckt einen Parameter"
+msgstr "Redeklaration von »%T« als Nicht-Template"
#: cp/decl.c:9517
msgid "derived union `%T' invalid"
@@ -15197,9 +15185,8 @@ msgstr ""
#. fixed correctly in mainline), but on the release branch
#. we prefer this less-intrusive approacch.
#: cp/init.c:2077
-#, fuzzy
msgid "no suitable or ambiguous `%D' found in class `%T'"
-msgstr "kein geeigneter »operator %s« für »%T«"
+msgstr "kein geeignetes oder mehrdeutiges »%D« in Klasse »%T« gefunden"
#: cp/init.c:2083
msgid "request for member `%D' is ambiguous"
@@ -15361,25 +15348,21 @@ msgid "global declaration `%#D'"
msgstr ""
#: cp/name-lookup.c:961 cp/name-lookup.c:968
-#, fuzzy
msgid "declaration of '%#D' shadows a parameter"
-msgstr "Deklaration von »%s« überdeckt einen Parameter"
+msgstr "Deklaration von »%#D« überdeckt einen Parameter"
#. Location of previous decl is not useful in this case.
#: cp/name-lookup.c:985
-#, fuzzy
msgid "declaration of '%D' shadows a member of 'this'"
-msgstr "Deklaration von »%s« überdeckt einen Parameter"
+msgstr "Deklaration von »%D« überdeckt ein Element von 'this'"
#: cp/name-lookup.c:991
-#, fuzzy
msgid "declaration of '%D' shadows a previous local"
-msgstr "Deklaration von »%s« überdeckt einen vorhergehenden lokalen Bezeichner"
+msgstr "Deklaration von »%D« überdeckt einen vorhergehenden lokalen Bezeichner"
#: cp/name-lookup.c:998
-#, fuzzy
msgid "declaration of '%D' shadows a global declaration"
-msgstr "Deklaration von »%s« überdeckt eine globale Deklaration"
+msgstr "Deklaration von »%D« überdeckt eine globale Deklaration"
#: cp/name-lookup.c:1167
msgid "name lookup of `%D' changed"
@@ -15650,9 +15633,8 @@ msgid "ISO C++ forbids compound-literals"
msgstr "ISO-C++ verbietet zusammengesetzte Literale"
#: cp/parser.c:4461
-#, fuzzy
msgid "array bound forbidden after parenthesized type-id"
-msgstr "Attribute hinter geklammerter Initialisierung werden ignoriert"
+msgstr "Feldgrenze hinter geklammerter type-id ist verboten"
#: cp/parser.c:4462
msgid "try removing the parentheses around the type-id"
@@ -15763,9 +15745,8 @@ msgid "attributes after parenthesized initializer ignored"
msgstr "Attribute hinter geklammerter Initialisierung werden ignoriert"
#: cp/parser.c:10540
-#, fuzzy
msgid "`%T::%D' is not a type"
-msgstr "»%s« ist kein Template"
+msgstr "»%T::%D« ist kein Typ"
#: cp/parser.c:11288
msgid "file ends in default argument"
@@ -15853,9 +15834,8 @@ msgid "spurious `>>', use `>' to terminate a template argument list"
msgstr ""
#: cp/parser.c:14574
-#, fuzzy
msgid "missing `>' to terminate the template argument list"
-msgstr "fehlendes ')' in Makroparameterliste"
+msgstr "fehlendes '>', um Templateargumentliste zu beenden"
#: cp/parser.c:15062
msgid "`%s' tag used in naming `%#T'"
diff --git a/gcc/po/gcc.pot b/gcc/po/gcc.pot
index 80cf50a09dc..a3d593687c8 100644
--- a/gcc/po/gcc.pot
+++ b/gcc/po/gcc.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
-"POT-Creation-Date: 2004-10-05 21:45-0700\n"
+"POT-Creation-Date: 2004-10-08 10:30+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -56,96 +56,96 @@ msgstr ""
msgid "invalid third arg to __builtin_prefetch; using zero"
msgstr ""
-#: builtins.c:3790
+#: builtins.c:3775
msgid "argument of %<__builtin_args_info%> must be constant"
msgstr ""
-#: builtins.c:3796
+#: builtins.c:3781
msgid "argument of %<__builtin_args_info%> out of range"
msgstr ""
-#: builtins.c:3802
+#: builtins.c:3787
msgid "missing argument in %<__builtin_args_info%>"
msgstr ""
-#: builtins.c:3818 builtins.c:8715
+#: builtins.c:3803 builtins.c:8700
msgid "%<va_start%> used in function with fixed args"
msgstr ""
-#: builtins.c:3837 builtins.c:8731
+#: builtins.c:3822 builtins.c:8716
msgid "second parameter of %<va_start%> not last named argument"
msgstr ""
#. Evidently an out of date version of <stdarg.h>; can't validate
#. va_start's second argument, but can still work as intended.
-#: builtins.c:3842 builtins.c:8737
+#: builtins.c:3827 builtins.c:8722
msgid "%<__builtin_next_arg%> called without an argument"
msgstr ""
-#: builtins.c:3927
+#: builtins.c:3912
msgid "too many arguments to function %<va_start%>"
msgstr ""
-#: builtins.c:4075
+#: builtins.c:4060
msgid "first argument to %<va_arg%> not of type %<va_list%>"
msgstr ""
#. Unfortunately, this is merely undefined, rather than a constraint
#. violation, so we cannot make this an error. If this call is never
#. executed, the program is still strictly conforming.
-#: builtins.c:4089
+#: builtins.c:4074
msgid "%qT is promoted to %qT when passed through %<...%>"
msgstr ""
-#: builtins.c:4094
+#: builtins.c:4079
msgid "(so you should pass %qT not %qT to %<va_arg%>)"
msgstr ""
#. We can, however, treat "undefined" any way we please.
#. Call abort to encourage the user to fix the program.
-#: builtins.c:4100 c-typeck.c:1956
+#: builtins.c:4085 c-typeck.c:1964
msgid "if this code is reached, the program will abort"
msgstr ""
-#: builtins.c:4218
+#: builtins.c:4203
msgid "invalid arg to %<__builtin_frame_address%>"
msgstr ""
-#: builtins.c:4220
+#: builtins.c:4205
msgid "invalid arg to %<__builtin_return_address%>"
msgstr ""
-#: builtins.c:4234
+#: builtins.c:4219
msgid "unsupported arg to %<__builtin_frame_address%>"
msgstr ""
-#: builtins.c:4236
+#: builtins.c:4221
msgid "unsupported arg to %<__builtin_return_address%>"
msgstr ""
-#: builtins.c:4339
+#: builtins.c:4324
msgid "second arg to %<__builtin_expect%> must be a constant"
msgstr ""
-#: builtins.c:5546
+#: builtins.c:5531
msgid "__builtin_longjmp second argument must be 1"
msgstr ""
-#: builtins.c:5891
+#: builtins.c:5876
msgid "target format does not support infinity"
msgstr ""
-#: builtins.c:7566 builtins.c:7662 c-typeck.c:2185
+#: builtins.c:7551 builtins.c:7647
#, c-format
msgid "too few arguments to function %qs"
msgstr ""
-#: builtins.c:7572 builtins.c:7668 c-typeck.c:2044
+#: builtins.c:7557 builtins.c:7653
#, c-format
msgid "too many arguments to function %qs"
msgstr ""
-#: builtins.c:7578 builtins.c:7692
+#: builtins.c:7563 builtins.c:7677
#, c-format
msgid "non-floating-point argument to function %qs"
msgstr ""
@@ -568,11 +568,11 @@ msgstr ""
#. Use `%s' to print the string in case there are any escape
#. characters in the message.
-#: c-common.c:5500 c-typeck.c:3975 c-typeck.c:3990 c-typeck.c:4005
+#: c-common.c:5500 c-typeck.c:4061 c-typeck.c:4076 c-typeck.c:4091
#: final.c:2840 final.c:2842 gcc.c:4647 rtl-error.c:113 toplev.c:599
#: config/cris/cris.c:568 cp/parser.c:1924 cp/typeck.c:4160 java/expr.c:368
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:5022 java/verify.c:1552
-#: java/verify.c:1553 java/verify.c:1572
+#: ../../gcc-cvs/gcc/java/parse.y:5022 java/verify.c:1552 java/verify.c:1553
+#: java/verify.c:1572
#, c-format
msgid "%s"
msgstr ""
@@ -593,7 +593,7 @@ msgstr ""
msgid "attempt to take address of bit-field structure member %qs"
msgstr ""
-#: c-convert.c:83 c-typeck.c:1352 c-typeck.c:3438 cp/typeck.c:1376
+#: c-convert.c:83 c-typeck.c:1360 c-typeck.c:3512 cp/typeck.c:1376
#: cp/typeck.c:5709 fortran/convert.c:89 treelang/tree-convert.c:79
msgid "void value not ignored as it ought to be"
msgstr ""
@@ -915,7 +915,7 @@ msgstr ""
msgid "%J%qD is usually a function"
msgstr ""
-#: c-decl.c:2948 cp/decl.c:3693 cp/decl2.c:857
+#: c-decl.c:2948 cp/decl.c:3693 cp/decl2.c:853
msgid "typedef %qD is initialized (use __typeof__ instead)"
msgstr ""
@@ -932,7 +932,7 @@ msgstr ""
#. of VLAs themselves count as VLAs, it does not make
#. sense to permit them to be initialized given that
#. ordinary VLAs may not be initialized.
-#: c-decl.c:2978 c-decl.c:2998 c-typeck.c:4255
+#: c-decl.c:2978 c-decl.c:2998 c-typeck.c:4341
msgid "variable-sized object may not be initialized"
msgstr ""
@@ -944,7 +944,7 @@ msgstr ""
msgid "elements of array %qD have incomplete type"
msgstr ""
-#: c-decl.c:3065 c-decl.c:5642 cp/decl.c:3733 cp/decl.c:9837
+#: c-decl.c:3065 c-decl.c:5642 cp/decl.c:3733 cp/decl.c:9838
msgid "%Jinline function %qD given attribute noinline"
msgstr ""
@@ -1475,7 +1475,7 @@ msgstr ""
msgid "argument %qD doesn%'t match prototype"
msgstr ""
-#: c-decl.c:6254 cp/decl.c:10592
+#: c-decl.c:6254 cp/decl.c:10593
msgid "no return statement in function returning non-void"
msgstr ""
@@ -2176,7 +2176,7 @@ msgstr ""
msgid "statement with no effect"
msgstr ""
-#: c-gimplify.c:315 c-typeck.c:6703 cp/parser.c:6508
+#: c-gimplify.c:315 c-typeck.c:6789 cp/parser.c:6508
msgid "break statement not within loop or switch"
msgstr ""
@@ -2190,6 +2190,7 @@ msgid "ignoring duplicate directory \"%s\"\n"
msgstr ""
#: c-incpath.c:73
+#, c-format
msgid " as it is a non-system directory that duplicates a system directory\n"
msgstr ""
@@ -2199,14 +2200,17 @@ msgid "ignoring nonexistent directory \"%s\"\n"
msgstr ""
#: c-incpath.c:283
+#, c-format
msgid "#include \"...\" search starts here:\n"
msgstr ""
#: c-incpath.c:287
+#, c-format
msgid "#include <...> search starts here:\n"
msgstr ""
#: c-incpath.c:292
+#, c-format
msgid "End of search list.\n"
msgstr ""
@@ -2429,16 +2433,16 @@ msgstr ""
#. between diagnostics with "syntax error" in them, and diagnostics
#. with "parse error" in them. It's okay to give them both the same
#. translation.
-#: c-parse.y:54 c-parse.y:2925
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse-scan.y:1373
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:16421
-#: objc/objc-parse.y:53 objc/objc-parse.y:3528
+#: c-parse.y:54 c-parse.c:5320 c-parse.y:2925 gengtype-yacc.c:1559
+#: java/parse-scan.c:3063 ../../gcc-cvs/gcc/java/parse-scan.y:1373
+#: java/parse.c:6168 ../../gcc-cvs/gcc/java/parse.y:16421 objc/objc-parse.y:53
+#: objc/objc-parse.c:6402 objc/objc-parse.y:3528
msgid "syntax error"
msgstr ""
-#: /usr/share/bison/bison.simple:179 c-parse.y:2929
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse-scan.y:1377
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:16425
+#: c-parse.c:2170 c-parse.y:2929 gengtype-yacc.c:555 java/parse-scan.c:1932
+#: ../../gcc-cvs/gcc/java/parse-scan.y:1377 java/parse.c:2933
+#: ../../gcc-cvs/gcc/java/parse.y:16425 objc/objc-parse.c:2687
#: objc/objc-parse.y:3532
msgid "syntax error: cannot back up"
msgstr ""
@@ -2564,21 +2568,15 @@ msgstr ""
msgid "ISO C requires a named argument before %<...%>"
msgstr ""
-#: /usr/share/bison/bison.simple:795 c-parse.y:2928
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse-scan.y:1376
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:16424
-#: objc/objc-parse.y:3531
-msgid "parse error; also virtual memory exhausted"
-msgstr ""
-
-#: /usr/share/bison/bison.simple:799 c-parse.y:2926
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse-scan.y:1374
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:16422
-#: objc/objc-parse.y:3529
-msgid "parse error"
+#: c-parse.c:5316 c-parse.y:2927 gengtype-yacc.c:1555 java/parse-scan.c:3059
+#: ../../gcc-cvs/gcc/java/parse-scan.y:1375 java/parse.c:6164
+#: ../../gcc-cvs/gcc/java/parse.y:16423 objc/objc-parse.c:6398
+#: objc/objc-parse.y:3530
+msgid "syntax error; also virtual memory exhausted"
msgstr ""
-#: /usr/share/bison/bison.simple:924
+#: c-parse.c:5434 gengtype-yacc.c:1673 java/parse-scan.c:3177
+#: java/parse.c:6282 objc/objc-parse.c:6516
msgid "parser stack overflow"
msgstr ""
@@ -2587,15 +2585,18 @@ msgstr ""
msgid "syntax error at %qs token"
msgstr ""
-#: c-parse.y:2927 /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse-scan.y:1375
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:16423
-#: objc/objc-parse.y:3530
-msgid "syntax error; also virtual memory exhausted"
+#: c-parse.y:2926 ../../gcc-cvs/gcc/java/parse-scan.y:1374
+#: ../../gcc-cvs/gcc/java/parse.y:16422 objc/objc-parse.y:3529
+msgid "parse error"
+msgstr ""
+
+#: c-parse.y:2928 ../../gcc-cvs/gcc/java/parse-scan.y:1376
+#: ../../gcc-cvs/gcc/java/parse.y:16424 objc/objc-parse.y:3531
+msgid "parse error; also virtual memory exhausted"
msgstr ""
-#: c-parse.y:2930 /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse-scan.y:1378
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:16426
-#: objc/objc-parse.y:3533
+#: c-parse.y:2930 ../../gcc-cvs/gcc/java/parse-scan.y:1378
+#: ../../gcc-cvs/gcc/java/parse.y:16426 objc/objc-parse.y:3533
msgid "parse error: cannot back up"
msgstr ""
@@ -2796,105 +2797,105 @@ msgstr ""
msgid "junk at end of %<#pragma GCC visibility%>"
msgstr ""
-#: c-typeck.c:140
+#: c-typeck.c:148
#, c-format
msgid "%qs has an incomplete type"
msgstr ""
-#: c-typeck.c:162 cp/call.c:2667
+#: c-typeck.c:170 cp/call.c:2667
msgid "invalid use of void expression"
msgstr ""
-#: c-typeck.c:170
+#: c-typeck.c:178
msgid "invalid use of flexible array member"
msgstr ""
-#: c-typeck.c:176
+#: c-typeck.c:184
msgid "invalid use of array with unspecified bounds"
msgstr ""
-#: c-typeck.c:184
+#: c-typeck.c:192
msgid "invalid use of undefined type %<%s %s%>"
msgstr ""
#. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL.
-#: c-typeck.c:188
+#: c-typeck.c:196
#, c-format
msgid "invalid use of incomplete typedef %qs"
msgstr ""
-#: c-typeck.c:375 c-typeck.c:389
+#: c-typeck.c:383 c-typeck.c:397
msgid "function types not truly compatible in ISO C"
msgstr ""
-#: c-typeck.c:743
+#: c-typeck.c:751
msgid "types are not quite compatible"
msgstr ""
-#: c-typeck.c:985
+#: c-typeck.c:993
msgid "function return types not compatible due to %<volatile%>"
msgstr ""
-#: c-typeck.c:1126 c-typeck.c:2347
+#: c-typeck.c:1134 c-typeck.c:2379
msgid "arithmetic on pointer to an incomplete type"
msgstr ""
-#: c-typeck.c:1481
+#: c-typeck.c:1489
msgid "%qT has no member named %qs"
msgstr ""
-#: c-typeck.c:1517
+#: c-typeck.c:1525
#, c-format
msgid "request for member %qs in something not a structure or union"
msgstr ""
-#: c-typeck.c:1546
+#: c-typeck.c:1554
msgid "dereferencing pointer to incomplete type"
msgstr ""
-#: c-typeck.c:1550
+#: c-typeck.c:1558
msgid "dereferencing %<void *%> pointer"
msgstr ""
-#: c-typeck.c:1567
+#: c-typeck.c:1575
#, c-format
msgid "invalid type argument of %qs"
msgstr ""
-#: c-typeck.c:1585 cp/typeck.c:2170
+#: c-typeck.c:1593 cp/typeck.c:2170
msgid "subscript missing in array reference"
msgstr ""
-#: c-typeck.c:1605
+#: c-typeck.c:1613
msgid "array subscript has type %<char%>"
msgstr ""
-#: c-typeck.c:1613 c-typeck.c:1702 cp/typeck.c:2215 cp/typeck.c:2301
+#: c-typeck.c:1621 c-typeck.c:1710 cp/typeck.c:2215 cp/typeck.c:2301
msgid "array subscript is not an integer"
msgstr ""
-#: c-typeck.c:1646
+#: c-typeck.c:1654
msgid "ISO C forbids subscripting %<register%> array"
msgstr ""
-#: c-typeck.c:1648
+#: c-typeck.c:1656
msgid "ISO C90 forbids subscripting non-lvalue array"
msgstr ""
-#: c-typeck.c:1681
+#: c-typeck.c:1689
msgid "subscript has type %<char%>"
msgstr ""
-#: c-typeck.c:1697 cp/typeck.c:2296
+#: c-typeck.c:1705 cp/typeck.c:2296
msgid "subscripted value is neither array nor pointer"
msgstr ""
-#: c-typeck.c:1727
+#: c-typeck.c:1735
#, c-format
msgid "local declaration of %qs hides instance variable"
msgstr ""
-#: c-typeck.c:1920
+#: c-typeck.c:1928
#, c-format
msgid "called object %qE is not a function"
msgstr ""
@@ -2902,723 +2903,797 @@ msgstr ""
#. This situation leads to run-time undefined behavior. We can't,
#. therefore, simply error unless we can prove that all possible
#. executions of the program must execute the code.
-#: c-typeck.c:1952
+#: c-typeck.c:1960
msgid "function called through a non-compatible type"
msgstr ""
-#: c-typeck.c:1996 c-typeck.c:4202 c-typeck.c:4204 c-typeck.c:4212
-#: c-typeck.c:4237 c-typeck.c:5624
+#: c-typeck.c:2004 c-typeck.c:4288 c-typeck.c:4290 c-typeck.c:4298
+#: c-typeck.c:4323 c-typeck.c:5710
msgid "initializer element is not constant"
msgstr ""
-#: c-typeck.c:2047 cp/typeck.c:2569
-msgid "too many arguments to function"
+#: c-typeck.c:2064
+#, c-format
+msgid "too many arguments to function %qE"
msgstr ""
-#: c-typeck.c:2068
+#: c-typeck.c:2091
#, c-format
msgid "type of formal parameter %d is incomplete"
msgstr ""
-#: c-typeck.c:2081
+#: c-typeck.c:2104
#, c-format
-msgid "%s as integer rather than floating due to prototype"
+msgid ""
+"passing argument %d of %qE as integer rather than floating due to prototype"
msgstr ""
-#: c-typeck.c:2084
+#: c-typeck.c:2109
#, c-format
-msgid "%s as integer rather than complex due to prototype"
+msgid ""
+"passing argument %d of %qE as integer rather than complex due to prototype"
msgstr ""
-#: c-typeck.c:2087
+#: c-typeck.c:2114
#, c-format
-msgid "%s as complex rather than floating due to prototype"
+msgid ""
+"passing argument %d of %qE as complex rather than floating due to prototype"
msgstr ""
-#: c-typeck.c:2090
+#: c-typeck.c:2119
#, c-format
-msgid "%s as floating rather than integer due to prototype"
+msgid ""
+"passing argument %d of %qE as floating rather than integer due to prototype"
msgstr ""
-#: c-typeck.c:2093
+#: c-typeck.c:2124
#, c-format
-msgid "%s as complex rather than integer due to prototype"
+msgid ""
+"passing argument %d of %qE as complex rather than integer due to prototype"
msgstr ""
-#: c-typeck.c:2096
+#: c-typeck.c:2129
#, c-format
-msgid "%s as floating rather than complex due to prototype"
+msgid ""
+"passing argument %d of %qE as floating rather than complex due to prototype"
msgstr ""
-#: c-typeck.c:2106
-msgid "%s as %<float%> rather than %<double%> due to prototype"
+#: c-typeck.c:2141
+msgid ""
+"passing argument %d of %qE as %<float%> rather than %<double%> due to "
+"prototype"
msgstr ""
-#: c-typeck.c:2126
+#: c-typeck.c:2161
#, c-format
-msgid "%s with different width due to prototype"
+msgid "passing argument %d of %qE with different width due to prototype"
msgstr ""
-#: c-typeck.c:2152
+#: c-typeck.c:2188
#, c-format
-msgid "%s as unsigned due to prototype"
+msgid "passing argument %d of %qE as unsigned due to prototype"
msgstr ""
-#: c-typeck.c:2154
+#: c-typeck.c:2191
#, c-format
-msgid "%s as signed due to prototype"
+msgid "passing argument %d of %qE as signed due to prototype"
msgstr ""
-#: c-typeck.c:2188 cp/typeck.c:2675
-msgid "too few arguments to function"
+#: c-typeck.c:2221
+#, c-format
+msgid "too few arguments to function %qE"
msgstr ""
-#: c-typeck.c:2223
+#: c-typeck.c:2255
msgid "suggest parentheses around + or - inside shift"
msgstr ""
-#: c-typeck.c:2230
+#: c-typeck.c:2262
msgid "suggest parentheses around && within ||"
msgstr ""
-#: c-typeck.c:2239
+#: c-typeck.c:2271
msgid "suggest parentheses around arithmetic in operand of |"
msgstr ""
-#: c-typeck.c:2243
+#: c-typeck.c:2275
msgid "suggest parentheses around comparison in operand of |"
msgstr ""
-#: c-typeck.c:2252
+#: c-typeck.c:2284
msgid "suggest parentheses around arithmetic in operand of ^"
msgstr ""
-#: c-typeck.c:2256
+#: c-typeck.c:2288
msgid "suggest parentheses around comparison in operand of ^"
msgstr ""
-#: c-typeck.c:2263
+#: c-typeck.c:2295
msgid "suggest parentheses around + or - in operand of &"
msgstr ""
-#: c-typeck.c:2267
+#: c-typeck.c:2299
msgid "suggest parentheses around comparison in operand of &"
msgstr ""
-#: c-typeck.c:2273
+#: c-typeck.c:2305
msgid "comparisons like X<=Y<=Z do not have their mathematical meaning"
msgstr ""
-#: c-typeck.c:2299
+#: c-typeck.c:2331
msgid "pointer of type %<void *%> used in subtraction"
msgstr ""
-#: c-typeck.c:2301
+#: c-typeck.c:2333
msgid "pointer to a function used in subtraction"
msgstr ""
-#: c-typeck.c:2390
+#: c-typeck.c:2422
msgid "wrong type argument to unary plus"
msgstr ""
-#: c-typeck.c:2403
+#: c-typeck.c:2435
msgid "wrong type argument to unary minus"
msgstr ""
-#: c-typeck.c:2420
+#: c-typeck.c:2452
msgid "ISO C does not support %<~%> for complex conjugation"
msgstr ""
-#: c-typeck.c:2426
+#: c-typeck.c:2458
msgid "wrong type argument to bit-complement"
msgstr ""
-#: c-typeck.c:2434
+#: c-typeck.c:2466
msgid "wrong type argument to abs"
msgstr ""
-#: c-typeck.c:2446
+#: c-typeck.c:2478
msgid "wrong type argument to conjugation"
msgstr ""
-#: c-typeck.c:2460
+#: c-typeck.c:2492
msgid "wrong type argument to unary exclamation mark"
msgstr ""
-#: c-typeck.c:2497
+#: c-typeck.c:2529
msgid "ISO C does not support %<++%> and %<--%> on complex types"
msgstr ""
-#: c-typeck.c:2513 c-typeck.c:2545
+#: c-typeck.c:2545 c-typeck.c:2577
msgid "wrong type argument to increment"
msgstr ""
-#: c-typeck.c:2515 c-typeck.c:2547
+#: c-typeck.c:2547 c-typeck.c:2579
msgid "wrong type argument to decrement"
msgstr ""
-#: c-typeck.c:2536
+#: c-typeck.c:2568
msgid "increment of pointer to unknown structure"
msgstr ""
-#: c-typeck.c:2538
+#: c-typeck.c:2570
msgid "decrement of pointer to unknown structure"
msgstr ""
-#: c-typeck.c:2628
+#: c-typeck.c:2660
msgid "attempt to take address of bit-field structure member %qD"
msgstr ""
-#: c-typeck.c:2710
+#: c-typeck.c:2742
msgid "invalid lvalue in assignment"
msgstr ""
-#: c-typeck.c:2713
+#: c-typeck.c:2745
msgid "invalid lvalue in increment"
msgstr ""
-#: c-typeck.c:2716
+#: c-typeck.c:2748
msgid "invalid lvalue in decrement"
msgstr ""
-#: c-typeck.c:2719
+#: c-typeck.c:2751
msgid "invalid lvalue in unary %<&%>"
msgstr ""
-#: c-typeck.c:2722
+#: c-typeck.c:2754
msgid "invalid lvalue in asm statement"
msgstr ""
-#: c-typeck.c:2750
+#: c-typeck.c:2782
#, c-format
msgid "assignment of read-only member %qs"
msgstr ""
-#: c-typeck.c:2751
+#: c-typeck.c:2783
#, c-format
msgid "increment of read-only member %qs"
msgstr ""
-#: c-typeck.c:2752
+#: c-typeck.c:2784
#, c-format
msgid "decrement of read-only member %qs"
msgstr ""
-#: c-typeck.c:2756
+#: c-typeck.c:2788
#, c-format
msgid "assignment of read-only variable %qs"
msgstr ""
-#: c-typeck.c:2757
+#: c-typeck.c:2789
#, c-format
msgid "increment of read-only variable %qs"
msgstr ""
-#: c-typeck.c:2758
+#: c-typeck.c:2790
#, c-format
msgid "decrement of read-only variable %qs"
msgstr ""
-#: c-typeck.c:2761
+#: c-typeck.c:2793
msgid "assignment of read-only location"
msgstr ""
-#: c-typeck.c:2762
+#: c-typeck.c:2794
msgid "increment of read-only location"
msgstr ""
-#: c-typeck.c:2763
+#: c-typeck.c:2795
msgid "decrement of read-only location"
msgstr ""
-#: c-typeck.c:2781
+#: c-typeck.c:2813
#, c-format
msgid "cannot take address of bit-field %qs"
msgstr ""
-#: c-typeck.c:2809
+#: c-typeck.c:2841
#, c-format
msgid "global register variable %qs used in nested function"
msgstr ""
-#: c-typeck.c:2813
+#: c-typeck.c:2845
#, c-format
msgid "register variable %qs used in nested function"
msgstr ""
-#: c-typeck.c:2820
+#: c-typeck.c:2852
#, c-format
msgid "address of global register variable %qs requested"
msgstr ""
-#: c-typeck.c:2825
+#: c-typeck.c:2857
#, c-format
msgid "address of register variable %qs requested"
msgstr ""
-#: c-typeck.c:2873
+#: c-typeck.c:2905
msgid "non-lvalue array in conditional expression"
msgstr ""
-#: c-typeck.c:2917
+#: c-typeck.c:2949
msgid "signed and unsigned type in conditional expression"
msgstr ""
-#: c-typeck.c:2924
+#: c-typeck.c:2956
msgid "ISO C forbids conditional expr with only one void side"
msgstr ""
-#: c-typeck.c:2940 c-typeck.c:2948
+#: c-typeck.c:2972 c-typeck.c:2980
msgid "ISO C forbids conditional expr between %<void *%> and function pointer"
msgstr ""
-#: c-typeck.c:2955
+#: c-typeck.c:2987
msgid "pointer type mismatch in conditional expression"
msgstr ""
-#: c-typeck.c:2962 c-typeck.c:2972
+#: c-typeck.c:2994 c-typeck.c:3004
msgid "pointer/integer type mismatch in conditional expression"
msgstr ""
-#: c-typeck.c:2986
+#: c-typeck.c:3018
msgid "type mismatch in conditional expression"
msgstr ""
-#: c-typeck.c:3029
+#: c-typeck.c:3061
msgid "left-hand operand of comma expression has no effect"
msgstr ""
-#: c-typeck.c:3062
+#: c-typeck.c:3094
msgid "cast specifies array type"
msgstr ""
-#: c-typeck.c:3068
+#: c-typeck.c:3100
msgid "cast specifies function type"
msgstr ""
-#: c-typeck.c:3078
+#: c-typeck.c:3110
msgid "ISO C forbids casting nonscalar to the same type"
msgstr ""
-#: c-typeck.c:3096
+#: c-typeck.c:3128
msgid "ISO C forbids casts to union type"
msgstr ""
-#: c-typeck.c:3105
+#: c-typeck.c:3137
msgid "cast to union type from type not present in union"
msgstr ""
-#: c-typeck.c:3156
+#: c-typeck.c:3188
msgid "cast adds new qualifiers to function type"
msgstr ""
#. There are qualifiers present in IN_OTYPE that are not
#. present in IN_TYPE.
-#: c-typeck.c:3161
+#: c-typeck.c:3193
msgid "cast discards qualifiers from pointer target type"
msgstr ""
-#: c-typeck.c:3176
+#: c-typeck.c:3208
msgid "cast increases required alignment of target type"
msgstr ""
-#: c-typeck.c:3182 cp/typeck.c:4959
+#: c-typeck.c:3214 cp/typeck.c:4959
msgid "cast from pointer to integer of different size"
msgstr ""
-#: c-typeck.c:3187
+#: c-typeck.c:3219
msgid "cast from function call of type %qT to non-matching type %qT"
msgstr ""
-#: c-typeck.c:3195 cp/typeck.c:4966
+#: c-typeck.c:3227 cp/typeck.c:4966
msgid "cast to pointer from integer of different size"
msgstr ""
-#: c-typeck.c:3207
+#: c-typeck.c:3239
msgid "type-punning to incomplete type might break strict-aliasing rules"
msgstr ""
-#: c-typeck.c:3214
+#: c-typeck.c:3246
msgid "dereferencing type-punned pointer will break strict-aliasing rules"
msgstr ""
-#: c-typeck.c:3217
+#: c-typeck.c:3249
msgid "dereferencing type-punned pointer might break strict-aliasing rules"
msgstr ""
-#: c-typeck.c:3229
+#: c-typeck.c:3261
msgid "ISO C forbids conversion of function pointer to object pointer type"
msgstr ""
-#: c-typeck.c:3238
+#: c-typeck.c:3270
msgid "ISO C forbids conversion of object pointer to function pointer type"
msgstr ""
-#. Convert new value to destination type.
-#: c-typeck.c:3365 c-typeck.c:3382
-msgid "assignment"
-msgstr ""
-
-#: c-typeck.c:3449
+#: c-typeck.c:3523
msgid "cannot pass rvalue to reference parameter"
msgstr ""
-#: c-typeck.c:3557 c-typeck.c:3634
+#: c-typeck.c:3632 c-typeck.c:3741
#, c-format
-msgid "%s makes qualified function pointer from unqualified"
+msgid ""
+"passing argument %d of %qE makes qualified function pointer from unqualified"
+msgstr ""
+
+#: c-typeck.c:3635 c-typeck.c:3744
+msgid "assignment makes qualified function pointer from unqualified"
+msgstr ""
+
+#: c-typeck.c:3638 c-typeck.c:3746
+msgid "initialization makes qualified function pointer from unqualified"
+msgstr ""
+
+#: c-typeck.c:3641 c-typeck.c:3748
+msgid "return makes qualified function pointer from unqualified"
msgstr ""
-#: c-typeck.c:3561 c-typeck.c:3614
+#: c-typeck.c:3645 c-typeck.c:3709
#, c-format
-msgid "%s discards qualifiers from pointer target type"
+msgid "passing argument %d of %qE discards qualifiers from pointer target type"
msgstr ""
-#: c-typeck.c:3567
+#: c-typeck.c:3647 c-typeck.c:3711
+msgid "assignment discards qualifiers from pointer target type"
+msgstr ""
+
+#: c-typeck.c:3649 c-typeck.c:3713
+msgid "initialization discards qualifiers from pointer target type"
+msgstr ""
+
+#: c-typeck.c:3651 c-typeck.c:3715
+msgid "return discards qualifiers from pointer target type"
+msgstr ""
+
+#: c-typeck.c:3656
msgid "ISO C prohibits argument conversion to union type"
msgstr ""
-#: c-typeck.c:3605
-msgid "ISO C forbids %s between function pointer and %<void *%>"
+#: c-typeck.c:3694
+msgid ""
+"ISO C forbids passing argument %d of %qE between function pointer and %<void "
+"*%>"
+msgstr ""
+
+#: c-typeck.c:3697
+msgid "ISO C forbids assignment between function pointer and %<void *%>"
+msgstr ""
+
+#: c-typeck.c:3699
+msgid "ISO C forbids initialization between function pointer and %<void *%>"
msgstr ""
-#: c-typeck.c:3623
+#: c-typeck.c:3701
+msgid "ISO C forbids return between function pointer and %<void *%>"
+msgstr ""
+
+#: c-typeck.c:3724
#, c-format
-msgid "pointer targets in %s differ in signedness"
+msgid "pointer targets in passing argument %d of %qE differ in signedness"
+msgstr ""
+
+#: c-typeck.c:3726
+msgid "pointer targets in assignment differ in signedness"
+msgstr ""
+
+#: c-typeck.c:3728
+msgid "pointer targets in initialization differ in signedness"
msgstr ""
-#: c-typeck.c:3639
+#: c-typeck.c:3730
+msgid "pointer targets in return differ in signedness"
+msgstr ""
+
+#: c-typeck.c:3753
#, c-format
-msgid "%s from incompatible pointer type"
+msgid "passing argument %d of %qE from incompatible pointer type"
msgstr ""
-#: c-typeck.c:3645 c-typeck.c:4162 cp/typeck.c:1402
+#: c-typeck.c:3755
+msgid "assignment from incompatible pointer type"
+msgstr ""
+
+#: c-typeck.c:3756
+msgid "initialization from incompatible pointer type"
+msgstr ""
+
+#: c-typeck.c:3758
+msgid "return from incompatible pointer type"
+msgstr ""
+
+#: c-typeck.c:3763 c-typeck.c:4248 cp/typeck.c:1402
msgid "invalid use of non-lvalue array"
msgstr ""
-#: c-typeck.c:3659
+#: c-typeck.c:3777
#, c-format
-msgid "%s makes pointer from integer without a cast"
+msgid "passing argument %d of %qE makes pointer from integer without a cast"
msgstr ""
-#: c-typeck.c:3666
-#, c-format
-msgid "%s makes integer from pointer without a cast"
+#: c-typeck.c:3779
+msgid "assignment makes pointer from integer without a cast"
msgstr ""
-#: c-typeck.c:3680 c-typeck.c:3683
-#, c-format
-msgid "incompatible type for argument %d of %qs"
+#: c-typeck.c:3781
+msgid "initialization makes pointer from integer without a cast"
msgstr ""
-#: c-typeck.c:3687
-#, c-format
-msgid "incompatible type for argument %d of indirect function call"
+#: c-typeck.c:3783
+msgid "return makes pointer from integer without a cast"
msgstr ""
-#: c-typeck.c:3691
+#: c-typeck.c:3790
#, c-format
-msgid "incompatible types in %s"
+msgid "passing argument %d of %qE makes integer from pointer without a cast"
msgstr ""
-#. Function name is known; supply it.
-#: c-typeck.c:3745
-#, c-format
-msgid "passing arg %d of '%s'"
+#: c-typeck.c:3792
+msgid "assignment makes integer from pointer without a cast"
+msgstr ""
+
+#: c-typeck.c:3794
+msgid "initialization makes integer from pointer without a cast"
+msgstr ""
+
+#: c-typeck.c:3796
+msgid "return makes integer from pointer without a cast"
msgstr ""
-#. Function name unknown (call through ptr); just give arg number.
-#: c-typeck.c:3754
+#: c-typeck.c:3806
#, c-format
-msgid "passing arg %d of pointer to function"
+msgid "incompatible type for argument %d of %qE"
msgstr ""
-#: c-typeck.c:3810
+#: c-typeck.c:3809
+msgid "incompatible types in assignment"
+msgstr ""
+
+#: c-typeck.c:3812
+msgid "incompatible types in initialization"
+msgstr ""
+
+#: c-typeck.c:3815
+msgid "incompatible types in return"
+msgstr ""
+
+#: c-typeck.c:3896
msgid "traditional C rejects automatic aggregate initialization"
msgstr ""
-#: c-typeck.c:3978 c-typeck.c:3993 c-typeck.c:4008
+#: c-typeck.c:4064 c-typeck.c:4079 c-typeck.c:4094
#, c-format
msgid "(near initialization for %qs)"
msgstr ""
-#: c-typeck.c:4022
+#: c-typeck.c:4108
msgid "array initialized from parenthesized string constant"
msgstr ""
-#: c-typeck.c:4086 cp/typeck2.c:708
+#: c-typeck.c:4172 cp/typeck2.c:708
msgid "char-array initialized from wide string"
msgstr ""
-#: c-typeck.c:4091
+#: c-typeck.c:4177
msgid "wchar_t-array initialized from non-wide string"
msgstr ""
-#: c-typeck.c:4109 cp/typeck2.c:730
+#: c-typeck.c:4195 cp/typeck2.c:730
msgid "initializer-string for array of chars is too long"
msgstr ""
-#: c-typeck.c:4115
+#: c-typeck.c:4201
msgid "array of inappropriate type initialized from string constant"
msgstr ""
-#: c-typeck.c:4185
+#: c-typeck.c:4271
msgid "array initialized from non-constant array expression"
msgstr ""
-#: c-typeck.c:4229
-msgid "initialization"
-msgstr ""
-
-#: c-typeck.c:4244 c-typeck.c:5628
+#: c-typeck.c:4330 c-typeck.c:5714
msgid "initializer element is not computable at load time"
msgstr ""
-#: c-typeck.c:4259 cp/typeck2.c:808
+#: c-typeck.c:4345 cp/typeck2.c:808
msgid "invalid initializer"
msgstr ""
-#: c-typeck.c:4529 cp/decl.c:4512
+#: c-typeck.c:4615 cp/decl.c:4512
msgid "opaque vector types cannot be initialized"
msgstr ""
-#: c-typeck.c:4725
+#: c-typeck.c:4811
msgid "extra brace group at end of initializer"
msgstr ""
-#: c-typeck.c:4745
+#: c-typeck.c:4831
msgid "missing braces around initializer"
msgstr ""
-#: c-typeck.c:4805
+#: c-typeck.c:4891
msgid "braces around scalar initializer"
msgstr ""
-#: c-typeck.c:4862
+#: c-typeck.c:4948
msgid "initialization of flexible array member in a nested context"
msgstr ""
-#: c-typeck.c:4864
+#: c-typeck.c:4950
msgid "initialization of a flexible array member"
msgstr ""
-#: c-typeck.c:4891
+#: c-typeck.c:4977
msgid "missing initializer"
msgstr ""
-#: c-typeck.c:4913
+#: c-typeck.c:4999
msgid "empty scalar initializer"
msgstr ""
-#: c-typeck.c:4918
+#: c-typeck.c:5004
msgid "extra elements in scalar initializer"
msgstr ""
-#: c-typeck.c:5006
+#: c-typeck.c:5092
msgid "initialization designators may not nest"
msgstr ""
-#: c-typeck.c:5028 c-typeck.c:5103
+#: c-typeck.c:5114 c-typeck.c:5189
msgid "array index in non-array initializer"
msgstr ""
-#: c-typeck.c:5033 c-typeck.c:5156
+#: c-typeck.c:5119 c-typeck.c:5242
msgid "field name not in record or union initializer"
msgstr ""
-#: c-typeck.c:5079
+#: c-typeck.c:5165
msgid "array index in initializer not of integer type"
msgstr ""
-#: c-typeck.c:5099 c-typeck.c:5101
+#: c-typeck.c:5185 c-typeck.c:5187
msgid "nonconstant array index in initializer"
msgstr ""
-#: c-typeck.c:5105 c-typeck.c:5108
+#: c-typeck.c:5191 c-typeck.c:5194
msgid "array index in initializer exceeds array bounds"
msgstr ""
-#: c-typeck.c:5119
+#: c-typeck.c:5205
msgid "empty index range in initializer"
msgstr ""
-#: c-typeck.c:5128
+#: c-typeck.c:5214
msgid "array index range in initializer exceeds array bounds"
msgstr ""
-#: c-typeck.c:5168
+#: c-typeck.c:5254
#, c-format
msgid "unknown field %qs specified in initializer"
msgstr ""
-#: c-typeck.c:5204 c-typeck.c:5225 c-typeck.c:5691
+#: c-typeck.c:5290 c-typeck.c:5311 c-typeck.c:5777
msgid "initialized field with side-effects overwritten"
msgstr ""
-#: c-typeck.c:5900
+#: c-typeck.c:5986
msgid "excess elements in char array initializer"
msgstr ""
-#: c-typeck.c:5907 c-typeck.c:5953
+#: c-typeck.c:5993 c-typeck.c:6039
msgid "excess elements in struct initializer"
msgstr ""
-#: c-typeck.c:5968
+#: c-typeck.c:6054
msgid "non-static initialization of a flexible array member"
msgstr ""
-#: c-typeck.c:6036
+#: c-typeck.c:6122
msgid "excess elements in union initializer"
msgstr ""
-#: c-typeck.c:6058
+#: c-typeck.c:6144
msgid "traditional C rejects initialization of unions"
msgstr ""
-#: c-typeck.c:6122
+#: c-typeck.c:6208
msgid "excess elements in array initializer"
msgstr ""
-#: c-typeck.c:6152
+#: c-typeck.c:6238
msgid "excess elements in vector initializer"
msgstr ""
-#: c-typeck.c:6175
+#: c-typeck.c:6261
msgid "excess elements in scalar initializer"
msgstr ""
-#: c-typeck.c:6337
+#: c-typeck.c:6423
msgid "ISO C forbids %<goto *expr;%>"
msgstr ""
-#: c-typeck.c:6351
+#: c-typeck.c:6437
msgid "function declared %<noreturn%> has a %<return%> statement"
msgstr ""
-#: c-typeck.c:6358
+#: c-typeck.c:6444
msgid "%<return%> with no value, in function returning non-void"
msgstr ""
-#: c-typeck.c:6365
+#: c-typeck.c:6451
msgid "%<return%> with a value, in function returning void"
msgstr ""
-#: c-typeck.c:6369
-msgid "return"
-msgstr ""
-
-#: c-typeck.c:6422
+#: c-typeck.c:6508
msgid "function returns address of local variable"
msgstr ""
-#: c-typeck.c:6483 cp/semantics.c:856
+#: c-typeck.c:6569 cp/semantics.c:856
msgid "switch quantity not an integer"
msgstr ""
-#: c-typeck.c:6493
+#: c-typeck.c:6579
msgid "%<long%> switch expression not converted to %<int%> in ISO C"
msgstr ""
-#: c-typeck.c:6530 cp/parser.c:6017
+#: c-typeck.c:6616 cp/parser.c:6017
msgid "case label not within a switch statement"
msgstr ""
-#: c-typeck.c:6532
+#: c-typeck.c:6618
msgid "%<default%> label not within a switch statement"
msgstr ""
-#: c-typeck.c:6596
+#: c-typeck.c:6682
msgid "%Hsuggest explicit braces to avoid ambiguous %<else%>"
msgstr ""
-#: c-typeck.c:6606
+#: c-typeck.c:6692
msgid "%Hempty body in an if-statement"
msgstr ""
-#: c-typeck.c:6614
+#: c-typeck.c:6700
msgid "%Hempty body in an else-statement"
msgstr ""
-#: c-typeck.c:6705 cp/parser.c:6519
+#: c-typeck.c:6791 cp/parser.c:6519
msgid "continue statement not within a loop"
msgstr ""
-#: c-typeck.c:6722
+#: c-typeck.c:6808
msgid "%Hstatement with no effect"
msgstr ""
-#: c-typeck.c:6751
+#: c-typeck.c:6837
msgid "expression statement has incomplete type"
msgstr ""
-#: c-typeck.c:7074 c-typeck.c:7113
+#: c-typeck.c:7160 c-typeck.c:7199
msgid "division by zero"
msgstr ""
-#: c-typeck.c:7158 cp/typeck.c:2965
+#: c-typeck.c:7244 cp/typeck.c:2965
msgid "right shift count is negative"
msgstr ""
-#: c-typeck.c:7165 cp/typeck.c:2971
+#: c-typeck.c:7251 cp/typeck.c:2971
msgid "right shift count >= width of type"
msgstr ""
-#: c-typeck.c:7186 cp/typeck.c:2990
+#: c-typeck.c:7272 cp/typeck.c:2990
msgid "left shift count is negative"
msgstr ""
-#: c-typeck.c:7189 cp/typeck.c:2992
+#: c-typeck.c:7275 cp/typeck.c:2992
msgid "left shift count >= width of type"
msgstr ""
-#: c-typeck.c:7210
+#: c-typeck.c:7296
msgid "shift count is negative"
msgstr ""
-#: c-typeck.c:7212
+#: c-typeck.c:7298
msgid "shift count >= width of type"
msgstr ""
-#: c-typeck.c:7229 cp/typeck.c:3027
+#: c-typeck.c:7315 cp/typeck.c:3027
msgid "comparing floating point with == or != is unsafe"
msgstr ""
-#: c-typeck.c:7253 c-typeck.c:7260
+#: c-typeck.c:7339 c-typeck.c:7346
msgid "ISO C forbids comparison of %<void *%> with function pointer"
msgstr ""
-#: c-typeck.c:7264 c-typeck.c:7304 c-typeck.c:7332
+#: c-typeck.c:7350 c-typeck.c:7390 c-typeck.c:7418
msgid "comparison of distinct pointer types lacks a cast"
msgstr ""
-#: c-typeck.c:7278 c-typeck.c:7283 c-typeck.c:7352 c-typeck.c:7357
+#: c-typeck.c:7364 c-typeck.c:7369 c-typeck.c:7438 c-typeck.c:7443
msgid "comparison between pointer and integer"
msgstr ""
-#: c-typeck.c:7299 c-typeck.c:7327
+#: c-typeck.c:7385 c-typeck.c:7413
msgid "ISO C forbids ordered comparisons of pointers to functions"
msgstr ""
-#: c-typeck.c:7324
+#: c-typeck.c:7410
msgid "comparison of complete and incomplete pointers"
msgstr ""
-#: c-typeck.c:7340 c-typeck.c:7347
+#: c-typeck.c:7426 c-typeck.c:7433
msgid "ordered comparison of pointer with integer zero"
msgstr ""
-#: c-typeck.c:7372 cp/typeck.c:3168
+#: c-typeck.c:7458 cp/typeck.c:3168
msgid "unordered comparison on non-floating point argument"
msgstr ""
-#: c-typeck.c:7585
+#: c-typeck.c:7671
msgid "comparison between signed and unsigned"
msgstr ""
-#: c-typeck.c:7631 cp/typeck.c:3432
+#: c-typeck.c:7717 cp/typeck.c:3432
msgid "comparison of promoted ~unsigned with constant"
msgstr ""
-#: c-typeck.c:7639 cp/typeck.c:3440
+#: c-typeck.c:7725 cp/typeck.c:3440
msgid "comparison of promoted ~unsigned with unsigned"
msgstr ""
@@ -3710,62 +3785,62 @@ msgstr ""
msgid "%s does not support delete_basic_block."
msgstr ""
-#: cfghooks.c:394
+#: cfghooks.c:395
#, c-format
msgid "%s does not support split_edge."
msgstr ""
-#: cfghooks.c:448
+#: cfghooks.c:456
#, c-format
msgid "%s does not support create_basic_block."
msgstr ""
-#: cfghooks.c:476
+#: cfghooks.c:484
#, c-format
msgid "%s does not support can_merge_blocks_p."
msgstr ""
-#: cfghooks.c:487
+#: cfghooks.c:495
#, c-format
msgid "%s does not support predict_edge."
msgstr ""
-#: cfghooks.c:496
+#: cfghooks.c:504
#, c-format
msgid "%s does not support predicted_by_p."
msgstr ""
-#: cfghooks.c:510
+#: cfghooks.c:518
#, c-format
msgid "%s does not support merge_blocks."
msgstr ""
-#: cfghooks.c:556
+#: cfghooks.c:564
#, c-format
msgid "%s does not support make_forwarder_block."
msgstr ""
-#: cfghooks.c:662
+#: cfghooks.c:670
#, c-format
msgid "%s does not support can_duplicate_block_p."
msgstr ""
-#: cfghooks.c:689
+#: cfghooks.c:697
#, c-format
msgid "%s does not support duplicate_block."
msgstr ""
-#: cfghooks.c:755
+#: cfghooks.c:763
#, c-format
msgid "%s does not support block_ends_with_call_p"
msgstr ""
-#: cfghooks.c:766
+#: cfghooks.c:774
#, c-format
msgid "%s does not support block_ends_with_condjump_p"
msgstr ""
-#: cfghooks.c:784
+#: cfghooks.c:792
#, c-format
msgid "%s does not support flow_call_edges_add"
msgstr ""
@@ -4347,7 +4422,7 @@ msgstr ""
msgid "too many input files"
msgstr ""
-#: cse.c:6735
+#: cse.c:6733
#, c-format
msgid ";; Processing block from %d to %d, %d sets.\n"
msgstr ""
@@ -4488,6 +4563,10 @@ msgstr ""
#. We can't handle floating point constants;
#. PRINT_OPERAND must handle them.
+#. We can't handle floating point constants; PRINT_OPERAND must
+#. handle them.
+#. We can't handle floating point constants;
+#. PRINT_OPERAND must handle them.
#: final.c:3289 vmsdbgout.c:487 config/i386/i386.c:5835
#: config/pdp11/pdp11.c:1690
msgid "floating constant misused"
@@ -4536,19 +4615,19 @@ msgstr ""
msgid "impossible constraint in %<asm%>"
msgstr ""
-#: function.c:3457
+#: function.c:3461
msgid "%Jvariable %qD might be clobbered by %<longjmp%> or %<vfork%>"
msgstr ""
-#: function.c:3478
+#: function.c:3482
msgid "%Jargument %qD might be clobbered by %<longjmp%> or %<vfork%>"
msgstr ""
-#: function.c:3869
+#: function.c:3873
msgid "function returns an aggregate"
msgstr ""
-#: function.c:4202
+#: function.c:4206
msgid "%Junused parameter %qD"
msgstr ""
@@ -4886,6 +4965,7 @@ msgid "(C)"
msgstr ""
#: gcc.c:3409 java/gjavah.c:2327 java/jcf-dump.c:917 java/jv-scan.c:129
+#, c-format
msgid ""
"This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -5062,6 +5142,7 @@ msgid "libraries: %s\n"
msgstr ""
#: gcc.c:6337
+#, c-format
msgid ""
"\n"
"For bug reporting instructions, please see:\n"
@@ -5504,7 +5585,7 @@ msgid "`"
msgstr ""
#. Closing quotation mark.
-#: intl.c:61 /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15438
+#: intl.c:61 ../../gcc-cvs/gcc/java/parse.y:15438
msgid "'"
msgstr ""
@@ -5996,7 +6077,7 @@ msgstr ""
msgid "can't use '%s' as a %s register"
msgstr ""
-#: regclass.c:780 config/ia64/ia64.c:4107 config/ia64/ia64.c:4114
+#: regclass.c:780 config/ia64/ia64.c:4133 config/ia64/ia64.c:4140
#: config/pa/pa.c:328 config/pa/pa.c:335
#, c-format
msgid "unknown register name: %s"
@@ -6345,6 +6426,7 @@ msgid "collect: tweaking %s in %s\n"
msgstr ""
#: tlink.c:751
+#, c-format
msgid "collect: relinking\n"
msgstr ""
@@ -6410,6 +6492,7 @@ msgid "type is deprecated"
msgstr ""
#: toplev.c:1064
+#, c-format
msgid ""
"\n"
"Target specific options:\n"
@@ -6421,12 +6504,14 @@ msgid " -m%-23s [undocumented]\n"
msgstr ""
#: toplev.c:1106
+#, c-format
msgid ""
"\n"
"There are undocumented target specific options as well.\n"
msgstr ""
#: toplev.c:1108
+#, c-format
msgid " They exist, but they are not documented.\n"
msgstr ""
@@ -6569,149 +6654,149 @@ msgstr ""
msgid "%Hwill never be executed"
msgstr ""
-#: tree-cfg.c:3094
+#: tree-cfg.c:3031
msgid "SSA name in freelist but still referenced"
msgstr ""
-#: tree-cfg.c:3104
+#: tree-cfg.c:3041
msgid "GIMPLE register modified with BIT_FIELD_REF"
msgstr ""
-#: tree-cfg.c:3124
+#: tree-cfg.c:3061
msgid "address taken, but ADDRESSABLE bit not set"
msgstr ""
-#: tree-cfg.c:3133
+#: tree-cfg.c:3070
msgid "non-boolean used in condition"
msgstr ""
-#: tree-cfg.c:3189
+#: tree-cfg.c:3126
msgid "Invalid reference prefix."
msgstr ""
-#: tree-cfg.c:3254
+#: tree-cfg.c:3191
msgid "Is not a valid GIMPLE statement."
msgstr ""
-#: tree-cfg.c:3274
+#: tree-cfg.c:3211
msgid "Statement marked for throw, but doesn%'t."
msgstr ""
-#: tree-cfg.c:3279
+#: tree-cfg.c:3216
msgid "Statement marked for throw in middle of block."
msgstr ""
-#: tree-cfg.c:3379
+#: tree-cfg.c:3316
msgid "PHI def is not a GIMPLE value"
msgstr ""
-#: tree-cfg.c:3395 tree-cfg.c:3411
+#: tree-cfg.c:3332 tree-cfg.c:3348
msgid "Incorrect sharing of tree nodes"
msgstr ""
-#: tree-cfg.c:3420
+#: tree-cfg.c:3357
msgid "verify_stmts failed."
msgstr ""
-#: tree-cfg.c:3441
+#: tree-cfg.c:3378
msgid "ENTRY_BLOCK has a statement list associated with it\n"
msgstr ""
-#: tree-cfg.c:3447
+#: tree-cfg.c:3384
msgid "EXIT_BLOCK has a statement list associated with it\n"
msgstr ""
-#: tree-cfg.c:3454
+#: tree-cfg.c:3391
#, c-format
msgid "Fallthru to exit from bb %d\n"
msgstr ""
-#: tree-cfg.c:3470
+#: tree-cfg.c:3407
#, c-format
msgid "Label %s to block does not match in bb %d\n"
msgstr ""
-#: tree-cfg.c:3479
+#: tree-cfg.c:3416
#, c-format
msgid "Label %s has incorrect context in bb %d\n"
msgstr ""
-#: tree-cfg.c:3493
+#: tree-cfg.c:3430
#, c-format
msgid "Control flow in the middle of basic block %d\n"
msgstr ""
-#: tree-cfg.c:3503
+#: tree-cfg.c:3440
#, c-format
msgid "Label %s in the middle of basic block %d\n"
msgstr ""
-#: tree-cfg.c:3520
+#: tree-cfg.c:3457
#, c-format
msgid "Fallthru edge after a control statement in bb %d \n"
msgstr ""
-#: tree-cfg.c:3535
+#: tree-cfg.c:3472
#, c-format
msgid "Structured COND_EXPR at the end of bb %d\n"
msgstr ""
-#: tree-cfg.c:3548 tree-cfg.c:3586 tree-cfg.c:3598 tree-cfg.c:3669
+#: tree-cfg.c:3485 tree-cfg.c:3523 tree-cfg.c:3535 tree-cfg.c:3606
#, c-format
msgid "Wrong outgoing edge flags at end of bb %d\n"
msgstr ""
-#: tree-cfg.c:3556
+#: tree-cfg.c:3493
msgid "%<then%> label does not match edge at end of bb %d\n"
msgstr ""
-#: tree-cfg.c:3564
+#: tree-cfg.c:3501
msgid "%<else%> label does not match edge at end of bb %d\n"
msgstr ""
-#: tree-cfg.c:3574
+#: tree-cfg.c:3511
#, c-format
msgid "Explicit goto at end of bb %d\n"
msgstr ""
-#: tree-cfg.c:3603
+#: tree-cfg.c:3540
#, c-format
msgid "Return edge does not point to exit in bb %d\n"
msgstr ""
-#: tree-cfg.c:3636
+#: tree-cfg.c:3573
msgid "Found default case not at end of case vector"
msgstr ""
-#: tree-cfg.c:3642
+#: tree-cfg.c:3579
msgid ""
"Case labels not sorted:\n"
" "
msgstr ""
-#: tree-cfg.c:3653
+#: tree-cfg.c:3590
msgid "No default case found at end of case vector"
msgstr ""
-#: tree-cfg.c:3661
+#: tree-cfg.c:3598
#, c-format
msgid "Extra outgoing edge %d->%d\n"
msgstr ""
-#: tree-cfg.c:3683
+#: tree-cfg.c:3620
#, c-format
msgid "Missing edge %i->%i\n"
msgstr ""
-#: tree-cfg.c:5255
+#: tree-cfg.c:5187
msgid "%Jfunction might be possible candidate for attribute %<noreturn%>"
msgstr ""
-#: tree-cfg.c:5282 tree-cfg.c:5286
+#: tree-cfg.c:5214 tree-cfg.c:5218
msgid "%H%<noreturn%> function does return"
msgstr ""
-#: tree-cfg.c:5306 tree-cfg.c:5311
+#: tree-cfg.c:5238 tree-cfg.c:5243
msgid "%Hcontrol reaches end of non-void function"
msgstr ""
@@ -6768,11 +6853,11 @@ msgstr ""
msgid "originally indirect function call not considered for inlining"
msgstr ""
-#: tree-inline.c:1473 tree-inline.c:1480
+#: tree-inline.c:1473 tree-inline.c:1481
msgid "%Jinlining failed in call to '%F': %s"
msgstr ""
-#: tree-inline.c:1474 tree-inline.c:1481
+#: tree-inline.c:1474 tree-inline.c:1482
msgid "called from here"
msgstr ""
@@ -7570,7 +7655,7 @@ msgstr ""
msgid "bad value `%s' for -mfp-trap-mode switch"
msgstr ""
-#: config/alpha/alpha.c:347 config/rs6000/rs6000.c:1645
+#: config/alpha/alpha.c:347 config/rs6000/rs6000.c:1653
#, c-format
msgid "bad value `%s' for -mtls-size switch"
msgstr ""
@@ -7620,24 +7705,24 @@ msgstr ""
msgid "invalid %%J value"
msgstr ""
-#: config/alpha/alpha.c:4584 config/ia64/ia64.c:3710
+#: config/alpha/alpha.c:4584 config/ia64/ia64.c:3736
#, c-format
msgid "invalid %%r value"
msgstr ""
-#: config/alpha/alpha.c:4594 config/rs6000/rs6000.c:10304
+#: config/alpha/alpha.c:4594 config/rs6000/rs6000.c:10312
#: config/xtensa/xtensa.c:1951
#, c-format
msgid "invalid %%R value"
msgstr ""
-#: config/alpha/alpha.c:4600 config/rs6000/rs6000.c:10223
+#: config/alpha/alpha.c:4600 config/rs6000/rs6000.c:10231
#: config/xtensa/xtensa.c:1918
#, c-format
msgid "invalid %%N value"
msgstr ""
-#: config/alpha/alpha.c:4608 config/rs6000/rs6000.c:10251
+#: config/alpha/alpha.c:4608 config/rs6000/rs6000.c:10259
#, c-format
msgid "invalid %%P value"
msgstr ""
@@ -7652,12 +7737,12 @@ msgstr ""
msgid "invalid %%L value"
msgstr ""
-#: config/alpha/alpha.c:4663 config/rs6000/rs6000.c:10205
+#: config/alpha/alpha.c:4663 config/rs6000/rs6000.c:10213
#, c-format
msgid "invalid %%m value"
msgstr ""
-#: config/alpha/alpha.c:4671 config/rs6000/rs6000.c:10213
+#: config/alpha/alpha.c:4671 config/rs6000/rs6000.c:10221
#, c-format
msgid "invalid %%M value"
msgstr ""
@@ -7668,7 +7753,7 @@ msgid "invalid %%U value"
msgstr ""
#: config/alpha/alpha.c:4727 config/alpha/alpha.c:4741
-#: config/rs6000/rs6000.c:10312
+#: config/rs6000/rs6000.c:10320
#, c-format
msgid "invalid %%s value"
msgstr ""
@@ -7678,8 +7763,8 @@ msgstr ""
msgid "invalid %%C value"
msgstr ""
-#: config/alpha/alpha.c:4801 config/rs6000/rs6000.c:10042
-#: config/rs6000/rs6000.c:10062
+#: config/alpha/alpha.c:4801 config/rs6000/rs6000.c:10050
+#: config/rs6000/rs6000.c:10070
#, c-format
msgid "invalid %%E value"
msgstr ""
@@ -7688,13 +7773,13 @@ msgstr ""
msgid "unknown relocation unspec"
msgstr ""
-#: config/alpha/alpha.c:4835 config/rs6000/rs6000.c:10630
+#: config/alpha/alpha.c:4835 config/rs6000/rs6000.c:10638
#, c-format
msgid "invalid %%xn code"
msgstr ""
-#: config/alpha/alpha.c:5795 config/alpha/alpha.c:5798 config/s390/s390.c:7703
-#: config/s390/s390.c:7706
+#: config/alpha/alpha.c:5795 config/alpha/alpha.c:5798 config/s390/s390.c:7732
+#: config/s390/s390.c:7735
msgid "bad builtin fcode"
msgstr ""
@@ -7703,6 +7788,14 @@ msgstr ""
#. each pair being { "NAME", VALUE }
#. where VALUE is the bits to set or minus the bits to clear.
#. An empty string NAME is used to identify the default VALUE.
+#. WARNING: Do not mark empty strings for translation, as calling
+#. gettext on an empty string does NOT return an empty
+#. string.
+#. Macro to define tables used to set the flags.
+#. This is a list in braces of pairs in braces,
+#. each pair being { "NAME", VALUE }
+#. where VALUE is the bits to set or minus the bits to clear.
+#. An empty string NAME is used to identify the default VALUE.
#: config/alpha/alpha.h:293 config/i386/i386.h:333 config/i386/i386.h:335
#: config/i386/i386.h:337 config/ns32k/ns32k.h:140 config/s390/s390.h:135
#: config/sparc/sparc.h:616 config/sparc/sparc.h:621
@@ -7869,6 +7962,7 @@ msgid "invalid operand to %%V code"
msgstr ""
#. Unknown flag.
+#. Undocumented flag.
#: config/arc/arc.c:1812 config/m32r/m32r.c:2251 config/sparc/sparc.c:7298
msgid "invalid operand output code"
msgstr ""
@@ -7878,7 +7972,7 @@ msgstr ""
msgid "switch -mcpu=%s conflicts with -march= switch"
msgstr ""
-#: config/arm/arm.c:784 config/rs6000/rs6000.c:1199 config/sparc/sparc.c:621
+#: config/arm/arm.c:784 config/rs6000/rs6000.c:1207 config/sparc/sparc.c:621
#, c-format
msgid "bad value (%s) for %s switch"
msgstr ""
@@ -7979,7 +8073,7 @@ msgstr ""
#: config/i386/i386.c:1731 config/ip2k/ip2k.c:3181
#: config/m68hc11/m68hc11.c:1350 config/m68k/m68k.c:288
#: config/mcore/mcore.c:3375 config/ns32k/ns32k.c:1068
-#: config/rs6000/rs6000.c:16366 config/sh/sh.c:7146 config/sh/sh.c:7167
+#: config/rs6000/rs6000.c:16655 config/sh/sh.c:7146 config/sh/sh.c:7167
#: config/sh/sh.c:7202 config/stormy16/stormy16.c:2413 config/v850/v850.c:2207
#, c-format
msgid "`%s' attribute only applies to functions"
@@ -7988,7 +8082,7 @@ msgstr ""
#: config/arm/arm.c:2630 config/arm/arm.c:2657 config/avr/avr.c:4514
#: config/h8300/h8300.c:5779 config/h8300/h8300.c:5802 config/i386/i386.c:1713
#: config/i386/i386.c:14495 config/ia64/ia64.c:512 config/ip2k/ip2k.c:3163
-#: config/m68hc11/m68hc11.c:1314 config/rs6000/rs6000.c:16331
+#: config/m68hc11/m68hc11.c:1314 config/rs6000/rs6000.c:16620
#: config/sh/symbian.c:414 config/sh/symbian.c:421
#, c-format
msgid "`%s' attribute ignored"
@@ -8358,12 +8452,6 @@ msgstr ""
msgid "c4x_rptb_rpts_p: Repeat block top label moved\n"
msgstr ""
-#. ??? HACK. We shouldn't have flag_inline_trees at all.
-#. Name of the c4x assembler.
-#. Name of the c4x linker.
-#. Define assembler options.
-#. Define linker options.
-#. Specify the end file to link with.
#. Target compilation option flags.
#. Small memory model.
#. Use 24-bit MPYI for C3x.
@@ -9020,6 +9108,7 @@ msgstr ""
#. #define TARGET_VERSION fprintf (stderr, " (68k, MIT syntax)");
#. #endif
#: config/frv/frv.h:542
+#, c-format
msgid " (frv)"
msgstr ""
@@ -9653,41 +9742,41 @@ msgstr ""
msgid "%Jaddress area attribute cannot be specified for functions"
msgstr ""
-#: config/ia64/ia64.c:3755
+#: config/ia64/ia64.c:3781
msgid "ia64_print_operand: unknown code"
msgstr ""
-#: config/ia64/ia64.c:4095 config/pa/pa.c:316
+#: config/ia64/ia64.c:4121 config/pa/pa.c:316
msgid "value of -mfixed-range must have form REG1-REG2"
msgstr ""
-#: config/ia64/ia64.c:4122 config/pa/pa.c:343
+#: config/ia64/ia64.c:4148 config/pa/pa.c:343
#, c-format
msgid "%s-%s is an empty range"
msgstr ""
-#: config/ia64/ia64.c:4173
+#: config/ia64/ia64.c:4199
msgid "cannot optimize floating point division for both latency and throughput"
msgstr ""
-#: config/ia64/ia64.c:4190
+#: config/ia64/ia64.c:4216
msgid "cannot optimize integer division for both latency and throughput"
msgstr ""
-#: config/ia64/ia64.c:4207
+#: config/ia64/ia64.c:4233
msgid "cannot optimize square root for both latency and throughput"
msgstr ""
-#: config/ia64/ia64.c:4221
+#: config/ia64/ia64.c:4247
msgid "not yet implemented: latency-optimized inline square root"
msgstr ""
-#: config/ia64/ia64.c:4233
+#: config/ia64/ia64.c:4259
#, c-format
msgid "bad value (%s) for -mtls-size= switch"
msgstr ""
-#: config/ia64/ia64.c:4249
+#: config/ia64/ia64.c:4275
#, c-format
msgid "bad value (%s) for -tune= switch"
msgstr ""
@@ -9844,7 +9933,7 @@ msgstr ""
msgid "PRINT_OPERAND: Unknown punctuation '%c'"
msgstr ""
-#: config/iq2000/iq2000.c:3312 config/mips/mips.c:4801
+#: config/iq2000/iq2000.c:3312 config/mips/mips.c:4804
#: config/xtensa/xtensa.c:1887
msgid "PRINT_OPERAND null pointer"
msgstr ""
@@ -9854,12 +9943,12 @@ msgstr ""
msgid "invalid %%P operand"
msgstr ""
-#: config/iq2000/iq2000.c:3389 config/rs6000/rs6000.c:10241
+#: config/iq2000/iq2000.c:3389 config/rs6000/rs6000.c:10249
#, c-format
msgid "invalid %%p value"
msgstr ""
-#: config/iq2000/iq2000.c:3453 config/mips/mips.c:4927
+#: config/iq2000/iq2000.c:3453 config/mips/mips.c:4930
#, c-format
msgid "invalid use of %%d, %%x, or %%X"
msgstr ""
@@ -9952,7 +10041,7 @@ msgid "post-increment address is not a register"
msgstr ""
#: config/m32r/m32r.c:2355 config/m32r/m32r.c:2371
-#: config/rs6000/rs6000.c:16563
+#: config/rs6000/rs6000.c:16852
msgid "bad address"
msgstr ""
@@ -10142,7 +10231,7 @@ msgstr ""
msgid "-fPIC is not currently supported on the 68000 or 68010\n"
msgstr ""
-#: config/m68k/m68k.c:543 config/rs6000/rs6000.c:12732
+#: config/m68k/m68k.c:543 config/rs6000/rs6000.c:13021
msgid "stack limit expression is not supported"
msgstr ""
@@ -10336,131 +10425,131 @@ msgstr ""
msgid "Maximum amount for a single stack increment operation"
msgstr ""
-#: config/mips/mips.c:3998
+#: config/mips/mips.c:4001
#, c-format
msgid "bad value (%s) for -mabi= switch"
msgstr ""
-#: config/mips/mips.c:4021
+#: config/mips/mips.c:4024
#, c-format
msgid ""
"-mips%s conflicts with the other architecture options, which specify a MIPS%"
"d processor"
msgstr ""
-#: config/mips/mips.c:4040
+#: config/mips/mips.c:4043
#, c-format
msgid "-march=%s is not compatible with the selected ABI"
msgstr ""
-#: config/mips/mips.c:4055
+#: config/mips/mips.c:4058
msgid "-mgp64 used with a 32-bit processor"
msgstr ""
-#: config/mips/mips.c:4057
+#: config/mips/mips.c:4060
msgid "-mgp32 used with a 64-bit ABI"
msgstr ""
-#: config/mips/mips.c:4059
+#: config/mips/mips.c:4062
msgid "-mgp64 used with a 32-bit ABI"
msgstr ""
-#: config/mips/mips.c:4077 config/mips/mips.c:4079 config/mips/mips.c:4081
-#: config/mips/mips.c:4161
+#: config/mips/mips.c:4080 config/mips/mips.c:4082 config/mips/mips.c:4084
+#: config/mips/mips.c:4164
#, c-format
msgid "unsupported combination: %s"
msgstr ""
-#: config/mips/mips.c:4156
+#: config/mips/mips.c:4159
msgid ""
"generation of Branch Likely instructions enabled, but not supported by "
"architecture"
msgstr ""
-#: config/mips/mips.c:4173
+#: config/mips/mips.c:4176
msgid "-G is incompatible with PIC code which is the default"
msgstr ""
-#: config/mips/mips.c:4240
+#: config/mips/mips.c:4243
msgid "-mips3d requires -mpaired-single"
msgstr ""
-#: config/mips/mips.c:4249
+#: config/mips/mips.c:4252
msgid "-mips3d/-mpaired-single must be used with -mfp64 -mhard-float"
msgstr ""
-#: config/mips/mips.c:4254
+#: config/mips/mips.c:4257
msgid "-mips3d/-mpaired-single must be used with -mips64"
msgstr ""
-#: config/mips/mips.c:4612
+#: config/mips/mips.c:4615
msgid "mips_debugger_offset called with non stack/frame/arg pointer"
msgstr ""
-#: config/mips/mips.c:4738
+#: config/mips/mips.c:4741
#, c-format
msgid "internal error: %%) found without a %%( in assembler pattern"
msgstr ""
-#: config/mips/mips.c:4752
+#: config/mips/mips.c:4755
#, c-format
msgid "internal error: %%] found without a %%[ in assembler pattern"
msgstr ""
-#: config/mips/mips.c:4765
+#: config/mips/mips.c:4768
#, c-format
msgid "internal error: %%> found without a %%< in assembler pattern"
msgstr ""
-#: config/mips/mips.c:4778
+#: config/mips/mips.c:4781
#, c-format
msgid "internal error: %%} found without a %%{ in assembler pattern"
msgstr ""
-#: config/mips/mips.c:4792
+#: config/mips/mips.c:4795
#, c-format
msgid "PRINT_OPERAND: unknown punctuation '%c'"
msgstr ""
-#: config/mips/mips.c:4821
+#: config/mips/mips.c:4824
#, c-format
msgid "PRINT_OPERAND, invalid insn for %%C"
msgstr ""
-#: config/mips/mips.c:4838
+#: config/mips/mips.c:4841
#, c-format
msgid "PRINT_OPERAND, invalid insn for %%N"
msgstr ""
-#: config/mips/mips.c:4847
+#: config/mips/mips.c:4850
#, c-format
msgid "PRINT_OPERAND, invalid insn for %%F"
msgstr ""
-#: config/mips/mips.c:4856
+#: config/mips/mips.c:4859
#, c-format
msgid "PRINT_OPERAND, invalid insn for %%W"
msgstr ""
-#: config/mips/mips.c:4877
+#: config/mips/mips.c:4880
#, c-format
msgid "invalid %%Y value"
msgstr ""
-#: config/mips/mips.c:4955
+#: config/mips/mips.c:4958
msgid "PRINT_OPERAND, invalid operand for relocation"
msgstr ""
-#: config/mips/mips.c:7517
+#: config/mips/mips.c:7556
#, c-format
msgid "cannot handle inconsistent calls to `%s'"
msgstr ""
-#: config/mips/mips.c:8907
+#: config/mips/mips.c:8946
msgid "the cpu name must be lower case"
msgstr ""
-#: config/mips/mips.c:8929
+#: config/mips/mips.c:8968
#, c-format
msgid "bad value (%s) for %s"
msgstr ""
@@ -10822,23 +10911,6 @@ msgstr ""
msgid "MMIX Internal: This is not a constant:"
msgstr ""
-#. For these target macros, there is no generic documentation here. You
-#. should read `Using and Porting GCC' for that. Only comments specific
-#. to the MMIX target are here.
-#.
-#. There are however references to the specific texinfo node (comments
-#. with "Node:"), so there should be little or nothing amiss. Probably
-#. the opposite, since we don't have to care about old littering and
-#. soon outdated generic comments.
-#. Node: Driver
-#. User symbols are in the same name-space as built-in symbols, but we
-#. don't need the built-in symbols, so remove those and instead apply
-#. stricter operand checking. Don't warn when expanding insns.
-#. Pass on -mset-program-start=N and -mset-data-start=M to the linker.
-#. Provide default program start 0x100 unless -mno-set-program-start.
-#. Don't do this if linking relocatably, with -r. For a final link,
-#. produce mmo, unless ELF is requested or when linking relocatably.
-#. Put unused option values here.
#: config/mmix/mmix.h:132
msgid "Set start-address of the program"
msgstr ""
@@ -11344,184 +11416,184 @@ msgstr ""
msgid "junk at end of #pragma longcall"
msgstr ""
-#: config/rs6000/rs6000.c:1223
+#: config/rs6000/rs6000.c:1231
msgid "-mmultiple is not supported on little endian systems"
msgstr ""
-#: config/rs6000/rs6000.c:1230
+#: config/rs6000/rs6000.c:1238
msgid "-mstring is not supported on little endian systems"
msgstr ""
-#: config/rs6000/rs6000.c:1244
+#: config/rs6000/rs6000.c:1252
#, c-format
msgid "unknown -mdebug-%s switch"
msgstr ""
-#: config/rs6000/rs6000.c:1256
+#: config/rs6000/rs6000.c:1264
#, c-format
msgid "unknown -mtraceback arg `%s'; expecting `full', `partial' or `none'"
msgstr ""
-#: config/rs6000/rs6000.c:1267
+#: config/rs6000/rs6000.c:1275
#, c-format
msgid "Unknown switch -mlong-double-%s"
msgstr ""
-#: config/rs6000/rs6000.c:1308
+#: config/rs6000/rs6000.c:1316
msgid "AltiVec and E500 instructions cannot coexist"
msgstr ""
#. Handle -mfix-and-continue.
-#: config/rs6000/rs6000.c:1354 config/rs6000/rs6000.c:1365
+#: config/rs6000/rs6000.c:1362 config/rs6000/rs6000.c:1373
#: config/rs6000/darwin.h:106
#, c-format
msgid "invalid option `%s'"
msgstr ""
-#: config/rs6000/rs6000.c:1586
+#: config/rs6000/rs6000.c:1594
#, c-format
msgid "unknown -m%s= option specified: '%s'"
msgstr ""
-#: config/rs6000/rs6000.c:1607
+#: config/rs6000/rs6000.c:1615
#, c-format
msgid "not configured for ABI: '%s'"
msgstr ""
-#: config/rs6000/rs6000.c:1613
+#: config/rs6000/rs6000.c:1621
#, c-format
msgid "unknown ABI specified: '%s'"
msgstr ""
-#: config/rs6000/rs6000.c:1627
+#: config/rs6000/rs6000.c:1635
#, c-format
msgid "unknown -malign-XXXXX option specified: '%s'"
msgstr ""
-#: config/rs6000/rs6000.c:4631
+#: config/rs6000/rs6000.c:4639
msgid ""
"Cannot return value in vector register because altivec instructions are "
"disabled, use -maltivec to enable them."
msgstr ""
-#: config/rs6000/rs6000.c:4765
+#: config/rs6000/rs6000.c:4773
msgid ""
"Cannot pass argument in vector register because altivec instructions are "
"disabled, use -maltivec to enable them."
msgstr ""
-#: config/rs6000/rs6000.c:6203
+#: config/rs6000/rs6000.c:6211
msgid "argument 1 must be a 5-bit signed literal"
msgstr ""
-#: config/rs6000/rs6000.c:6306 config/rs6000/rs6000.c:6976
+#: config/rs6000/rs6000.c:6314 config/rs6000/rs6000.c:6984
msgid "argument 2 must be a 5-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:6346
+#: config/rs6000/rs6000.c:6354
msgid "argument 1 of __builtin_altivec_predicate must be a constant"
msgstr ""
-#: config/rs6000/rs6000.c:6400
+#: config/rs6000/rs6000.c:6408
msgid "argument 1 of __builtin_altivec_predicate is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:6562
+#: config/rs6000/rs6000.c:6570
msgid "argument 3 must be a 4-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:6734
+#: config/rs6000/rs6000.c:6742
#, c-format
msgid "argument to `%s' must be a 2-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:6847
+#: config/rs6000/rs6000.c:6855
msgid "argument to dss must be a 2-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:6862
+#: config/rs6000/rs6000.c:6870
#, c-format
msgid "invalid parameter combination for `%s' AltiVec intrinsic"
msgstr ""
-#: config/rs6000/rs6000.c:7096
+#: config/rs6000/rs6000.c:7104
msgid "argument 1 of __builtin_spe_predicate must be a constant"
msgstr ""
-#: config/rs6000/rs6000.c:7169
+#: config/rs6000/rs6000.c:7177
msgid "argument 1 of __builtin_spe_predicate is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:10071
+#: config/rs6000/rs6000.c:10079
#, c-format
msgid "invalid %%f value"
msgstr ""
-#: config/rs6000/rs6000.c:10080
+#: config/rs6000/rs6000.c:10088
#, c-format
msgid "invalid %%F value"
msgstr ""
-#: config/rs6000/rs6000.c:10089
+#: config/rs6000/rs6000.c:10097
#, c-format
msgid "invalid %%G value"
msgstr ""
-#: config/rs6000/rs6000.c:10124
+#: config/rs6000/rs6000.c:10132
#, c-format
msgid "invalid %%j code"
msgstr ""
-#: config/rs6000/rs6000.c:10134
+#: config/rs6000/rs6000.c:10142
#, c-format
msgid "invalid %%J code"
msgstr ""
-#: config/rs6000/rs6000.c:10144
+#: config/rs6000/rs6000.c:10152
#, c-format
msgid "invalid %%k value"
msgstr ""
-#: config/rs6000/rs6000.c:10164 config/xtensa/xtensa.c:1937
+#: config/rs6000/rs6000.c:10172 config/xtensa/xtensa.c:1937
#, c-format
msgid "invalid %%K value"
msgstr ""
-#: config/rs6000/rs6000.c:10231
+#: config/rs6000/rs6000.c:10239
#, c-format
msgid "invalid %%O value"
msgstr ""
-#: config/rs6000/rs6000.c:10278
+#: config/rs6000/rs6000.c:10286
#, c-format
msgid "invalid %%q value"
msgstr ""
-#: config/rs6000/rs6000.c:10322
+#: config/rs6000/rs6000.c:10330
#, c-format
msgid "invalid %%S value"
msgstr ""
-#: config/rs6000/rs6000.c:10364
+#: config/rs6000/rs6000.c:10372
#, c-format
msgid "invalid %%T value"
msgstr ""
-#: config/rs6000/rs6000.c:10374
+#: config/rs6000/rs6000.c:10382
#, c-format
msgid "invalid %%u value"
msgstr ""
-#: config/rs6000/rs6000.c:10383 config/xtensa/xtensa.c:1907
+#: config/rs6000/rs6000.c:10391 config/xtensa/xtensa.c:1907
#, c-format
msgid "invalid %%v value"
msgstr ""
-#: config/rs6000/rs6000.c:15209
+#: config/rs6000/rs6000.c:15498
msgid "no profiling of 64-bit code for this ABI"
msgstr ""
-#: config/rs6000/rs6000.c:16281
+#: config/rs6000/rs6000.c:16570
msgid "use of 'long' in AltiVec types is deprecated; use 'int'"
msgstr ""
@@ -11965,79 +12037,79 @@ msgstr ""
msgid "-m%s not supported in this configuration"
msgstr ""
-#: config/s390/s390.c:1238
+#: config/s390/s390.c:1258
#, c-format
msgid "Unknown cpu used in -march=%s."
msgstr ""
-#: config/s390/s390.c:1257
+#: config/s390/s390.c:1277
#, c-format
msgid "Unknown cpu used in -mtune=%s."
msgstr ""
-#: config/s390/s390.c:1262
+#: config/s390/s390.c:1282
#, c-format
msgid "z/Architecture mode not supported on %s."
msgstr ""
-#: config/s390/s390.c:1264
+#: config/s390/s390.c:1284
msgid "64-bit ABI not supported in ESA/390 mode."
msgstr ""
-#: config/s390/s390.c:1270
+#: config/s390/s390.c:1290
msgid "invalid value for -mwarn-framesize"
msgstr ""
-#: config/s390/s390.c:1280
+#: config/s390/s390.c:1300
msgid "invalid value for -mstack-size"
msgstr ""
-#: config/s390/s390.c:1283
+#: config/s390/s390.c:1303
msgid "stack size must be an exact power of 2"
msgstr ""
-#: config/s390/s390.c:1289
+#: config/s390/s390.c:1309
msgid "invalid value for -mstack-guard"
msgstr ""
-#: config/s390/s390.c:1292
+#: config/s390/s390.c:1312
msgid "stack size must be greater than the stack guard value"
msgstr ""
-#: config/s390/s390.c:1295
+#: config/s390/s390.c:1315
msgid "stack guard value must be an exact power of 2"
msgstr ""
-#: config/s390/s390.c:1298
+#: config/s390/s390.c:1318
msgid "-mstack-size implies use of -mstack-guard"
msgstr ""
-#: config/s390/s390.c:1302
+#: config/s390/s390.c:1322
msgid "-mstack-guard implies use of -mstack-size"
msgstr ""
-#: config/s390/s390.c:3995
+#: config/s390/s390.c:4024
msgid "Cannot decompose address."
msgstr ""
-#: config/s390/s390.c:4166
+#: config/s390/s390.c:4195
msgid "UNKNOWN in print_operand !?"
msgstr ""
-#: config/s390/s390.c:6212
+#: config/s390/s390.c:6241
msgid "Total size of local variables exceeds architecture limit."
msgstr ""
-#: config/s390/s390.c:6751
+#: config/s390/s390.c:6780
#, c-format
msgid "frame size of `%s' is "
msgstr ""
-#: config/s390/s390.c:6751
+#: config/s390/s390.c:6780
msgid " bytes"
msgstr ""
-#: config/s390/s390.c:6755
+#: config/s390/s390.c:6784
#, c-format
msgid "`%s' uses dynamic stack allocation"
msgstr ""
@@ -12139,6 +12211,7 @@ msgid "attribute interrupt_handler is not compatible with -m5-compact"
msgstr ""
#. The sp_switch attribute only has meaning for interrupt functions.
+#. The trap_exit attribute only has meaning for interrupt functions.
#: config/sh/sh.c:7174 config/sh/sh.c:7209
#, c-format
msgid "`%s' attribute only applies to interrupt functions"
@@ -12193,7 +12266,7 @@ msgstr ""
msgid "%Hexternal linkage required for symbol '%D' because of '%s' attribute."
msgstr ""
-#: config/sh/symbian.c:893 cp/tree.c:2355
+#: config/sh/symbian.c:892 cp/tree.c:2355
#, c-format
msgid "lang_* check: failed in %s, at %s:%d"
msgstr ""
@@ -12993,228 +13066,228 @@ msgid ""
"invalid initialization of reference of type %qT from expression of type %qT"
msgstr ""
-#: cp/class.c:276
+#: cp/class.c:274
msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
msgstr ""
-#: cp/class.c:888
+#: cp/class.c:886
msgid "Java class %qT cannot have an implicit non-trivial destructor"
msgstr ""
-#: cp/class.c:889
+#: cp/class.c:887
msgid "Java class %qT cannot have a destructor"
msgstr ""
-#: cp/class.c:988
+#: cp/class.c:986
msgid "`%#D' and `%#D' cannot be overloaded"
msgstr ""
-#: cp/class.c:1045
+#: cp/class.c:1043
msgid "conflicting access specifications for method %qD, ignored"
msgstr ""
-#: cp/class.c:1048
+#: cp/class.c:1046
#, c-format
msgid "conflicting access specifications for field %qE, ignored"
msgstr ""
-#: cp/class.c:1098
+#: cp/class.c:1096
msgid "%qD names constructor"
msgstr ""
-#: cp/class.c:1103
+#: cp/class.c:1101
msgid "%qD invalid in %qT"
msgstr ""
-#: cp/class.c:1111
+#: cp/class.c:1109
msgid "no members matching %qD in %q#T"
msgstr ""
-#: cp/class.c:1143 cp/class.c:1151
+#: cp/class.c:1141 cp/class.c:1149
msgid "%qD invalid in %q#T"
msgstr ""
-#: cp/class.c:1144
+#: cp/class.c:1142
msgid " because of local method %q#D with same name"
msgstr ""
-#: cp/class.c:1152
+#: cp/class.c:1150
msgid " because of local member %q#D with same name"
msgstr ""
-#: cp/class.c:1197
+#: cp/class.c:1195
msgid "base class %q#T has a non-virtual destructor"
msgstr ""
-#: cp/class.c:1216
+#: cp/class.c:1214
msgid ""
"base %qT with only non-default constructor in class without a constructor"
msgstr ""
-#: cp/class.c:1523
+#: cp/class.c:1521
msgid "all member functions in class %qT are private"
msgstr ""
-#: cp/class.c:1534
+#: cp/class.c:1532
msgid "%q#T only defines a private destructor and has no friends"
msgstr ""
-#: cp/class.c:1574
+#: cp/class.c:1572
msgid "%q#T only defines private constructors and has no friends"
msgstr ""
-#: cp/class.c:1955
+#: cp/class.c:1910
msgid "no unique final overrider for %qD in %qT"
msgstr ""
#. Here we know it is a hider, and no overrider exists.
-#: cp/class.c:2409
+#: cp/class.c:2361
msgid "%qD was hidden"
msgstr ""
-#: cp/class.c:2410
+#: cp/class.c:2362
msgid " by %qD"
msgstr ""
-#: cp/class.c:2451 cp/decl2.c:1143
+#: cp/class.c:2403 cp/decl2.c:1139
msgid "%q#D invalid; an anonymous union can only have non-static data members"
msgstr ""
-#: cp/class.c:2458 cp/decl2.c:1150
+#: cp/class.c:2410 cp/decl2.c:1146
msgid "private member %q#D in anonymous union"
msgstr ""
-#: cp/class.c:2461 cp/decl2.c:1152
+#: cp/class.c:2413 cp/decl2.c:1148
msgid "protected member %q#D in anonymous union"
msgstr ""
-#: cp/class.c:2575
+#: cp/class.c:2527
msgid ""
"vtable layout for class %qT may not be ABI-compliant and may change in a "
"future version of GCC due to implicit virtual destructor"
msgstr ""
-#: cp/class.c:2633
+#: cp/class.c:2585
msgid "bit-field %q#D with non-integral type"
msgstr ""
-#: cp/class.c:2653
+#: cp/class.c:2605
msgid "bit-field %qD width not an integer constant"
msgstr ""
-#: cp/class.c:2659
+#: cp/class.c:2611
msgid "negative width in bit-field %qD"
msgstr ""
-#: cp/class.c:2664
+#: cp/class.c:2616
msgid "zero width for bit-field %qD"
msgstr ""
-#: cp/class.c:2670
+#: cp/class.c:2622
msgid "width of %qD exceeds its type"
msgstr ""
-#: cp/class.c:2679
+#: cp/class.c:2631
msgid "%qD is too small to hold all values of %q#T"
msgstr ""
-#: cp/class.c:2741
+#: cp/class.c:2693
msgid "member %q#D with constructor not allowed in union"
msgstr ""
-#: cp/class.c:2744
+#: cp/class.c:2696
msgid "member %q#D with destructor not allowed in union"
msgstr ""
-#: cp/class.c:2747
+#: cp/class.c:2699
msgid "member %q#D with copy assignment operator not allowed in union"
msgstr ""
-#: cp/class.c:2774
+#: cp/class.c:2726
msgid "multiple fields in union %qT initialized"
msgstr ""
-#: cp/class.c:2840
+#: cp/class.c:2792
msgid "ignoring packed attribute on unpacked non-POD field %q#D"
msgstr ""
-#: cp/class.c:2900
+#: cp/class.c:2852
msgid "%qD may not be static because it is a member of a union"
msgstr ""
-#: cp/class.c:2905
+#: cp/class.c:2857
msgid "%qD may not have reference type `%T' because it is a member of a union"
msgstr ""
-#: cp/class.c:2913
+#: cp/class.c:2865
msgid "field %qD in local class cannot be static"
msgstr ""
-#: cp/class.c:2919
+#: cp/class.c:2871
msgid "field %qD invalidly declared function type"
msgstr ""
-#: cp/class.c:2925
+#: cp/class.c:2877
msgid "field %qD invalidly declared method type"
msgstr ""
-#: cp/class.c:2958
+#: cp/class.c:2910
msgid "non-static reference %q#D in class without a constructor"
msgstr ""
-#: cp/class.c:3006
+#: cp/class.c:2958
msgid "non-static const member %q#D in class without a constructor"
msgstr ""
-#: cp/class.c:3021
+#: cp/class.c:2973
msgid "field %q#D with same name as class"
msgstr ""
-#: cp/class.c:3055
+#: cp/class.c:3007
msgid "%q#T has pointer data members"
msgstr ""
-#: cp/class.c:3059
+#: cp/class.c:3011
msgid " but does not override %<%T(const %T&)%>"
msgstr ""
-#: cp/class.c:3061
+#: cp/class.c:3013
msgid " or %<operator=(const %T&)%>"
msgstr ""
-#: cp/class.c:3064
+#: cp/class.c:3016
msgid " but does not override %<operator=(const %T&)%>"
msgstr ""
-#: cp/class.c:3497
+#: cp/class.c:3449
msgid ""
"offset of empty base %qT may not be ABI-compliant and maychange in a future "
"version of GCC"
msgstr ""
-#: cp/class.c:3609
+#: cp/class.c:3561
msgid "class %qT will be considered nearly empty in a future version of GCC"
msgstr ""
-#: cp/class.c:3691
+#: cp/class.c:3643
msgid "initializer specified for non-virtual method %qD"
msgstr ""
-#: cp/class.c:4350
+#: cp/class.c:4302
msgid ""
"offset of virtual base %qT is not ABI-compliant and may change in a future "
"version of GCC"
msgstr ""
-#: cp/class.c:4445
+#: cp/class.c:4397
msgid "direct base %qT inaccessible in %qT due to ambiguity"
msgstr ""
-#: cp/class.c:4457
+#: cp/class.c:4409
msgid "virtual base %qT inaccessible in %qT due to ambiguity"
msgstr ""
-#: cp/class.c:4628
+#: cp/class.c:4580
msgid ""
"size assigned to `%T' may not be ABI-compliant and may change in a future "
"version of GCC"
@@ -13222,76 +13295,76 @@ msgstr ""
#. Versions of G++ before G++ 3.4 did not reset the
#. DECL_MODE.
-#: cp/class.c:4667
+#: cp/class.c:4619
msgid ""
"the offset of %qD may not be ABI-compliant and may change in a future "
"version of GCC"
msgstr ""
-#: cp/class.c:4690
+#: cp/class.c:4642
msgid ""
"offset of %qD is not ABI-compliant and may change in a future version of GCC"
msgstr ""
-#: cp/class.c:4700
+#: cp/class.c:4652
msgid ""
"%qD contains empty classes which may cause base classes to be placed at "
"different locations in a future version of GCC"
msgstr ""
-#: cp/class.c:4759
+#: cp/class.c:4711
msgid ""
"layout of classes derived from empty class %qT may change in a future "
"version of GCC"
msgstr ""
-#: cp/class.c:4900
+#: cp/class.c:4852
msgid "redefinition of %q#T"
msgstr ""
-#: cp/class.c:5044
+#: cp/class.c:4996
msgid "%q#T has virtual functions but non-virtual destructor"
msgstr ""
-#: cp/class.c:5139
+#: cp/class.c:5091
msgid "trying to finish struct, but kicked out due to previous parse errors"
msgstr ""
-#: cp/class.c:5557
+#: cp/class.c:5509
#, c-format
msgid "language string `\"%E\"' not recognized"
msgstr ""
-#: cp/class.c:5644
+#: cp/class.c:5596
msgid ""
"cannot resolve overloaded function `%D' based on conversion to type `%T'"
msgstr ""
-#: cp/class.c:5769
+#: cp/class.c:5721
msgid "no matches converting function %qD to type %q#T"
msgstr ""
-#: cp/class.c:5792
+#: cp/class.c:5744
msgid "converting overloaded function %qD to type %q#T is ambiguous"
msgstr ""
-#: cp/class.c:5818
+#: cp/class.c:5770
msgid "assuming pointer to member %qD"
msgstr ""
-#: cp/class.c:5821
+#: cp/class.c:5773
msgid "(a pointer to member can only be formed with %<&%E%>)"
msgstr ""
-#: cp/class.c:5866 cp/class.c:6045 cp/class.c:6052
+#: cp/class.c:5818 cp/class.c:5997 cp/class.c:6004
msgid "not enough type information"
msgstr ""
-#: cp/class.c:5883
+#: cp/class.c:5835
msgid "argument of type %qT does not match %qT"
msgstr ""
-#: cp/class.c:6029
+#: cp/class.c:5981
msgid "invalid operation on uninstantiated type"
msgstr ""
@@ -13300,11 +13373,11 @@ msgstr ""
#. A name N used in a class S shall refer to the same declaration
#. in its context and when re-evaluated in the completed scope of
#. S.
-#: cp/class.c:6295 cp/decl.c:1230 cp/name-lookup.c:577 cp/pt.c:2143
+#: cp/class.c:6247 cp/decl.c:1230 cp/name-lookup.c:577 cp/pt.c:2166
msgid "declaration of %q#D"
msgstr ""
-#: cp/class.c:6296
+#: cp/class.c:6248
msgid "changes meaning of %qD from %q+#D"
msgstr ""
@@ -13942,7 +14015,7 @@ msgstr ""
msgid "definition of implicitly-declared %qD"
msgstr ""
-#: cp/decl.c:5822 cp/decl2.c:719
+#: cp/decl.c:5822 cp/decl2.c:715
msgid "no %q#D member function declared in class %qT"
msgstr ""
@@ -14472,102 +14545,102 @@ msgstr ""
#. or implicitly defined), there's no need to worry about their
#. existence. Theoretically, they should never even be
#. instantiated, but that's hard to forestall.
-#: cp/decl.c:8586
+#: cp/decl.c:8587
msgid "invalid constructor; you probably meant %<%T (const %T&)%>"
msgstr ""
-#: cp/decl.c:8710
+#: cp/decl.c:8711
msgid "%qD may not be declared within a namespace"
msgstr ""
-#: cp/decl.c:8712
+#: cp/decl.c:8713
msgid "%qD may not be declared as static"
msgstr ""
-#: cp/decl.c:8732
+#: cp/decl.c:8733
msgid "%qD must be a nonstatic member function"
msgstr ""
-#: cp/decl.c:8738
+#: cp/decl.c:8739
msgid ""
"%qD must be either a non-static member function or a non-member function"
msgstr ""
-#: cp/decl.c:8756
+#: cp/decl.c:8757
msgid "%qD must have an argument of class or enumerated type"
msgstr ""
-#: cp/decl.c:8791
+#: cp/decl.c:8792
#, c-format
msgid "conversion to %s%s will never use a type conversion operator"
msgstr ""
#. 13.4.0.3
-#: cp/decl.c:8799
+#: cp/decl.c:8800
msgid "ISO C++ prohibits overloading operator ?:"
msgstr ""
-#: cp/decl.c:8849
+#: cp/decl.c:8850
msgid "postfix %qD must take %<int%> as its argument"
msgstr ""
-#: cp/decl.c:8853
+#: cp/decl.c:8854
msgid "postfix %qD must take %<int%> as its second argument"
msgstr ""
-#: cp/decl.c:8860
+#: cp/decl.c:8861
msgid "%qD must take either zero or one argument"
msgstr ""
-#: cp/decl.c:8862
+#: cp/decl.c:8863
msgid "%qD must take either one or two arguments"
msgstr ""
-#: cp/decl.c:8883
+#: cp/decl.c:8884
msgid "prefix %qD should return %qT"
msgstr ""
-#: cp/decl.c:8889
+#: cp/decl.c:8890
msgid "postfix %qD should return %qT"
msgstr ""
-#: cp/decl.c:8898
+#: cp/decl.c:8899
msgid "%qD must take %<void%>"
msgstr ""
-#: cp/decl.c:8900 cp/decl.c:8908
+#: cp/decl.c:8901 cp/decl.c:8909
msgid "%qD must take exactly one argument"
msgstr ""
-#: cp/decl.c:8910
+#: cp/decl.c:8911
msgid "%qD must take exactly two arguments"
msgstr ""
-#: cp/decl.c:8918
+#: cp/decl.c:8919
msgid "user-defined %qD always evaluates both arguments"
msgstr ""
-#: cp/decl.c:8932
+#: cp/decl.c:8933
msgid "%qD should return by value"
msgstr ""
-#: cp/decl.c:8944 cp/decl.c:8947
+#: cp/decl.c:8945 cp/decl.c:8948
msgid "%qD cannot have default arguments"
msgstr ""
-#: cp/decl.c:9007
+#: cp/decl.c:9008
msgid "using typedef-name %qD after %qs"
msgstr ""
-#: cp/decl.c:9013
+#: cp/decl.c:9014
msgid "using template type parameter %qT after %qs"
msgstr ""
-#: cp/decl.c:9021
+#: cp/decl.c:9022
msgid "%qT referred to as %qs"
msgstr ""
-#: cp/decl.c:9027
+#: cp/decl.c:9028
msgid "%qT referred to as enum"
msgstr ""
@@ -14578,47 +14651,47 @@ msgstr ""
#. void f(class C); // No template header here
#.
#. then the required template argument is missing.
-#: cp/decl.c:9042
+#: cp/decl.c:9043
msgid "template argument required for %<%s %T%>"
msgstr ""
-#: cp/decl.c:9187
+#: cp/decl.c:9188
msgid "use of enum %q#D without previous declaration"
msgstr ""
-#: cp/decl.c:9205
+#: cp/decl.c:9206
msgid "redeclaration of %qT as a non-template"
msgstr ""
-#: cp/decl.c:9298
+#: cp/decl.c:9299
msgid "derived union %qT invalid"
msgstr ""
-#: cp/decl.c:9304
+#: cp/decl.c:9305
msgid "Java class %qT cannot have multiple bases"
msgstr ""
-#: cp/decl.c:9312
+#: cp/decl.c:9313
msgid "Java class %qT cannot have virtual bases"
msgstr ""
-#: cp/decl.c:9331
+#: cp/decl.c:9332
msgid "base type %qT fails to be a struct or class type"
msgstr ""
-#: cp/decl.c:9364
+#: cp/decl.c:9365
msgid "recursive type %qT undefined"
msgstr ""
-#: cp/decl.c:9366
+#: cp/decl.c:9367
msgid "duplicate base type %qT invalid"
msgstr ""
-#: cp/decl.c:9434
+#: cp/decl.c:9435
msgid "multiple definition of %q#T"
msgstr ""
-#: cp/decl.c:9435
+#: cp/decl.c:9436
msgid "%Jprevious definition here"
msgstr ""
@@ -14626,39 +14699,39 @@ msgstr ""
#.
#. IF no integral type can represent all the enumerator values, the
#. enumeration is ill-formed.
-#: cp/decl.c:9560
+#: cp/decl.c:9561
msgid "no integral type can represent all of the enumerator values for %qT"
msgstr ""
-#: cp/decl.c:9661
+#: cp/decl.c:9662
msgid "enumerator value for %qD not integer constant"
msgstr ""
-#: cp/decl.c:9688
+#: cp/decl.c:9689
msgid "overflow in enumeration values at %qD"
msgstr ""
-#: cp/decl.c:9759
+#: cp/decl.c:9760
msgid "return type %q#T is incomplete"
msgstr ""
-#: cp/decl.c:9874
+#: cp/decl.c:9875
msgid "%<operator=%> should return a reference to %<*this%>"
msgstr ""
-#: cp/decl.c:10198
+#: cp/decl.c:10199
msgid "parameter %qD declared void"
msgstr ""
-#: cp/decl.c:10680
+#: cp/decl.c:10681
msgid "invalid member function declaration"
msgstr ""
-#: cp/decl.c:10695
+#: cp/decl.c:10696
msgid "%qD is already defined in class %qT"
msgstr ""
-#: cp/decl.c:10906
+#: cp/decl.c:10907
msgid "static member function `%#D' declared with type qualifiers"
msgstr ""
@@ -14703,7 +14776,7 @@ msgstr ""
msgid "invalid use of %<virtual%> in template declaration of %q#D"
msgstr ""
-#: cp/decl2.c:507 cp/pt.c:2902
+#: cp/decl2.c:507 cp/pt.c:2933
msgid "template declaration of %q#D"
msgstr ""
@@ -14715,95 +14788,95 @@ msgstr ""
msgid "Java method %qD has non-Java parameter type %qT"
msgstr ""
-#: cp/decl2.c:681
+#: cp/decl2.c:677
msgid "prototype for `%#D' does not match any in class `%T'"
msgstr ""
-#: cp/decl2.c:782
+#: cp/decl2.c:778
msgid "local class %q#T shall not have static data member %q#D"
msgstr ""
-#: cp/decl2.c:790
+#: cp/decl2.c:786
msgid "initializer invalid for static member with constructor"
msgstr ""
-#: cp/decl2.c:793
+#: cp/decl2.c:789
msgid "(an out of class initialization is required)"
msgstr ""
-#: cp/decl2.c:874
+#: cp/decl2.c:870
msgid "member %qD conflicts with virtual function table field name"
msgstr ""
-#: cp/decl2.c:891
+#: cp/decl2.c:887
msgid "%qD is already defined in %qT"
msgstr ""
-#: cp/decl2.c:937
+#: cp/decl2.c:933
msgid "field initializer is not constant"
msgstr ""
-#: cp/decl2.c:965
+#: cp/decl2.c:961
msgid "`asm' specifiers are not permitted on non-static data members"
msgstr ""
-#: cp/decl2.c:1011
+#: cp/decl2.c:1007
msgid "cannot declare %qD to be a bit-field type"
msgstr ""
-#: cp/decl2.c:1021
+#: cp/decl2.c:1017
msgid "cannot declare bit-field %qD with function type"
msgstr ""
-#: cp/decl2.c:1028
+#: cp/decl2.c:1024
msgid "%qD is already defined in the class %qT"
msgstr ""
-#: cp/decl2.c:1035
+#: cp/decl2.c:1031
msgid "static member %qD cannot be a bit-field"
msgstr ""
-#: cp/decl2.c:1094
+#: cp/decl2.c:1090
msgid "initializer specified for non-member function %qD"
msgstr ""
-#: cp/decl2.c:1098
+#: cp/decl2.c:1094
msgid "invalid initializer for virtual method %qD"
msgstr ""
-#: cp/decl2.c:1130
+#: cp/decl2.c:1126
msgid "anonymous struct not inside named type"
msgstr ""
-#: cp/decl2.c:1201
+#: cp/decl2.c:1197
msgid "namespace-scope anonymous aggregates must be static"
msgstr ""
-#: cp/decl2.c:1208
+#: cp/decl2.c:1204
msgid "anonymous union with no members"
msgstr ""
-#: cp/decl2.c:1244
+#: cp/decl2.c:1240
msgid "%<operator new%> must return type %qT"
msgstr ""
-#: cp/decl2.c:1253
+#: cp/decl2.c:1249
msgid "%<operator new%> takes type %<size_t%> (%qT) as first parameter"
msgstr ""
-#: cp/decl2.c:1282
+#: cp/decl2.c:1278
msgid "%<operator delete%> must return type %qT"
msgstr ""
-#: cp/decl2.c:1291
+#: cp/decl2.c:1287
msgid "%<operator delete%> takes type %qT as first parameter"
msgstr ""
-#: cp/decl2.c:3028
+#: cp/decl2.c:3024
msgid "inline function `%D' used but never defined"
msgstr ""
-#: cp/decl2.c:3178
+#: cp/decl2.c:3174
msgid "default argument missing for parameter %P of %q+#D"
msgstr ""
@@ -14835,7 +14908,7 @@ msgstr ""
msgid "throwing NULL, which has integral, not pointer type"
msgstr ""
-#: cp/except.c:599 cp/init.c:1875
+#: cp/except.c:599 cp/init.c:1873
msgid "%qD should never be overloaded"
msgstr ""
@@ -14922,184 +14995,184 @@ msgstr ""
msgid "argument to `%s' missing\n"
msgstr ""
-#: cp/init.c:318
+#: cp/init.c:316
msgid "%J%qD should be initialized in the member initialization list"
msgstr ""
-#: cp/init.c:365
+#: cp/init.c:363
msgid "%Jdefault-initialization of %q#D, which has reference type"
msgstr ""
-#: cp/init.c:371
+#: cp/init.c:369
msgid "%Juninitialized reference member %qD"
msgstr ""
-#: cp/init.c:374
+#: cp/init.c:372
msgid "%Juninitialized member %qD with %<const%> type %qT"
msgstr ""
-#: cp/init.c:517
+#: cp/init.c:515
msgid "%qD will be initialized after"
msgstr ""
-#: cp/init.c:520
+#: cp/init.c:518
msgid "base %qT will be initialized after"
msgstr ""
-#: cp/init.c:523
+#: cp/init.c:521
msgid " %q#D"
msgstr ""
-#: cp/init.c:525
+#: cp/init.c:523
msgid " base %qT"
msgstr ""
-#: cp/init.c:526
+#: cp/init.c:524
msgid "%J when initialized here"
msgstr ""
-#: cp/init.c:542
+#: cp/init.c:540
msgid "%Jmultiple initializations given for %qD"
msgstr ""
-#: cp/init.c:545
+#: cp/init.c:543
msgid "%Jmultiple initializations given for base %qT"
msgstr ""
-#: cp/init.c:612
+#: cp/init.c:610
msgid "%Jinitializations for multiple members of %qT"
msgstr ""
-#: cp/init.c:669
+#: cp/init.c:667
msgid ""
"%Jbase class %q#T should be explicitly initialized in the copy constructor"
msgstr ""
-#: cp/init.c:893 cp/init.c:912
+#: cp/init.c:891 cp/init.c:910
msgid "class %qT does not have any field named %qD"
msgstr ""
-#: cp/init.c:899
+#: cp/init.c:897
msgid ""
"%q#D is a static data member; it can only be initialized at its definition"
msgstr ""
-#: cp/init.c:906
+#: cp/init.c:904
msgid "%q#D is not a non-static data member of %qT"
msgstr ""
-#: cp/init.c:945
+#: cp/init.c:943
msgid "unnamed initializer for %qT, which has no base classes"
msgstr ""
-#: cp/init.c:953
+#: cp/init.c:951
msgid "unnamed initializer for %qT, which uses multiple inheritance"
msgstr ""
-#: cp/init.c:999
+#: cp/init.c:997
msgid "%qD is both a direct base and an indirect virtual base"
msgstr ""
-#: cp/init.c:1007
+#: cp/init.c:1005
msgid "type %qD is not a direct or virtual base of %qT"
msgstr ""
-#: cp/init.c:1010
+#: cp/init.c:1008
msgid "type %qD is not a direct base of %qT"
msgstr ""
-#: cp/init.c:1090
+#: cp/init.c:1088
msgid "bad array initializer"
msgstr ""
-#: cp/init.c:1289
+#: cp/init.c:1287
msgid "%qT is not an aggregate type"
msgstr ""
-#: cp/init.c:1381
+#: cp/init.c:1379
msgid "qualified type %qT does not match destructor name %<~%T%>"
msgstr ""
-#: cp/init.c:1389
+#: cp/init.c:1387
msgid "incomplete type %qT does not have member %qD"
msgstr ""
-#: cp/init.c:1408
+#: cp/init.c:1406
msgid "%qD is not a member of type %qT"
msgstr ""
-#: cp/init.c:1435
+#: cp/init.c:1433
msgid "invalid pointer to bit-field %qD"
msgstr ""
-#: cp/init.c:1537
+#: cp/init.c:1535
msgid "invalid use of non-static member function %qD"
msgstr ""
-#: cp/init.c:1543
+#: cp/init.c:1541
msgid "invalid use of non-static data member %qD"
msgstr ""
-#: cp/init.c:1660
+#: cp/init.c:1658
msgid "new cannot be applied to a reference type"
msgstr ""
-#: cp/init.c:1666
+#: cp/init.c:1664
msgid "new cannot be applied to a function type"
msgstr ""
-#: cp/init.c:1698
+#: cp/init.c:1696
msgid "call to Java constructor, while %<jclass%> undefined"
msgstr ""
-#: cp/init.c:1714
+#: cp/init.c:1712
msgid "can't find class$"
msgstr ""
-#: cp/init.c:1827
+#: cp/init.c:1825
msgid "invalid type %<void%> for new"
msgstr ""
-#: cp/init.c:1837
+#: cp/init.c:1835
msgid "uninitialized const in %<new%> of %q#T"
msgstr ""
-#: cp/init.c:1870
+#: cp/init.c:1868
#, c-format
msgid "call to Java constructor with %qs undefined"
msgstr ""
-#: cp/init.c:1910
+#: cp/init.c:1908
msgid "request for member %qD is ambiguous"
msgstr ""
-#: cp/init.c:2043
+#: cp/init.c:2041
msgid "ISO C++ forbids initialization in array new"
msgstr ""
-#: cp/init.c:2513
+#: cp/init.c:2511
msgid "initializer ends prematurely"
msgstr ""
-#: cp/init.c:2566
+#: cp/init.c:2564
msgid "cannot initialize multi-dimensional array with initializer"
msgstr ""
-#: cp/init.c:2725
+#: cp/init.c:2723
msgid "possible problem detected in invocation of delete operator:"
msgstr ""
-#: cp/init.c:2728
+#: cp/init.c:2726
msgid ""
"neither the destructor nor the class-specific operator delete will be "
"called, even if they are declared when the class is defined."
msgstr ""
-#: cp/init.c:2749
+#: cp/init.c:2747
msgid "unknown array size in delete"
msgstr ""
-#: cp/init.c:3009
+#: cp/init.c:3007
msgid "type to vector delete is neither pointer or array type"
msgstr ""
@@ -15459,7 +15532,7 @@ msgstr ""
msgid "new types may not be defined in a return type"
msgstr ""
-#: cp/parser.c:1965 cp/pt.c:4279
+#: cp/parser.c:1965 cp/pt.c:4312
msgid "%qT is not a template"
msgstr ""
@@ -15637,95 +15710,95 @@ msgstr ""
msgid "a template-id may not appear in a using-declaration"
msgstr ""
-#: cp/parser.c:10526
+#: cp/parser.c:10532
msgid "an asm-specification is not allowed on a function-definition"
msgstr ""
-#: cp/parser.c:10528
+#: cp/parser.c:10534
msgid "attributes are not allowed on a function-definition"
msgstr ""
-#: cp/parser.c:10659
+#: cp/parser.c:10665
msgid "attributes after parenthesized initializer ignored"
msgstr ""
-#: cp/parser.c:11088
+#: cp/parser.c:11094
msgid "%<%T::%D%> is not a type"
msgstr ""
-#: cp/parser.c:11133
+#: cp/parser.c:11139
msgid "invalid use of constructor as a template"
msgstr ""
-#: cp/parser.c:11134
+#: cp/parser.c:11140
msgid ""
"use %<%T::%D%> instead of %<%T::%T%> to name the constructor in a qualified "
"name"
msgstr ""
-#: cp/parser.c:11322
+#: cp/parser.c:11328
msgid "duplicate cv-qualifier"
msgstr ""
-#: cp/parser.c:11836
+#: cp/parser.c:11842
msgid "file ends in default argument"
msgstr ""
-#: cp/parser.c:11896
+#: cp/parser.c:11902
msgid "deprecated use of default argument for parameter of non-function"
msgstr ""
-#: cp/parser.c:11899
+#: cp/parser.c:11905
msgid "default arguments are only permitted for function parameters"
msgstr ""
-#: cp/parser.c:12641
+#: cp/parser.c:12647
msgid "declaration of %qD in %qD which does not enclose %qD"
msgstr ""
-#: cp/parser.c:12654
+#: cp/parser.c:12660
msgid "extra qualification ignored"
msgstr ""
-#: cp/parser.c:12665
+#: cp/parser.c:12671
msgid "an explicit specialization must be preceded by %<template <>%>"
msgstr ""
-#: cp/parser.c:12949
+#: cp/parser.c:12955
msgid "%Hextra %<;%>"
msgstr ""
-#: cp/parser.c:12967
+#: cp/parser.c:12973
msgid "a class-key must be used when declaring a friend"
msgstr ""
-#: cp/parser.c:12981
+#: cp/parser.c:12987
msgid "friend declaration does not name a class or function"
msgstr ""
-#: cp/parser.c:13154
+#: cp/parser.c:13160
msgid "pure-specifier on function-definition"
msgstr ""
-#: cp/parser.c:13427
+#: cp/parser.c:13433
msgid "keyword %<typename%> not allowed outside of templates"
msgstr ""
-#: cp/parser.c:13429
+#: cp/parser.c:13435
msgid ""
"keyword %<typename%> not allowed in this context (the base class is "
"implicitly a type)"
msgstr ""
-#: cp/parser.c:13702
+#: cp/parser.c:13708
msgid "invalid catch parameter"
msgstr ""
-#: cp/parser.c:14264
+#: cp/parser.c:14270
msgid "reference to %qD is ambiguous"
msgstr ""
-#: cp/parser.c:14433
+#: cp/parser.c:14439
msgid "too few template-parameter-lists"
msgstr ""
@@ -15733,143 +15806,143 @@ msgstr ""
#. something like:
#.
#. template <class T> template <class U> void S::f();
-#: cp/parser.c:14448
+#: cp/parser.c:14454
msgid "too many template-parameter-lists"
msgstr ""
#. Skip the entire function.
-#: cp/parser.c:14672
+#: cp/parser.c:14678
msgid "invalid function declaration"
msgstr ""
#. Issue an error message.
-#: cp/parser.c:14709
+#: cp/parser.c:14715
msgid "named return values are no longer supported"
msgstr ""
-#: cp/parser.c:15054
+#: cp/parser.c:15060
msgid "%H%<>>%> should be %<> >%> within a nested template argument list"
msgstr ""
-#: cp/parser.c:15069
+#: cp/parser.c:15075
msgid "spurious %<>>%>, use %<>%> to terminate a template argument list"
msgstr ""
-#: cp/parser.c:15074
+#: cp/parser.c:15080
msgid "missing %<>%> to terminate the template argument list"
msgstr ""
-#: cp/parser.c:15593
+#: cp/parser.c:15599
msgid "%qs tag used in naming %q#T"
msgstr ""
-#: cp/parser.c:15614
+#: cp/parser.c:15620
msgid "%qD redeclared with different access"
msgstr ""
-#: cp/parser.c:15631
+#: cp/parser.c:15637
msgid "%<template%> (as a disambiguator) is only allowed within templates"
msgstr ""
-#: cp/parser.c:15839
+#: cp/parser.c:15845
msgid "inter-module optimizations not implemented for C++"
msgstr ""
-#: cp/pt.c:240
+#: cp/pt.c:237
msgid "data member %qD cannot be a member template"
msgstr ""
-#: cp/pt.c:252
+#: cp/pt.c:249
msgid "invalid member template declaration %qD"
msgstr ""
-#: cp/pt.c:635
+#: cp/pt.c:571
msgid "explicit specialization in non-namespace scope %qD"
msgstr ""
-#: cp/pt.c:646
+#: cp/pt.c:582
msgid "enclosing class templates are not explicitly specialized"
msgstr ""
-#: cp/pt.c:730
+#: cp/pt.c:666
msgid "specialization of %qD in different namespace"
msgstr ""
-#: cp/pt.c:731 cp/pt.c:800
+#: cp/pt.c:667 cp/pt.c:736
msgid " from definition of %q#D"
msgstr ""
-#: cp/pt.c:767
+#: cp/pt.c:703
msgid "specialization of %qT after instantiation"
msgstr ""
-#: cp/pt.c:799
+#: cp/pt.c:735
msgid "specializing %q#T in different namespace"
msgstr ""
-#: cp/pt.c:814
+#: cp/pt.c:750
msgid "specialization %qT after instantiation %qT"
msgstr ""
-#: cp/pt.c:826
+#: cp/pt.c:762
msgid "explicit specialization of non-template %qT"
msgstr ""
-#: cp/pt.c:1083
+#: cp/pt.c:1106
msgid "specialization of %qD after instantiation"
msgstr ""
-#: cp/pt.c:1212
+#: cp/pt.c:1235
msgid "%s %+#D"
msgstr ""
-#: cp/pt.c:1268
+#: cp/pt.c:1291
msgid "%qD is not a function template"
msgstr ""
-#: cp/pt.c:1453
+#: cp/pt.c:1476
msgid "template-id %qD for %q+D does not match any template declaration"
msgstr ""
-#: cp/pt.c:1462
+#: cp/pt.c:1485
msgid "ambiguous template specialization %qD for %q+D"
msgstr ""
#. This case handles bogus declarations like template <>
#. template <class T> void f<int>();
-#: cp/pt.c:1685 cp/pt.c:1739
+#: cp/pt.c:1708 cp/pt.c:1762
msgid "template-id %qD in declaration of primary template"
msgstr ""
-#: cp/pt.c:1698
+#: cp/pt.c:1721
msgid "template parameter list used in explicit instantiation"
msgstr ""
-#: cp/pt.c:1704
+#: cp/pt.c:1727
msgid "definition provided for explicit instantiation"
msgstr ""
-#: cp/pt.c:1712
+#: cp/pt.c:1735
msgid "too many template parameter lists in declaration of %qD"
msgstr ""
-#: cp/pt.c:1715
+#: cp/pt.c:1738
msgid "too few template parameter lists in declaration of %qD"
msgstr ""
-#: cp/pt.c:1717
+#: cp/pt.c:1740
msgid "explicit specialization of %qD must be introduced by `template <>'"
msgstr ""
-#: cp/pt.c:1736
+#: cp/pt.c:1759
msgid "function template partial specialization %qD is not allowed"
msgstr ""
-#: cp/pt.c:1768
+#: cp/pt.c:1791
msgid "default argument specified in explicit specialization"
msgstr ""
-#: cp/pt.c:1772
+#: cp/pt.c:1795
msgid "template specialization with C linkage"
msgstr ""
@@ -15881,60 +15954,60 @@ msgstr ""
#. program is ill-formed.
#.
#. Similar language is found in [temp.explicit].
-#: cp/pt.c:1856
+#: cp/pt.c:1879
msgid "specialization of implicitly-declared special member function"
msgstr ""
-#: cp/pt.c:1900
+#: cp/pt.c:1923
msgid "no member function %qD declared in %qT"
msgstr ""
#. There are two many template parameter lists.
-#: cp/pt.c:2050
+#: cp/pt.c:2073
msgid "too many template parameter lists in declaration of %qT"
msgstr ""
-#: cp/pt.c:2144
+#: cp/pt.c:2167
msgid " shadows template parm %q#D"
msgstr ""
-#: cp/pt.c:2544
+#: cp/pt.c:2569
msgid "template parameters not used in partial specialization:"
msgstr ""
-#: cp/pt.c:2548
+#: cp/pt.c:2573
msgid " %qD"
msgstr ""
-#: cp/pt.c:2559
+#: cp/pt.c:2584
msgid "partial specialization %qT does not specialize any template arguments"
msgstr ""
-#: cp/pt.c:2584
+#: cp/pt.c:2609
#, c-format
msgid "template argument %qE involves template parameter(s)"
msgstr ""
-#: cp/pt.c:2628
+#: cp/pt.c:2653
msgid "type %qT of template argument %qE depends on template parameter(s)"
msgstr ""
-#: cp/pt.c:2714
+#: cp/pt.c:2740
msgid "no default argument for %qD"
msgstr ""
-#: cp/pt.c:2866
+#: cp/pt.c:2897
msgid "template with C linkage"
msgstr ""
-#: cp/pt.c:2869
+#: cp/pt.c:2900
msgid "template class without a name"
msgstr ""
#. [temp.mem]
#.
#. A destructor shall not be a member template.
-#: cp/pt.c:2877
+#: cp/pt.c:2908
msgid "destructor %qD declared as member template"
msgstr ""
@@ -15943,53 +16016,53 @@ msgstr ""
#. An allocation function can be a function
#. template. ... Template allocation functions shall
#. have two or more parameters.
-#: cp/pt.c:2892
+#: cp/pt.c:2923
msgid "invalid template declaration of %qD"
msgstr ""
-#: cp/pt.c:2972
+#: cp/pt.c:3004
msgid "%qD does not declare a template type"
msgstr ""
-#: cp/pt.c:2978
+#: cp/pt.c:3010
msgid "template definition of non-template %q#D"
msgstr ""
-#: cp/pt.c:3019
+#: cp/pt.c:3052
msgid "expected %d levels of template parms for %q#D, got %d"
msgstr ""
-#: cp/pt.c:3031
+#: cp/pt.c:3064
msgid "got %d template parameters for %q#D"
msgstr ""
-#: cp/pt.c:3034
+#: cp/pt.c:3067
msgid "got %d template parameters for %q#T"
msgstr ""
-#: cp/pt.c:3036
+#: cp/pt.c:3069
#, c-format
msgid " but %d required"
msgstr ""
-#: cp/pt.c:3121
+#: cp/pt.c:3154
msgid "%qT is not a template type"
msgstr ""
-#: cp/pt.c:3137
+#: cp/pt.c:3170
msgid "previous declaration %qD"
msgstr ""
-#: cp/pt.c:3138
+#: cp/pt.c:3171
#, c-format
msgid "used %d template parameter%s instead of %d"
msgstr ""
-#: cp/pt.c:3158
+#: cp/pt.c:3191
msgid "template parameter %q#D"
msgstr ""
-#: cp/pt.c:3159
+#: cp/pt.c:3192
msgid "redeclared here as %q#D"
msgstr ""
@@ -15997,293 +16070,293 @@ msgstr ""
#.
#. A template-parameter may not be given default arguments
#. by two different declarations in the same scope.
-#: cp/pt.c:3169
+#: cp/pt.c:3202
msgid "redefinition of default argument for %q#D"
msgstr ""
-#: cp/pt.c:3170
+#: cp/pt.c:3203
msgid "%J original definition appeared here"
msgstr ""
-#: cp/pt.c:3316
+#: cp/pt.c:3349
#, c-format
msgid "%qE is not a valid template argument"
msgstr ""
-#: cp/pt.c:3320
+#: cp/pt.c:3353
msgid "it must be the address of a function with external linkage"
msgstr ""
-#: cp/pt.c:3322
+#: cp/pt.c:3355
msgid "it must be the address of an object with external linkage"
msgstr ""
-#: cp/pt.c:3325
+#: cp/pt.c:3358
msgid "it must be a pointer-to-member of the form %<&X::Y%>"
msgstr ""
-#: cp/pt.c:3336
+#: cp/pt.c:3369
#, c-format
msgid ""
"string literal %qE is not a valid template argument because it is the "
"address of an object with static linkage"
msgstr ""
-#: cp/pt.c:3352
+#: cp/pt.c:3385
#, c-format
msgid "address of non-extern %qE cannot be used as template argument"
msgstr ""
-#: cp/pt.c:3362
+#: cp/pt.c:3395
#, c-format
msgid "non-constant %qE cannot be used as template argument"
msgstr ""
-#: cp/pt.c:3369
+#: cp/pt.c:3402
msgid "type %qT cannot be used as a value for a non-type template-parameter"
msgstr ""
-#: cp/pt.c:3372
+#: cp/pt.c:3405
msgid "invalid use of %qD as a non-type template-argument"
msgstr ""
-#: cp/pt.c:3374
+#: cp/pt.c:3407
#, c-format
msgid "invalid use of %qE as a non-type template-argument"
msgstr ""
-#: cp/pt.c:3752
+#: cp/pt.c:3785
msgid "to refer to a type member of a template parameter, use %<typename %E%>"
msgstr ""
-#: cp/pt.c:3766 cp/pt.c:3785 cp/pt.c:3825
+#: cp/pt.c:3799 cp/pt.c:3818 cp/pt.c:3858
msgid "type/value mismatch at argument %d in template parameter list for %qD"
msgstr ""
-#: cp/pt.c:3770
+#: cp/pt.c:3803
msgid " expected a constant of type %qT, got %qT"
msgstr ""
-#: cp/pt.c:3774
+#: cp/pt.c:3807
#, c-format
msgid " expected a class template, got %qE"
msgstr ""
-#: cp/pt.c:3776
+#: cp/pt.c:3809
#, c-format
msgid " expected a type, got %qE"
msgstr ""
-#: cp/pt.c:3789
+#: cp/pt.c:3822
msgid " expected a type, got %qT"
msgstr ""
-#: cp/pt.c:3791
+#: cp/pt.c:3824
msgid " expected a class template, got %qT"
msgstr ""
-#: cp/pt.c:3828
+#: cp/pt.c:3861
msgid " expected a template of type %qD, got %qD"
msgstr ""
-#: cp/pt.c:3864
+#: cp/pt.c:3897
msgid "could not convert template argument %qE to %qT"
msgstr ""
-#: cp/pt.c:3903
+#: cp/pt.c:3936
#, c-format
msgid "wrong number of template arguments (%d, should be %d)"
msgstr ""
-#: cp/pt.c:3907
+#: cp/pt.c:3940
msgid "provided for %qD"
msgstr ""
-#: cp/pt.c:3935
+#: cp/pt.c:3968
#, c-format
msgid "template argument %d is invalid"
msgstr ""
-#: cp/pt.c:4156
+#: cp/pt.c:4189
msgid "non-template used as template"
msgstr ""
-#: cp/pt.c:4291
+#: cp/pt.c:4324
msgid "non-template type %qT used as a template"
msgstr ""
-#: cp/pt.c:4293
+#: cp/pt.c:4326
msgid "for template declaration %qD"
msgstr ""
-#: cp/pt.c:4942
+#: cp/pt.c:4963
msgid ""
"template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN "
"to increase the maximum) instantiating %qD"
msgstr ""
-#: cp/pt.c:5381
+#: cp/pt.c:5402
msgid "ambiguous class template instantiation for %q#T"
msgstr ""
-#: cp/pt.c:5387
+#: cp/pt.c:5408
msgid "%s %+#T"
msgstr ""
-#: cp/pt.c:6408 cp/pt.c:6528
+#: cp/pt.c:6431 cp/pt.c:6552
msgid "instantiation of %qD as type %qT"
msgstr ""
-#: cp/pt.c:6570
+#: cp/pt.c:6594
msgid "invalid parameter type %qT"
msgstr ""
-#: cp/pt.c:6572
+#: cp/pt.c:6596
msgid "in declaration %qD"
msgstr ""
-#: cp/pt.c:6646
+#: cp/pt.c:6670
msgid "creating pointer to member function of non-class type %qT"
msgstr ""
-#: cp/pt.c:6783
+#: cp/pt.c:6840
msgid "creating array with size zero"
msgstr ""
-#: cp/pt.c:6797
+#: cp/pt.c:6854
#, c-format
msgid "creating array with size zero (%qE)"
msgstr ""
-#: cp/pt.c:7014
+#: cp/pt.c:7071
msgid "forming reference to void"
msgstr ""
-#: cp/pt.c:7016
+#: cp/pt.c:7073
msgid "forming %s to reference type %qT"
msgstr ""
-#: cp/pt.c:7053
+#: cp/pt.c:7110
msgid "creating pointer to member of non-class type %qT"
msgstr ""
-#: cp/pt.c:7059
+#: cp/pt.c:7116
msgid "creating pointer to member reference type %qT"
msgstr ""
-#: cp/pt.c:7145
+#: cp/pt.c:7186
msgid "creating array of %qT"
msgstr ""
-#: cp/pt.c:7151
+#: cp/pt.c:7192
msgid "creating array of %qT, which is an abstract class type"
msgstr ""
-#: cp/pt.c:7195
+#: cp/pt.c:7236
msgid "%qT is not a class, struct, or union type"
msgstr ""
-#: cp/pt.c:7281
+#: cp/pt.c:7322
#, c-format
msgid "use of `%s' in template"
msgstr ""
-#: cp/pt.c:7406
+#: cp/pt.c:7447
#, c-format
msgid ""
"dependent-name %qE is parsed as a non-type, but instantiation yields a type"
msgstr ""
-#: cp/pt.c:7408
+#: cp/pt.c:7449
msgid "say %<typename %E%> if a type is meant"
msgstr ""
-#: cp/pt.c:8545
+#: cp/pt.c:8591
msgid "%qT is not a class or namespace"
msgstr ""
-#: cp/pt.c:8548
+#: cp/pt.c:8594
msgid "%qD is not a class or namespace"
msgstr ""
-#: cp/pt.c:8673
+#: cp/pt.c:8719
msgid "%qT uses anonymous type"
msgstr ""
-#: cp/pt.c:8675
+#: cp/pt.c:8721
msgid "%qT uses local type %qT"
msgstr ""
-#: cp/pt.c:8683
+#: cp/pt.c:8729
msgid "%qT is a variably modified type"
msgstr ""
-#: cp/pt.c:8694
+#: cp/pt.c:8740
#, c-format
msgid "integral expression %qE is not constant"
msgstr ""
-#: cp/pt.c:8699
+#: cp/pt.c:8745
msgid " trying to instantiate %qD"
msgstr ""
-#: cp/pt.c:9213
+#: cp/pt.c:9261
msgid "incomplete type unification"
msgstr ""
-#: cp/pt.c:10531 cp/pt.c:10602
+#: cp/pt.c:10579 cp/pt.c:10650
msgid "explicit instantiation of non-template %q#D"
msgstr ""
-#: cp/pt.c:10547 cp/pt.c:10597
+#: cp/pt.c:10595 cp/pt.c:10645
msgid "no matching template for %qD found"
msgstr ""
-#: cp/pt.c:10553
+#: cp/pt.c:10601
msgid "explicit instantiation of %q#D"
msgstr ""
-#: cp/pt.c:10589
+#: cp/pt.c:10637
msgid "duplicate explicit instantiation of %q#D"
msgstr ""
-#: cp/pt.c:10611
+#: cp/pt.c:10659
msgid "ISO C++ forbids the use of %<extern%> on explicit instantiations"
msgstr ""
-#: cp/pt.c:10616 cp/pt.c:10706
+#: cp/pt.c:10664 cp/pt.c:10754
msgid "storage class %qD applied to template instantiation"
msgstr ""
-#: cp/pt.c:10678
+#: cp/pt.c:10726
msgid "explicit instantiation of non-template type %qT"
msgstr ""
-#: cp/pt.c:10687
+#: cp/pt.c:10735
msgid "explicit instantiation of %q#T before definition of template"
msgstr ""
-#: cp/pt.c:10695
+#: cp/pt.c:10743
#, c-format
msgid "ISO C++ forbids the use of `%E' on explicit instantiations"
msgstr ""
-#: cp/pt.c:10740
+#: cp/pt.c:10788
msgid "duplicate explicit instantiation of %q#T"
msgstr ""
-#: cp/pt.c:11103
+#: cp/pt.c:11153
msgid "explicit instantiation of %qD but no definition available"
msgstr ""
-#: cp/pt.c:11247
+#: cp/pt.c:11297
msgid ""
"template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN "
"to increase the maximum) instantiating %q+D, possibly from virtual table "
"generation"
msgstr ""
-#: cp/pt.c:11526
+#: cp/pt.c:11576
msgid "%q#T is not a valid type for a template constant parameter"
msgstr ""
@@ -16322,43 +16395,43 @@ msgstr ""
msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)"
msgstr ""
-#: cp/search.c:246
+#: cp/search.c:237
msgid "`%T' is an ambiguous base of `%T'"
msgstr ""
-#: cp/search.c:264
+#: cp/search.c:255
msgid "`%T' is an inaccessible base of `%T'"
msgstr ""
-#: cp/search.c:1645
+#: cp/search.c:1743
msgid "invalid covariant return type for `%#D'"
msgstr ""
-#: cp/search.c:1646 cp/search.c:1652
+#: cp/search.c:1744 cp/search.c:1750
msgid " overriding `%#D'"
msgstr ""
-#: cp/search.c:1650
+#: cp/search.c:1748
msgid "conflicting return type specified for `%#D'"
msgstr ""
-#: cp/search.c:1661
+#: cp/search.c:1759
#, c-format
msgid "looser throw specifier for `%#F'"
msgstr ""
-#: cp/search.c:1662
+#: cp/search.c:1760
#, c-format
msgid " overriding `%#F'"
msgstr ""
#. A static member function cannot match an inherited
#. virtual member function.
-#: cp/search.c:1755
+#: cp/search.c:1853
msgid "`%#D' cannot be declared"
msgstr ""
-#: cp/search.c:1756
+#: cp/search.c:1854
msgid " since `%#D' declared in base class"
msgstr ""
@@ -16367,145 +16440,145 @@ msgstr ""
msgid "type of asm operand `%E' could not be determined"
msgstr ""
-#: cp/semantics.c:1265
+#: cp/semantics.c:1266
msgid "invalid use of member `%D' in static member function"
msgstr ""
-#: cp/semantics.c:1268
+#: cp/semantics.c:1269
msgid "invalid use of non-static data member `%D'"
msgstr ""
-#: cp/semantics.c:1269 cp/semantics.c:1308
+#: cp/semantics.c:1270 cp/semantics.c:1309
msgid "from this location"
msgstr ""
-#: cp/semantics.c:1307
+#: cp/semantics.c:1308
msgid "object missing in reference to `%D'"
msgstr ""
-#: cp/semantics.c:1786
+#: cp/semantics.c:1787
msgid "arguments to destructor are not allowed"
msgstr ""
-#: cp/semantics.c:1836
+#: cp/semantics.c:1837
msgid "`this' is unavailable for static member functions"
msgstr ""
-#: cp/semantics.c:1842
+#: cp/semantics.c:1843
msgid "invalid use of `this' in non-member function"
msgstr ""
-#: cp/semantics.c:1844
+#: cp/semantics.c:1845
msgid "invalid use of `this' at top level"
msgstr ""
-#: cp/semantics.c:1868
+#: cp/semantics.c:1869
msgid "invalid qualifying scope in pseudo-destructor name"
msgstr ""
-#: cp/semantics.c:1888
+#: cp/semantics.c:1889
msgid "`%E' is not of type `%T'"
msgstr ""
-#: cp/semantics.c:1982
+#: cp/semantics.c:1983
msgid "template type parameters must use the keyword `class' or `typename'"
msgstr ""
-#: cp/semantics.c:2026
+#: cp/semantics.c:2027
msgid ""
"invalid use of type `%T' as a default value for a template template-parameter"
msgstr ""
-#: cp/semantics.c:2029
+#: cp/semantics.c:2030
msgid ""
"invalid use of `%D' as a default value for a template template-parameter"
msgstr ""
-#: cp/semantics.c:2033
+#: cp/semantics.c:2034
msgid "invalid default argument for a template template parameter"
msgstr ""
-#: cp/semantics.c:2050
+#: cp/semantics.c:2051
msgid "definition of `%#T' inside template parameter list"
msgstr ""
-#: cp/semantics.c:2061
+#: cp/semantics.c:2062
msgid "invalid definition of qualified type `%T'"
msgstr ""
-#: cp/semantics.c:2075
+#: cp/semantics.c:2076
msgid "redefinition of `%#T'"
msgstr ""
-#: cp/semantics.c:2076
+#: cp/semantics.c:2077
msgid "previous definition of `%#T'"
msgstr ""
-#: cp/semantics.c:2252
+#: cp/semantics.c:2253
msgid "invalid base-class specification"
msgstr ""
-#: cp/semantics.c:2261
+#: cp/semantics.c:2262
msgid "base class `%T' has cv qualifiers"
msgstr ""
-#: cp/semantics.c:2294
+#: cp/semantics.c:2295
msgid "multiple declarators in template declaration"
msgstr ""
-#: cp/semantics.c:2306
+#: cp/semantics.c:2307
msgid "incomplete type `%T' used in nested name specifier"
msgstr ""
-#: cp/semantics.c:2309
+#: cp/semantics.c:2310
msgid "reference to `%T::%D' is ambiguous"
msgstr ""
-#: cp/semantics.c:2313 cp/typeck.c:1649
+#: cp/semantics.c:2314 cp/typeck.c:1649
msgid "`%D' is not a member of `%T'"
msgstr ""
-#: cp/semantics.c:2316
+#: cp/semantics.c:2317
msgid "`%D' is not a member of `%D'"
msgstr ""
-#: cp/semantics.c:2318
+#: cp/semantics.c:2319
msgid "`::%D' has not been declared"
msgstr ""
-#: cp/semantics.c:2441
+#: cp/semantics.c:2442
msgid ""
"template parameter `%D' of type `%T' is not allowed in an integral constant "
"expression because it is not of integral or enumeration type"
msgstr ""
-#: cp/semantics.c:2585
+#: cp/semantics.c:2586
msgid "`%D' cannot appear in a constant-expression"
msgstr ""
-#: cp/semantics.c:2593
+#: cp/semantics.c:2594
msgid "use of namespace `%D' as expression"
msgstr ""
-#: cp/semantics.c:2598
+#: cp/semantics.c:2599
msgid "use of class template `%T' as expression"
msgstr ""
#. Ambiguous reference to base members.
-#: cp/semantics.c:2604
+#: cp/semantics.c:2605
msgid "request for member `%D' is ambiguous in multiple inheritance lattice"
msgstr ""
-#: cp/semantics.c:2665
+#: cp/semantics.c:2666
#, c-format
msgid "use of %s from containing function"
msgstr ""
-#: cp/semantics.c:2668
+#: cp/semantics.c:2669
msgid " `%#D' declared here"
msgstr ""
-#: cp/semantics.c:2719
+#: cp/semantics.c:2720
#, c-format
msgid "type of `%E' is unknown"
msgstr ""
@@ -16699,6 +16772,10 @@ msgstr ""
msgid "at this point in file"
msgstr ""
+#: cp/typeck.c:2569
+msgid "too many arguments to function"
+msgstr ""
+
#: cp/typeck.c:2603
msgid "parameter %P of `%D' has incomplete type `%T'"
msgstr ""
@@ -16711,6 +16788,10 @@ msgstr ""
msgid "too few arguments to %s `%+#D'"
msgstr ""
+#: cp/typeck.c:2675
+msgid "too few arguments to function"
+msgstr ""
+
#: cp/typeck.c:2822 cp/typeck.c:2832
msgid "assuming cast to type `%T' from overloaded function"
msgstr ""
@@ -17226,7 +17307,7 @@ msgid "call to function which throws incomplete type `%#T'"
msgstr ""
#. XXX Not i18n clean.
-#: cp/cp-tree.h:3801
+#: cp/cp-tree.h:3806
#, c-format
msgid "%s is deprecated, please see the documentation for details"
msgstr ""
@@ -17554,10 +17635,12 @@ msgstr ""
#. FIXME: i18n bug here. Order of prints should not be
#. fixed.
#: java/gjavah.c:849
+#, c-format
msgid "ignored method `"
msgstr ""
#: java/gjavah.c:851
+#, c-format
msgid "' marked virtual\n"
msgstr ""
@@ -17598,102 +17681,125 @@ msgid "base class is of array type"
msgstr ""
#: java/gjavah.c:2280
+#, c-format
msgid "Try `gcjh --help' for more information.\n"
msgstr ""
#: java/gjavah.c:2287
+#, c-format
msgid ""
"Usage: gcjh [OPTION]... CLASS...\n"
"\n"
msgstr ""
#: java/gjavah.c:2288
+#, c-format
msgid ""
"Generate C++ header files from .class files\n"
"\n"
msgstr ""
#: java/gjavah.c:2289
+#, c-format
msgid " -stubs Generate an implementation stub file\n"
msgstr ""
#: java/gjavah.c:2290
+#, c-format
msgid " -jni Generate a JNI header or stub\n"
msgstr ""
#: java/gjavah.c:2292
+#, c-format
msgid " -add TEXT Insert TEXT into class body\n"
msgstr ""
#: java/gjavah.c:2293
+#, c-format
msgid " -append TEXT Insert TEXT after class declaration\n"
msgstr ""
#: java/gjavah.c:2294
+#, c-format
msgid " -friend TEXT Insert TEXT as `friend' declaration\n"
msgstr ""
#: java/gjavah.c:2295
+#, c-format
msgid " -prepend TEXT Insert TEXT before start of class\n"
msgstr ""
#: java/gjavah.c:2297 java/jcf-dump.c:897
+#, c-format
msgid " --classpath PATH Set path to find .class files\n"
msgstr ""
#: java/gjavah.c:2298 java/jcf-dump.c:898
+#, c-format
msgid " -IDIR Append directory to class path\n"
msgstr ""
#: java/gjavah.c:2299 java/jcf-dump.c:899
+#, c-format
msgid " --bootclasspath PATH Override built-in class path\n"
msgstr ""
#: java/gjavah.c:2300 java/jcf-dump.c:900
+#, c-format
msgid " --extdirs PATH Set extensions directory path\n"
msgstr ""
#: java/gjavah.c:2301
+#, c-format
msgid " -d DIRECTORY Set output directory name\n"
msgstr ""
#: java/gjavah.c:2302 java/jcf-dump.c:901 java/jv-scan.c:114
+#, c-format
msgid " -o FILE Set output file name\n"
msgstr ""
#: java/gjavah.c:2303
+#, c-format
msgid " -td DIRECTORY Set temporary directory name\n"
msgstr ""
#: java/gjavah.c:2305 java/jcf-dump.c:903 java/jv-scan.c:116
+#, c-format
msgid " --help Print this help, then exit\n"
msgstr ""
#: java/gjavah.c:2306 java/jcf-dump.c:904 java/jv-scan.c:117
+#, c-format
msgid " --version Print version number, then exit\n"
msgstr ""
#: java/gjavah.c:2307 java/jcf-dump.c:905
+#, c-format
msgid " -v, --verbose Print extra information while running\n"
msgstr ""
#: java/gjavah.c:2309
+#, c-format
msgid ""
" -M Print all dependencies to stdout;\n"
" suppress ordinary output\n"
msgstr ""
#: java/gjavah.c:2311
+#, c-format
msgid ""
" -MM Print non-system dependencies to stdout;\n"
" suppress ordinary output\n"
msgstr ""
#: java/gjavah.c:2313
+#, c-format
msgid " -MD Print all dependencies to stdout\n"
msgstr ""
#: java/gjavah.c:2314
+#, c-format
msgid " -MMD Print non-system dependencies to stdout\n"
msgstr ""
@@ -17732,10 +17838,12 @@ msgid "Found in %s\n"
msgstr ""
#: java/jcf-dump.c:814
+#, c-format
msgid "Not a valid Java .class file.\n"
msgstr ""
#: java/jcf-dump.c:820
+#, c-format
msgid "error while parsing constant pool\n"
msgstr ""
@@ -17745,42 +17853,51 @@ msgid "error in constant pool entry #%d\n"
msgstr ""
#: java/jcf-dump.c:836
+#, c-format
msgid "error while parsing fields\n"
msgstr ""
#: java/jcf-dump.c:842
+#, c-format
msgid "error while parsing methods\n"
msgstr ""
#: java/jcf-dump.c:848
+#, c-format
msgid "error while parsing final attributes\n"
msgstr ""
#: java/jcf-dump.c:885
+#, c-format
msgid "Try `jcf-dump --help' for more information.\n"
msgstr ""
#: java/jcf-dump.c:892
+#, c-format
msgid ""
"Usage: jcf-dump [OPTION]... CLASS...\n"
"\n"
msgstr ""
#: java/jcf-dump.c:893
+#, c-format
msgid ""
"Display contents of a class file in readable form.\n"
"\n"
msgstr ""
#: java/jcf-dump.c:894
+#, c-format
msgid " -c Disassemble method bodies\n"
msgstr ""
#: java/jcf-dump.c:895
+#, c-format
msgid " --javap Generate output in `javap' format\n"
msgstr ""
#: java/jcf-dump.c:932 java/jcf-dump.c:1000
+#, c-format
msgid "jcf-dump: no classes specified\n"
msgstr ""
@@ -17790,10 +17907,12 @@ msgid "Cannot open '%s' for output.\n"
msgstr ""
#: java/jcf-dump.c:1066
+#, c-format
msgid "bad format of .zip/.jar archive\n"
msgstr ""
#: java/jcf-dump.c:1184
+#, c-format
msgid "Bad byte codes.\n"
msgstr ""
@@ -17912,42 +18031,51 @@ msgid "can't create %s: %m"
msgstr ""
#: java/jv-scan.c:99
+#, c-format
msgid "Try `jv-scan --help' for more information.\n"
msgstr ""
#: java/jv-scan.c:106
+#, c-format
msgid ""
"Usage: jv-scan [OPTION]... FILE...\n"
"\n"
msgstr ""
#: java/jv-scan.c:107
+#, c-format
msgid ""
"Print useful information read from Java source files.\n"
"\n"
msgstr ""
#: java/jv-scan.c:108
+#, c-format
msgid " --no-assert Don't recognize the assert keyword\n"
msgstr ""
#: java/jv-scan.c:109
+#, c-format
msgid " --complexity Print cyclomatic complexity of input file\n"
msgstr ""
#: java/jv-scan.c:110
+#, c-format
msgid " --encoding NAME Specify encoding of input file\n"
msgstr ""
#: java/jv-scan.c:111
+#, c-format
msgid " --print-main Print name of class containing `main'\n"
msgstr ""
#: java/jv-scan.c:112
+#, c-format
msgid " --list-class List all classes defined in file\n"
msgstr ""
#: java/jv-scan.c:113
+#, c-format
msgid ""
" --list-filename Print input filename when listing class names\n"
msgstr ""
@@ -18055,1070 +18183,995 @@ msgstr ""
msgid "internal error - invalid Utf8 name"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse-scan.y:881
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:977
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1318
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1379
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1590
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1813
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1822
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1833
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1844
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1856
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1871
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1888
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1890
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1971
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2148
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2217
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2381
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2394
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2401
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2408
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2419
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2421
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2459
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2461
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2463
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2484
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2486
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2488
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2504
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2506
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2527
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2529
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2531
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2559
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2561
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2563
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2565
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2583
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2585
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2596
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2607
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2618
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2629
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2640
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2653
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2657
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2659
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2672
+#: ../../gcc-cvs/gcc/java/parse-scan.y:881 ../../gcc-cvs/gcc/java/parse.y:977
+#: ../../gcc-cvs/gcc/java/parse.y:1318 ../../gcc-cvs/gcc/java/parse.y:1379
+#: ../../gcc-cvs/gcc/java/parse.y:1590 ../../gcc-cvs/gcc/java/parse.y:1813
+#: ../../gcc-cvs/gcc/java/parse.y:1822 ../../gcc-cvs/gcc/java/parse.y:1833
+#: ../../gcc-cvs/gcc/java/parse.y:1844 ../../gcc-cvs/gcc/java/parse.y:1856
+#: ../../gcc-cvs/gcc/java/parse.y:1871 ../../gcc-cvs/gcc/java/parse.y:1888
+#: ../../gcc-cvs/gcc/java/parse.y:1890 ../../gcc-cvs/gcc/java/parse.y:1971
+#: ../../gcc-cvs/gcc/java/parse.y:2148 ../../gcc-cvs/gcc/java/parse.y:2217
+#: ../../gcc-cvs/gcc/java/parse.y:2381 ../../gcc-cvs/gcc/java/parse.y:2394
+#: ../../gcc-cvs/gcc/java/parse.y:2401 ../../gcc-cvs/gcc/java/parse.y:2408
+#: ../../gcc-cvs/gcc/java/parse.y:2419 ../../gcc-cvs/gcc/java/parse.y:2421
+#: ../../gcc-cvs/gcc/java/parse.y:2459 ../../gcc-cvs/gcc/java/parse.y:2461
+#: ../../gcc-cvs/gcc/java/parse.y:2463 ../../gcc-cvs/gcc/java/parse.y:2484
+#: ../../gcc-cvs/gcc/java/parse.y:2486 ../../gcc-cvs/gcc/java/parse.y:2488
+#: ../../gcc-cvs/gcc/java/parse.y:2504 ../../gcc-cvs/gcc/java/parse.y:2506
+#: ../../gcc-cvs/gcc/java/parse.y:2527 ../../gcc-cvs/gcc/java/parse.y:2529
+#: ../../gcc-cvs/gcc/java/parse.y:2531 ../../gcc-cvs/gcc/java/parse.y:2559
+#: ../../gcc-cvs/gcc/java/parse.y:2561 ../../gcc-cvs/gcc/java/parse.y:2563
+#: ../../gcc-cvs/gcc/java/parse.y:2565 ../../gcc-cvs/gcc/java/parse.y:2583
+#: ../../gcc-cvs/gcc/java/parse.y:2585 ../../gcc-cvs/gcc/java/parse.y:2596
+#: ../../gcc-cvs/gcc/java/parse.y:2607 ../../gcc-cvs/gcc/java/parse.y:2618
+#: ../../gcc-cvs/gcc/java/parse.y:2629 ../../gcc-cvs/gcc/java/parse.y:2640
+#: ../../gcc-cvs/gcc/java/parse.y:2653 ../../gcc-cvs/gcc/java/parse.y:2657
+#: ../../gcc-cvs/gcc/java/parse.y:2659 ../../gcc-cvs/gcc/java/parse.y:2672
msgid "Missing term"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse-scan.y:883
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:751
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:789
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:814
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:998
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1353
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1566
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1568
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1798
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1824
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1835
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1846
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1858
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1873
+#: ../../gcc-cvs/gcc/java/parse-scan.y:883 ../../gcc-cvs/gcc/java/parse.y:751
+#: ../../gcc-cvs/gcc/java/parse.y:789 ../../gcc-cvs/gcc/java/parse.y:814
+#: ../../gcc-cvs/gcc/java/parse.y:998 ../../gcc-cvs/gcc/java/parse.y:1353
+#: ../../gcc-cvs/gcc/java/parse.y:1566 ../../gcc-cvs/gcc/java/parse.y:1568
+#: ../../gcc-cvs/gcc/java/parse.y:1798 ../../gcc-cvs/gcc/java/parse.y:1824
+#: ../../gcc-cvs/gcc/java/parse.y:1835 ../../gcc-cvs/gcc/java/parse.y:1846
+#: ../../gcc-cvs/gcc/java/parse.y:1858 ../../gcc-cvs/gcc/java/parse.y:1873
msgid "';' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:749
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:787
+#: ../../gcc-cvs/gcc/java/parse.y:749 ../../gcc-cvs/gcc/java/parse.y:787
msgid "Missing name"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:777
+#: ../../gcc-cvs/gcc/java/parse.y:777
#, c-format
msgid "Ambiguous class: `%s' and `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:812
+#: ../../gcc-cvs/gcc/java/parse.y:812
msgid "'*' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:826
+#: ../../gcc-cvs/gcc/java/parse.y:826
msgid "Class or interface declaration expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:843
+#: ../../gcc-cvs/gcc/java/parse.y:843
#, c-format
msgid "Modifier `%s' declared twice"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:863
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:865
+#: ../../gcc-cvs/gcc/java/parse.y:863 ../../gcc-cvs/gcc/java/parse.y:865
msgid "Missing class name"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:868
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:872
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:880
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1038
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1299
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1301
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1633
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1884
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1916
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1978
+#: ../../gcc-cvs/gcc/java/parse.y:868 ../../gcc-cvs/gcc/java/parse.y:872
+#: ../../gcc-cvs/gcc/java/parse.y:880 ../../gcc-cvs/gcc/java/parse.y:1038
+#: ../../gcc-cvs/gcc/java/parse.y:1299 ../../gcc-cvs/gcc/java/parse.y:1301
+#: ../../gcc-cvs/gcc/java/parse.y:1633 ../../gcc-cvs/gcc/java/parse.y:1884
+#: ../../gcc-cvs/gcc/java/parse.y:1916 ../../gcc-cvs/gcc/java/parse.y:1978
msgid "'{' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:882
+#: ../../gcc-cvs/gcc/java/parse.y:882
msgid "Missing super class name"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:892
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:908
+#: ../../gcc-cvs/gcc/java/parse.y:892 ../../gcc-cvs/gcc/java/parse.y:908
msgid "Missing interface name"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:992
+#: ../../gcc-cvs/gcc/java/parse.y:992
msgid "Missing variable initializer"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1009
+#: ../../gcc-cvs/gcc/java/parse.y:1009
msgid "Invalid declaration"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1012
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1097
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2163
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2192
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2214
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2218
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2253
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2332
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2342
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2352
+#: ../../gcc-cvs/gcc/java/parse.y:1012 ../../gcc-cvs/gcc/java/parse.y:1097
+#: ../../gcc-cvs/gcc/java/parse.y:2163 ../../gcc-cvs/gcc/java/parse.y:2192
+#: ../../gcc-cvs/gcc/java/parse.y:2214 ../../gcc-cvs/gcc/java/parse.y:2218
+#: ../../gcc-cvs/gcc/java/parse.y:2253 ../../gcc-cvs/gcc/java/parse.y:2332
+#: ../../gcc-cvs/gcc/java/parse.y:2342 ../../gcc-cvs/gcc/java/parse.y:2352
msgid "']' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1016
+#: ../../gcc-cvs/gcc/java/parse.y:1016
msgid "Unbalanced ']'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1052
+#: ../../gcc-cvs/gcc/java/parse.y:1052
msgid "Invalid method declaration, method name required"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1057
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1062
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1067
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2066
+#: ../../gcc-cvs/gcc/java/parse.y:1057 ../../gcc-cvs/gcc/java/parse.y:1062
+#: ../../gcc-cvs/gcc/java/parse.y:1067 ../../gcc-cvs/gcc/java/parse.y:2066
msgid "Identifier expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1072
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4743
+#: ../../gcc-cvs/gcc/java/parse.y:1072 ../../gcc-cvs/gcc/java/parse.y:4743
msgid "Invalid method declaration, return type required"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1092
+#: ../../gcc-cvs/gcc/java/parse.y:1092
msgid "Discouraged form of returned type specification"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1095
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1546
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1553
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1562
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1564
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1592
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1701
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2008
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2061
+#: ../../gcc-cvs/gcc/java/parse.y:1095 ../../gcc-cvs/gcc/java/parse.y:1546
+#: ../../gcc-cvs/gcc/java/parse.y:1553 ../../gcc-cvs/gcc/java/parse.y:1562
+#: ../../gcc-cvs/gcc/java/parse.y:1564 ../../gcc-cvs/gcc/java/parse.y:1592
+#: ../../gcc-cvs/gcc/java/parse.y:1701 ../../gcc-cvs/gcc/java/parse.y:2008
+#: ../../gcc-cvs/gcc/java/parse.y:2061
msgid "')' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1111
+#: ../../gcc-cvs/gcc/java/parse.y:1111
msgid "Missing formal parameter term"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1126
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1131
+#: ../../gcc-cvs/gcc/java/parse.y:1126 ../../gcc-cvs/gcc/java/parse.y:1131
msgid "Missing identifier"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1151
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1160
+#: ../../gcc-cvs/gcc/java/parse.y:1151 ../../gcc-cvs/gcc/java/parse.y:1160
msgid "Missing class type term"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1187
+#: ../../gcc-cvs/gcc/java/parse.y:1187
#, c-format
msgid ""
"Can't define static initializer in class `%s'. Static initializer can only "
"be defined in top-level classes"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1316
+#: ../../gcc-cvs/gcc/java/parse.y:1316
msgid "Invalid interface type"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1485
+#: ../../gcc-cvs/gcc/java/parse.y:1485
msgid "An empty declaration is a deprecated feature that should not be used"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1506
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1680
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1682
+#: ../../gcc-cvs/gcc/java/parse.y:1506 ../../gcc-cvs/gcc/java/parse.y:1680
+#: ../../gcc-cvs/gcc/java/parse.y:1682
msgid "':' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1532
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1537
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1542
+#: ../../gcc-cvs/gcc/java/parse.y:1532 ../../gcc-cvs/gcc/java/parse.y:1537
+#: ../../gcc-cvs/gcc/java/parse.y:1542
msgid "Invalid expression statement"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1560
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1588
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1629
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1697
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1765
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1886
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1964
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2055
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2057
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2070
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2313
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2315
+#: ../../gcc-cvs/gcc/java/parse.y:1560 ../../gcc-cvs/gcc/java/parse.y:1588
+#: ../../gcc-cvs/gcc/java/parse.y:1629 ../../gcc-cvs/gcc/java/parse.y:1697
+#: ../../gcc-cvs/gcc/java/parse.y:1765 ../../gcc-cvs/gcc/java/parse.y:1886
+#: ../../gcc-cvs/gcc/java/parse.y:1964 ../../gcc-cvs/gcc/java/parse.y:2055
+#: ../../gcc-cvs/gcc/java/parse.y:2057 ../../gcc-cvs/gcc/java/parse.y:2070
+#: ../../gcc-cvs/gcc/java/parse.y:2313 ../../gcc-cvs/gcc/java/parse.y:2315
msgid "'(' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1631
+#: ../../gcc-cvs/gcc/java/parse.y:1631
msgid "Missing term or ')'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1678
+#: ../../gcc-cvs/gcc/java/parse.y:1678
msgid "Missing or invalid constant expression"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1699
+#: ../../gcc-cvs/gcc/java/parse.y:1699
msgid "Missing term and ')' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1738
+#: ../../gcc-cvs/gcc/java/parse.y:1738
msgid "Invalid control expression"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1740
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1742
+#: ../../gcc-cvs/gcc/java/parse.y:1740 ../../gcc-cvs/gcc/java/parse.y:1742
msgid "Invalid update expression"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1767
+#: ../../gcc-cvs/gcc/java/parse.y:1767
msgid "Invalid init statement"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:1967
+#: ../../gcc-cvs/gcc/java/parse.y:1967
msgid "Missing term or ')' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2010
+#: ../../gcc-cvs/gcc/java/parse.y:2010
msgid "'class' or 'this' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2012
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2014
+#: ../../gcc-cvs/gcc/java/parse.y:2012 ../../gcc-cvs/gcc/java/parse.y:2014
msgid "'class' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2059
+#: ../../gcc-cvs/gcc/java/parse.y:2059
msgid "')' or term expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2161
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2190
+#: ../../gcc-cvs/gcc/java/parse.y:2161 ../../gcc-cvs/gcc/java/parse.y:2190
msgid "'[' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2268
+#: ../../gcc-cvs/gcc/java/parse.y:2268
msgid "Field expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2327
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2337
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2347
+#: ../../gcc-cvs/gcc/java/parse.y:2327 ../../gcc-cvs/gcc/java/parse.y:2337
+#: ../../gcc-cvs/gcc/java/parse.y:2347
msgid "Missing term and ']' expected"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2452
+#: ../../gcc-cvs/gcc/java/parse.y:2452
msgid "']' expected, invalid type expression"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2455
+#: ../../gcc-cvs/gcc/java/parse.y:2455
msgid "Invalid type expression"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:2567
+#: ../../gcc-cvs/gcc/java/parse.y:2567
msgid "Invalid reference type"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3034
+#: ../../gcc-cvs/gcc/java/parse.y:3034
msgid "Constructor invocation must be first thing in a constructor"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3036
+#: ../../gcc-cvs/gcc/java/parse.y:3036
msgid "Only constructors can invoke constructors"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3044
+#: ../../gcc-cvs/gcc/java/parse.y:3044
#, c-format
msgid ": `%s' JDK1.1(TM) feature"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3124
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3126
+#: ../../gcc-cvs/gcc/java/parse.y:3124 ../../gcc-cvs/gcc/java/parse.y:3126
#, c-format
msgid ""
"%s.\n"
"%s"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3285
+#: ../../gcc-cvs/gcc/java/parse.y:3285
msgid "Missing return statement"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3307
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:11931
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:11935
+#: ../../gcc-cvs/gcc/java/parse.y:3307 ../../gcc-cvs/gcc/java/parse.y:11931
+#: ../../gcc-cvs/gcc/java/parse.y:11935
msgid "Unreachable statement"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3317
+#: ../../gcc-cvs/gcc/java/parse.y:3317
#, c-format
msgid "Can't access %s field `%s.%s' from `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3386
+#: ../../gcc-cvs/gcc/java/parse.y:3386
#, c-format
msgid "%s `%s' already defined in %s:%d"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3404
+#: ../../gcc-cvs/gcc/java/parse.y:3404
#, c-format
msgid ""
"Variable `%s' is already defined in this method and was declared `%s %s' at "
"line %d"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3515
+#: ../../gcc-cvs/gcc/java/parse.y:3515
#, c-format
msgid "Interface `%s' repeated"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3545
+#: ../../gcc-cvs/gcc/java/parse.y:3545
#, c-format
msgid "%s name `%s' clashes with imported type `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3577
+#: ../../gcc-cvs/gcc/java/parse.y:3577
#, c-format
msgid "Public %s `%s' must be defined in a file called `%s.java'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3592
+#: ../../gcc-cvs/gcc/java/parse.y:3592
#, c-format
msgid ""
"Inner class `%s' can't be static. Static classes can only occur in "
"interfaces and top-level classes"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3673
+#: ../../gcc-cvs/gcc/java/parse.y:3673
#, c-format
msgid ""
"The class name `%s' is already defined in this scope. An inner class may not "
"have the same simple name as any of its enclosing classes"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3715
+#: ../../gcc-cvs/gcc/java/parse.y:3715
msgid "Qualifier must be a reference"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:3736
+#: ../../gcc-cvs/gcc/java/parse.y:3736
#, c-format
msgid "Cyclic inheritance involving %s"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4000
+#: ../../gcc-cvs/gcc/java/parse.y:4000
#, c-format
msgid ""
"Redundant use of `abstract' modifier. Interface `%s' is implicitly abstract"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4155
+#: ../../gcc-cvs/gcc/java/parse.y:4155
#, c-format
msgid "Class `%s' can't be declared both abstract and final"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4167
+#: ../../gcc-cvs/gcc/java/parse.y:4167
msgid "`java.lang.Object' can't extend anything"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4409
+#: ../../gcc-cvs/gcc/java/parse.y:4409
#, c-format
msgid "Duplicate variable declaration: `%s %s' was `%s %s' (%s:%d)"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4473
+#: ../../gcc-cvs/gcc/java/parse.y:4473
#, c-format
msgid "Field `%s' can't be static in inner class `%s' unless it is final"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4718
+#: ../../gcc-cvs/gcc/java/parse.y:4718
#, c-format
msgid "Class `%s' must be declared abstract to define abstract method `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4725
+#: ../../gcc-cvs/gcc/java/parse.y:4725
#, c-format
msgid "native method `%s' can't be strictfp"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4729
+#: ../../gcc-cvs/gcc/java/parse.y:4729
#, c-format
msgid "method `%s' can't be transient"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4732
+#: ../../gcc-cvs/gcc/java/parse.y:4732
#, c-format
msgid "method `%s' can't be volatile"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4782
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6531
+#: ../../gcc-cvs/gcc/java/parse.y:4782 ../../gcc-cvs/gcc/java/parse.y:6531
#, c-format
msgid ""
"Method `%s' can't be static in inner class `%s'. Only members of interfaces "
"and top-level classes can be static"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4948
+#: ../../gcc-cvs/gcc/java/parse.y:4948
#, c-format
msgid "%s method `%s' can't have a body defined"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:4959
+#: ../../gcc-cvs/gcc/java/parse.y:4959
#, c-format
msgid "Non native and non abstract method `%s' must have a body defined"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:5030
+#: ../../gcc-cvs/gcc/java/parse.y:5030
#, c-format
msgid "%s: recursive invocation of constructor `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:5060
+#: ../../gcc-cvs/gcc/java/parse.y:5060
msgid ""
"Inconsistent member declaration. At most one of `public', `private', or "
"`protected' may be specified"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:5068
+#: ../../gcc-cvs/gcc/java/parse.y:5068
msgid ""
"Inconsistent member declaration. At most one of `final' or `volatile' may "
"be specified"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:5158
+#: ../../gcc-cvs/gcc/java/parse.y:5158
#, c-format
msgid ""
"Variable `%s' is used more than once in the argument list of method `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:5242
+#: ../../gcc-cvs/gcc/java/parse.y:5242
#, c-format
msgid "%s `%s' can't implement/extend %s `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:5276
+#: ../../gcc-cvs/gcc/java/parse.y:5276
#, c-format
msgid "Class `%s' can't subclass %s `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:5285
+#: ../../gcc-cvs/gcc/java/parse.y:5285
#, c-format
msgid "Can't subclass final classes: %s"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:5471
+#: ../../gcc-cvs/gcc/java/parse.y:5471
#, c-format
msgid "Cyclic class inheritance%s"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6182
+#: ../../gcc-cvs/gcc/java/parse.y:6182
#, c-format
msgid "Superclass `%s' of class `%s' not found"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6188
+#: ../../gcc-cvs/gcc/java/parse.y:6188
#, c-format
msgid "Type `%s' not found in declaration of field `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6194
+#: ../../gcc-cvs/gcc/java/parse.y:6194
#, c-format
msgid ""
"Type `%s' not found in the declaration of the argument `%s' of method `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6201
+#: ../../gcc-cvs/gcc/java/parse.y:6201
#, c-format
msgid ""
"Type `%s' not found in the declaration of the return type of method `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6207
+#: ../../gcc-cvs/gcc/java/parse.y:6207
#, c-format
msgid "Superinterface `%s' of %s `%s' not found"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6214
+#: ../../gcc-cvs/gcc/java/parse.y:6214
#, c-format
msgid "Type `%s' not found in the declaration of the local variable `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6221
+#: ../../gcc-cvs/gcc/java/parse.y:6221
#, c-format
msgid "Class `%s' not found in `throws'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6278
+#: ../../gcc-cvs/gcc/java/parse.y:6278
#, c-format
msgid "Duplicate %s declaration `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6352
+#: ../../gcc-cvs/gcc/java/parse.y:6352
#, c-format
msgid ""
"Class `%s' doesn't define the abstract method `%s %s' from %s `%s'. This "
"method must be defined or %s `%s' must be declared abstract"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6508
+#: ../../gcc-cvs/gcc/java/parse.y:6508
#, c-format
msgid ""
"Class `%s' in `throws' clause must be a subclass of class `java.lang."
"Throwable'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6552
+#: ../../gcc-cvs/gcc/java/parse.y:6552
#, c-format
msgid ""
"Class `%s' must override `%s' with a public method in order to implement "
"interface `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6566
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6793
+#: ../../gcc-cvs/gcc/java/parse.y:6566 ../../gcc-cvs/gcc/java/parse.y:6793
#, c-format
msgid "Method `%s' was defined with return type `%s' in class `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6583
+#: ../../gcc-cvs/gcc/java/parse.y:6583
#, c-format
msgid "%s methods can't be overridden. Method `%s' is %s in class `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6597
+#: ../../gcc-cvs/gcc/java/parse.y:6597
#, c-format
msgid ""
"Instance methods can't be overridden by a static method. Method `%s' is an "
"instance method in class `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6620
+#: ../../gcc-cvs/gcc/java/parse.y:6620
#, c-format
msgid ""
"Methods can't be overridden to be more private. Method `%s' is not %s in "
"class `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6761
+#: ../../gcc-cvs/gcc/java/parse.y:6761
#, c-format
msgid ""
"Invalid checked exception class `%s' in `throws' clause. The exception must "
"be a subclass of an exception thrown by `%s' from class `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6818
+#: ../../gcc-cvs/gcc/java/parse.y:6818
#, c-format
msgid ""
"Interface `%s' inherits method `%s' from interface `%s'. This method is "
"redefined with a different return type in interface `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:6993
+#: ../../gcc-cvs/gcc/java/parse.y:6993
#, c-format
msgid "Class or interface `%s' not found in import"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:7078
+#: ../../gcc-cvs/gcc/java/parse.y:7078
#, c-format
msgid "malformed .zip archive in CLASSPATH: %s"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:7149
+#: ../../gcc-cvs/gcc/java/parse.y:7149
#, c-format
msgid ""
"Can't find default package `%s'. Check the CLASSPATH environment variable "
"and the access to the archives"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:7154
+#: ../../gcc-cvs/gcc/java/parse.y:7154
#, c-format
msgid "Package `%s' not found in import"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:7251
+#: ../../gcc-cvs/gcc/java/parse.y:7251
#, c-format
msgid "Type `%s' also potentially defined in package `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:7396
+#: ../../gcc-cvs/gcc/java/parse.y:7396
#, c-format
msgid "Nested %s %s is %s; cannot be accessed from here"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:7434
+#: ../../gcc-cvs/gcc/java/parse.y:7434
#, c-format
msgid ""
"Can't access %s `%s'. Only public classes and interfaces in other packages "
"can be accessed"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:7472
+#: ../../gcc-cvs/gcc/java/parse.y:7472
msgid "Only `final' is allowed as a local variables modifier"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:9026
+#: ../../gcc-cvs/gcc/java/parse.y:9026
#, c-format
msgid "No constructor matching `%s' found in class `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:9525
+#: ../../gcc-cvs/gcc/java/parse.y:9525
#, c-format
msgid "Can't reference `%s' before the superclass constructor has been called"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:9579
+#: ../../gcc-cvs/gcc/java/parse.y:9579
#, c-format
msgid ""
"Local variable `%s' can't be accessed from within the inner class `%s' "
"unless it is declared final"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:9584
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10047
+#: ../../gcc-cvs/gcc/java/parse.y:9584 ../../gcc-cvs/gcc/java/parse.y:10047
#, c-format
msgid "Undefined variable `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:9595
+#: ../../gcc-cvs/gcc/java/parse.y:9595
#, c-format
msgid "Can't make a static reference to nonstatic variable `%s' in class `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:9801
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10656
+#: ../../gcc-cvs/gcc/java/parse.y:9801 ../../gcc-cvs/gcc/java/parse.y:10656
#, c-format
msgid "No enclosing instance for inner class `%s' is in scope%s"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:9920
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:12363
+#: ../../gcc-cvs/gcc/java/parse.y:9920 ../../gcc-cvs/gcc/java/parse.y:12363
msgid "Keyword `this' used outside allowed context"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:9926
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10810
+#: ../../gcc-cvs/gcc/java/parse.y:9926 ../../gcc-cvs/gcc/java/parse.y:10810
msgid ""
"Can't reference `this' before the superclass constructor has been called"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:9942
+#: ../../gcc-cvs/gcc/java/parse.y:9942
#, c-format
msgid ""
"Can't use variable `%s.this': type `%s' isn't an outer type of type `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:9975
+#: ../../gcc-cvs/gcc/java/parse.y:9975
msgid "Keyword `super' used outside allowed context"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10024
+#: ../../gcc-cvs/gcc/java/parse.y:10024
#, c-format
msgid "No variable `%s' defined in class `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10029
+#: ../../gcc-cvs/gcc/java/parse.y:10029
#, c-format
msgid "Undefined variable or class name: `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10100
+#: ../../gcc-cvs/gcc/java/parse.y:10100
#, c-format
msgid "Can't use type `%s' as a qualifier"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10119
+#: ../../gcc-cvs/gcc/java/parse.y:10119
#, c-format
msgid "Attempt to reference field `%s' in `%s %s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10150
+#: ../../gcc-cvs/gcc/java/parse.y:10150
#, c-format
msgid "No variable `%s' defined in type `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10234
+#: ../../gcc-cvs/gcc/java/parse.y:10234
#, c-format
msgid "Attempt to reference field `new' in a `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10371
+#: ../../gcc-cvs/gcc/java/parse.y:10371
#, c-format
msgid "The class `%s' has been deprecated"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10381
+#: ../../gcc-cvs/gcc/java/parse.y:10381
#, c-format
msgid "The %s `%s' in class `%s' has been deprecated"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10498
+#: ../../gcc-cvs/gcc/java/parse.y:10498
#, c-format
msgid "Can't invoke a method on primitive type `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10513
+#: ../../gcc-cvs/gcc/java/parse.y:10513
#, c-format
msgid "Can't make static reference to method `%s' in interface `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10523
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10857
+#: ../../gcc-cvs/gcc/java/parse.y:10523 ../../gcc-cvs/gcc/java/parse.y:10857
#, c-format
msgid "Can't make static reference to method `%s %s' in class `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10563
+#: ../../gcc-cvs/gcc/java/parse.y:10563
msgid "Can't invoke super constructor on java.lang.Object"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10576
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14424
+#: ../../gcc-cvs/gcc/java/parse.y:10576 ../../gcc-cvs/gcc/java/parse.y:14424
#, c-format
msgid "Class `%s' not found in type declaration"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10588
+#: ../../gcc-cvs/gcc/java/parse.y:10588
#, c-format
msgid "Class `%s' is an abstract class. It can't be instantiated"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10618
+#: ../../gcc-cvs/gcc/java/parse.y:10618
#, c-format
msgid "No method named `%s' in scope"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:10729
+#: ../../gcc-cvs/gcc/java/parse.y:10729
#, c-format
msgid "Can't access %s %s `%s.%s' from `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:11195
+#: ../../gcc-cvs/gcc/java/parse.y:11195
#, c-format
msgid "Can't find %s `%s(%s)' in type `%s'%s"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:11777
+#: ../../gcc-cvs/gcc/java/parse.y:11777
msgid "Constant expression required"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:11790
+#: ../../gcc-cvs/gcc/java/parse.y:11790
#, c-format
msgid "Incompatible type for case. Can't convert `%s' to `int'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:11824
+#: ../../gcc-cvs/gcc/java/parse.y:11824
msgid "Duplicate case label: `default'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:12172
+#: ../../gcc-cvs/gcc/java/parse.y:12172
#, c-format
msgid "Incompatible type for `+='. Can't convert `%s' to `java.lang.String'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:12343
+#: ../../gcc-cvs/gcc/java/parse.y:12343
#, c-format
msgid "missing static field `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:12348
+#: ../../gcc-cvs/gcc/java/parse.y:12348
#, c-format
msgid "not a static field `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:12371
+#: ../../gcc-cvs/gcc/java/parse.y:12371
msgid ""
"Can't reference `this' or `super' before the superclass constructor has been "
"called"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:12391
+#: ../../gcc-cvs/gcc/java/parse.y:12391
#, c-format
msgid "No case for %s"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:12821
+#: ../../gcc-cvs/gcc/java/parse.y:12821
msgid "Invalid left hand side of assignment"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:12872
+#: ../../gcc-cvs/gcc/java/parse.y:12872
#, c-format
msgid "Incompatible type for %s. Can't convert `%s' to `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:12875
+#: ../../gcc-cvs/gcc/java/parse.y:12875
#, c-format
msgid "Incompatible type for %s. Explicit cast needed to convert `%s' to `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:13047
+#: ../../gcc-cvs/gcc/java/parse.y:13047
#, c-format
msgid ""
"Constant expression `%s' too wide for narrowing primitive conversion to `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:13338
+#: ../../gcc-cvs/gcc/java/parse.y:13338
#, c-format
msgid "unregistered operator %s"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:13485
+#: ../../gcc-cvs/gcc/java/parse.y:13485
msgid ""
"Evaluating this expression will result in an arithmetic exception being "
"thrown"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:13567
+#: ../../gcc-cvs/gcc/java/parse.y:13567
#, c-format
msgid ""
"Incompatible type for `%s'. Explicit cast needed to convert shift distance "
"from `%s' to integral"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:13572
+#: ../../gcc-cvs/gcc/java/parse.y:13572
#, c-format
msgid ""
"Incompatible type for `%s'. Can't convert shift distance from `%s' to "
"integral"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:13648
+#: ../../gcc-cvs/gcc/java/parse.y:13648
#, c-format
msgid "Invalid argument `%s' for `instanceof'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:13675
+#: ../../gcc-cvs/gcc/java/parse.y:13675
#, c-format
msgid "Impossible for `%s' to be instance of `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:13804
+#: ../../gcc-cvs/gcc/java/parse.y:13804
#, c-format
msgid "Incompatible type for `%s'. Can't convert `%s' to `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14285
+#: ../../gcc-cvs/gcc/java/parse.y:14285
#, c-format
msgid "Invalid argument type `%s' to `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14515
+#: ../../gcc-cvs/gcc/java/parse.y:14515
#, c-format
msgid "Invalid cast from `%s' to `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14562
+#: ../../gcc-cvs/gcc/java/parse.y:14562
#, c-format
msgid "`[]' can only be applied to arrays. It can't be applied to `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14575
+#: ../../gcc-cvs/gcc/java/parse.y:14575
#, c-format
msgid ""
"Incompatible type for `[]'. Explicit cast needed to convert `%s' to `int'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14579
+#: ../../gcc-cvs/gcc/java/parse.y:14579
#, c-format
msgid "Incompatible type for `[]'. Can't convert `%s' to `int'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14650
+#: ../../gcc-cvs/gcc/java/parse.y:14650
#, c-format
msgid ""
"Incompatible type for dimension in array creation expression. %s convert `%"
"s' to `int'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14766
+#: ../../gcc-cvs/gcc/java/parse.y:14766
#, c-format
msgid "Invalid array initializer for non-array type `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14853
+#: ../../gcc-cvs/gcc/java/parse.y:14853
#, c-format
msgid "Incompatible type for array. %s convert `%s' to `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14922
+#: ../../gcc-cvs/gcc/java/parse.y:14922
msgid "`return' inside instance initializer"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14926
+#: ../../gcc-cvs/gcc/java/parse.y:14926
msgid "`return' inside static initializer"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14932
+#: ../../gcc-cvs/gcc/java/parse.y:14932
#, c-format
msgid "`return' with%s value from `%s %s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:14939
+#: ../../gcc-cvs/gcc/java/parse.y:14939
#, c-format
msgid "`return' with value from constructor `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15004
+#: ../../gcc-cvs/gcc/java/parse.y:15004
#, c-format
msgid "Incompatible type for `if'. Can't convert `%s' to `boolean'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15037
+#: ../../gcc-cvs/gcc/java/parse.y:15037
#, c-format
msgid "Declaration of `%s' shadows a previous label declaration"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15042
+#: ../../gcc-cvs/gcc/java/parse.y:15042
#, c-format
msgid "This is the location of the previous declaration of label `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15290
+#: ../../gcc-cvs/gcc/java/parse.y:15290
#, c-format
msgid "No label definition found for `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15303
+#: ../../gcc-cvs/gcc/java/parse.y:15303
msgid "`continue' must be in loop"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15306
+#: ../../gcc-cvs/gcc/java/parse.y:15306
#, c-format
msgid "continue label `%s' does not name a loop"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15327
+#: ../../gcc-cvs/gcc/java/parse.y:15327
msgid "`break' must be in loop or switch"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15368
+#: ../../gcc-cvs/gcc/java/parse.y:15368
#, c-format
msgid "Incompatible type for loop conditional. Can't convert `%s' to `boolean'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15406
+#: ../../gcc-cvs/gcc/java/parse.y:15406
#, c-format
msgid "Incompatible type for `switch'. Can't convert `%s' to `int'"
msgstr ""
#. The case_label_list is in reverse order, so print the
#. outer label first.
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15437
+#: ../../gcc-cvs/gcc/java/parse.y:15437
msgid "duplicate case label: `"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15441
+#: ../../gcc-cvs/gcc/java/parse.y:15441
msgid "original label is here"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15658
+#: ../../gcc-cvs/gcc/java/parse.y:15658
#, c-format
msgid ""
"Can't catch class `%s'. Catch clause parameter type must be a subclass of "
"class `java.lang.Throwable'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15682
+#: ../../gcc-cvs/gcc/java/parse.y:15682
#, c-format
msgid "`catch' not reached because of the catch clause at line %d"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15749
+#: ../../gcc-cvs/gcc/java/parse.y:15749
#, c-format
msgid ""
"Incompatible type for `synchronized'. Can't convert `%s' to `java.lang."
"Object'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15808
+#: ../../gcc-cvs/gcc/java/parse.y:15808
#, c-format
msgid "Can't throw `%s'; it must be a subclass of class `java.lang.Throwable'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15837
+#: ../../gcc-cvs/gcc/java/parse.y:15837
#, c-format
msgid ""
"Checked exception `%s' can't be thrown in instance initializer (not all "
"declared constructor are declaring it in their `throws' clause)"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15858
+#: ../../gcc-cvs/gcc/java/parse.y:15858
#, c-format
msgid ""
"Checked exception `%s' can't be caught by any of the catch clause(s) of the "
"surrounding `try' block"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15871
+#: ../../gcc-cvs/gcc/java/parse.y:15871
#, c-format
msgid "Checked exception `%s' can't be thrown in initializer"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15875
+#: ../../gcc-cvs/gcc/java/parse.y:15875
#, c-format
msgid "Checked exception `%s' isn't thrown from a `try' block"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15881
+#: ../../gcc-cvs/gcc/java/parse.y:15881
#, c-format
msgid ""
"Checked exception `%s' doesn't match any of current method's `throws' "
"declaration(s)"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15936
+#: ../../gcc-cvs/gcc/java/parse.y:15936
#, c-format
msgid "Exception `%s' can't be thrown in initializer"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:15941
+#: ../../gcc-cvs/gcc/java/parse.y:15941
#, c-format
msgid ""
"Exception `%s' must be caught, or it must be declared in the `throws' clause "
"of `%s'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:16052
+#: ../../gcc-cvs/gcc/java/parse.y:16052
#, c-format
msgid "Incompatible type for `?:'. Can't convert `%s' to `boolean'"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/gcc/java/parse.y:16120
+#: ../../gcc-cvs/gcc/java/parse.y:16120
#, c-format
msgid "Incompatible type for `?:'. Can't convert `%s' to `%s'"
msgstr ""
@@ -19524,1693 +19577,1804 @@ msgstr ""
msgid "Address of register variable %qD requested."
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:934
+#: /home/jsm28/src/gcc-build/gcc/options.c:935
msgid "Display this information"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:940
+#: /home/jsm28/src/gcc-build/gcc/options.c:941
msgid ""
"--param <param>=<value>\tSet paramter <param> to value. See below for a "
"complete list of parameters"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:949
+#: /home/jsm28/src/gcc-build/gcc/options.c:950
msgid ""
"-A<question>=<answer>\tAssert the <answer> to <question>. Putting '-' "
"before <question> disables the <answer> to <question>"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:952
+#: /home/jsm28/src/gcc-build/gcc/options.c:953
msgid "Do not discard comments"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:955
+#: /home/jsm28/src/gcc-build/gcc/options.c:956
msgid "Do not discard comments in macro expansions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:958
+#: /home/jsm28/src/gcc-build/gcc/options.c:959
msgid ""
"-D<macro>[=<val>]\tDefine a <macro> with <val> as its value. If just "
"<macro> is given, <val> is taken to be 1"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:964
+#: /home/jsm28/src/gcc-build/gcc/options.c:965
msgid "-F <dir>\tAdd <dir> to the end of the main framework include path "
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:967
+#: /home/jsm28/src/gcc-build/gcc/options.c:968
msgid ""
"-G<number>\tPut global and static data smaller than <number> bytes into a "
"special section (on some targets)"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:970
+#: /home/jsm28/src/gcc-build/gcc/options.c:971
msgid "Print the name of header files as they are used"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:979
+#: /home/jsm28/src/gcc-build/gcc/options.c:977
+msgid "-J<directory>\tPut MODULE files in 'directory'"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:983
msgid "Generate make dependencies and compile"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:988
+#: /home/jsm28/src/gcc-build/gcc/options.c:992
msgid "Treat missing header files as generated files"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:994
+#: /home/jsm28/src/gcc-build/gcc/options.c:998
msgid "Like -MD but ignore system header files"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1003
+#: /home/jsm28/src/gcc-build/gcc/options.c:1007
msgid "-MQ <target>\tAdd a MAKE-quoted target"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1009
+#: /home/jsm28/src/gcc-build/gcc/options.c:1013
msgid "-O<number>\tSet optimization level to <number>"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1012
+#: /home/jsm28/src/gcc-build/gcc/options.c:1016
msgid "Optimize for space rather than speed"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1015
+#: /home/jsm28/src/gcc-build/gcc/options.c:1019
msgid "Do not generate #line directives"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1018
+#: /home/jsm28/src/gcc-build/gcc/options.c:1022
msgid "-U<macro>\tUndefine <macro>"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1021
+#: /home/jsm28/src/gcc-build/gcc/options.c:1025
msgid "This switch is deprecated; use -Wextra instead"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1024
+#: /home/jsm28/src/gcc-build/gcc/options.c:1028
msgid ""
"Warn about things that will change when compiling with an ABI-compliant "
"compiler"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1027
+#: /home/jsm28/src/gcc-build/gcc/options.c:1031
msgid "Warn about returning structures, unions or arrays"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1033
+#: /home/jsm28/src/gcc-build/gcc/options.c:1034
+msgid "Warn about possible aliasing of dummy arguments"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1040
msgid "Warn about casting functions to incompatible types"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1036
+#: /home/jsm28/src/gcc-build/gcc/options.c:1043
msgid "Warn about pointer casts which increase alignment"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1039
+#: /home/jsm28/src/gcc-build/gcc/options.c:1046
msgid "Warn about casts which discard qualifiers"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1042
+#: /home/jsm28/src/gcc-build/gcc/options.c:1049
msgid "Warn about subscripts whose type is \"char\""
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1045
+#: /home/jsm28/src/gcc-build/gcc/options.c:1052
msgid ""
"Warn about possibly nested block comments, and C++ comments spanning more "
"than one physical line"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1048
+#: /home/jsm28/src/gcc-build/gcc/options.c:1055
msgid "Synonym for -Wcomment"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1051
-msgid "Warn about possibly confusing type conversions"
+#: /home/jsm28/src/gcc-build/gcc/options.c:1058
+msgid "Warn about implicit conversion"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1054
+#: /home/jsm28/src/gcc-build/gcc/options.c:1061
msgid "Warn when all constructors and destructors are private"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1057
+#: /home/jsm28/src/gcc-build/gcc/options.c:1064
msgid "Warn when a declaration is found after a statement"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1060
+#: /home/jsm28/src/gcc-build/gcc/options.c:1067
msgid "Warn if a deprecated compiler feature, class, method, or field is used"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1063
+#: /home/jsm28/src/gcc-build/gcc/options.c:1070
msgid "Warn about uses of __attribute__((deprecated)) declarations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1066
+#: /home/jsm28/src/gcc-build/gcc/options.c:1073
msgid "Warn when an optimization pass is disabled"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1069
+#: /home/jsm28/src/gcc-build/gcc/options.c:1076
msgid "Warn about compile-time integer division by zero"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1072
+#: /home/jsm28/src/gcc-build/gcc/options.c:1079
msgid "Warn about violations of Effective C++ style rules"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1075
+#: /home/jsm28/src/gcc-build/gcc/options.c:1082
msgid "Warn about stray tokens after #elif and #endif"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1078
+#: /home/jsm28/src/gcc-build/gcc/options.c:1085
msgid "Treat all warnings as errors"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1081
+#: /home/jsm28/src/gcc-build/gcc/options.c:1088
msgid "Make implicit function declarations an error"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1084
+#: /home/jsm28/src/gcc-build/gcc/options.c:1091
msgid "Print extra (possibly unwanted) warnings"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1087
+#: /home/jsm28/src/gcc-build/gcc/options.c:1094
msgid "Warn if deprecated empty statements are found"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1090
+#: /home/jsm28/src/gcc-build/gcc/options.c:1097
msgid "Exit on the first error occurred"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1093
+#: /home/jsm28/src/gcc-build/gcc/options.c:1100
msgid "Warn if testing floating point numbers for equality"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1096
+#: /home/jsm28/src/gcc-build/gcc/options.c:1103
msgid "Warn about printf/scanf/strftime/strfmon format string anomalies"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1099
+#: /home/jsm28/src/gcc-build/gcc/options.c:1106
msgid "Warn if passing too many arguments to a function for its format string"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1102
+#: /home/jsm28/src/gcc-build/gcc/options.c:1109
msgid "Warn about format strings that are not literals"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1105
+#: /home/jsm28/src/gcc-build/gcc/options.c:1112
msgid "Warn about possible security problems with format functions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1108
+#: /home/jsm28/src/gcc-build/gcc/options.c:1115
msgid "Warn about strftime formats yielding 2-digit years"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1111
+#: /home/jsm28/src/gcc-build/gcc/options.c:1118
msgid "Warn about zero-length formats"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1120
+#: /home/jsm28/src/gcc-build/gcc/options.c:1127
msgid "Warn about implicit function declarations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1123
+#: /home/jsm28/src/gcc-build/gcc/options.c:1130
msgid "Warn when a declaration does not specify a type"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1126
+#: /home/jsm28/src/gcc-build/gcc/options.c:1133
+msgid "Warn about calls with implicit interface"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1136
msgid "Deprecated. This switch has no effect."
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1129
+#: /home/jsm28/src/gcc-build/gcc/options.c:1139
msgid "Warn about variables which are initialized to themselves."
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1132
+#: /home/jsm28/src/gcc-build/gcc/options.c:1142
msgid "Warn when an inlined function cannot be inlined"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1135
+#: /home/jsm28/src/gcc-build/gcc/options.c:1145
msgid "Warn about invalid uses of the \"offsetof\" macro"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1138
+#: /home/jsm28/src/gcc-build/gcc/options.c:1148
msgid "Warn about PCH files that are found but not used"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1141
+#: /home/jsm28/src/gcc-build/gcc/options.c:1151
msgid "-Wlarger-than-<number>\tWarn if an object is larger than <number> bytes"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1144
+#: /home/jsm28/src/gcc-build/gcc/options.c:1154
+msgid "Warn about truncated source lines"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1157
msgid "Do not warn about using \"long long\" when -pedantic"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1147
+#: /home/jsm28/src/gcc-build/gcc/options.c:1160
msgid "Warn about suspicious declarations of \"main\""
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1150
+#: /home/jsm28/src/gcc-build/gcc/options.c:1163
msgid "Warn about possibly missing braces around initializers"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1153
+#: /home/jsm28/src/gcc-build/gcc/options.c:1166
msgid "Warn about global functions without previous declarations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1156
+#: /home/jsm28/src/gcc-build/gcc/options.c:1169
msgid "Warn about missing fields in struct initializers"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1159
+#: /home/jsm28/src/gcc-build/gcc/options.c:1172
msgid "Warn about functions which might be candidates for format attributes"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1162
+#: /home/jsm28/src/gcc-build/gcc/options.c:1175
msgid "Warn about user-specified include directories that do not exist"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1165
+#: /home/jsm28/src/gcc-build/gcc/options.c:1178
msgid ""
"Warn about functions which might be candidates for __attribute__((noreturn))"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1168
+#: /home/jsm28/src/gcc-build/gcc/options.c:1181
msgid "Warn about global functions without prototypes"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1171
+#: /home/jsm28/src/gcc-build/gcc/options.c:1184
msgid "Warn about use of multi-character character constants"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1174
+#: /home/jsm28/src/gcc-build/gcc/options.c:1187
msgid "Warn about \"extern\" declarations not at file scope"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1177
+#: /home/jsm28/src/gcc-build/gcc/options.c:1190
msgid ""
"Warn when non-templatized friend functions are declared within a template"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1180
+#: /home/jsm28/src/gcc-build/gcc/options.c:1193
msgid "Warn about non-virtual destructors"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1183
+#: /home/jsm28/src/gcc-build/gcc/options.c:1196
msgid ""
"Warn about NULL being passed to argument slots marked as requiring non-NULL"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1186
+#: /home/jsm28/src/gcc-build/gcc/options.c:1199
msgid "Warn if a C-style cast is used in a program"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1189
+#: /home/jsm28/src/gcc-build/gcc/options.c:1202
msgid "Warn if an old-style parameter definition is used"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1192
+#: /home/jsm28/src/gcc-build/gcc/options.c:1205
msgid "Warn if .class files are out of date"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1195
+#: /home/jsm28/src/gcc-build/gcc/options.c:1208
msgid "Warn about overloaded virtual function names"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1198
+#: /home/jsm28/src/gcc-build/gcc/options.c:1211
msgid "Warn when the packed attribute has no effect on struct layout"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1201
+#: /home/jsm28/src/gcc-build/gcc/options.c:1214
msgid "Warn when padding is required to align structure members"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1204
+#: /home/jsm28/src/gcc-build/gcc/options.c:1217
msgid "Warn about possibly missing parentheses"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1207
+#: /home/jsm28/src/gcc-build/gcc/options.c:1220
msgid "Warn when converting the type of pointers to member functions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1210
+#: /home/jsm28/src/gcc-build/gcc/options.c:1223
msgid "Warn about function pointer arithmetic"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1213
+#: /home/jsm28/src/gcc-build/gcc/options.c:1226
msgid "Warn if inherited methods are unimplemented"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1216
+#: /home/jsm28/src/gcc-build/gcc/options.c:1229
msgid "Warn about multiple declarations of the same object"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1219
+#: /home/jsm28/src/gcc-build/gcc/options.c:1232
msgid "Warn if modifiers are specified when not necessary"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1222
+#: /home/jsm28/src/gcc-build/gcc/options.c:1235
msgid "Warn when the compiler reorders code"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1225
+#: /home/jsm28/src/gcc-build/gcc/options.c:1238
msgid ""
"Warn whenever a function's return type defaults to \"int\" (C), or about "
"inconsistent return types (C++)"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1228
+#: /home/jsm28/src/gcc-build/gcc/options.c:1241
msgid "Warn if a selector has multiple methods"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1231
+#: /home/jsm28/src/gcc-build/gcc/options.c:1244
msgid "Warn about possible violations of sequence point rules"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1234
+#: /home/jsm28/src/gcc-build/gcc/options.c:1247
msgid "Warn when one local variable shadows another"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1237
+#: /home/jsm28/src/gcc-build/gcc/options.c:1250
msgid "Warn about signed-unsigned comparisons"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1240
+#: /home/jsm28/src/gcc-build/gcc/options.c:1253
msgid "Warn when overload promotes from unsigned to signed"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1243
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1246
+#: /home/jsm28/src/gcc-build/gcc/options.c:1256
+#: /home/jsm28/src/gcc-build/gcc/options.c:1259
msgid "Warn about code which might break strict aliasing rules"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1249
+#: /home/jsm28/src/gcc-build/gcc/options.c:1262
msgid "Warn about unprototyped function declarations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1252
+#: /home/jsm28/src/gcc-build/gcc/options.c:1265
+msgid "Warn about \"suspicious\" constructs"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1268
msgid "Warn about enumerated switches, with no default, missing a case"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1255
+#: /home/jsm28/src/gcc-build/gcc/options.c:1271
msgid "Warn about enumerated switches missing a \"default:\" statement"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1258
+#: /home/jsm28/src/gcc-build/gcc/options.c:1274
msgid "Warn about all enumerated switches missing a specific case"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1261
+#: /home/jsm28/src/gcc-build/gcc/options.c:1277
msgid "Warn when synthesis behavior differs from Cfront"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1264
+#: /home/jsm28/src/gcc-build/gcc/options.c:1280
msgid "Do not suppress warnings from system headers"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1267
+#: /home/jsm28/src/gcc-build/gcc/options.c:1283
msgid "Warn about features not present in traditional C"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1270
+#: /home/jsm28/src/gcc-build/gcc/options.c:1286
msgid ""
"Warn if trigraphs are encountered that might affect the meaning of the "
"program"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1273
+#: /home/jsm28/src/gcc-build/gcc/options.c:1289
msgid "Warn about @selector()s without previously declared methods"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1276
+#: /home/jsm28/src/gcc-build/gcc/options.c:1292
msgid "Warn if an undefined macro is used in an #if directive"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1279
+#: /home/jsm28/src/gcc-build/gcc/options.c:1295
+msgid "Warn about underflow of numerical constant expressions"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1298
msgid "Warn about uninitialized automatic variables"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1282
+#: /home/jsm28/src/gcc-build/gcc/options.c:1301
msgid "Warn about unrecognized pragmas"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1285
+#: /home/jsm28/src/gcc-build/gcc/options.c:1304
msgid "Warn about code that will never be executed"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1288
+#: /home/jsm28/src/gcc-build/gcc/options.c:1307
msgid "Enable all -Wunused- warnings"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1291
+#: /home/jsm28/src/gcc-build/gcc/options.c:1310
msgid "Warn when a function is unused"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1294
+#: /home/jsm28/src/gcc-build/gcc/options.c:1313
+#: /home/jsm28/src/gcc-build/gcc/options.c:1316
msgid "Warn when a label is unused"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1297
+#: /home/jsm28/src/gcc-build/gcc/options.c:1319
msgid "Warn about macros defined in the main file that are not used"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1300
+#: /home/jsm28/src/gcc-build/gcc/options.c:1322
msgid "Warn when a function parameter is unused"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1303
+#: /home/jsm28/src/gcc-build/gcc/options.c:1325
msgid "Warn when an expression value is unused"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1306
+#: /home/jsm28/src/gcc-build/gcc/options.c:1328
msgid "Warn when a variable is unused"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1309
+#: /home/jsm28/src/gcc-build/gcc/options.c:1331
msgid "Do not warn about using variadic macros when -pedantic"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1312
+#: /home/jsm28/src/gcc-build/gcc/options.c:1334
msgid "Give strings the type \"array of char\""
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1315
+#: /home/jsm28/src/gcc-build/gcc/options.c:1337
msgid ""
"A synonym for -std=c89. In a future version of GCC it will become "
"synonymous with -std=c99 instead"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1318
+#: /home/jsm28/src/gcc-build/gcc/options.c:1340
msgid "-aux-info <file>\tEmit declaration information into <file>"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1330
+#: /home/jsm28/src/gcc-build/gcc/options.c:1352
msgid "-d<letters>\tEnable dumps from specific passes of the compiler"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1333
+#: /home/jsm28/src/gcc-build/gcc/options.c:1355
+msgid "Set the default real and integer kinds to double precision"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1358
msgid "-dumpbase <file>\tSet the file basename to be used for dumps"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1336
+#: /home/jsm28/src/gcc-build/gcc/options.c:1361
msgid "--CLASSPATH\tDeprecated; use --classpath instead"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1339
+#: /home/jsm28/src/gcc-build/gcc/options.c:1364
msgid "Generate position-independent code if possible (large mode)"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1342
+#: /home/jsm28/src/gcc-build/gcc/options.c:1367
msgid ""
"Generate position-independent code for executables if possible (large mode)"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1348
+#: /home/jsm28/src/gcc-build/gcc/options.c:1373
msgid "Enforce class member access control semantics"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1351
+#: /home/jsm28/src/gcc-build/gcc/options.c:1376
msgid "Align the start of functions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1357
+#: /home/jsm28/src/gcc-build/gcc/options.c:1382
msgid "Align labels which are only reached by jumping"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1363
+#: /home/jsm28/src/gcc-build/gcc/options.c:1388
msgid "Align all labels"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1369
+#: /home/jsm28/src/gcc-build/gcc/options.c:1394
msgid "Align the start of loops"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1378
+#: /home/jsm28/src/gcc-build/gcc/options.c:1403
msgid "Change when template instances are emitted"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1381
+#: /home/jsm28/src/gcc-build/gcc/options.c:1406
msgid "Specify that arguments may alias each other and globals"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1384
+#: /home/jsm28/src/gcc-build/gcc/options.c:1409
msgid "Assume arguments may alias globals but not each other"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1387
+#: /home/jsm28/src/gcc-build/gcc/options.c:1412
msgid "Assume arguments alias neither each other nor globals"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1390
+#: /home/jsm28/src/gcc-build/gcc/options.c:1415
msgid "Recognize the \"asm\" keyword"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1393
+#: /home/jsm28/src/gcc-build/gcc/options.c:1418
msgid "Permit the use of the assert keyword"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1402
+#: /home/jsm28/src/gcc-build/gcc/options.c:1427
msgid "Generate unwind tables that are exact at each instruction boundary"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1405
+#: /home/jsm28/src/gcc-build/gcc/options.c:1430
msgid "--bootclasspath=<path>\tReplace system path"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1408
+#: /home/jsm28/src/gcc-build/gcc/options.c:1433
msgid "Generate code to check bounds before indexing arrays"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1411
+#: /home/jsm28/src/gcc-build/gcc/options.c:1436
msgid "Replace add, compare, branch with branch on count register"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1414
+#: /home/jsm28/src/gcc-build/gcc/options.c:1439
msgid "Use profiling information for branch probabilities"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1417
+#: /home/jsm28/src/gcc-build/gcc/options.c:1442
msgid ""
"Perform branch target load optimization before prologue / epilogue threading"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1420
+#: /home/jsm28/src/gcc-build/gcc/options.c:1445
msgid ""
"Perform branch target load optimization after prologue / epilogue threading"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1423
+#: /home/jsm28/src/gcc-build/gcc/options.c:1448
msgid ""
"Restrict target load migration not to re-use registers in any basic block"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1426
+#: /home/jsm28/src/gcc-build/gcc/options.c:1451
msgid "Recognize built-in functions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1432
+#: /home/jsm28/src/gcc-build/gcc/options.c:1457
msgid ""
"-fcall-saved-<register>\tMark <register> as being preserved across functions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1435
+#: /home/jsm28/src/gcc-build/gcc/options.c:1460
msgid ""
"-fcall-used-<register>\tMark <register> as being corrupted by function calls"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1438
+#: /home/jsm28/src/gcc-build/gcc/options.c:1463
msgid "Save registers around function calls"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1441
+#: /home/jsm28/src/gcc-build/gcc/options.c:1466
msgid "Check the return value of new"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1444
+#: /home/jsm28/src/gcc-build/gcc/options.c:1469
msgid "Generate checks for references to NULL"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1447
+#: /home/jsm28/src/gcc-build/gcc/options.c:1472
msgid "--classpath=<path>\tSet class path"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1450
+#: /home/jsm28/src/gcc-build/gcc/options.c:1475
msgid "Do not put uninitialized globals in the common section"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1456
+#: /home/jsm28/src/gcc-build/gcc/options.c:1481
msgid "Allow the arguments of the '?' operator to have different types"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1459
+#: /home/jsm28/src/gcc-build/gcc/options.c:1484
msgid "Reduce the size of object files"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1462
+#: /home/jsm28/src/gcc-build/gcc/options.c:1487
msgid "Make string literals \"const char[]\" not \"char[]\""
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1465
+#: /home/jsm28/src/gcc-build/gcc/options.c:1490
msgid "-fconst-string-class=<name>\tUse class <name> for constant strings"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1468
+#: /home/jsm28/src/gcc-build/gcc/options.c:1493
msgid "Perform a register copy-propagation optimization pass"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1471
+#: /home/jsm28/src/gcc-build/gcc/options.c:1496
msgid "Perform cross-jumping optimization"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1474
+#: /home/jsm28/src/gcc-build/gcc/options.c:1499
msgid "When running CSE, follow jumps to their targets"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1477
+#: /home/jsm28/src/gcc-build/gcc/options.c:1502
msgid "When running CSE, follow conditional jumps"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1480
+#: /home/jsm28/src/gcc-build/gcc/options.c:1505
msgid "Place data items into their own section"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1483
+#: /home/jsm28/src/gcc-build/gcc/options.c:1508
msgid "Inline member functions by default"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1486
+#: /home/jsm28/src/gcc-build/gcc/options.c:1511
msgid "Defer popping functions args from stack until later"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1489
+#: /home/jsm28/src/gcc-build/gcc/options.c:1514
msgid "Attempt to fill delay slots of branch instructions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1492
+#: /home/jsm28/src/gcc-build/gcc/options.c:1517
msgid "Delete useless null pointer checks"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1495
+#: /home/jsm28/src/gcc-build/gcc/options.c:1520
msgid ""
"-fdiagnostics-show-location=[once|every-line]\tHow often to emit source "
"location at the beginning of line-wrapped diagnostics"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1504
+#: /home/jsm28/src/gcc-build/gcc/options.c:1529
+msgid "Allow dollar signs in entity names"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1532
msgid "Permit '$' as an identifier character"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1507
+#: /home/jsm28/src/gcc-build/gcc/options.c:1535
msgid "-fdump-<type>\tDump various compiler internals to a file"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1510
+#: /home/jsm28/src/gcc-build/gcc/options.c:1538
+msgid "Display the code tree after parsing."
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1541
msgid ""
"Suppress output of instruction numbers and line number notes in debugging "
"dumps"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1516
+#: /home/jsm28/src/gcc-build/gcc/options.c:1547
msgid "Perform DWARF2 duplicate elimination"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1519
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1522
+#: /home/jsm28/src/gcc-build/gcc/options.c:1550
+#: /home/jsm28/src/gcc-build/gcc/options.c:1553
msgid "Perform unused type elimination in debug info"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1525
+#: /home/jsm28/src/gcc-build/gcc/options.c:1556
msgid "Output a class file"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1528
+#: /home/jsm28/src/gcc-build/gcc/options.c:1559
msgid "Alias for -femit-class-file"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1537
+#: /home/jsm28/src/gcc-build/gcc/options.c:1568
msgid ""
"--encoding=<encoding>\tChoose input encoding (defaults from your locale)"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1540
+#: /home/jsm28/src/gcc-build/gcc/options.c:1571
msgid "Generate code to check exception specifications"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1546
+#: /home/jsm28/src/gcc-build/gcc/options.c:1577
msgid "Enable exception handling"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1549
+#: /home/jsm28/src/gcc-build/gcc/options.c:1580
msgid ""
"-fexec-charset=<cset>\tConvert all strings and character constants to "
"character set <cset>"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1552
+#: /home/jsm28/src/gcc-build/gcc/options.c:1583
msgid "Perform a number of minor, expensive optimizations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1564
+#: /home/jsm28/src/gcc-build/gcc/options.c:1595
msgid "Input file is a file with a list of filenames to compile"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1567
+#: /home/jsm28/src/gcc-build/gcc/options.c:1598
msgid "Assume no NaNs or infinities are generated"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1570
+#: /home/jsm28/src/gcc-build/gcc/options.c:1601
msgid ""
"-ffixed-<register>\tMark <register> as being unavailable to the compiler"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1579
+#: /home/jsm28/src/gcc-build/gcc/options.c:1604
+msgid "Assume that the source file is fixed form"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1607
+msgid "-ffixed-line-length-<n>\t\tUse n as character line width in fixed mode"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1610
+msgid "Allow arbitrary character line width in fixed mode"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1613
msgid "Don't allocate floats and doubles in extended-precision registers"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1582
+#: /home/jsm28/src/gcc-build/gcc/options.c:1616
msgid "Scope of for-init-statement variables is local to the loop"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1585
+#: /home/jsm28/src/gcc-build/gcc/options.c:1619
msgid "Copy memory address constants into registers before use"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1588
+#: /home/jsm28/src/gcc-build/gcc/options.c:1622
msgid "Always check for non gcj generated classes archives"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1591
+#: /home/jsm28/src/gcc-build/gcc/options.c:1625
msgid "Copy memory operands into registers before use"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1594
+#: /home/jsm28/src/gcc-build/gcc/options.c:1628
+msgid "Assume that the source file is free form"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1631
msgid "Do not assume that standard C libraries and \"main\" exist"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1597
+#: /home/jsm28/src/gcc-build/gcc/options.c:1634
msgid "Allow function addresses to be held in registers"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1600
+#: /home/jsm28/src/gcc-build/gcc/options.c:1637
msgid "Place each function into its own section"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1603
+#: /home/jsm28/src/gcc-build/gcc/options.c:1640
msgid "Perform global common subexpression elimination"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1606
+#: /home/jsm28/src/gcc-build/gcc/options.c:1643
msgid ""
"Perform global common subexpression elimination after register allocation"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1609
+#: /home/jsm28/src/gcc-build/gcc/options.c:1646
msgid ""
"Perform redundant load after store elimination in global common subexpression"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1612
+#: /home/jsm28/src/gcc-build/gcc/options.c:1649
msgid ""
"Perform enhanced load motion during global common subexpression elimination"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1615
+#: /home/jsm28/src/gcc-build/gcc/options.c:1652
msgid "Perform store motion after global common subexpression elimination"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1618
+#: /home/jsm28/src/gcc-build/gcc/options.c:1655
msgid "Recognize GNU-defined keywords"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1621
+#: /home/jsm28/src/gcc-build/gcc/options.c:1658
msgid "Generate code for GNU runtime environment"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1624
+#: /home/jsm28/src/gcc-build/gcc/options.c:1661
msgid "Enable guessing of branch probabilities"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1633
+#: /home/jsm28/src/gcc-build/gcc/options.c:1670
msgid ""
"Assume the runtime uses a hash table to map an object to its synchronization "
"structure"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1639
+#: /home/jsm28/src/gcc-build/gcc/options.c:1676
msgid "Assume normal C execution environment"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1642
+#: /home/jsm28/src/gcc-build/gcc/options.c:1679
msgid "Enable support for huge objects"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1645
+#: /home/jsm28/src/gcc-build/gcc/options.c:1682
msgid "Process #ident directives"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1648
+#: /home/jsm28/src/gcc-build/gcc/options.c:1685
msgid "Perform conversion of conditional jumps to branchless equivalents"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1651
+#: /home/jsm28/src/gcc-build/gcc/options.c:1688
msgid "Perform conversion of conditional jumps to conditional execution"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1654
+#: /home/jsm28/src/gcc-build/gcc/options.c:1691
msgid "Export functions even if they can be inlined"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1657
+#: /home/jsm28/src/gcc-build/gcc/options.c:1694
msgid "Emit implicit instantiations of inline templates"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1660
+#: /home/jsm28/src/gcc-build/gcc/options.c:1697
+msgid ""
+"Specify that no implicit typing is allowed, unless overridden by explicit "
+"IMPLICIT statements"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1700
msgid "Emit implicit instantiations of templates"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1663
+#: /home/jsm28/src/gcc-build/gcc/options.c:1703
msgid "Use offset tables for virtual method calls"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1666
+#: /home/jsm28/src/gcc-build/gcc/options.c:1706
msgid "Do not generate .size directives"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1669
+#: /home/jsm28/src/gcc-build/gcc/options.c:1709
msgid "Pay attention to the \"inline\" keyword"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1678
+#: /home/jsm28/src/gcc-build/gcc/options.c:1718
msgid ""
"-finline-limit=<number>\tLimit the size of inlined functions to <number>"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1681
+#: /home/jsm28/src/gcc-build/gcc/options.c:1721
msgid ""
"-finput-charset=<cset> Specify the default character set for source "
"files."
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1684
+#: /home/jsm28/src/gcc-build/gcc/options.c:1724
msgid "Instrument function entry and exit with profiling calls"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1687
+#: /home/jsm28/src/gcc-build/gcc/options.c:1727
msgid "Optimize induction variables on trees"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1690
+#: /home/jsm28/src/gcc-build/gcc/options.c:1730
msgid "Assume native functions are implemented using JNI"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1693
+#: /home/jsm28/src/gcc-build/gcc/options.c:1733
msgid "Generate code for functions even if they are fully inlined"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1696
+#: /home/jsm28/src/gcc-build/gcc/options.c:1736
msgid "Emit static const variables even if they are not used"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1702
+#: /home/jsm28/src/gcc-build/gcc/options.c:1742
msgid "Give external symbols a leading underscore"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1705
+#: /home/jsm28/src/gcc-build/gcc/options.c:1745
msgid "Perform loop optimizations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1708
+#: /home/jsm28/src/gcc-build/gcc/options.c:1748
msgid "Perform loop optimizations using the new loop optimizer"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1711
+#: /home/jsm28/src/gcc-build/gcc/options.c:1751
msgid "Set errno after built-in math functions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1714
+#: /home/jsm28/src/gcc-build/gcc/options.c:1754
+msgid "-fmax-identifier-length=<n>\tMaximum identifier length."
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1757
+msgid ""
+"-fmax-stack-var-size=<n>\tSize in bytes of the largest array that will be "
+"put on the stack"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1760
msgid "Report on permanent memory allocation"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1717
+#: /home/jsm28/src/gcc-build/gcc/options.c:1763
msgid "Attempt to merge identical constants and constant variables"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1720
+#: /home/jsm28/src/gcc-build/gcc/options.c:1766
msgid "Attempt to merge identical constants across compilation units"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1723
+#: /home/jsm28/src/gcc-build/gcc/options.c:1769
msgid ""
"-fmessage-length=<number>\tLimit diagnostics to <number> characters per "
"line. 0 suppresses line-wrapping"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1726
+#: /home/jsm28/src/gcc-build/gcc/options.c:1772
+msgid "Set default accessibility of module entities to PRIVATE"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1775
msgid "Perform SMS based modulo scheduling before the first scheduling pass"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1729
+#: /home/jsm28/src/gcc-build/gcc/options.c:1778
msgid "Move loop invariant computations out of loops"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1732
+#: /home/jsm28/src/gcc-build/gcc/options.c:1781
msgid "Don't warn about uses of Microsoft extensions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1735
+#: /home/jsm28/src/gcc-build/gcc/options.c:1784
msgid ""
"Add mudflap bounds-checking instrumentation for single-threaded program."
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1738
+#: /home/jsm28/src/gcc-build/gcc/options.c:1787
msgid "Ignore read operations when inserting mudflap instrumentation."
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1741
+#: /home/jsm28/src/gcc-build/gcc/options.c:1790
msgid "Add mudflap bounds-checking instrumentation for multi-threaded program."
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1750
+#: /home/jsm28/src/gcc-build/gcc/options.c:1799
msgid "Use graph-coloring register allocation"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1753
+#: /home/jsm28/src/gcc-build/gcc/options.c:1802
msgid "Generate code for NeXT (Apple Mac OS X) runtime environment"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1756
+#: /home/jsm28/src/gcc-build/gcc/options.c:1805
msgid "Assume that receivers of Objective-C messages may be nil"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1759
+#: /home/jsm28/src/gcc-build/gcc/options.c:1808
+msgid "Don't generate code, just do syntax and semantics checking"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1811
msgid "Support synchronous non-call exceptions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1768
+#: /home/jsm28/src/gcc-build/gcc/options.c:1820
msgid "Enable Objective-C exception and synchronization syntax"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1771
+#: /home/jsm28/src/gcc-build/gcc/options.c:1823
msgid "Enable Objective-C setjmp exception handling runtime"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1774
+#: /home/jsm28/src/gcc-build/gcc/options.c:1826
msgid "When possible do not generate stack frames"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1777
+#: /home/jsm28/src/gcc-build/gcc/options.c:1829
msgid "Recognize C++ kewords like \"compl\" and \"xor\""
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1780
+#: /home/jsm28/src/gcc-build/gcc/options.c:1832
msgid "Do the full register move optimization pass"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1783
+#: /home/jsm28/src/gcc-build/gcc/options.c:1835
msgid "Optimize sibling and tail recursive calls"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1786
+#: /home/jsm28/src/gcc-build/gcc/options.c:1838
msgid "Enable optimization of static class initialization code"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1789
+#: /home/jsm28/src/gcc-build/gcc/options.c:1841
msgid "Enable optional diagnostics"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1795
+#: /home/jsm28/src/gcc-build/gcc/options.c:1847
+msgid "Try to layout derived types as compact as possible"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1850
msgid "Pack structure members together without holes"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1798
+#: /home/jsm28/src/gcc-build/gcc/options.c:1853
msgid "-fpack-struct=<number>\tSet initial maximum structure member alignment"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1801
+#: /home/jsm28/src/gcc-build/gcc/options.c:1856
msgid "Return small aggregates in memory, not registers"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1807
+#: /home/jsm28/src/gcc-build/gcc/options.c:1862
msgid "Look for and use PCH files even when preprocessing"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1810
+#: /home/jsm28/src/gcc-build/gcc/options.c:1865
msgid "Perform loop peeling"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1813
+#: /home/jsm28/src/gcc-build/gcc/options.c:1868
msgid "Enable machine specific peephole optimizations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1816
+#: /home/jsm28/src/gcc-build/gcc/options.c:1871
msgid "Enable an RTL peephole pass before sched2"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1819
+#: /home/jsm28/src/gcc-build/gcc/options.c:1874
msgid "Downgrade conformance errors to warnings"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1822
+#: /home/jsm28/src/gcc-build/gcc/options.c:1877
msgid "Generate position-independent code if possible (small mode)"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1825
+#: /home/jsm28/src/gcc-build/gcc/options.c:1880
msgid ""
"Generate position-independent code for executables if possible (small mode)"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1828
+#: /home/jsm28/src/gcc-build/gcc/options.c:1883
msgid "Generate prefetch instructions, if available, for arrays in loops"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1831
+#: /home/jsm28/src/gcc-build/gcc/options.c:1886
msgid "Treat the input file as already preprocessed"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1834
+#: /home/jsm28/src/gcc-build/gcc/options.c:1889
msgid "Enable basic program profiling code"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1837
+#: /home/jsm28/src/gcc-build/gcc/options.c:1892
msgid "Insert arc-based program profiling code"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1840
+#: /home/jsm28/src/gcc-build/gcc/options.c:1895
msgid ""
"Enable common options for generating profile info for profile feedback "
"directed optimizations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1843
+#: /home/jsm28/src/gcc-build/gcc/options.c:1898
msgid ""
"Enable common options for performing profile feedback directed optimizations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1846
+#: /home/jsm28/src/gcc-build/gcc/options.c:1901
msgid "Insert code to profile values of expressions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1852
+#: /home/jsm28/src/gcc-build/gcc/options.c:1907
msgid "-frandom-seed=<string>\tMake compile reproducible using <string>"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1855
+#: /home/jsm28/src/gcc-build/gcc/options.c:1910
msgid "Return small aggregates in registers"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1858
+#: /home/jsm28/src/gcc-build/gcc/options.c:1913
msgid "Enables a register move optimization"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1861
+#: /home/jsm28/src/gcc-build/gcc/options.c:1916
msgid "Perform a register renaming optimization pass"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1864
+#: /home/jsm28/src/gcc-build/gcc/options.c:1919
msgid "Reorder basic blocks to improve code placement"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1867
+#: /home/jsm28/src/gcc-build/gcc/options.c:1922
msgid "Reorder basic blocks and partition into hot and cold sections"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1870
+#: /home/jsm28/src/gcc-build/gcc/options.c:1925
msgid "Reorder functions to improve code placement"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1873
+#: /home/jsm28/src/gcc-build/gcc/options.c:1928
+msgid "Copy array sections into a contiguous block on procedure entry"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1931
msgid ""
"Used in Fix-and-Continue mode to indicate that object files may be swapped "
"in at runtime"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1876
+#: /home/jsm28/src/gcc-build/gcc/options.c:1934
msgid "Enable automatic template instantiation"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1879
+#: /home/jsm28/src/gcc-build/gcc/options.c:1937
msgid "Add a common subexpression elimination pass after loop optimizations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1882
+#: /home/jsm28/src/gcc-build/gcc/options.c:1940
msgid "Run the loop optimizer twice"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1885
+#: /home/jsm28/src/gcc-build/gcc/options.c:1943
msgid ""
"Enable/Disable the traditional scheduling in loops that already passed "
"modulo scheduling"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1888
+#: /home/jsm28/src/gcc-build/gcc/options.c:1946
msgid "Disable optimizations that assume default FP rounding behavior"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1891
+#: /home/jsm28/src/gcc-build/gcc/options.c:1949
msgid "Generate run time type descriptor information"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1894
+#: /home/jsm28/src/gcc-build/gcc/options.c:1952
msgid "Enable scheduling across basic blocks"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1897
+#: /home/jsm28/src/gcc-build/gcc/options.c:1955
msgid "Allow speculative motion of non-loads"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1900
+#: /home/jsm28/src/gcc-build/gcc/options.c:1958
msgid "Allow speculative motion of some loads"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1903
+#: /home/jsm28/src/gcc-build/gcc/options.c:1961
msgid "Allow speculative motion of more loads"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1906
+#: /home/jsm28/src/gcc-build/gcc/options.c:1964
msgid "Allow premature scheduling of queued insns"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1909
+#: /home/jsm28/src/gcc-build/gcc/options.c:1967
msgid ""
"Set dependence distance checking in premature scheduling of queued insns"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1912
+#: /home/jsm28/src/gcc-build/gcc/options.c:1970
msgid ""
"-fsched-stalled-insns-dep=<number> Set dependence distance checking in "
"premature scheduling of queued insns"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1915
+#: /home/jsm28/src/gcc-build/gcc/options.c:1973
msgid ""
"-fsched-stalled-insns=<number> Set number of queued insns that can be "
"prematurely scheduled"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1918
+#: /home/jsm28/src/gcc-build/gcc/options.c:1976
msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1921
+#: /home/jsm28/src/gcc-build/gcc/options.c:1979
msgid "If scheduling post reload, do superblock scheduling"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1924
+#: /home/jsm28/src/gcc-build/gcc/options.c:1982
msgid "If scheduling post reload, do trace scheduling"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1927
+#: /home/jsm28/src/gcc-build/gcc/options.c:1985
msgid "Reschedule instructions before register allocation"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1930
+#: /home/jsm28/src/gcc-build/gcc/options.c:1988
msgid "Reschedule instructions after register allocation"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1933
+#: /home/jsm28/src/gcc-build/gcc/options.c:1991
+msgid "Append a second underscore if the name already contains an underscore"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:1994
msgid "Mark data as shared rather than private"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1936
+#: /home/jsm28/src/gcc-build/gcc/options.c:1997
msgid "Use the same size for double as for float"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1939
+#: /home/jsm28/src/gcc-build/gcc/options.c:2000
msgid "Use the narrowest integer type possible for enumeration types"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1942
+#: /home/jsm28/src/gcc-build/gcc/options.c:2003
msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\""
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1948
+#: /home/jsm28/src/gcc-build/gcc/options.c:2009
msgid "Disable optimizations observable by IEEE signaling NaNs"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1951
+#: /home/jsm28/src/gcc-build/gcc/options.c:2012
msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1954
+#: /home/jsm28/src/gcc-build/gcc/options.c:2015
msgid "Make \"char\" signed by default"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1957
+#: /home/jsm28/src/gcc-build/gcc/options.c:2018
msgid "Convert floating point constants to single precision constants"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1960
+#: /home/jsm28/src/gcc-build/gcc/options.c:2021
msgid "Use value profiling for speculative prefetching"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1963
+#: /home/jsm28/src/gcc-build/gcc/options.c:2024
msgid "Split lifetimes of induction variables when loops are unrolled."
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1969
+#: /home/jsm28/src/gcc-build/gcc/options.c:2030
msgid "Insert stack checking code into the program"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1975
+#: /home/jsm28/src/gcc-build/gcc/options.c:2036
msgid ""
"-fstack-limit-register=<register>\tTrap if the stack goes past <register>"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1978
+#: /home/jsm28/src/gcc-build/gcc/options.c:2039
msgid "-fstack-limit-symbol=<name>\tTrap if the stack goes past symbol <name>"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1981
+#: /home/jsm28/src/gcc-build/gcc/options.c:2042
msgid "Display statistics accumulated during compilation"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1984
+#: /home/jsm28/src/gcc-build/gcc/options.c:2045
msgid "Enable assignability checks for stores into object arrays"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1987
+#: /home/jsm28/src/gcc-build/gcc/options.c:2048
msgid "Perform strength reduction optimizations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1990
+#: /home/jsm28/src/gcc-build/gcc/options.c:2051
msgid "Assume strict aliasing rules apply"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1996
+#: /home/jsm28/src/gcc-build/gcc/options.c:2057
msgid "Check for syntax errors, then stop"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:1999
+#: /home/jsm28/src/gcc-build/gcc/options.c:2060
msgid "-ftabstop=<number>\tDistance between tab stops for column reporting"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2002
+#: /home/jsm28/src/gcc-build/gcc/options.c:2063
msgid "-ftemplate-depth-<number>\tSpecify maximum template instantiation depth"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2005
+#: /home/jsm28/src/gcc-build/gcc/options.c:2066
msgid "Create data files needed by \"gcov\""
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2011
+#: /home/jsm28/src/gcc-build/gcc/options.c:2072
msgid "Perform jump threading optimizations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2014
+#: /home/jsm28/src/gcc-build/gcc/options.c:2075
msgid ""
"-fno-threadsafe-statics\tDo not generate thread-safe code for initializing "
"local statics."
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2017
+#: /home/jsm28/src/gcc-build/gcc/options.c:2078
msgid "Report the time taken by each compiler pass"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2020
+#: /home/jsm28/src/gcc-build/gcc/options.c:2081
msgid ""
"-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tSet the "
"default thread-local storage code generation model"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2023
+#: /home/jsm28/src/gcc-build/gcc/options.c:2084
msgid "Perform superblock formation via tail duplication"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2026
+#: /home/jsm28/src/gcc-build/gcc/options.c:2087
msgid "Assume floating-point operations can trap"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2029
+#: /home/jsm28/src/gcc-build/gcc/options.c:2090
msgid "Trap for signed overflow in addition, subtraction and multiplication"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2032
+#: /home/jsm28/src/gcc-build/gcc/options.c:2093
msgid "Use tree-ssa based implementation of profiling"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2035
+#: /home/jsm28/src/gcc-build/gcc/options.c:2096
msgid "Enable SSA-CCP optimization on trees"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2038
+#: /home/jsm28/src/gcc-build/gcc/options.c:2099
msgid "Enable loop header copying on trees"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2041
+#: /home/jsm28/src/gcc-build/gcc/options.c:2102
msgid "Coalesce memory temporaries in the SSA->normal pass"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2044
+#: /home/jsm28/src/gcc-build/gcc/options.c:2105
msgid "Replace SSA temporaries with better names in copies."
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2047
+#: /home/jsm28/src/gcc-build/gcc/options.c:2108
msgid "Enable SSA dead code elimination optimization on trees"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2050
+#: /home/jsm28/src/gcc-build/gcc/options.c:2111
msgid "Enable dominator optimizations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2053
+#: /home/jsm28/src/gcc-build/gcc/options.c:2114
msgid "Enable dead store elimination"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2056
+#: /home/jsm28/src/gcc-build/gcc/options.c:2117
msgid "Enable Full Redundancy Elimination (FRE) on trees"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2059
+#: /home/jsm28/src/gcc-build/gcc/options.c:2120
msgid "Enable loop invariant motion on trees"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2062
+#: /home/jsm28/src/gcc-build/gcc/options.c:2123
msgid "Create canonical induction variables in loops"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2065
+#: /home/jsm28/src/gcc-build/gcc/options.c:2126
msgid "Enable linear loop transforms on trees"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2068
+#: /home/jsm28/src/gcc-build/gcc/options.c:2129
msgid "Enable loop optimizations on tree level"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2071
+#: /home/jsm28/src/gcc-build/gcc/options.c:2132
msgid "Perform live range splitting during the SSA->normal pass."
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2074
+#: /home/jsm28/src/gcc-build/gcc/options.c:2135
msgid "Enable SSA-PRE optimization on trees"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2077
+#: /home/jsm28/src/gcc-build/gcc/options.c:2138
msgid "Perform scalar replacement of aggregates"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2080
+#: /home/jsm28/src/gcc-build/gcc/options.c:2141
msgid "Replace temporary expressions in the SSA->normal pass"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2083
+#: /home/jsm28/src/gcc-build/gcc/options.c:2144
msgid "Enable loop vectorization on trees"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2086
+#: /home/jsm28/src/gcc-build/gcc/options.c:2147
+msgid "Append underscores to externally visible names"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:2150
msgid "Compile whole compilation unit at a time"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2089
+#: /home/jsm28/src/gcc-build/gcc/options.c:2153
msgid "Perform loop unrolling for all loops"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2092
+#: /home/jsm28/src/gcc-build/gcc/options.c:2156
msgid "Perform loop unrolling when iteration count is known"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2095
+#: /home/jsm28/src/gcc-build/gcc/options.c:2159
msgid "Allow math optimizations that may violate IEEE or ISO standards"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2098
+#: /home/jsm28/src/gcc-build/gcc/options.c:2162
msgid "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2101
+#: /home/jsm28/src/gcc-build/gcc/options.c:2165
msgid "Make \"char\" unsigned by default"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2104
+#: /home/jsm28/src/gcc-build/gcc/options.c:2168
msgid "Perform loop unswitching"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2107
+#: /home/jsm28/src/gcc-build/gcc/options.c:2171
msgid "Just generate unwind tables for exception handling"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2110
+#: /home/jsm28/src/gcc-build/gcc/options.c:2174
msgid "Generate code for the Boehm GC"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2113
+#: /home/jsm28/src/gcc-build/gcc/options.c:2177
msgid "Use __cxa_atexit to register destructors"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2116
+#: /home/jsm28/src/gcc-build/gcc/options.c:2180
msgid "Call a library routine to do integer divisions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2119
+#: /home/jsm28/src/gcc-build/gcc/options.c:2183
msgid "Perform variable tracking"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2122
+#: /home/jsm28/src/gcc-build/gcc/options.c:2186
msgid "Add extra commentary to assembler output"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2125
+#: /home/jsm28/src/gcc-build/gcc/options.c:2189
msgid "Marks all inlined methods as having hidden visibility"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2128
+#: /home/jsm28/src/gcc-build/gcc/options.c:2192
msgid ""
"-fvisibility=[default|internal|hidden|protected]\tSet the default symbol "
"visibility"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2131
+#: /home/jsm28/src/gcc-build/gcc/options.c:2195
msgid "Use expression value profiles in optimizations"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2134
+#: /home/jsm28/src/gcc-build/gcc/options.c:2198
msgid "Discard unused virtual functions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2137
+#: /home/jsm28/src/gcc-build/gcc/options.c:2201
msgid "Implement vtables using thunks"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2140
+#: /home/jsm28/src/gcc-build/gcc/options.c:2204
msgid "Emit common-like symbols as weak symbols"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2143
+#: /home/jsm28/src/gcc-build/gcc/options.c:2207
msgid "Construct webs and split unrelated uses of single variable"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2146
+#: /home/jsm28/src/gcc-build/gcc/options.c:2210
msgid ""
"-fwide-exec-charset=<cset>\tConvert all wide strings and character constants "
"to character set <cset>"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2149
+#: /home/jsm28/src/gcc-build/gcc/options.c:2213
msgid "Generate a #line directive pointing at the current working directory"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2152
+#: /home/jsm28/src/gcc-build/gcc/options.c:2216
msgid "Assume signed arithmetic overflow wraps around"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2155
+#: /home/jsm28/src/gcc-build/gcc/options.c:2219
msgid "Emit cross referencing information"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2158
+#: /home/jsm28/src/gcc-build/gcc/options.c:2222
msgid "Put zero initialized data in the bss section"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2161
+#: /home/jsm28/src/gcc-build/gcc/options.c:2225
msgid ""
"Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2164
+#: /home/jsm28/src/gcc-build/gcc/options.c:2228
msgid "Generate debug information in default format"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2167
+#: /home/jsm28/src/gcc-build/gcc/options.c:2231
msgid "Generate debug information in COFF format"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2170
+#: /home/jsm28/src/gcc-build/gcc/options.c:2234
msgid "Generate debug information in DWARF v2 format"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2173
+#: /home/jsm28/src/gcc-build/gcc/options.c:2237
msgid "Dump declarations to a .decl file"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2176
+#: /home/jsm28/src/gcc-build/gcc/options.c:2240
msgid "Generate debug information in default extended format"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2179
+#: /home/jsm28/src/gcc-build/gcc/options.c:2243
msgid "Generate debug information in STABS format"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2182
+#: /home/jsm28/src/gcc-build/gcc/options.c:2246
msgid "Generate debug information in extended STABS format"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2185
+#: /home/jsm28/src/gcc-build/gcc/options.c:2249
msgid "Generate debug information in VMS format"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2188
+#: /home/jsm28/src/gcc-build/gcc/options.c:2252
msgid "Generate debug information in XCOFF format"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2191
+#: /home/jsm28/src/gcc-build/gcc/options.c:2255
msgid "Generate debug information in extended XCOFF format"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2194
+#: /home/jsm28/src/gcc-build/gcc/options.c:2258
+msgid "Set the default integer kind to double precision"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:2261
msgid "-idirafter <dir>\tAdd <dir> to the end of the system include path"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2197
+#: /home/jsm28/src/gcc-build/gcc/options.c:2264
msgid "-imacros <file>\tAccept definition of macros in <file>"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2200
+#: /home/jsm28/src/gcc-build/gcc/options.c:2267
msgid "-include <file>\tInclude the contents of <file> before other files"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2203
+#: /home/jsm28/src/gcc-build/gcc/options.c:2270
msgid "-iprefix <path>\tSpecify <path> as a prefix for next two options"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2206
+#: /home/jsm28/src/gcc-build/gcc/options.c:2273
msgid "-iquote <dir>\tAdd <dir> to the end of the quote include path"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2209
+#: /home/jsm28/src/gcc-build/gcc/options.c:2276
msgid "-isysroot <dir>\tSet <dir> to be the system root directory"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2212
+#: /home/jsm28/src/gcc-build/gcc/options.c:2279
msgid "-isystem <dir>\tAdd <dir> to the start of the system include path"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2215
+#: /home/jsm28/src/gcc-build/gcc/options.c:2282
msgid "-iwithprefix <dir>\tAdd <dir> to the end of the system include path"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2218
+#: /home/jsm28/src/gcc-build/gcc/options.c:2285
msgid "-iwithprefixbefore <dir>\tAdd <dir> to the end of the main include path"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2230
+#: /home/jsm28/src/gcc-build/gcc/options.c:2297
msgid ""
"Do not search standard system include directories (those specified with -"
"isystem will still be used)"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2233
+#: /home/jsm28/src/gcc-build/gcc/options.c:2300
msgid "Do not search standard system include directories for C++"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2236
+#: /home/jsm28/src/gcc-build/gcc/options.c:2303
msgid "-o <file>\tPlace output into <file>"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2239
+#: /home/jsm28/src/gcc-build/gcc/options.c:2306
msgid "Enable function profiling"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2242
+#: /home/jsm28/src/gcc-build/gcc/options.c:2309
msgid "Issue warnings needed for strict compliance to the standard"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2245
+#: /home/jsm28/src/gcc-build/gcc/options.c:2312
msgid "Like -pedantic but issue them as errors"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2248
+#: /home/jsm28/src/gcc-build/gcc/options.c:2315
msgid "Generate C header of platform-specific features"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2251
+#: /home/jsm28/src/gcc-build/gcc/options.c:2318
+msgid "-qkind=<n>\tSet the kind for a real with the 'q' exponent to 'n'"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:2321
msgid "Do not display functions compiled or elapsed time"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2254
+#: /home/jsm28/src/gcc-build/gcc/options.c:2324
+msgid "Set the default real kind to double precision"
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:2327
msgid "Remap file names when including files"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2257
+#: /home/jsm28/src/gcc-build/gcc/options.c:2330
msgid "Conform to the ISO 1998 C++ standard"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2260
+#: /home/jsm28/src/gcc-build/gcc/options.c:2333
msgid "Conform to the ISO 1990 C standard"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2263
+#: /home/jsm28/src/gcc-build/gcc/options.c:2336
msgid "Conform to the ISO 1999 C standard"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2266
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2287
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2290
+#: /home/jsm28/src/gcc-build/gcc/options.c:2339
+#: /home/jsm28/src/gcc-build/gcc/options.c:2369
+#: /home/jsm28/src/gcc-build/gcc/options.c:2372
msgid "Deprecated in favor of -std=c99"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2269
+#: /home/jsm28/src/gcc-build/gcc/options.c:2342
+msgid "Conform to the ISO Fortran 2003 standard."
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:2345
+msgid "Conform to the ISO Fortran 95 standard."
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:2348
+msgid "Conform nothing in particular."
+msgstr ""
+
+#: /home/jsm28/src/gcc-build/gcc/options.c:2351
msgid "Conform to the ISO 1998 C++ standard with GNU extensions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2272
+#: /home/jsm28/src/gcc-build/gcc/options.c:2354
msgid "Conform to the ISO 1990 C standard with GNU extensions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2275
+#: /home/jsm28/src/gcc-build/gcc/options.c:2357
msgid "Conform to the ISO 1999 C standard with GNU extensions"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2278
+#: /home/jsm28/src/gcc-build/gcc/options.c:2360
msgid "Deprecated in favor of -std=gnu99"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2281
+#: /home/jsm28/src/gcc-build/gcc/options.c:2363
msgid "Deprecated in favor of -std=c89"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2284
+#: /home/jsm28/src/gcc-build/gcc/options.c:2366
msgid "Conform to the ISO 1990 C standard as amended in 1994"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2293
+#: /home/jsm28/src/gcc-build/gcc/options.c:2375
msgid "Enable traditional preprocessing"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2296
+#: /home/jsm28/src/gcc-build/gcc/options.c:2378
msgid "-trigraphs\tSupport ISO C trigraphs"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2299
+#: /home/jsm28/src/gcc-build/gcc/options.c:2381
msgid "Do not predefine system-specific and GCC-specific macros"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2302
+#: /home/jsm28/src/gcc-build/gcc/options.c:2384
msgid "Enable verbose output"
msgstr ""
-#: /home/zack/src/gcc/HEAD/pos-diag/build-sirius/gcc/options.c:2308
+#: /home/jsm28/src/gcc-build/gcc/options.c:2390
msgid "Suppress warnings"
msgstr ""
-#: java/jvspec.c:80 gcc.c:796 ada/lang-specs.h:34
-msgid "-pg and -fomit-frame-pointer are incompatible"
+#: config/mips/mips.h:1114 config/arc/arc.h:63
+msgid "may not use both -EB and -EL"
msgstr ""
-#: config/i386/cygwin.h:29
-msgid "mno-cygwin and mno-win32 are not compatible"
+#: config/mips/r3900.h:35
+msgid "-mhard-float not supported"
msgstr ""
-#: config/i386/cygwin.h:70 config/i386/mingw32.h:58
-msgid "shared and mdll are not compatible"
+#: config/mips/r3900.h:37
+msgid "-msingle-float and -msoft-float cannot both be specified"
msgstr ""
#: config/sh/sh.h:685
msgid "SH2a does not support little-endian"
msgstr ""
-#: config/sparc/linux64.h:207 config/sparc/linux64.h:218
-#: config/sparc/netbsd-elf.h:136 config/sparc/netbsd-elf.h:155
-#: config/sparc/sol2-bi.h:195 config/sparc/sol2-bi.h:205
-msgid "may not use both -m32 and -m64"
-msgstr ""
-
-#: config/i386/sco5.h:189
-msgid "-pg not supported on this platform"
+#: java/lang-specs.h:34
+msgid "-fjni and -femit-class-files are incompatible"
msgstr ""
-#: config/i386/sco5.h:190
-msgid "-p and -pp specified - pick one"
+#: java/lang-specs.h:35
+msgid "-fjni and -femit-class-file are incompatible"
msgstr ""
-#: config/i386/sco5.h:264
-msgid "-G and -static are mutually exclusive"
+#: java/lang-specs.h:36 java/lang-specs.h:37
+msgid "-femit-class-file should used along with -fsyntax-only"
msgstr ""
-#: config/vax/vax.h:50 config/vax/vax.h:51
-msgid "profiling not supported with -mg\n"
+#: config/i386/mingw32.h:58 config/i386/cygwin.h:70
+msgid "shared and mdll are not compatible"
msgstr ""
#: config/darwin.h:248
@@ -21249,79 +21413,85 @@ msgstr ""
msgid "-private_bundle not allowed with -dynamiclib"
msgstr ""
-#: config/lynx.h:71
-msgid "Cannot use mthreads and mlegacy-threads together."
+#: config/arm/arm.h:151
+msgid "-msoft-float and -mhard_float may not be used together"
msgstr ""
-#: config/lynx.h:96
-msgid "Cannot use mshared and static together."
+#: config/arm/arm.h:153
+msgid "-mbig-endian and -mlittle-endian may not be used together"
msgstr ""
-#: config/mcore/mcore.h:57
-msgid "the m210 does not have little endian support"
+#: config/vax/netbsd-elf.h:42
+msgid "The -shared option is not currently supported for VAX ELF."
msgstr ""
-#: config/arm/arm.h:151
-msgid "-msoft-float and -mhard_float may not be used together"
+#: config/i386/nwld.h:34
+msgid "Static linking is not supported.\n"
msgstr ""
-#: config/arm/arm.h:153
-msgid "-mbig-endian and -mlittle-endian may not be used together"
+#: config/sparc/linux64.h:207 config/sparc/linux64.h:218
+#: config/sparc/netbsd-elf.h:136 config/sparc/netbsd-elf.h:155
+#: config/sparc/sol2-bi.h:195 config/sparc/sol2-bi.h:205
+msgid "may not use both -m32 and -m64"
msgstr ""
-#: gcc.c:769
-msgid "GCC does not support -C or -CC without -E"
+#: treelang/lang-specs.h:52
+msgid "-pg or -p and -fomit-frame-pointer are incompatible"
msgstr ""
-#: gcc.c:963
-msgid "-E required when input is from standard input"
+#: java/jvspec.c:80 ada/lang-specs.h:34 gcc.c:796
+msgid "-pg and -fomit-frame-pointer are incompatible"
+msgstr ""
+
+#: config/vax/vax.h:50 config/vax/vax.h:51
+msgid "profiling not supported with -mg\n"
msgstr ""
#: ada/lang-specs.h:35
msgid "-c or -S required for Ada"
msgstr ""
-#: config/rs6000/darwin.h:132
-msgid " conflicting code gen style switches are used"
+#: config/i386/sco5.h:189
+msgid "-pg not supported on this platform"
msgstr ""
-#: config/i386/nwld.h:34
-msgid "Static linking is not supported.\n"
+#: config/i386/sco5.h:190
+msgid "-p and -pp specified - pick one"
msgstr ""
-#: config/sparc/sol2-bi.h:167 config/sparc/sol2-bi.h:172
-#: config/sparc/sol2-gld-bi.h:17 config/sparc/sol2-gld-bi.h:22
-msgid "does not support multilib"
+#: config/i386/sco5.h:264
+msgid "-G and -static are mutually exclusive"
msgstr ""
-#: config/vax/netbsd-elf.h:42
-msgid "The -shared option is not currently supported for VAX ELF."
+#: config/i386/cygwin.h:29
+msgid "mno-cygwin and mno-win32 are not compatible"
msgstr ""
-#: java/lang-specs.h:34
-msgid "-fjni and -femit-class-files are incompatible"
+#: config/mcore/mcore.h:57
+msgid "the m210 does not have little endian support"
msgstr ""
-#: java/lang-specs.h:35
-msgid "-fjni and -femit-class-file are incompatible"
+#: gcc.c:769
+msgid "GCC does not support -C or -CC without -E"
msgstr ""
-#: java/lang-specs.h:36 java/lang-specs.h:37
-msgid "-femit-class-file should used along with -fsyntax-only"
+#: gcc.c:963
+msgid "-E required when input is from standard input"
msgstr ""
-#: config/arc/arc.h:63 config/mips/mips.h:1114
-msgid "may not use both -EB and -EL"
+#: config/lynx.h:71
+msgid "Cannot use mthreads and mlegacy-threads together."
msgstr ""
-#: treelang/lang-specs.h:52
-msgid "-pg or -p and -fomit-frame-pointer are incompatible"
+#: config/lynx.h:96
+msgid "Cannot use mshared and static together."
msgstr ""
-#: config/mips/r3900.h:35
-msgid "-mhard-float not supported"
+#: config/sparc/sol2-bi.h:167 config/sparc/sol2-bi.h:172
+#: config/sparc/sol2-gld-bi.h:17 config/sparc/sol2-gld-bi.h:22
+msgid "does not support multilib"
msgstr ""
-#: config/mips/r3900.h:37
-msgid "-msingle-float and -msoft-float cannot both be specified"
+#: config/rs6000/darwin.h:132
+msgid " conflicting code gen style switches are used"
msgstr ""
diff --git a/gcc/rtl.h b/gcc/rtl.h
index ac2419b41e2..e0f86ee1c3d 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1432,6 +1432,10 @@ extern void push_to_full_sequence (rtx, rtx);
extern rtx immed_double_const (HOST_WIDE_INT, HOST_WIDE_INT,
enum machine_mode);
+/* In loop-iv.c */
+
+extern rtx lowpart_subreg (enum machine_mode, rtx, enum machine_mode);
+
/* In varasm.c */
extern rtx force_const_mem (enum machine_mode, rtx);
diff --git a/gcc/system.h b/gcc/system.h
index 19eabd39563..bdfe2953f24 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -653,7 +653,7 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
SUNOS4_SHARED_LIBRARIES PROMOTE_FOR_CALL_ONLY \
SPACE_AFTER_L_OPTION NO_RECURSIVE_FUNCTION_CSE \
DEFAULT_MAIN_RETURN TARGET_MEM_FUNCTIONS EXPAND_BUILTIN_VA_ARG \
- COLLECT_PARSE_FLAG
+ COLLECT_PARSE_FLAG DWARF2_GENERATE_TEXT_SECTION_LABEL
/* Hooks that are no longer used. */
#pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8a39312affb..bf8231b7357 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,104 @@
+2004-10-08 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c/16999
+ * gcc.dg/cpp/ident-1.c: New test.
+
+2004-10-08 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gcc.c-torture/compile/acc1.c: New.
+
+2004-10-08 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * gcc.dg/darwin-longdouble.c: Include stdlib.h and string.h.
+ * gcc.dg/darwin-abi-2.c: Include stdlib.h.
+
+2004-10-08 Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de>
+
+ * gcc.dg/ultrasp11.c: New test.
+
+2004-10-08 Michael Matz <matz@suse.de>
+
+ * gcc.dg/doloop-2.c: New test.
+
+2004-10-08 Joseph S. Myers <jsm@polyomino.org.uk>
+
+ * gcc.dg/assign-warn-1.c, gcc.dg/assign-warn-2.c: New tests.
+ * gcc.dg/warn-1.c, gcc.dg/noncompile/20020213-1.c,
+ objc.dg/method-9.m: Update expected diagnostics.
+
+2004-10-07 Geoffrey Keating <geoffk@apple.com>
+
+ * gcc.dg/ppc-fsel-3.c: New file.
+ * gcc.dg/ppc-fsel-1.c: Add -fno-trapping-math, update comment.
+
+2004-10-07 Paul Brook <paul@codesourcery.com>
+
+ * gfortran.dg/intrinsic_verify_1.f90: New test.
+
+2004-10-07 Paul Brook <paul@codesourcery.com>
+
+ * gfortran.dg/empty_format_1.f90: Remove stray commas.
+
+2004-10-07 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
+
+ * gfortran.fortran-torture/execute/intrinsic_mvbits.f90,
+ gfortran.dg/ishft.f90: Add more tests. Add dg-warning in followup
+ commit.
+
+2004-10-07 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * g++.dg/ext/asm6.C: Remove extraneous semicolon.
+
+2004-10-07 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/17115
+ * g++.dg/warn/Winline-4.C: New test.
+
+2004-10-07 Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de>
+
+ * gcc.c-torture/compile/20041007-1.c: New test.
+
+2004-10-07 Paul Brook <paul@codesourcery.com>
+
+ PR fortran/17678
+ * gfortran.dg/use_allocated_1.f90: New test.
+
+2004-10-06 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR middle-end/17849
+ * gfortran.fortran-torture/compile/nested.f90: New test
+
+2004-10-06 Joseph S. Myers <jsm@polyomino.org.uk>
+
+ * gcc.dg/Wconversion-2.c, gcc.dg/func-args-1.c: New tests.
+
+2004-10-06 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c++/17368
+ * g++.dg/ext/asm6.C: New test.
+
+2004-10-06 Kenneth Zadeck <zadeck@naturalbridge.com>
+
+ * gcc.dg/20011119-1.c : Added memory attribute to asm sequence.
+
+2004-10-06 Paul Brook <paul@codesourcery.com>
+
+ PR libfortran/17709
+ * gfortran.dg/empty_format_1.f90: New test.
+
+2004-10-06 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
+
+ PR fortran/17568
+ * gfortran.dg/ishft.f90: New test.
+
+ PR fortran/17283
+ * gfortran.fortran-torture/execute/intrinsic_pack.f90: Enable new
+ tests.
+
+2004-10-06 Paul Brook <paul@codesourcery.com>
+
+ * gfortran.dg/do_1.f90: New test.
+
2004-10-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.c-torture/execute/builtins/lib/strcpy.c: Don't abort when
@@ -22237,7 +22338,7 @@ Thu Apr 27 15:58:18 MET DST 2000 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/compile/labels-2.c: New test.
-1999-12-27 Martin von Löwis <loewis@informatik.hu-berlin.de>
+1999-12-27 Martin von Löwis <loewis@informatik.hu-berlin.de>
* gcc.c-torture/execute/991227-1.c: New test.
@@ -22245,7 +22346,7 @@ Thu Apr 27 15:58:18 MET DST 2000 Jan Hubicka <jh@suse.cz>
* g++.old-deja/g++.pt/instantiate6.C: Remove excess errors XFAIL.
-1999-12-21 Martin von Löwis <loewis@informatik.hu-berlin.de>
+1999-12-21 Martin von Löwis <loewis@informatik.hu-berlin.de>
* gcc.c-torture/execute/991221-1.c: New test.
diff --git a/gcc/testsuite/g++.dg/ext/asm6.C b/gcc/testsuite/g++.dg/ext/asm6.C
new file mode 100644
index 00000000000..96ef9d385a8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/asm6.C
@@ -0,0 +1,11 @@
+struct A
+{
+ ~A();
+};
+int foo(A);
+void bar()
+{
+ A a;
+ asm("" : : "r"(foo(a)) );//<-- cleanup needed here.
+}
+
diff --git a/gcc/testsuite/g++.dg/warn/Winline-4.C b/gcc/testsuite/g++.dg/warn/Winline-4.C
new file mode 100644
index 00000000000..188ab5aa896
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Winline-4.C
@@ -0,0 +1,17 @@
+// { dg-do compile }
+// { dg-options "-O2 -Winline" }
+// Origin: <markus at oberhumer dot com>
+// PR 17115: We should not emit -Winline warning for functions marked with
+// noinline
+
+struct Foo {
+ __attribute__((noinline)) int a(int r) { return r & 1; }
+ virtual __attribute__((noinline)) int b(int r) { return r & 1; }
+ static __attribute__((noinline)) int c(int r) { return r & 1; }
+};
+
+int bar(int r) {
+ Foo f;
+ int k = 1; k &= f.a(r); k &= f.b(r); k &= f.a(r);
+ return k;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/20041007-1.c b/gcc/testsuite/gcc.c-torture/compile/20041007-1.c
new file mode 100644
index 00000000000..ce524703d86
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20041007-1.c
@@ -0,0 +1,16 @@
+/* PR rtl-optimization/17027 */
+/* Origin: dbk <sfc@village.uunet.be> */
+/* Testcase by Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de> */
+
+int bar(void);
+void baz (void) __attribute__ ((noreturn)); /* noreturn is required */
+
+void foo (void)
+{
+ while (bar ()) {
+ switch (1) {
+ default:
+ baz ();
+ }
+ }
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/acc1.c b/gcc/testsuite/gcc.c-torture/compile/acc1.c
new file mode 100644
index 00000000000..206d16b8ce8
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/acc1.c
@@ -0,0 +1,21 @@
+/* { dg-options "-O2 -ffast-math" } */
+
+/* Fast maths allows tail recursion to be turned into iteration. */
+
+double
+foo (int n, double f)
+{
+ if (n == 0)
+ return f;
+ else
+ return f + foo (n - 1, f);
+}
+
+double
+bar (int n, double f)
+{
+ if (n == 0)
+ return f;
+ else
+ return f * bar (n - 1, f);
+}
diff --git a/gcc/testsuite/gcc.dg/20011119-1.c b/gcc/testsuite/gcc.dg/20011119-1.c
index 5b3c00cd36f..0df09a3f778 100644
--- a/gcc/testsuite/gcc.dg/20011119-1.c
+++ b/gcc/testsuite/gcc.dg/20011119-1.c
@@ -74,7 +74,7 @@ main()
"call %P0\n\t"
"addl $12, %%esp\n\t"
"popl %%ebp"
- : : "i"(ustrzcat));
+ : : "i"(ustrzcat) : "memory" );
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/Wconversion-2.c b/gcc/testsuite/gcc.dg/Wconversion-2.c
new file mode 100644
index 00000000000..320f41f0120
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wconversion-2.c
@@ -0,0 +1,64 @@
+/* Test messages for -Wconversion, including that they are not
+ pedwarns. */
+/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+/* { dg-do compile } */
+/* { dg-options "-std=c99 -pedantic-errors -Wconversion" } */
+
+void fsc(signed char);
+void fsi(signed int);
+void fsll(signed long long);
+void fuc(unsigned char);
+void fui(unsigned int);
+void full(unsigned long long);
+void ff(float);
+void fld(long double);
+void fcf(_Complex float);
+
+struct s {
+ void (*fsc)(signed char);
+ void (*fsi)(signed int);
+ void (*fsll)(signed long long);
+ void (*fuc)(unsigned char);
+ void (*fui)(unsigned int);
+ void (*full)(unsigned long long);
+ void (*ff)(float);
+ void (*fld)(long double);
+ void (*fcf)(_Complex float);
+} x;
+
+signed char sc;
+signed int si;
+signed long long sll;
+unsigned char uc;
+unsigned int ui;
+unsigned long long ull;
+float f;
+long double ld;
+_Complex float cf;
+
+void
+g (void)
+{
+ fsi(f); /* { dg-warning "warning: passing argument 1 of 'fsi' as integer rather than floating due to prototype" } */
+ x.fsi(f); /* { dg-warning "warning: passing argument 1 of 'x.fsi' as integer rather than floating due to prototype" } */
+ fsi(cf); /* { dg-warning "warning: passing argument 1 of 'fsi' as integer rather than complex due to prototype" } */
+ x.fsi(cf); /* { dg-warning "warning: passing argument 1 of 'x.fsi' as integer rather than complex due to prototype" } */
+ fcf(f); /* { dg-warning "warning: passing argument 1 of 'fcf' as complex rather than floating due to prototype" } */
+ x.fcf(f); /* { dg-warning "warning: passing argument 1 of 'x.fcf' as complex rather than floating due to prototype" } */
+ fcf(si); /* { dg-warning "warning: passing argument 1 of 'fcf' as complex rather than integer due to prototype" } */
+ x.fcf(si); /* { dg-warning "warning: passing argument 1 of 'x.fcf' as complex rather than integer due to prototype" } */
+ ff(sc); /* { dg-warning "warning: passing argument 1 of 'ff' as floating rather than integer due to prototype" } */
+ x.ff(sc); /* { dg-warning "warning: passing argument 1 of 'x.ff' as floating rather than integer due to prototype" } */
+ ff(cf); /* { dg-warning "warning: passing argument 1 of 'ff' as floating rather than complex due to prototype" } */
+ x.ff(cf); /* { dg-warning "warning: passing argument 1 of 'x.ff' as floating rather than complex due to prototype" } */
+ ff(1.0); /* { dg-warning "warning: passing argument 1 of 'ff' as 'float' rather than 'double' due to prototype" } */
+ x.ff(1.0); /* { dg-warning "warning: passing argument 1 of 'x.ff' as 'float' rather than 'double' due to prototype" } */
+ fsll(sc); /* { dg-warning "warning: passing argument 1 of 'fsll' with different width due to prototype" } */
+ x.fsll(sc); /* { dg-warning "warning: passing argument 1 of 'x.fsll' with different width due to prototype" } */
+ fsc(sll); /* { dg-warning "warning: passing argument 1 of 'fsc' with different width due to prototype" } */
+ x.fsc(sll); /* { dg-warning "warning: passing argument 1 of 'x.fsc' with different width due to prototype" } */
+ fsi(ui); /* { dg-warning "warning: passing argument 1 of 'fsi' as signed due to prototype" } */
+ x.fsi(ui); /* { dg-warning "warning: passing argument 1 of 'x.fsi' as signed due to prototype" } */
+ full(sll); /* { dg-warning "warning: passing argument 1 of 'full' as unsigned due to prototype" } */
+ x.full(sll); /* { dg-warning "warning: passing argument 1 of 'x.full' as unsigned due to prototype" } */
+}
diff --git a/gcc/testsuite/gcc.dg/assign-warn-1.c b/gcc/testsuite/gcc.dg/assign-warn-1.c
new file mode 100644
index 00000000000..857b1a85333
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/assign-warn-1.c
@@ -0,0 +1,123 @@
+/* Test diagnostics for bad implicit type conversions. */
+/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+/* { dg-do compile } */
+/* { dg-options "-pedantic" } */
+
+#define TESTARG(ID, TL, TR) void ID##F(TL); void ID##F2(TR x) { ID##F(x); } extern int dummy
+#define TESTARP(ID, TL, TR) struct { void (*x)(TL); } ID##Fp; void ID##F2(TR x) { ID##Fp.x(x); } extern int dummy
+#define TESTASS(ID, TL, TR) void ID##F(TR x) { TL y; y = x; } extern int dummy
+#define TESTINI(ID, TL, TR) void ID##F(TR x) { TL y = x; } extern int dummy
+#define TESTRET(ID, TL, TR) TR ID##V; TL ID##F(void) { return ID##V; } extern int dummy
+
+typedef void (*fp)(void);
+typedef void (*nrfp)(void) __attribute__((noreturn));
+
+TESTARG(fqa, nrfp, fp); /* { dg-warning "warning: passing argument 1 of 'fqaF' makes qualified function pointer from unqualified" } */
+TESTARP(fqb, nrfp, fp); /* { dg-warning "warning: passing argument 1 of 'fqbFp.x' makes qualified function pointer from unqualified" } */
+TESTASS(fqc, nrfp, fp); /* { dg-warning "warning: assignment makes qualified function pointer from unqualified" } */
+TESTINI(fqd, nrfp, fp); /* { dg-warning "warning: initialization makes qualified function pointer from unqualified" } */
+TESTRET(fqe, nrfp, fp); /* { dg-warning "warning: return makes qualified function pointer from unqualified" } */
+
+TESTARG(ofqa, fp, nrfp);
+TESTARP(ofqb, fp, nrfp);
+TESTASS(ofqc, fp, nrfp);
+TESTINI(ofqd, fp, nrfp);
+TESTRET(ofqe, fp, nrfp);
+
+TESTARG(qa, char *, const char *); /* { dg-warning "warning: passing argument 1 of 'qaF' discards qualifiers from pointer target type" } */
+TESTARP(qb, char *, const char *); /* { dg-warning "warning: passing argument 1 of 'qbFp.x' discards qualifiers from pointer target type" } */
+TESTASS(qc, char *, const char *); /* { dg-warning "warning: assignment discards qualifiers from pointer target type" } */
+TESTINI(qd, char *, const char *); /* { dg-warning "warning: initialization discards qualifiers from pointer target type" } */
+TESTRET(qe, char *, const char *); /* { dg-warning "warning: return discards qualifiers from pointer target type" } */
+
+TESTARG(oqa, const char *, char *);
+TESTARP(oqb, const char *, char *);
+TESTASS(oqc, const char *, char *);
+TESTINI(oqd, const char *, char *);
+TESTRET(oqe, const char *, char *);
+
+TESTARG(fda, fp, void *); /* { dg-warning "warning: ISO C forbids passing argument 1 of 'fdaF' between function pointer and 'void \\*'" } */
+TESTARP(fdb, fp, void *); /* { dg-warning "warning: ISO C forbids passing argument 1 of 'fdbFp.x' between function pointer and 'void \\*'" } */
+TESTASS(fdc, fp, void *); /* { dg-warning "warning: ISO C forbids assignment between function pointer and 'void \\*'" } */
+TESTINI(fdd, fp, void *); /* { dg-warning "warning: ISO C forbids initialization between function pointer and 'void \\*'" } */
+TESTRET(fde, fp, void *); /* { dg-warning "warning: ISO C forbids return between function pointer and 'void \\*'" } */
+
+TESTARG(dfa, void *, fp); /* { dg-warning "warning: ISO C forbids passing argument 1 of 'dfaF' between function pointer and 'void \\*'" } */
+TESTARP(dfb, void *, fp); /* { dg-warning "warning: ISO C forbids passing argument 1 of 'dfbFp.x' between function pointer and 'void \\*'" } */
+TESTASS(dfc, void *, fp); /* { dg-warning "warning: ISO C forbids assignment between function pointer and 'void \\*'" } */
+TESTINI(dfd, void *, fp); /* { dg-warning "warning: ISO C forbids initialization between function pointer and 'void \\*'" } */
+TESTRET(dfe, void *, fp); /* { dg-warning "warning: ISO C forbids return between function pointer and 'void \\*'" } */
+
+TESTARG(sua, int *, unsigned int *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'suaF' differ in signedness" } */
+TESTARP(sub, int *, unsigned int *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'subFp.x' differ in signedness" } */
+TESTASS(suc, int *, unsigned int *); /* { dg-warning "warning: pointer targets in assignment differ in signedness" } */
+TESTINI(sud, int *, unsigned int *); /* { dg-warning "warning: pointer targets in initialization differ in signedness" } */
+TESTRET(sue, int *, unsigned int *); /* { dg-warning "warning: pointer targets in return differ in signedness" } */
+
+TESTARG(usa, unsigned int *, int *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'usaF' differ in signedness" } */
+TESTARP(usb, unsigned int *, int *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'usbFp.x' differ in signedness" } */
+TESTASS(usc, unsigned int *, int *); /* { dg-warning "warning: pointer targets in assignment differ in signedness" } */
+TESTINI(usd, unsigned int *, int *); /* { dg-warning "warning: pointer targets in initialization differ in signedness" } */
+TESTRET(use, unsigned int *, int *); /* { dg-warning "warning: pointer targets in return differ in signedness" } */
+
+TESTARG(cua, char *, unsigned char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'cuaF' differ in signedness" } */
+TESTARP(cub, char *, unsigned char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'cubFp.x' differ in signedness" } */
+TESTASS(cuc, char *, unsigned char *); /* { dg-warning "warning: pointer targets in assignment differ in signedness" } */
+TESTINI(cud, char *, unsigned char *); /* { dg-warning "warning: pointer targets in initialization differ in signedness" } */
+TESTRET(cue, char *, unsigned char *); /* { dg-warning "warning: pointer targets in return differ in signedness" } */
+
+TESTARG(uca, unsigned char *, char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'ucaF' differ in signedness" } */
+TESTARP(ucb, unsigned char *, char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'ucbFp.x' differ in signedness" } */
+TESTASS(ucc, unsigned char *, char *); /* { dg-warning "warning: pointer targets in assignment differ in signedness" } */
+TESTINI(ucd, unsigned char *, char *); /* { dg-warning "warning: pointer targets in initialization differ in signedness" } */
+TESTRET(uce, unsigned char *, char *); /* { dg-warning "warning: pointer targets in return differ in signedness" } */
+
+TESTARG(csa, char *, signed char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'csaF' differ in signedness" } */
+TESTARP(csb, char *, signed char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'csbFp.x' differ in signedness" } */
+TESTASS(csc, char *, signed char *); /* { dg-warning "warning: pointer targets in assignment differ in signedness" } */
+TESTINI(csd, char *, signed char *); /* { dg-warning "warning: pointer targets in initialization differ in signedness" } */
+TESTRET(cse, char *, signed char *); /* { dg-warning "warning: pointer targets in return differ in signedness" } */
+
+TESTARG(sca, signed char *, char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'scaF' differ in signedness" } */
+TESTARP(scb, signed char *, char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'scbFp.x' differ in signedness" } */
+TESTASS(scc, signed char *, char *); /* { dg-warning "warning: pointer targets in assignment differ in signedness" } */
+TESTINI(scd, signed char *, char *); /* { dg-warning "warning: pointer targets in initialization differ in signedness" } */
+TESTRET(sce, signed char *, char *); /* { dg-warning "warning: pointer targets in return differ in signedness" } */
+
+TESTARG(cia, char *, int *); /* { dg-warning "warning: passing argument 1 of 'ciaF' from incompatible pointer type" } */
+TESTARP(cib, char *, int *); /* { dg-warning "warning: passing argument 1 of 'cibFp.x' from incompatible pointer type" } */
+TESTASS(cic, char *, int *); /* { dg-warning "warning: assignment from incompatible pointer type" } */
+TESTINI(cid, char *, int *); /* { dg-warning "warning: initialization from incompatible pointer type" } */
+TESTRET(cie, char *, int *); /* { dg-warning "warning: return from incompatible pointer type" } */
+
+TESTARG(ica, int *, char *); /* { dg-warning "warning: passing argument 1 of 'icaF' from incompatible pointer type" } */
+TESTARP(icb, int *, char *); /* { dg-warning "warning: passing argument 1 of 'icbFp.x' from incompatible pointer type" } */
+TESTASS(icc, int *, char *); /* { dg-warning "warning: assignment from incompatible pointer type" } */
+TESTINI(icd, int *, char *); /* { dg-warning "warning: initialization from incompatible pointer type" } */
+TESTRET(ice, int *, char *); /* { dg-warning "warning: return from incompatible pointer type" } */
+
+TESTARG(ciia, char *, int); /* { dg-warning "warning: passing argument 1 of 'ciiaF' makes pointer from integer without a cast" } */
+TESTARP(ciib, char *, int); /* { dg-warning "warning: passing argument 1 of 'ciibFp.x' makes pointer from integer without a cast" } */
+TESTASS(ciic, char *, int); /* { dg-warning "warning: assignment makes pointer from integer without a cast" } */
+TESTINI(ciid, char *, int); /* { dg-warning "warning: initialization makes pointer from integer without a cast" } */
+TESTRET(ciie, char *, int); /* { dg-warning "warning: return makes pointer from integer without a cast" } */
+
+TESTARG(iica, int, char *); /* { dg-warning "warning: passing argument 1 of 'iicaF' makes integer from pointer without a cast" } */
+TESTARP(iicb, int, char *); /* { dg-warning "warning: passing argument 1 of 'iicbFp.x' makes integer from pointer without a cast" } */
+TESTASS(iicc, int, char *); /* { dg-warning "warning: assignment makes integer from pointer without a cast" } */
+TESTINI(iicd, int, char *); /* { dg-warning "warning: initialization makes integer from pointer without a cast" } */
+TESTRET(iice, int, char *); /* { dg-warning "warning: return makes integer from pointer without a cast" } */
+
+struct s { int a; };
+
+TESTARG(stria, struct s, int); /* { dg-error "error: incompatible type for argument 1 of 'striaF'" } */
+TESTARP(strib, struct s, int); /* { dg-error "error: incompatible type for argument 1 of 'stribFp.x'" } */
+TESTASS(stric, struct s, int); /* { dg-error "error: incompatible types in assignment" } */
+TESTINI(strid, struct s, int); /* { dg-error "error: invalid initializer" } */
+TESTRET(strie, struct s, int); /* { dg-error "error: incompatible types in return" } */
+
+TESTARG(istra, int, struct s); /* { dg-error "error: incompatible type for argument 1 of 'istraF'" } */
+TESTARP(istrb, int, struct s); /* { dg-error "error: incompatible type for argument 1 of 'istrbFp.x'" } */
+TESTASS(istrc, int, struct s); /* { dg-error "error: incompatible types in assignment" } */
+TESTINI(istrd, int, struct s); /* { dg-error "error: incompatible types in initialization" } */
+TESTRET(istre, int, struct s); /* { dg-error "error: incompatible types in return" } */
diff --git a/gcc/testsuite/gcc.dg/assign-warn-2.c b/gcc/testsuite/gcc.dg/assign-warn-2.c
new file mode 100644
index 00000000000..eae22d1549b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/assign-warn-2.c
@@ -0,0 +1,124 @@
+/* Test diagnostics for bad implicit type conversions.
+ -pedantic-errors test. */
+/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+/* { dg-do compile } */
+/* { dg-options "-pedantic-errors" } */
+
+#define TESTARG(ID, TL, TR) void ID##F(TL); void ID##F2(TR x) { ID##F(x); } extern int dummy
+#define TESTARP(ID, TL, TR) struct { void (*x)(TL); } ID##Fp; void ID##F2(TR x) { ID##Fp.x(x); } extern int dummy
+#define TESTASS(ID, TL, TR) void ID##F(TR x) { TL y; y = x; } extern int dummy
+#define TESTINI(ID, TL, TR) void ID##F(TR x) { TL y = x; } extern int dummy
+#define TESTRET(ID, TL, TR) TR ID##V; TL ID##F(void) { return ID##V; } extern int dummy
+
+typedef void (*fp)(void);
+typedef void (*nrfp)(void) __attribute__((noreturn));
+
+TESTARG(fqa, nrfp, fp); /* { dg-error "error: passing argument 1 of 'fqaF' makes qualified function pointer from unqualified" } */
+TESTARP(fqb, nrfp, fp); /* { dg-error "error: passing argument 1 of 'fqbFp.x' makes qualified function pointer from unqualified" } */
+TESTASS(fqc, nrfp, fp); /* { dg-error "error: assignment makes qualified function pointer from unqualified" } */
+TESTINI(fqd, nrfp, fp); /* { dg-error "error: initialization makes qualified function pointer from unqualified" } */
+TESTRET(fqe, nrfp, fp); /* { dg-error "error: return makes qualified function pointer from unqualified" } */
+
+TESTARG(ofqa, fp, nrfp);
+TESTARP(ofqb, fp, nrfp);
+TESTASS(ofqc, fp, nrfp);
+TESTINI(ofqd, fp, nrfp);
+TESTRET(ofqe, fp, nrfp);
+
+TESTARG(qa, char *, const char *); /* { dg-error "error: passing argument 1 of 'qaF' discards qualifiers from pointer target type" } */
+TESTARP(qb, char *, const char *); /* { dg-error "error: passing argument 1 of 'qbFp.x' discards qualifiers from pointer target type" } */
+TESTASS(qc, char *, const char *); /* { dg-error "error: assignment discards qualifiers from pointer target type" } */
+TESTINI(qd, char *, const char *); /* { dg-error "error: initialization discards qualifiers from pointer target type" } */
+TESTRET(qe, char *, const char *); /* { dg-error "error: return discards qualifiers from pointer target type" } */
+
+TESTARG(oqa, const char *, char *);
+TESTARP(oqb, const char *, char *);
+TESTASS(oqc, const char *, char *);
+TESTINI(oqd, const char *, char *);
+TESTRET(oqe, const char *, char *);
+
+TESTARG(fda, fp, void *); /* { dg-error "error: ISO C forbids passing argument 1 of 'fdaF' between function pointer and 'void \\*'" } */
+TESTARP(fdb, fp, void *); /* { dg-error "error: ISO C forbids passing argument 1 of 'fdbFp.x' between function pointer and 'void \\*'" } */
+TESTASS(fdc, fp, void *); /* { dg-error "error: ISO C forbids assignment between function pointer and 'void \\*'" } */
+TESTINI(fdd, fp, void *); /* { dg-error "error: ISO C forbids initialization between function pointer and 'void \\*'" } */
+TESTRET(fde, fp, void *); /* { dg-error "error: ISO C forbids return between function pointer and 'void \\*'" } */
+
+TESTARG(dfa, void *, fp); /* { dg-error "error: ISO C forbids passing argument 1 of 'dfaF' between function pointer and 'void \\*'" } */
+TESTARP(dfb, void *, fp); /* { dg-error "error: ISO C forbids passing argument 1 of 'dfbFp.x' between function pointer and 'void \\*'" } */
+TESTASS(dfc, void *, fp); /* { dg-error "error: ISO C forbids assignment between function pointer and 'void \\*'" } */
+TESTINI(dfd, void *, fp); /* { dg-error "error: ISO C forbids initialization between function pointer and 'void \\*'" } */
+TESTRET(dfe, void *, fp); /* { dg-error "error: ISO C forbids return between function pointer and 'void \\*'" } */
+
+TESTARG(sua, int *, unsigned int *); /* { dg-error "error: pointer targets in passing argument 1 of 'suaF' differ in signedness" } */
+TESTARP(sub, int *, unsigned int *); /* { dg-error "error: pointer targets in passing argument 1 of 'subFp.x' differ in signedness" } */
+TESTASS(suc, int *, unsigned int *); /* { dg-error "error: pointer targets in assignment differ in signedness" } */
+TESTINI(sud, int *, unsigned int *); /* { dg-error "error: pointer targets in initialization differ in signedness" } */
+TESTRET(sue, int *, unsigned int *); /* { dg-error "error: pointer targets in return differ in signedness" } */
+
+TESTARG(usa, unsigned int *, int *); /* { dg-error "error: pointer targets in passing argument 1 of 'usaF' differ in signedness" } */
+TESTARP(usb, unsigned int *, int *); /* { dg-error "error: pointer targets in passing argument 1 of 'usbFp.x' differ in signedness" } */
+TESTASS(usc, unsigned int *, int *); /* { dg-error "error: pointer targets in assignment differ in signedness" } */
+TESTINI(usd, unsigned int *, int *); /* { dg-error "error: pointer targets in initialization differ in signedness" } */
+TESTRET(use, unsigned int *, int *); /* { dg-error "error: pointer targets in return differ in signedness" } */
+
+TESTARG(cua, char *, unsigned char *); /* { dg-error "error: pointer targets in passing argument 1 of 'cuaF' differ in signedness" } */
+TESTARP(cub, char *, unsigned char *); /* { dg-error "error: pointer targets in passing argument 1 of 'cubFp.x' differ in signedness" } */
+TESTASS(cuc, char *, unsigned char *); /* { dg-error "error: pointer targets in assignment differ in signedness" } */
+TESTINI(cud, char *, unsigned char *); /* { dg-error "error: pointer targets in initialization differ in signedness" } */
+TESTRET(cue, char *, unsigned char *); /* { dg-error "error: pointer targets in return differ in signedness" } */
+
+TESTARG(uca, unsigned char *, char *); /* { dg-error "error: pointer targets in passing argument 1 of 'ucaF' differ in signedness" } */
+TESTARP(ucb, unsigned char *, char *); /* { dg-error "error: pointer targets in passing argument 1 of 'ucbFp.x' differ in signedness" } */
+TESTASS(ucc, unsigned char *, char *); /* { dg-error "error: pointer targets in assignment differ in signedness" } */
+TESTINI(ucd, unsigned char *, char *); /* { dg-error "error: pointer targets in initialization differ in signedness" } */
+TESTRET(uce, unsigned char *, char *); /* { dg-error "error: pointer targets in return differ in signedness" } */
+
+TESTARG(csa, char *, signed char *); /* { dg-error "error: pointer targets in passing argument 1 of 'csaF' differ in signedness" } */
+TESTARP(csb, char *, signed char *); /* { dg-error "error: pointer targets in passing argument 1 of 'csbFp.x' differ in signedness" } */
+TESTASS(csc, char *, signed char *); /* { dg-error "error: pointer targets in assignment differ in signedness" } */
+TESTINI(csd, char *, signed char *); /* { dg-error "error: pointer targets in initialization differ in signedness" } */
+TESTRET(cse, char *, signed char *); /* { dg-error "error: pointer targets in return differ in signedness" } */
+
+TESTARG(sca, signed char *, char *); /* { dg-error "error: pointer targets in passing argument 1 of 'scaF' differ in signedness" } */
+TESTARP(scb, signed char *, char *); /* { dg-error "error: pointer targets in passing argument 1 of 'scbFp.x' differ in signedness" } */
+TESTASS(scc, signed char *, char *); /* { dg-error "error: pointer targets in assignment differ in signedness" } */
+TESTINI(scd, signed char *, char *); /* { dg-error "error: pointer targets in initialization differ in signedness" } */
+TESTRET(sce, signed char *, char *); /* { dg-error "error: pointer targets in return differ in signedness" } */
+
+TESTARG(cia, char *, int *); /* { dg-error "error: passing argument 1 of 'ciaF' from incompatible pointer type" } */
+TESTARP(cib, char *, int *); /* { dg-error "error: passing argument 1 of 'cibFp.x' from incompatible pointer type" } */
+TESTASS(cic, char *, int *); /* { dg-error "error: assignment from incompatible pointer type" } */
+TESTINI(cid, char *, int *); /* { dg-error "error: initialization from incompatible pointer type" } */
+TESTRET(cie, char *, int *); /* { dg-error "error: return from incompatible pointer type" } */
+
+TESTARG(ica, int *, char *); /* { dg-error "error: passing argument 1 of 'icaF' from incompatible pointer type" } */
+TESTARP(icb, int *, char *); /* { dg-error "error: passing argument 1 of 'icbFp.x' from incompatible pointer type" } */
+TESTASS(icc, int *, char *); /* { dg-error "error: assignment from incompatible pointer type" } */
+TESTINI(icd, int *, char *); /* { dg-error "error: initialization from incompatible pointer type" } */
+TESTRET(ice, int *, char *); /* { dg-error "error: return from incompatible pointer type" } */
+
+TESTARG(ciia, char *, int); /* { dg-error "error: passing argument 1 of 'ciiaF' makes pointer from integer without a cast" } */
+TESTARP(ciib, char *, int); /* { dg-error "error: passing argument 1 of 'ciibFp.x' makes pointer from integer without a cast" } */
+TESTASS(ciic, char *, int); /* { dg-error "error: assignment makes pointer from integer without a cast" } */
+TESTINI(ciid, char *, int); /* { dg-error "error: initialization makes pointer from integer without a cast" } */
+TESTRET(ciie, char *, int); /* { dg-error "error: return makes pointer from integer without a cast" } */
+
+TESTARG(iica, int, char *); /* { dg-error "error: passing argument 1 of 'iicaF' makes integer from pointer without a cast" } */
+TESTARP(iicb, int, char *); /* { dg-error "error: passing argument 1 of 'iicbFp.x' makes integer from pointer without a cast" } */
+TESTASS(iicc, int, char *); /* { dg-error "error: assignment makes integer from pointer without a cast" } */
+TESTINI(iicd, int, char *); /* { dg-error "error: initialization makes integer from pointer without a cast" } */
+TESTRET(iice, int, char *); /* { dg-error "error: return makes integer from pointer without a cast" } */
+
+struct s { int a; };
+
+TESTARG(stria, struct s, int); /* { dg-error "error: incompatible type for argument 1 of 'striaF'" } */
+TESTARP(strib, struct s, int); /* { dg-error "error: incompatible type for argument 1 of 'stribFp.x'" } */
+TESTASS(stric, struct s, int); /* { dg-error "error: incompatible types in assignment" } */
+TESTINI(strid, struct s, int); /* { dg-error "error: invalid initializer" } */
+TESTRET(strie, struct s, int); /* { dg-error "error: incompatible types in return" } */
+
+TESTARG(istra, int, struct s); /* { dg-error "error: incompatible type for argument 1 of 'istraF'" } */
+TESTARP(istrb, int, struct s); /* { dg-error "error: incompatible type for argument 1 of 'istrbFp.x'" } */
+TESTASS(istrc, int, struct s); /* { dg-error "error: incompatible types in assignment" } */
+TESTINI(istrd, int, struct s); /* { dg-error "error: incompatible types in initialization" } */
+TESTRET(istre, int, struct s); /* { dg-error "error: incompatible types in return" } */
diff --git a/gcc/testsuite/gcc.dg/cpp/ident-1.c b/gcc/testsuite/gcc.dg/cpp/ident-1.c
new file mode 100644
index 00000000000..5437296ddd1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/ident-1.c
@@ -0,0 +1,7 @@
+/* { dg-do preprocess } */
+
+/* Based on PR 16999 */
+
+#ident "this is an ident"
+
+/* { dg-final { scan-file "ident-1.i" "(^|\\n)#ident \"this is an ident\"($|\\n)" } } */
diff --git a/gcc/testsuite/gcc.dg/darwin-abi-2.c b/gcc/testsuite/gcc.dg/darwin-abi-2.c
index 81da83c424f..4764831e847 100644
--- a/gcc/testsuite/gcc.dg/darwin-abi-2.c
+++ b/gcc/testsuite/gcc.dg/darwin-abi-2.c
@@ -5,6 +5,7 @@
tests that the ABI is correct. */
#include <stdio.h>
+#include <stdlib.h>
#define vector __attribute__((vector_size(16)))
diff --git a/gcc/testsuite/gcc.dg/darwin-longdouble.c b/gcc/testsuite/gcc.dg/darwin-longdouble.c
index 54f090ddff6..8e4259af350 100644
--- a/gcc/testsuite/gcc.dg/darwin-longdouble.c
+++ b/gcc/testsuite/gcc.dg/darwin-longdouble.c
@@ -3,6 +3,8 @@
/* No options so 'long long' can be used. */
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
typedef unsigned long long uint64_t;
typedef uint64_t ldbits[2];
diff --git a/gcc/testsuite/gcc.dg/doloop-2.c b/gcc/testsuite/gcc.dg/doloop-2.c
new file mode 100644
index 00000000000..115ec742ba3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/doloop-2.c
@@ -0,0 +1,19 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+extern void abort (void);
+unsigned global_iters;
+
+void bi_reverse(int len)
+{
+ do {
+ global_iters++;
+ } while (--len > 0);
+}
+
+int main()
+{
+ bi_reverse(5);
+ if (global_iters != 5)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/func-args-1.c b/gcc/testsuite/gcc.dg/func-args-1.c
new file mode 100644
index 00000000000..306a5dfa04d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/func-args-1.c
@@ -0,0 +1,53 @@
+/* Test messages for wrong number of arguments to function. */
+/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+void f0(void);
+void f1(int);
+void f1v(int, ...);
+void f2(int, int);
+void f2v(int, int, ...);
+
+struct s {
+ void (*f0)(void);
+ void (*f1)(int);
+ void (*f1v)(int, ...);
+ void (*f2)(int, int);
+ void (*f2v)(int, int, ...);
+} x;
+
+void
+g (int a)
+{
+ f0();
+ x.f0();
+ f0(a); /* { dg-error "error: too many arguments to function 'f0'" } */
+ x.f0(a); /* { dg-error "error: too many arguments to function 'x.f0'" } */
+ f0(a, a); /* { dg-error "error: too many arguments to function 'f0'" } */
+ x.f0(a, a); /* { dg-error "error: too many arguments to function 'x.f0'" } */
+ f1(); /* { dg-error "error: too few arguments to function 'f1'" } */
+ x.f1(); /* { dg-error "error: too few arguments to function 'x.f1'" } */
+ f1(a);
+ x.f1(a);
+ f1(a, a); /* { dg-error "error: too many arguments to function 'f1'" } */
+ x.f1(a, a); /* { dg-error "error: too many arguments to function 'x.f1'" } */
+ f1v(); /* { dg-error "error: too few arguments to function 'f1v'" } */
+ x.f1v(); /* { dg-error "error: too few arguments to function 'x.f1v'" } */
+ f1v(a);
+ x.f1v(a);
+ f1v(a, a);
+ x.f1v(a, a);
+ f2(a); /* { dg-error "error: too few arguments to function 'f2'" } */
+ x.f2(a); /* { dg-error "error: too few arguments to function 'x.f2'" } */
+ f2(a, a);
+ x.f2(a, a);
+ f2(a, a, a); /* { dg-error "error: too many arguments to function 'f2'" } */
+ x.f2(a, a, a); /* { dg-error "error: too many arguments to function 'x.f2'" } */
+ f2v(a); /* { dg-error "error: too few arguments to function 'f2v'" } */
+ x.f2v(a); /* { dg-error "error: too few arguments to function 'x.f2v'" } */
+ f2v(a, a);
+ x.f2v(a, a);
+ f2v(a, a, a);
+ x.f2v(a, a, a);
+}
diff --git a/gcc/testsuite/gcc.dg/noncompile/20020213-1.c b/gcc/testsuite/gcc.dg/noncompile/20020213-1.c
index 77798b57c4b..c1de5663ace 100644
--- a/gcc/testsuite/gcc.dg/noncompile/20020213-1.c
+++ b/gcc/testsuite/gcc.dg/noncompile/20020213-1.c
@@ -24,8 +24,8 @@ int main ()
return 0;
}
-/* { dg-warning "passing arg 2 of" "2nd incompatible" { target *-*-* } 15 } */
-/* { dg-warning "passing arg 1 of" "1st incompatible" { target *-*-* } 16 } */
-/* { dg-warning "passing arg 2 of" "2nd incompatible" { target *-*-* } 16 } */
-/* { dg-warning "passing arg 1 of" "1st incompatible" { target *-*-* } 18 } */
-/* { dg-warning "passing arg 1 of" "1st incompatible" { target *-*-* } 20 } */
+/* { dg-warning "passing argument 2 of" "2nd incompatible" { target *-*-* } 15 } */
+/* { dg-warning "passing argument 1 of" "1st incompatible" { target *-*-* } 16 } */
+/* { dg-warning "passing argument 2 of" "2nd incompatible" { target *-*-* } 16 } */
+/* { dg-warning "passing argument 1 of" "1st incompatible" { target *-*-* } 18 } */
+/* { dg-warning "passing argument 1 of" "1st incompatible" { target *-*-* } 20 } */
diff --git a/gcc/testsuite/gcc.dg/ppc-fsel-1.c b/gcc/testsuite/gcc.dg/ppc-fsel-1.c
index 266b8dbd5a5..8d364352ac9 100644
--- a/gcc/testsuite/gcc.dg/ppc-fsel-1.c
+++ b/gcc/testsuite/gcc.dg/ppc-fsel-1.c
@@ -1,8 +1,8 @@
/* { dg-do compile { target powerpc*-*-* } } */
-/* { dg-options "-O -mpowerpc-gfxopt" } */
+/* { dg-options "-O -mpowerpc-gfxopt -fno-trapping-math" } */
/* { dg-final { scan-assembler "fsel" } } */
-/* Check that fsel can be generated even without -ffast-math. */
+/* If the user doesn't care about signals, fsel can be used in many cases. */
double foo(double a, double b, double c, double d)
{
diff --git a/gcc/testsuite/gcc.dg/ppc-fsel-3.c b/gcc/testsuite/gcc.dg/ppc-fsel-3.c
new file mode 100644
index 00000000000..1d07c528eb1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ppc-fsel-3.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-options "-O -mpowerpc-gfxopt" } */
+/* { dg-final { scan-assembler-not "fsub" } } */
+
+/* Check that an fsub isn't generated when no arithmetic was requested;
+ such an fsub might incorrectly set floating-point exception flags. */
+
+double foo(double a, double b, double c, double d)
+{
+ return a < b ? c : d;
+}
diff --git a/gcc/testsuite/gcc.dg/ultrasp11.c b/gcc/testsuite/gcc.dg/ultrasp11.c
new file mode 100644
index 00000000000..8f279f721ae
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ultrasp11.c
@@ -0,0 +1,25 @@
+/* PR target/17245 */
+/* Origin: <aaronw@net.com> */
+/* Testcase by Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de> */
+/* { dg-do compile { target sparc*-*-* } } */
+/* { dg-options "-O -mcpu=v9" } */
+
+/* This used to fail on 32-bit Ultrasparc because reload was emitting
+ a move insn that doesn't satisfy its constraints. */
+
+int n;
+double range ;
+double bin ;
+double wmean;
+
+double f ()
+{
+ int i ;
+ long double W = 0 ;
+ for ( i = 0 ; i < n ; i ++) {
+ double xi = range;
+ double wi = bin;
+ W += wi ;
+ wmean += ( xi - wmean) * ( wi / W);
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/warn-1.c b/gcc/testsuite/gcc.dg/warn-1.c
index ce35b41e941..dc2cd0e7c71 100644
--- a/gcc/testsuite/gcc.dg/warn-1.c
+++ b/gcc/testsuite/gcc.dg/warn-1.c
@@ -12,5 +12,5 @@ void bar (void)
{
void *vp;
- foo (vp); /* { dg-warning "passing arg 1 of" } */
+ foo (vp); /* { dg-warning "passing argument 1 of" } */
}
diff --git a/gcc/testsuite/gfortran.dg/do_1.f90 b/gcc/testsuite/gfortran.dg/do_1.f90
new file mode 100644
index 00000000000..20e1f31ca67
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/do_1.f90
@@ -0,0 +1,80 @@
+! { dg-do run }
+! Program to check corner cases for DO statements.
+program do_1
+ implicit none
+ integer i, j
+
+ ! limit=HUGE(i), step 1
+ j = 0
+ do i = HUGE(i) - 10, HUGE(i), 1
+ j = j + 1
+ end do
+ if (j .ne. 11) call abort
+ ! limit=HUGE(i), step > 1
+ j = 0
+ do i = HUGE(i) - 10, HUGE(i), 2
+ j = j + 1
+ end do
+ if (j .ne. 6) call abort
+ j = 0
+ do i = HUGE(i) - 9, HUGE(i), 2
+ j = j + 1
+ end do
+ if (j .ne. 5) call abort
+
+ ! Same again, but unknown loop step
+ if (test1(10, 1) .ne. 11) call abort
+ if (test1(10, 2) .ne. 6) call abort
+ if (test1(9, 2) .ne. 5) call abort
+
+ ! Zero iterations
+ j = 0
+ do i = 1, 0, 1
+ j = j + 1
+ end do
+ if (j .ne. 0) call abort
+ j = 0
+ do i = 1, 0, 2
+ j = j + 1
+ end do
+ if (j .ne. 0) call abort
+ j = 0
+ do i = 1, 2, -1
+ j = j + 1
+ end do
+ if (j .ne. 0) call abort
+ call test2 (0, 1)
+ call test2 (0, 2)
+ call test2 (2, -1)
+ call test2 (2, -2)
+
+ ! Bound near smallest value
+ j = 0;
+ do i = -HUGE(i), -HUGE(i), 10
+ j = j + 1
+ end do
+ if (j .ne. 1) call abort
+contains
+! Returns the number of iterations performed.
+function test1(r, step)
+ implicit none
+ integer test1, r, step
+ integer k, n
+ k = 0
+ do n = HUGE(n) - r, HUGE(n), step
+ k = k + 1
+ end do
+ test1 = k
+end function
+
+subroutine test2 (lim, step)
+ implicit none
+ integer lim, step
+ integer k, n
+ k = 0
+ do n = 1, lim, step
+ k = k + 1
+ end do
+ if (k .ne. 0) call abort
+end subroutine
+end program
diff --git a/gcc/testsuite/gfortran.dg/empty_format_1.f90 b/gcc/testsuite/gfortran.dg/empty_format_1.f90
new file mode 100644
index 00000000000..79a2d0c17d7
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/empty_format_1.f90
@@ -0,0 +1,21 @@
+! { dg-do run }
+! PR 17709
+! We weren't resetting the internal EOR flag correctly, so the second read
+! wasn't advancing to the next line.
+program main
+ integer io_unit
+ character*20 str
+ io_unit = 10
+ open (unit=io_unit,status='scratch',form='formatted')
+ write (io_unit, '(A)') "Line1"
+ write (io_unit, '(A)') "Line2"
+ write (io_unit, '(A)') "Line3"
+ rewind (io_unit)
+ read (io_unit,'(A)') str
+ if (str .ne. "Line1") call abort
+ read (io_unit,'()')
+ read (io_unit,'(A)') str
+ if (str .ne. "Line3") call abort
+ close(unit=io_unit)
+end
+
diff --git a/gcc/testsuite/gfortran.dg/intrinsic_verify_1.f90 b/gcc/testsuite/gfortran.dg/intrinsic_verify_1.f90
new file mode 100644
index 00000000000..c894043de08
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/intrinsic_verify_1.f90
@@ -0,0 +1,12 @@
+! { dg-do run }
+! Test the verify intrinsic. We were ignoring the last character.
+program prog
+ character(len=1) :: c1
+ character(len=4) :: c4
+ c1 = "E"
+ if (verify(c1, "1") .ne. 1) call abort
+ c4 = "ABBA"
+ if (verify(c4, "A") .ne. 2) call abort
+ if (verify(c4, "A", back = .true.) .ne. 3) call abort
+ if (verify(c4, "AB") .ne. 0) call abort
+end program
diff --git a/gcc/testsuite/gfortran.dg/ishft.f90 b/gcc/testsuite/gfortran.dg/ishft.f90
new file mode 100644
index 00000000000..d8ca3a7de73
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/ishft.f90
@@ -0,0 +1,59 @@
+! { dg-do run }
+! verifies basic functioning of the ishft and ishftc intrinsics
+if (ishft (1_1, 0) /= 1) call abort
+if (ishft (1_1, 1) /= 2) call abort
+if (ishft (3_1, 1) /= 6) call abort
+if (ishft (-1_1, 1) /= -2) call abort
+if (ishft (-1_1, -1) /= 127) call abort
+if (ishft (96_1, 2) /= -128) call abort
+
+if (ishft (1_2, 0) /= 1) call abort
+if (ishft (1_2, 1) /= 2) call abort
+if (ishft (3_2, 1) /= 6) call abort
+if (ishft (-1_2, 1) /= -2) call abort
+if (ishft (-1_2, -1) /= 32767) call abort
+if (ishft (16384_2 + 8192_2, 2) /= -32768_4) call abort
+
+if (ishft (1_4, 0) /= 1) call abort
+if (ishft (1_4, 1) /= 2) call abort
+if (ishft (3_4, 1) /= 6) call abort
+if (ishft (-1_4, 1) /= -2) call abort
+if (ishft (-1_4, -1) /= 2147483647) call abort
+if (ishft (1073741824_4 + 536870912_4, 2) /= -2147483648_8) call abort
+
+if (ishft (1_8, 0) /= 1) call abort
+if (ishft (1_8, 1) /= 2) call abort
+if (ishft (3_8, 1) /= 6) call abort
+if (ishft (-1_8, 1) /= -2) call abort
+if (ishft (-1_8, -60) /= z'F'_8) call abort ! { dg-warning "" "" }
+
+if (ishftc (1_1, 0) /= 1) call abort
+if (ishftc (1_1, 1) /= 2) call abort
+if (ishftc (3_1, 1) /= 6) call abort
+if (ishftc (-1_1, 1) /= -1) call abort
+if (ishftc (-1_1, -1) /= -1) call abort
+if (ishftc (ishftc (96_1, 2), -2) /= 96) call abort
+
+if (ishftc (1_2, 0) /= 1) call abort
+if (ishftc (1_2, 1) /= 2) call abort
+if (ishftc (3_2, 1) /= 6) call abort
+if (ishftc (-1_2, 1) /= -1) call abort
+if (ishftc (-1_2, -1) /= -1) call abort
+if (ishftc (ishftc (25000_2, 2), -2) /= 25000) call abort
+
+if (ishftc (1_4, 0) /= 1) call abort
+if (ishftc (1_4, 1) /= 2) call abort
+if (ishftc (3_4, 1) /= 6) call abort
+if (ishftc (-1_4, 1) /= -1) call abort
+if (ishftc (-1_4, -1) /= -1) call abort
+if (ishftc (ishftc (1325876_4, 2), -2) /= 1325876) call abort
+
+if (ishftc (1_8, 0) /= 1) call abort
+if (ishftc (1_8, 1) /= 2) call abort
+if (ishftc (3_8, 1) /= 6) call abort
+if (ishftc (-1_8, 1) /= -1) call abort
+if (ishftc (-1_8, -1) /= -1) call abort
+if (ishftc (ishftc (1325876_8, 2), -2) /= 1325876) call abort
+end
+
+
diff --git a/gcc/testsuite/gfortran.dg/use_allocated_1.f90 b/gcc/testsuite/gfortran.dg/use_allocated_1.f90
new file mode 100644
index 00000000000..fb51502edc2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_allocated_1.f90
@@ -0,0 +1,18 @@
+! { dg-do run }
+! PR17678
+! We were incorrectly setting use-associated variables to unallocated
+! on procedure entry.
+module foo
+ integer, dimension(:), allocatable :: bar
+end module
+
+program main
+ use foo
+ allocate (bar(10))
+ call init
+end program main
+
+subroutine init
+ use foo
+ if (.not.allocated(bar)) call abort
+end subroutine init
diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/nested.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/nested.f90
new file mode 100644
index 00000000000..1059684ddd5
--- /dev/null
+++ b/gcc/testsuite/gfortran.fortran-torture/compile/nested.f90
@@ -0,0 +1,23 @@
+! Program to test the nested functions
+program intrinsic_pack
+ integer, parameter :: val(9) = (/0,0,0,0,9,0,0,0,7/)
+ integer, dimension(3, 3) :: a
+ integer, dimension(6) :: b
+
+ a = reshape (val, (/3, 3/))
+ b = 0
+ b(1:6:3) = pack (a, a .ne. 0);
+ if (any (b(1:6:3) .ne. (/9, 7/))) call abort
+ b = pack (a(2:3, 2:3), a(2:3, 2:3) .ne. 0, (/1, 2, 3, 4, 5, 6/));
+ if (any (b .ne. (/9, 7, 3, 4, 5, 6/))) call abort
+
+contains
+ subroutine tests_with_temp
+ ! A few tests which involve a temporary
+ if (any (pack(a, a.ne.0) .ne. (/9, 7/))) call abort
+ if (any (pack(a, .true.) .ne. val)) call abort
+ if (size(pack (a, .false.)) .ne. 0) call abort
+ if (any (pack(a, .false., (/1,2,3/)).ne. (/1,2,3/))) call abort
+
+ end subroutine tests_with_temp
+end program
diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mvbits.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mvbits.f90
index 8aaaf09dd26..c9fbe782703 100644
--- a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mvbits.f90
+++ b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mvbits.f90
@@ -1,5 +1,6 @@
! Test the MVBITS intrinsic subroutine
INTEGER*4 :: from, to, result
+integer*8 :: to8
DATA from / z'0003FFFC' /
DATA to / z'77760000' /
@@ -7,4 +8,8 @@ DATA result / z'7777FFFE' /
CALL mvbits(from, 2, 16, to, 1)
if (to /= result) CALL abort()
+
+to8 = 0
+call mvbits (b'1011'_8*2_8**32, 33, 3, to8, 2) ! { dg-warning "" "" }
+if (to8 /= b'10100'_8) call abort ! { dg-warning "" "" }
end
diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_pack.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_pack.f90
index 427fe55ef14..28cd1cd8f03 100644
--- a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_pack.f90
+++ b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_pack.f90
@@ -11,8 +11,7 @@ program intrinsic_pack
b = pack (a(2:3, 2:3), a(2:3, 2:3) .ne. 0, (/1, 2, 3, 4, 5, 6/));
if (any (b .ne. (/9, 7, 3, 4, 5, 6/))) call abort
-! this is waiting for PR 17756 to be fixed
-! call tests_with_temp()
+ call tests_with_temp()
contains
subroutine tests_with_temp
! A few tests which involve a temporary
diff --git a/gcc/testsuite/objc.dg/method-9.m b/gcc/testsuite/objc.dg/method-9.m
index ba832840062..3921663ec8f 100644
--- a/gcc/testsuite/objc.dg/method-9.m
+++ b/gcc/testsuite/objc.dg/method-9.m
@@ -37,7 +37,7 @@
/* { dg-warning "also found .\\-\\(id\\)initWithData:\\(int\\)data." "" { target *-*-* } 13 } */
/* The following warning is a consequence of picking the "wrong" method signature. */
- /* { dg-warning "passing arg 1 of .initWithData:. from incompatible pointer type" "" { target *-*-* } 33 } */
+ /* { dg-warning "passing argument 1 of .initWithData:. from incompatible pointer type" "" { target *-*-* } 33 } */
return result;
}
@end
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 119d51f3194..8bdfe5ba9f6 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -790,7 +790,7 @@ main_block_label (tree label)
return label_for_bb[bb->index];
}
-/* Cleanup redundant labels. This is a three-steo process:
+/* Cleanup redundant labels. This is a three-step process:
1) Find the leading label for each block.
2) Redirect all references to labels to the leading labels.
3) Cleanup all useless labels. */
@@ -1843,69 +1843,6 @@ remove_bb (basic_block bb)
remove_phi_nodes_and_edges_for_unreachable_block (bb);
}
-
-/* Examine BB to determine if it is a forwarding block (a block which only
- transfers control to a new destination). If BB is a forwarding block,
- then return the edge leading to the ultimate destination. */
-
-edge
-tree_block_forwards_to (basic_block bb)
-{
- block_stmt_iterator bsi;
- bb_ann_t ann = bb_ann (bb);
- tree stmt;
-
- /* If this block is not forwardable, then avoid useless work. */
- if (! ann->forwardable)
- return NULL;
-
- /* Set this block to not be forwardable. This prevents infinite loops since
- any block currently under examination is considered non-forwardable. */
- ann->forwardable = 0;
-
- /* No forwarding is possible if this block is a special block (ENTRY/EXIT),
- this block has more than one successor, this block's single successor is
- reached via an abnormal edge, this block has phi nodes, or this block's
- single successor has phi nodes. */
- if (bb == EXIT_BLOCK_PTR
- || bb == ENTRY_BLOCK_PTR
- || EDGE_COUNT (bb->succs) != 1
- || EDGE_SUCC (bb, 0)->dest == EXIT_BLOCK_PTR
- || (EDGE_SUCC (bb, 0)->flags & EDGE_ABNORMAL) != 0
- || phi_nodes (bb)
- || phi_nodes (EDGE_SUCC (bb, 0)->dest))
- return NULL;
-
- /* Walk past any labels at the start of this block. */
- for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
- {
- stmt = bsi_stmt (bsi);
- if (TREE_CODE (stmt) != LABEL_EXPR)
- break;
- }
-
- /* If we reached the end of this block we may be able to optimize this
- case. */
- if (bsi_end_p (bsi))
- {
- edge dest;
-
- /* Recursive call to pick up chains of forwarding blocks. */
- dest = tree_block_forwards_to (EDGE_SUCC (bb, 0)->dest);
-
- /* If none found, we forward to bb->succs[0] at minimum. */
- if (!dest)
- dest = EDGE_SUCC (bb, 0);
-
- ann->forwardable = 1;
- return dest;
- }
-
- /* No forwarding possible. */
- return NULL;
-}
-
-
/* Try to remove superfluous control structures. */
static bool
@@ -3757,7 +3694,10 @@ tree_make_forwarder_block (edge fallthru)
/* Return true if basic block BB does nothing except pass control
flow to another block and that we can safely insert a label at
- the start of the successor block. */
+ the start of the successor block.
+
+ As a precondition, we require that BB be not equal to
+ ENTRY_BLOCK_PTR. */
static bool
tree_forwarder_block_p (basic_block bb)
@@ -3771,17 +3711,25 @@ tree_forwarder_block_p (basic_block bb)
if (! bb_ann (bb)->forwardable)
return false;
- /* BB must have a single outgoing normal edge. Otherwise it can not be
- a forwarder block. */
+ /* BB must have a single outgoing edge. */
if (EDGE_COUNT (bb->succs) != 1
+ /* BB can not have any PHI nodes. This could potentially be
+ relaxed early in compilation if we re-rewrote the variables
+ appearing in any PHI nodes in forwarder blocks. */
+ || phi_nodes (bb)
+ /* BB may not be a predecessor of EXIT_BLOCK_PTR. */
|| EDGE_SUCC (bb, 0)->dest == EXIT_BLOCK_PTR
- || (EDGE_SUCC (bb, 0)->flags & EDGE_ABNORMAL)
- || bb == ENTRY_BLOCK_PTR)
+ /* BB may not have an abnormal outgoing edge. */
+ || (EDGE_SUCC (bb, 0)->flags & EDGE_ABNORMAL))
{
bb_ann (bb)->forwardable = 0;
return false;
}
+#if ENABLE_CHECKING
+ gcc_assert (bb != ENTRY_BLOCK_PTR);
+#endif
+
/* Successors of the entry block are not forwarders. */
FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
if (e->dest == bb)
@@ -3790,15 +3738,6 @@ tree_forwarder_block_p (basic_block bb)
return false;
}
- /* BB can not have any PHI nodes. This could potentially be relaxed
- early in compilation if we re-rewrote the variables appearing in
- any PHI nodes in forwarder blocks. */
- if (phi_nodes (bb))
- {
- bb_ann (bb)->forwardable = 0;
- return false;
- }
-
/* Now walk through the statements. We can ignore labels, anything else
means this is not a forwarder block. */
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
@@ -3884,12 +3823,7 @@ thread_jumps (void)
tree_forwarder_block_p (dest);
last = EDGE_SUCC (dest, 0),
dest = EDGE_SUCC (dest, 0)->dest)
- {
- if (EDGE_SUCC (dest, 0)->dest == EXIT_BLOCK_PTR)
- break;
-
- bb_ann (dest)->forwardable = 0;
- }
+ bb_ann (dest)->forwardable = 0;
/* Reset the forwardable marks to 1. */
for (tmp = e->dest;
diff --git a/gcc/tree-flow-inline.h b/gcc/tree-flow-inline.h
index 61ed11268f7..050792176fc 100644
--- a/gcc/tree-flow-inline.h
+++ b/gcc/tree-flow-inline.h
@@ -363,8 +363,6 @@ bb_ann (basic_block bb)
static inline tree
phi_nodes (basic_block bb)
{
- if (bb->index < 0)
- return NULL;
return bb_ann (bb)->phi_nodes;
}
diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h
index 96a2e10f1cf..c26e91b5c19 100644
--- a/gcc/tree-flow.h
+++ b/gcc/tree-flow.h
@@ -482,7 +482,6 @@ extern void cfg_remove_useless_stmts (void);
extern edge thread_edge (edge, basic_block);
extern basic_block label_to_block (tree);
extern void tree_optimize_tail_calls (bool, enum tree_dump_index);
-extern edge tree_block_forwards_to (basic_block bb);
extern void bsi_insert_on_edge (edge, tree);
extern basic_block bsi_insert_on_edge_immediate (edge, tree);
extern void bsi_commit_edge_inserts (int *);
@@ -742,6 +741,8 @@ extern void build_ssa_operands (tree, stmt_ann_t, stmt_operands_p,
/* In tree-loop-linear.c */
extern void linear_transform_loops (struct loops *);
+/* In tree-ssa-loop-ivopts.c */
+extern bool expr_invariant_in_loop_p (struct loop *loop, tree expr);
/* In gimplify.c */
tree force_gimple_operand (tree, tree *, bool, tree);
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 38fa455aa10..0583eb42942 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -1475,7 +1475,8 @@ expand_call_inline (tree *tp, int *walk_subtrees, void *data)
}
else if (warn_inline && DECL_DECLARED_INLINE_P (fn)
&& !DECL_IN_SYSTEM_HEADER (fn)
- && strlen (reason))
+ && strlen (reason)
+ && !lookup_attribute ("noinline", DECL_ATTRIBUTES (fn)))
{
warning ("%Jinlining failed in call to '%F': %s", fn, fn, reason);
warning ("called from here");
diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c
index d2608a837f0..3f500f6f138 100644
--- a/gcc/tree-nested.c
+++ b/gcc/tree-nested.c
@@ -518,6 +518,7 @@ struct walk_stmt_info
tree_stmt_iterator tsi;
struct nesting_info *info;
bool val_only;
+ bool changed;
};
/* A subroutine of walk_function. Iterate over all sub-statements of *TP. */
@@ -732,6 +733,7 @@ convert_nonlocal_reference (tree *tp, int *walk_subtrees, void *data)
tree target_context = decl_function_context (t);
struct nesting_info *i;
tree x;
+ wi->changed = true;
for (i = info->outer; i->context != target_context; i = i->outer)
continue;
@@ -770,17 +772,17 @@ convert_nonlocal_reference (tree *tp, int *walk_subtrees, void *data)
case ADDR_EXPR:
{
bool save_val_only = wi->val_only;
- tree save_sub = TREE_OPERAND (t, 0);
+ wi->changed = false;
wi->val_only = false;
walk_tree (&TREE_OPERAND (t, 0), convert_nonlocal_reference, wi, NULL);
wi->val_only = true;
- if (save_sub != TREE_OPERAND (t, 0))
+ if (wi->changed)
{
/* If we changed anything, then TREE_INVARIANT is be wrong,
since we're no longer directly referencing a decl. */
- TREE_INVARIANT (t) = 0;
+ recompute_tree_invarant_for_addr_expr (t);
/* If the callback converted the address argument in a context
where we only accept variables (and min_invariant, presumably),
@@ -874,6 +876,7 @@ convert_local_reference (tree *tp, int *walk_subtrees, void *data)
field = lookup_field_for_decl (info, t, NO_INSERT);
if (!field)
break;
+ wi->changed = true;
x = get_frame_field (info, info->context, field, &wi->tsi);
if (wi->val_only)
@@ -885,17 +888,19 @@ convert_local_reference (tree *tp, int *walk_subtrees, void *data)
case ADDR_EXPR:
{
bool save_val_only = wi->val_only;
- tree save_sub = TREE_OPERAND (t, 0);
+ wi->changed = false;
wi->val_only = false;
walk_tree (&TREE_OPERAND (t, 0), convert_local_reference, wi, NULL);
wi->val_only = save_val_only;
/* If we converted anything ... */
- if (TREE_OPERAND (t, 0) != save_sub)
+ if (wi->changed)
{
/* Then the frame decl is now addressable. */
TREE_ADDRESSABLE (info->frame_decl) = 1;
+
+ recompute_tree_invarant_for_addr_expr (t);
/* If we are in a context where we only accept values, then
compute the address into a temporary. */
diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c
index 9337c3856fd..12ba54a525e 100644
--- a/gcc/tree-pretty-print.c
+++ b/gcc/tree-pretty-print.c
@@ -285,8 +285,26 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
}
break;
- case TREE_VEC:
+ case TREE_BINFO:
dump_generic_node (buffer, BINFO_TYPE (node), spc, flags, false);
+
+ case TREE_VEC:
+ {
+ size_t i;
+ if (TREE_VEC_LENGTH (node) > 0)
+ {
+ size_t len = TREE_VEC_LENGTH (node);
+ for (i = 0; i < len - 1; i++)
+ {
+ dump_generic_node (buffer, TREE_VEC_ELT (node, i), spc, flags,
+ false);
+ pp_character (buffer, ',');
+ pp_space (buffer);
+ }
+ dump_generic_node (buffer, TREE_VEC_ELT (node, len - 1), spc,
+ flags, false);
+ }
+ }
break;
case BLOCK:
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index 4dae6c9b938..93ff3b74ce9 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -1191,7 +1191,7 @@ find_interesting_uses_cond (struct ivopts_data *data, tree stmt, tree *cond_p)
/* Returns true if expression EXPR is obviously invariant in LOOP,
i.e. if all its operands are defined outside of the LOOP. */
-static bool
+bool
expr_invariant_in_loop_p (struct loop *loop, tree expr)
{
basic_block def_bb;
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index 3d505b5579b..c5757fb9aee 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -1941,7 +1941,7 @@ init_pre (void)
unary_node_pool = create_alloc_pool ("Unary tree nodes",
tree_code_size (NEGATE_EXPR), 30);
reference_node_pool = create_alloc_pool ("Reference tree nodes",
- tree_code_size (COMPONENT_REF), 30);
+ tree_code_size (ARRAY_REF), 30);
FOR_ALL_BB (bb)
{
EXP_GEN (bb) = set_new (true);
diff --git a/gcc/tree-tailcall.c b/gcc/tree-tailcall.c
index a6c44933f79..34ac8ee5834 100644
--- a/gcc/tree-tailcall.c
+++ b/gcc/tree-tailcall.c
@@ -431,15 +431,27 @@ find_tail_calls (basic_block bb, struct tailcall **ret)
param = TREE_CHAIN (param), args = TREE_CHAIN (args))
{
tree arg = TREE_VALUE (args);
- if (param != arg
- /* Make sure there are no problems with copying. Note we must
+ if (param != arg)
+ {
+ /* Make sure there are no problems with copying. The parameter
have a copyable type and the two arguments must have reasonably
equivalent types. The latter requirement could be relaxed if
we emitted a suitable type conversion statement. */
- && (!is_gimple_reg_type (TREE_TYPE (param))
+ if (!is_gimple_reg_type (TREE_TYPE (param))
|| !lang_hooks.types_compatible_p (TREE_TYPE (param),
- TREE_TYPE (arg))))
- break;
+ TREE_TYPE (arg)))
+ break;
+
+ /* The parameter should be a real operand, so that phi node
+ created for it at the start of the function has the meaning
+ of copying the value. This test implies is_gimple_reg_type
+ from the previous condition, however this one could be
+ relaxed by being more careful with copying the new value
+ of the parameter (emitting appropriate MODIFY_EXPR and
+ updating the virtual operands). */
+ if (!is_gimple_reg (param))
+ break;
+ }
}
if (!args && !param)
tail_recursion = true;
@@ -884,7 +896,11 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls)
add_referenced_tmp_var (tmp);
phi = create_phi_node (tmp, first);
- add_phi_arg (&phi, build_int_cst (ret_type, 0), EDGE_PRED (first, 0));
+ add_phi_arg (&phi,
+ /* RET_TYPE can be a float when -ffast-maths is
+ enabled. */
+ fold_convert (ret_type, integer_zero_node),
+ EDGE_PRED (first, 0));
a_acc = PHI_RESULT (phi);
}
@@ -896,7 +912,11 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls)
add_referenced_tmp_var (tmp);
phi = create_phi_node (tmp, first);
- add_phi_arg (&phi, build_int_cst (ret_type, 1), EDGE_PRED (first, 0));
+ add_phi_arg (&phi,
+ /* RET_TYPE can be a float when -ffast-maths is
+ enabled. */
+ fold_convert (ret_type, integer_one_node),
+ EDGE_PRED (first, 0));
m_acc = PHI_RESULT (phi);
}
}
diff --git a/gcc/version.c b/gcc/version.c
index 7db05f0e513..1acc0c7f8a2 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[] = "4.0.0 20041006 (experimental)";
+const char version_string[] = "4.0.0 20041008 (experimental)";
/* This is the location of the online document giving instructions for
reporting bugs. If you distribute a modified version of GCC,
diff --git a/include/ChangeLog b/include/ChangeLog
index f0610f4e5a7..2f256aec763 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,9 @@
+2004-10-07 Bob Wilson <bob.wilson@acm.org>
+
+ * xtensa-config.h (XSHAL_USE_ABSOLUTE_LITERALS,
+ XCHAL_HAVE_PREDICTED_BRANCHES, XCHAL_INST_FETCH_WIDTH): New.
+ (XCHAL_EXTRA_SA_SIZE, XCHAL_EXTRA_SA_ALIGN): Delete.
+
2004-09-13 Aaron W. LaFramboise <aaronavay62@aaronwl.com>
* libiberty.h (basename): Prototype for __MINGW32__.
diff --git a/include/xtensa-config.h b/include/xtensa-config.h
index 4191c368575..4ef5d64270f 100644
--- a/include/xtensa-config.h
+++ b/include/xtensa-config.h
@@ -1,5 +1,5 @@
/* Xtensa configuration settings.
- Copyright (C) 2001,2002,2003 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This program is free software; you can redistribute it and/or modify
@@ -42,6 +42,9 @@
#undef XCHAL_HAVE_L32R
#define XCHAL_HAVE_L32R 1
+#undef XSHAL_USE_ABSOLUTE_LITERALS
+#define XSHAL_USE_ABSOLUTE_LITERALS 0
+
#undef XCHAL_HAVE_MAC16
#define XCHAL_HAVE_MAC16 0
@@ -87,6 +90,9 @@
#undef XCHAL_HAVE_WINDOWED
#define XCHAL_HAVE_WINDOWED 1
+#undef XCHAL_HAVE_PREDICTED_BRANCHES
+#define XCHAL_HAVE_PREDICTED_BRANCHES 0
+
#undef XCHAL_ICACHE_SIZE
#define XCHAL_ICACHE_SIZE 8192
@@ -130,10 +136,7 @@
#define XCHAL_DEBUGLEVEL 4
-#undef XCHAL_EXTRA_SA_SIZE
-#define XCHAL_EXTRA_SA_SIZE 0
-
-#undef XCHAL_EXTRA_SA_ALIGN
-#define XCHAL_EXTRA_SA_ALIGN 1
+#undef XCHAL_INST_FETCH_WIDTH
+#define XCHAL_INST_FETCH_WIDTH 4
#endif /* !XTENSA_CONFIG_H */
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index 86222aa942c..0024ef9499b 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,9 @@
+2004-10-08 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * pch.c (cpp_write_pch_state): Remove variable z as it is not
+ used.
+ (cpp_read_state): Remove unused variables, m, d and mac_count.
+
2004-09-29 Per Bothner <per@bothner.com>
* directives.c (cpp_handle_deferred_pragma): Save, clear and restore
diff --git a/libcpp/pch.c b/libcpp/pch.c
index a343cd857f0..292132139d2 100644
--- a/libcpp/pch.c
+++ b/libcpp/pch.c
@@ -345,8 +345,6 @@ cpp_write_pch_deps (cpp_reader *r, FILE *f)
int
cpp_write_pch_state (cpp_reader *r, FILE *f)
{
- struct macrodef_struct z;
-
if (!r->deps)
r->deps = deps_init ();
@@ -630,9 +628,7 @@ int
cpp_read_state (cpp_reader *r, const char *name, FILE *f,
struct save_macro_data *data)
{
- struct macrodef_struct m;
- struct save_macro_item *d;
- size_t i, mac_count;
+ size_t i;
struct lexer_state old_state;
/* Restore spec_nodes, which will be full of references to the old
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 2560d698fb5..aafa660ccf5 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,18 @@
+2004-10-07 Paul Brook <paul@codesourcery.com>
+
+ * io/transfer.c (finalize_transfer): Free internal streams.
+ * io/unix.c (mem_close): Free stream object.
+
+2004-10-07 Paul Brook <paul@codesourcery.com>
+
+ * intrinsics/string_intrinsics.c (string_verify): Fix off by one
+ error.
+
+2004-10-06 Paul Brook <paul@codesourcery.com>
+
+ PR libfortran/17709
+ * io/transfer.c (data_transfer_init): Reset sf_seen_eor.
+
2004-10-04 Andrew Pinski <pinskia@physics.uc.edu>
* intrinsics/mvbits.c: Commit the file.
diff --git a/libgfortran/intrinsics/string_intrinsics.c b/libgfortran/intrinsics/string_intrinsics.c
index 5d231268ab6..ac70a9bb873 100644
--- a/libgfortran/intrinsics/string_intrinsics.c
+++ b/libgfortran/intrinsics/string_intrinsics.c
@@ -346,17 +346,16 @@ string_verify (GFC_INTEGER_4 slen, const char * str, GFC_INTEGER_4 setlen,
if (back)
{
- last = 0;
+ last = -1;
start = slen - 1;
delta = -1;
}
else
{
- last = slen - 1;
+ last = slen;
start = 0;
delta = 1;
}
- i = 0;
for (; start != last; start += delta)
{
for (i = 0; i < setlen; i++)
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index ca920724b0d..ceff76fc35c 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -1074,6 +1074,7 @@ data_transfer_init (int read_flag)
g.seen_dollar = 0;
g.first_item = 1;
g.item_count = 0;
+ sf_seen_eor = 0;
pre_position ();
@@ -1348,7 +1349,8 @@ next_record (int done)
/* Finalize the current data transfer. For a nonadvancing transfer,
- this means advancing to the next record. */
+ this means advancing to the next record. For internal units close the
+ steam associated with the unit. */
static void
finalize_transfer (void)
@@ -1391,6 +1393,9 @@ finalize_transfer (void)
}
sfree (current_unit->s);
+
+ if (is_internal_unit ())
+ sclose (current_unit->s);
}
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index e55966b2f2a..c8b18fc96fc 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -811,6 +811,7 @@ mem_truncate (unix_stream * s)
static try
mem_close (unix_stream * s)
{
+ free_mem (s);
return SUCCESS;
}
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog
index 3c8017a4767..8f06ee8a758 100644
--- a/libobjc/ChangeLog
+++ b/libobjc/ChangeLog
@@ -1,3 +1,8 @@
+2004-10-08 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * archive.c: Fix all the warnings about passing unsigned char*
+ to char* and the other way too.
+
2004-09-16 Andrew Pinski <pinskia@physics.uc.edu>
PR libobjc/16448
diff --git a/libobjc/archive.c b/libobjc/archive.c
index b6a1ec35932..096ca6931dc 100644
--- a/libobjc/archive.c
+++ b/libobjc/archive.c
@@ -84,7 +84,7 @@ objc_write_unsigned_char (struct objc_typed_stream *stream,
{
unsigned char buf[sizeof (unsigned char) + 1];
int len = __objc_code_unsigned_char (buf, value);
- return (*stream->write) (stream->physical, buf, len);
+ return (*stream->write) (stream->physical, (char*)buf, len);
}
static inline int
@@ -105,7 +105,7 @@ objc_write_char (struct objc_typed_stream *stream, signed char value)
{
unsigned char buf[sizeof (char) + 1];
int len = __objc_code_char (buf, value);
- return (*stream->write) (stream->physical, buf, len);
+ return (*stream->write) (stream->physical, (char*)buf, len);
}
static inline int
@@ -143,7 +143,7 @@ objc_write_unsigned_short (struct objc_typed_stream *stream,
{
unsigned char buf[sizeof (unsigned short) + 1];
int len = __objc_code_unsigned_short (buf, value);
- return (*stream->write) (stream->physical, buf, len);
+ return (*stream->write) (stream->physical, (char*)buf, len);
}
static inline int
@@ -161,7 +161,7 @@ objc_write_short (struct objc_typed_stream *stream, short value)
{
unsigned char buf[sizeof (short) + 1];
int len = __objc_code_short (buf, value);
- return (*stream->write) (stream->physical, buf, len);
+ return (*stream->write) (stream->physical, (char*)buf, len);
}
@@ -199,7 +199,7 @@ objc_write_unsigned_int (struct objc_typed_stream *stream, unsigned int value)
{
unsigned char buf[sizeof (unsigned int) + 1];
int len = __objc_code_unsigned_int (buf, value);
- return (*stream->write) (stream->physical, buf, len);
+ return (*stream->write) (stream->physical, (char*)buf, len);
}
static inline int
@@ -217,7 +217,7 @@ objc_write_int (struct objc_typed_stream *stream, int value)
{
unsigned char buf[sizeof (int) + 1];
int len = __objc_code_int (buf, value);
- return (*stream->write) (stream->physical, buf, len);
+ return (*stream->write) (stream->physical, (char*)buf, len);
}
static inline int
@@ -255,7 +255,7 @@ objc_write_unsigned_long (struct objc_typed_stream *stream,
{
unsigned char buf[sizeof (unsigned long) + 1];
int len = __objc_code_unsigned_long (buf, value);
- return (*stream->write) (stream->physical, buf, len);
+ return (*stream->write) (stream->physical, (char*)buf, len);
}
static inline int
@@ -273,7 +273,7 @@ objc_write_long (struct objc_typed_stream *stream, long value)
{
unsigned char buf[sizeof (long) + 1];
int len = __objc_code_long (buf, value);
- return (*stream->write) (stream->physical, buf, len);
+ return (*stream->write) (stream->physical, (char*)buf, len);
}
@@ -290,8 +290,8 @@ objc_write_string (struct objc_typed_stream *stream,
else /* _B_NINT */
buf[0] = (buf[0]&_B_VALUE)|_B_NSTR;
- if ((*stream->write) (stream->physical, buf, len) != 0)
- return (*stream->write) (stream->physical, string, nbytes);
+ if ((*stream->write) (stream->physical, (char*)buf, len) != 0)
+ return (*stream->write) (stream->physical, (char*)string, nbytes);
else
return 0;
}
@@ -323,12 +323,12 @@ objc_write_register_common (struct objc_typed_stream *stream,
{
buf[0] = _B_RCOMM|0x01;
buf[1] &= _B_VALUE;
- return (*stream->write) (stream->physical, buf, len + 1);
+ return (*stream->write) (stream->physical, (char*)buf, len + 1);
}
else
{
buf[1] = (buf[1]&_B_VALUE)|_B_RCOMM;
- return (*stream->write) (stream->physical, buf + 1, len);
+ return (*stream->write) (stream->physical, (char*)buf + 1, len);
}
}
@@ -341,12 +341,12 @@ objc_write_use_common (struct objc_typed_stream *stream, unsigned long key)
{
buf[0] = _B_UCOMM|0x01;
buf[1] &= _B_VALUE;
- return (*stream->write) (stream->physical, buf, 2);
+ return (*stream->write) (stream->physical, (char*)buf, 2);
}
else
{
buf[1] = (buf[1]&_B_VALUE)|_B_UCOMM;
- return (*stream->write) (stream->physical, buf + 1, len);
+ return (*stream->write) (stream->physical, (char*)buf + 1, len);
}
}
@@ -356,7 +356,7 @@ __objc_write_extension (struct objc_typed_stream *stream, unsigned char code)
if (code <= _B_VALUE)
{
unsigned char buf = code|_B_EXT;
- return (*stream->write) (stream->physical, &buf, 1);
+ return (*stream->write) (stream->physical, (char*)&buf, 1);
}
else
{
@@ -376,7 +376,7 @@ __objc_write_object (struct objc_typed_stream *stream, id object)
__objc_write_extension (stream, _BX_OBJECT);
objc_write_class (stream, object->class_pointer);
(*objc_msg_lookup (object, write_sel)) (object, write_sel, stream);
- return (*stream->write) (stream->physical, &buf, 1);
+ return (*stream->write) (stream->physical, (char*)&buf, 1);
}
else
return objc_write_use_common (stream, 0);
@@ -435,7 +435,7 @@ inline int
__objc_write_class (struct objc_typed_stream *stream, struct objc_class *class)
{
__objc_write_extension (stream, _BX_CLASS);
- objc_write_string_atomic (stream, (char *) class->name,
+ objc_write_string_atomic (stream, (unsigned char *) class->name,
strlen ((char *) class->name));
return objc_write_unsigned_long (stream, class->version);
}
@@ -466,9 +466,9 @@ __objc_write_selector (struct objc_typed_stream *stream, SEL selector)
__objc_write_extension (stream, _BX_SEL);
/* to handle NULL selectors */
if ((SEL)0 == selector)
- return objc_write_string (stream, "", 0);
+ return objc_write_string (stream, (unsigned char*)"", 0);
sel_name = sel_get_name (selector);
- return objc_write_string (stream, sel_name, strlen ((char*)sel_name));
+ return objc_write_string (stream, (unsigned char*)sel_name, strlen ((char*)sel_name));
}
int
@@ -506,7 +506,7 @@ objc_read_char (struct objc_typed_stream *stream, char *val)
{
unsigned char buf;
int len;
- len = (*stream->read) (stream->physical, &buf, 1);
+ len = (*stream->read) (stream->physical, (char*)&buf, 1);
if (len != 0)
{
if ((buf & _B_CODE) == _B_SINT)
@@ -533,13 +533,13 @@ objc_read_unsigned_char (struct objc_typed_stream *stream, unsigned char *val)
{
unsigned char buf;
int len;
- if ((len = (*stream->read) (stream->physical, &buf, 1)))
+ if ((len = (*stream->read) (stream->physical, (char*)&buf, 1)))
{
if ((buf & _B_CODE) == _B_SINT)
(*val) = (buf & _B_VALUE);
else if ((buf & _B_NUMBER) == 1)
- len = (*stream->read) (stream->physical, val, 1);
+ len = (*stream->read) (stream->physical, (char*)val, 1);
else
objc_error (nil, OBJC_ERR_BAD_DATA,
@@ -554,7 +554,7 @@ objc_read_short (struct objc_typed_stream *stream, short *value)
{
unsigned char buf[sizeof (short) + 1];
int len;
- if ((len = (*stream->read) (stream->physical, buf, 1)))
+ if ((len = (*stream->read) (stream->physical, (char*)buf, 1)))
{
if ((buf[0] & _B_CODE) == _B_SINT)
(*value) = (buf[0] & _B_VALUE);
@@ -566,7 +566,7 @@ objc_read_short (struct objc_typed_stream *stream, short *value)
if (nbytes > (int) sizeof (short))
objc_error (nil, OBJC_ERR_BAD_DATA,
"expected short, got bigger (%dbits)", nbytes*8);
- len = (*stream->read) (stream->physical, buf + 1, nbytes);
+ len = (*stream->read) (stream->physical, (char*)buf + 1, nbytes);
(*value) = 0;
while (pos <= nbytes)
(*value) = ((*value)*0x100) + buf[pos++];
@@ -583,7 +583,7 @@ objc_read_unsigned_short (struct objc_typed_stream *stream,
{
unsigned char buf[sizeof (unsigned short) + 1];
int len;
- if ((len = (*stream->read) (stream->physical, buf, 1)))
+ if ((len = (*stream->read) (stream->physical, (char*)buf, 1)))
{
if ((buf[0] & _B_CODE) == _B_SINT)
(*value) = (buf[0] & _B_VALUE);
@@ -595,7 +595,7 @@ objc_read_unsigned_short (struct objc_typed_stream *stream,
if (nbytes > (int) sizeof (short))
objc_error (nil, OBJC_ERR_BAD_DATA,
"expected short, got int or bigger");
- len = (*stream->read) (stream->physical, buf + 1, nbytes);
+ len = (*stream->read) (stream->physical, (char*)buf + 1, nbytes);
(*value) = 0;
while (pos <= nbytes)
(*value) = ((*value)*0x100) + buf[pos++];
@@ -610,7 +610,7 @@ objc_read_int (struct objc_typed_stream *stream, int *value)
{
unsigned char buf[sizeof (int) + 1];
int len;
- if ((len = (*stream->read) (stream->physical, buf, 1)))
+ if ((len = (*stream->read) (stream->physical, (char*)buf, 1)))
{
if ((buf[0] & _B_CODE) == _B_SINT)
(*value) = (buf[0] & _B_VALUE);
@@ -621,7 +621,7 @@ objc_read_int (struct objc_typed_stream *stream, int *value)
int nbytes = buf[0] & _B_NUMBER;
if (nbytes > (int) sizeof (int))
objc_error (nil, OBJC_ERR_BAD_DATA, "expected int, got bigger");
- len = (*stream->read) (stream->physical, buf + 1, nbytes);
+ len = (*stream->read) (stream->physical, (char*)buf + 1, nbytes);
(*value) = 0;
while (pos <= nbytes)
(*value) = ((*value)*0x100) + buf[pos++];
@@ -637,7 +637,7 @@ objc_read_long (struct objc_typed_stream *stream, long *value)
{
unsigned char buf[sizeof (long) + 1];
int len;
- if ((len = (*stream->read) (stream->physical, buf, 1)))
+ if ((len = (*stream->read) (stream->physical, (char*)buf, 1)))
{
if ((buf[0] & _B_CODE) == _B_SINT)
(*value) = (buf[0] & _B_VALUE);
@@ -648,7 +648,7 @@ objc_read_long (struct objc_typed_stream *stream, long *value)
int nbytes = buf[0] & _B_NUMBER;
if (nbytes > (int) sizeof (long))
objc_error (nil, OBJC_ERR_BAD_DATA, "expected long, got bigger");
- len = (*stream->read) (stream->physical, buf + 1, nbytes);
+ len = (*stream->read) (stream->physical, (char*)buf + 1, nbytes);
(*value) = 0;
while (pos <= nbytes)
(*value) = ((*value)*0x100) + buf[pos++];
@@ -670,7 +670,7 @@ __objc_read_nbyte_uint (struct objc_typed_stream *stream,
if (nbytes > sizeof (int))
objc_error (nil, OBJC_ERR_BAD_DATA, "expected int, got bigger");
- len = (*stream->read) (stream->physical, buf, nbytes);
+ len = (*stream->read) (stream->physical, (char*)buf, nbytes);
(*val) = 0;
while (pos < nbytes)
(*val) = ((*val)*0x100) + buf[pos++];
@@ -684,7 +684,7 @@ objc_read_unsigned_int (struct objc_typed_stream *stream,
{
unsigned char buf[sizeof (unsigned int) + 1];
int len;
- if ((len = (*stream->read) (stream->physical, buf, 1)))
+ if ((len = (*stream->read) (stream->physical, (char*)buf, 1)))
{
if ((buf[0] & _B_CODE) == _B_SINT)
(*value) = (buf[0] & _B_VALUE);
@@ -707,7 +707,7 @@ __objc_read_nbyte_ulong (struct objc_typed_stream *stream,
if (nbytes > sizeof (long))
objc_error (nil, OBJC_ERR_BAD_DATA, "expected long, got bigger");
- len = (*stream->read) (stream->physical, buf, nbytes);
+ len = (*stream->read) (stream->physical, (char*)buf, nbytes);
(*val) = 0;
while (pos < nbytes)
(*val) = ((*val)*0x100) + buf[pos++];
@@ -721,7 +721,7 @@ objc_read_unsigned_long (struct objc_typed_stream *stream,
{
unsigned char buf[sizeof (unsigned long) + 1];
int len;
- if ((len = (*stream->read) (stream->physical, buf, 1)))
+ if ((len = (*stream->read) (stream->physical, (char*)buf, 1)))
{
if ((buf[0] & _B_CODE) == _B_SINT)
(*value) = (buf[0] & _B_VALUE);
@@ -739,14 +739,14 @@ objc_read_string (struct objc_typed_stream *stream,
{
unsigned char buf[sizeof (unsigned int) + 1];
int len;
- if ((len = (*stream->read) (stream->physical, buf, 1)))
+ if ((len = (*stream->read) (stream->physical, (char*)buf, 1)))
{
unsigned long key = 0;
if ((buf[0]&_B_CODE) == _B_RCOMM) /* register following */
{
len = __objc_read_nbyte_ulong (stream, (buf[0] & _B_VALUE), &key);
- len = (*stream->read) (stream->physical, buf, 1);
+ len = (*stream->read) (stream->physical, (char*)buf, 1);
}
switch (buf[0]&_B_CODE) {
@@ -800,7 +800,7 @@ objc_read_object (struct objc_typed_stream *stream, id *object)
{
unsigned char buf[sizeof (unsigned int)];
int len;
- if ((len = (*stream->read) (stream->physical, buf, 1)))
+ if ((len = (*stream->read) (stream->physical, (char*)buf, 1)))
{
SEL read_sel = sel_get_any_uid ("read:");
unsigned long key = 0;
@@ -808,7 +808,7 @@ objc_read_object (struct objc_typed_stream *stream, id *object)
if ((buf[0]&_B_CODE) == _B_RCOMM) /* register common */
{
len = __objc_read_nbyte_ulong (stream, (buf[0] & _B_VALUE), &key);
- len = (*stream->read) (stream->physical, buf, 1);
+ len = (*stream->read) (stream->physical, (char*)buf, 1);
}
if (buf[0] == (_B_EXT | _BX_OBJECT))
@@ -830,7 +830,7 @@ objc_read_object (struct objc_typed_stream *stream, id *object)
(*get_imp (class, read_sel)) (*object, read_sel, stream);
/* check null-byte */
- len = (*stream->read) (stream->physical, buf, 1);
+ len = (*stream->read) (stream->physical, (char*)buf, 1);
if (buf[0] != '\0')
objc_error (nil, OBJC_ERR_BAD_DATA,
"expected null-byte, got opcode %c", buf[0]);
@@ -875,19 +875,20 @@ objc_read_class (struct objc_typed_stream *stream, Class *class)
{
unsigned char buf[sizeof (unsigned int)];
int len;
- if ((len = (*stream->read) (stream->physical, buf, 1)))
+ if ((len = (*stream->read) (stream->physical, (char*)buf, 1)))
{
unsigned long key = 0;
if ((buf[0]&_B_CODE) == _B_RCOMM) /* register following */
{
len = __objc_read_nbyte_ulong (stream, (buf[0] & _B_VALUE), &key);
- len = (*stream->read) (stream->physical, buf, 1);
+ len = (*stream->read) (stream->physical, (char*)buf, 1);
}
if (buf[0] == (_B_EXT | _BX_CLASS))
{
- char *class_name = "";
+ char temp[1] = "";
+ char *class_name = temp;
unsigned long version;
/* get class */
@@ -926,19 +927,20 @@ objc_read_selector (struct objc_typed_stream *stream, SEL* selector)
{
unsigned char buf[sizeof (unsigned int)];
int len;
- if ((len = (*stream->read) (stream->physical, buf, 1)))
+ if ((len = (*stream->read) (stream->physical, (char*)buf, 1)))
{
unsigned long key = 0;
if ((buf[0]&_B_CODE) == _B_RCOMM) /* register following */
{
len = __objc_read_nbyte_ulong (stream, (buf[0] & _B_VALUE), &key);
- len = (*stream->read) (stream->physical, buf, 1);
+ len = (*stream->read) (stream->physical, (char*)buf, 1);
}
if (buf[0] == (_B_EXT|_BX_SEL)) /* selector! */
{
- char *selector_name = "";
+ char temp[1] = "";
+ char *selector_name = temp;
/* get selector */
len = objc_read_string (stream, &selector_name);
@@ -1032,11 +1034,11 @@ objc_write_type (TypedStream *stream, const char *type, const void *data)
case _C_CHARPTR:
return objc_write_string (stream,
- *(char **) data, strlen (*(char **) data));
+ *(unsigned char **) data, strlen (*(char **) data));
break;
case _C_ATOM:
- return objc_write_string_atomic (stream, *(char **) data,
+ return objc_write_string_atomic (stream, *(unsigned char **) data,
strlen (*(char **) data));
break;
@@ -1241,15 +1243,15 @@ objc_write_types (TypedStream *stream, const char *type, ...)
case _C_CHARPTR:
{
- char **str = va_arg (args, char **);
- res = objc_write_string (stream, *str, strlen (*str));
+ unsigned char **str = va_arg (args, unsigned char **);
+ res = objc_write_string (stream, *str, strlen ((char*)*str));
}
break;
case _C_ATOM:
{
- char **str = va_arg (args, char **);
- res = objc_write_string_atomic (stream, *str, strlen (*str));
+ unsigned char **str = va_arg (args, unsigned char **);
+ res = objc_write_string_atomic (stream, *str, strlen ((char*)*str));
}
break;
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 9509eba9237..f434a830483 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,75 @@
+2004-10-07 Phil Edwards <phil@codesourcery.com>
+
+ * testsuite/lib/libstdc++.exp: Update list of undefined functions.
+
+2004-10-07 Paolo Carlini <pcarlini@suse.de>
+
+ * include/bits/list.tcc (operator=): Avoid iterator postincrement.
+ * include/bits/stl_tree.h (erase(iterator, iterator)): Likewise.
+
+2004-10-07 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/tr1: New.
+ * include/tr1/array: New.
+ * include/Makefile.am (tr1_headers): New.
+ (stamp-tr1): New.
+ (install-headers): New.
+ (allstamped): Add stamp-tr1.
+
+ * include/ext/array_allocator.h: New.
+ * include/Makefile.am: Add.
+ * include/Makefile.in: Regenerate.
+ * testsuite/ext/array_allocator/1.cc: New.
+ * testsuite/ext/array_allocator/2.cc: New.
+
+2004-10-07 Richard Earnshaw <rearnsha@arm.com>
+
+ * testsuite/lib/libstdc++.exp (libstdc++_exit): New proc.
+
+2004-10-07 Roger Sayle <roger@eyesopen.com>
+
+ PR libstdc++/17850
+ * configure.ac: Newlib does not provide strtold.
+ * configure: Regenerate.
+
+2004-10-06 Benjamin Kosnik <bkoz@redhat.com>
+
+ * acinclude.m4 (GLIBCXX_ENABLE_THREADS): Set enable_thread.
+ (GLIBCXX_CONFIGURE_TESTSUITE): Use it.
+ * configure: Regenerated.
+ * testsuite/Makefile.am (CLEANFILES): Add TEST for
+ check-performance executables.
+ (stamp_thread): New.
+ (all-local): Use it.
+ * testsuite/Makefile.in: Regenerate.
+ * scripts/create_testsuite_files: Filter thread tests.
+
+ * testsuite/thread/pthread1.cc: Remove macro conditionals: this
+ file will only be run by thread enabled configurations.
+ * testsuite/thread/pthread7-rope.cc: Same, add rope_type typedef.
+ * testsuite/thread/pthread6.cc: Same.
+ * testsuite/thread/pthread5.cc: Same.
+ * testsuite/thread/pthread4.cc: Same.
+ * testsuite/thread/pthread3.cc: Same.
+ * testsuite/thread/pthread2.cc: Same.
+
+ * testsuite/ext/mt_allocator/instantiate.cc: Add in __GTHREADS guard.
+ * testsuite/ext/mt_allocator/deallocate_global-1.cc: Move to...
+ * testsuite/ext/mt_allocator/deallocate_global_thread-1.cc: ...here.
+ * testsuite/ext/mt_allocator/deallocate_global-3.cc: Move to...
+ * testsuite/ext/mt_allocator/deallocate_global_thread-3.cc: ...here.
+ * testsuite/ext/mt_allocator/deallocate_local-1.cc: Move to...
+ * testsuite/ext/mt_allocator/deallocate_local_thread-1.cc: ...here.
+ * testsuite/ext/mt_allocator/deallocate_local-3.cc: Move to...
+ * testsuite/ext/mt_allocator/deallocate_local_thread-3.cc: ...here.
+
+2004-10-06 Benjamin Kosnik <bkoz@redhat.com>
+ Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/17780
+ * src/mt_allocator.cc (__pool<true>::_M_reserve_block): Revert
+ to old locking order.
+
2004-10-06 Paolo Carlini <pcarlini@suse.de>
* include/std/std_sstream.h (_M_sync): When the caller is
diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in
index a25d5597c09..06d8eafadd2 100644
--- a/libstdc++-v3/Makefile.in
+++ b/libstdc++-v3/Makefile.in
@@ -150,6 +150,8 @@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
GLIBCXX_TEST_ABI_FALSE = @GLIBCXX_TEST_ABI_FALSE@
GLIBCXX_TEST_ABI_TRUE = @GLIBCXX_TEST_ABI_TRUE@
+GLIBCXX_TEST_THREAD_FALSE = @GLIBCXX_TEST_THREAD_FALSE@
+GLIBCXX_TEST_THREAD_TRUE = @GLIBCXX_TEST_THREAD_TRUE@
GLIBCXX_TEST_WCHAR_T_FALSE = @GLIBCXX_TEST_WCHAR_T_FALSE@
GLIBCXX_TEST_WCHAR_T_TRUE = @GLIBCXX_TEST_WCHAR_T_TRUE@
INSTALL_DATA = @INSTALL_DATA@
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 6c9f13aa185..0bd4aa645d9 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -620,6 +620,8 @@ dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
dnl
dnl Sets:
dnl enable_abi_check / GLIBCXX_TEST_ABI
+dnl GLIBCXX_TEST_WCHAR_T
+dnl GLIBCXX_TEST_THREAD
dnl Substs:
dnl baseline_dir
dnl
@@ -652,6 +654,7 @@ AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
AC_SUBST(baseline_dir)
GLIBCXX_CONDITIONAL(GLIBCXX_TEST_WCHAR_T, test $enable_wchar_t = yes)
+ GLIBCXX_CONDITIONAL(GLIBCXX_TEST_THREAD, test $enable_thread = yes)
GLIBCXX_CONDITIONAL(GLIBCXX_TEST_ABI, test $enable_abi_check = yes)
])
@@ -1708,8 +1711,10 @@ AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
AC_MSG_RESULT([$target_thread_file])
+ enable_thread=no
if test $target_thread_file != single; then
AC_DEFINE(HAVE_GTHR_DEFAULT)
+ enable_thread=yes
fi
glibcxx_thread_h=gthr-$target_thread_file.h
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 0a8f404a607..b2ca698a0d7 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -309,7 +309,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libtool_VERSION multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar glibcxx_builddir glibcxx_srcdir toplevel_srcdir CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LN_S AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOL CXXCPP CPPFLAGS enable_shared enable_static GLIBCXX_HOSTED_TRUE GLIBCXX_HOSTED_FALSE GLIBCXX_BUILD_PCH_TRUE GLIBCXX_BUILD_PCH_FALSE glibcxx_PCHFLAGS CSTDIO_H BASIC_FILE_H BASIC_FILE_CC CPP EGREP check_msgfmt glibcxx_MOFILES glibcxx_POFILES glibcxx_localedir USE_NLS CLOCALE_H CCODECVT_H CMESSAGES_H CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_H CTIME_CC CLOCALE_CC CLOCALE_INTERNAL_H ALLOCATOR_H ALLOCATOR_NAME C_INCLUDE_DIR GLIBCXX_C_HEADERS_C_TRUE GLIBCXX_C_HEADERS_C_FALSE GLIBCXX_C_HEADERS_C_STD_TRUE GLIBCXX_C_HEADERS_C_STD_FALSE GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE glibcxx_thread_h DEBUG_FLAGS GLIBCXX_BUILD_DEBUG_TRUE GLIBCXX_BUILD_DEBUG_FALSE EXTRA_CXX_FLAGS WERROR SECTION_FLAGS SECTION_LDFLAGS OPT_LDFLAGS LIBMATHOBJS LIBICONV SYMVER_MAP port_specific_symbol_files GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE baseline_dir GLIBCXX_TEST_WCHAR_T_TRUE GLIBCXX_TEST_WCHAR_T_FALSE GLIBCXX_TEST_ABI_TRUE GLIBCXX_TEST_ABI_FALSE ATOMICITY_SRCDIR ATOMIC_WORD_SRCDIR ABI_TWEAKS_SRCDIR OS_INC_SRCDIR glibcxx_prefixdir gxx_include_dir glibcxx_toolexecdir glibcxx_toolexeclibdir GLIBCXX_INCLUDES TOPLEVEL_INCLUDES OPTIMIZE_CXXFLAGS WARN_FLAGS LIBSUPCXX_PICFLAGS LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libtool_VERSION multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar glibcxx_builddir glibcxx_srcdir toplevel_srcdir CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LN_S AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOL CXXCPP CPPFLAGS enable_shared enable_static GLIBCXX_HOSTED_TRUE GLIBCXX_HOSTED_FALSE GLIBCXX_BUILD_PCH_TRUE GLIBCXX_BUILD_PCH_FALSE glibcxx_PCHFLAGS CSTDIO_H BASIC_FILE_H BASIC_FILE_CC CPP EGREP check_msgfmt glibcxx_MOFILES glibcxx_POFILES glibcxx_localedir USE_NLS CLOCALE_H CCODECVT_H CMESSAGES_H CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_H CTIME_CC CLOCALE_CC CLOCALE_INTERNAL_H ALLOCATOR_H ALLOCATOR_NAME C_INCLUDE_DIR GLIBCXX_C_HEADERS_C_TRUE GLIBCXX_C_HEADERS_C_FALSE GLIBCXX_C_HEADERS_C_STD_TRUE GLIBCXX_C_HEADERS_C_STD_FALSE GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE glibcxx_thread_h DEBUG_FLAGS GLIBCXX_BUILD_DEBUG_TRUE GLIBCXX_BUILD_DEBUG_FALSE EXTRA_CXX_FLAGS WERROR SECTION_FLAGS SECTION_LDFLAGS OPT_LDFLAGS LIBMATHOBJS LIBICONV SYMVER_MAP port_specific_symbol_files GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE baseline_dir GLIBCXX_TEST_WCHAR_T_TRUE GLIBCXX_TEST_WCHAR_T_FALSE GLIBCXX_TEST_THREAD_TRUE GLIBCXX_TEST_THREAD_FALSE GLIBCXX_TEST_ABI_TRUE GLIBCXX_TEST_ABI_FALSE ATOMICITY_SRCDIR ATOMIC_WORD_SRCDIR ABI_TWEAKS_SRCDIR OS_INC_SRCDIR glibcxx_prefixdir gxx_include_dir glibcxx_toolexecdir glibcxx_toolexeclibdir GLIBCXX_INCLUDES TOPLEVEL_INCLUDES OPTIMIZE_CXXFLAGS WARN_FLAGS LIBSUPCXX_PICFLAGS LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -7728,11 +7728,13 @@ echo $ECHO_N "checking for thread model used by GCC... $ECHO_C" >&6
echo "$as_me:$LINENO: result: $target_thread_file" >&5
echo "${ECHO_T}$target_thread_file" >&6
+ enable_thread=no
if test $target_thread_file != single; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_GTHR_DEFAULT 1
_ACEOF
+ enable_thread=yes
fi
glibcxx_thread_h=gthr-$target_thread_file.h
@@ -30989,10 +30991,6 @@ _ACEOF
#define HAVE_STRTOF 1
_ACEOF
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRTOLD 1
-_ACEOF
-
# AC_FUNC_MMAP
cat >>confdefs.h <<\_ACEOF
#define HAVE_MMAP 1
@@ -97355,6 +97353,7 @@ done
+
# Propagate the target-specific source directories through the build chain.
ATOMICITY_SRCDIR=config/${atomicity_dir}
ATOMIC_WORD_SRCDIR=config/${atomic_word_dir}
@@ -97460,6 +97459,17 @@ fi
+if test $enable_thread = yes; then
+ GLIBCXX_TEST_THREAD_TRUE=
+ GLIBCXX_TEST_THREAD_FALSE='#'
+else
+ GLIBCXX_TEST_THREAD_TRUE='#'
+ GLIBCXX_TEST_THREAD_FALSE=
+fi
+
+
+
+
if test $enable_abi_check = yes; then
GLIBCXX_TEST_ABI_TRUE=
GLIBCXX_TEST_ABI_FALSE='#'
@@ -97828,6 +97838,13 @@ echo "$as_me: error: conditional \"GLIBCXX_TEST_WCHAR_T\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
+if test -z "${GLIBCXX_TEST_THREAD_TRUE}" && test -z "${GLIBCXX_TEST_THREAD_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"GLIBCXX_TEST_THREAD\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"GLIBCXX_TEST_THREAD\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
if test -z "${GLIBCXX_TEST_ABI_TRUE}" && test -z "${GLIBCXX_TEST_ABI_FALSE}"; then
{ { echo "$as_me:$LINENO: error: conditional \"GLIBCXX_TEST_ABI\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
@@ -98508,6 +98525,8 @@ s,@GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@,$GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE,;t
s,@baseline_dir@,$baseline_dir,;t t
s,@GLIBCXX_TEST_WCHAR_T_TRUE@,$GLIBCXX_TEST_WCHAR_T_TRUE,;t t
s,@GLIBCXX_TEST_WCHAR_T_FALSE@,$GLIBCXX_TEST_WCHAR_T_FALSE,;t t
+s,@GLIBCXX_TEST_THREAD_TRUE@,$GLIBCXX_TEST_THREAD_TRUE,;t t
+s,@GLIBCXX_TEST_THREAD_FALSE@,$GLIBCXX_TEST_THREAD_FALSE,;t t
s,@GLIBCXX_TEST_ABI_TRUE@,$GLIBCXX_TEST_ABI_TRUE,;t t
s,@GLIBCXX_TEST_ABI_FALSE@,$GLIBCXX_TEST_ABI_FALSE,;t t
s,@ATOMICITY_SRCDIR@,$ATOMICITY_SRCDIR,;t t
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
index 2a838f1ebdc..a11f034120b 100644
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -194,7 +194,6 @@ else
# GLIBCXX_CHECK_STDLIB_SUPPORT
AC_DEFINE(HAVE_STRTOF)
- AC_DEFINE(HAVE_STRTOLD)
# AC_FUNC_MMAP
AC_DEFINE(HAVE_MMAP)
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 2ab53ee59d3..ffa16d5aaf8 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -201,6 +201,7 @@ ext_srcdir = ${glibcxx_srcdir}/include/ext
ext_builddir = ./ext
ext_headers = \
${ext_srcdir}/algorithm \
+ ${ext_srcdir}/array_allocator.h \
${ext_srcdir}/bitmap_allocator.h \
${ext_srcdir}/debug_allocator.h \
${ext_srcdir}/enc_filebuf.h \
@@ -224,6 +225,11 @@ ext_headers = \
${ext_srcdir}/hash_fun.h \
${ext_srcdir}/hashtable.h
+tr1_srcdir = ${glibcxx_srcdir}/include/tr1
+tr1_builddir = ./tr1
+tr1_headers = \
+ ${tr1_srcdir}/array
+
# This is the common subset of files that all three "C" header models use.
c_base_srcdir = $(C_INCLUDE_DIR)
c_base_builddir = .
@@ -380,7 +386,7 @@ endif
# CLEANFILES and all-local are kept up-to-date.
allstamped = \
stamp-std stamp-bits stamp-c_base stamp-c_compatibility \
- stamp-backward stamp-ext stamp-debug stamp-host
+ stamp-backward stamp-ext stamp-tr1 stamp-debug stamp-host
# List of all files that are created by explicit building, editing, or
# catenation.
@@ -459,6 +465,16 @@ stamp-ext: ${ext_headers}
fi ;\
$(STAMP) stamp-ext
+
+stamp-tr1: ${tr1_headers}
+ @if [ ! -d "${tr1_builddir}" ]; then \
+ mkdir -p ${tr1_builddir} ;\
+ fi ;\
+ if [ ! -f stamp-tr1 ]; then \
+ (cd ${tr1_builddir} && $(LN_S) $? . || true) ;\
+ fi ;\
+ $(STAMP) stamp-tr1
+
stamp-debug: ${debug_headers}
@if [ ! -d "${debug_builddir}" ]; then \
mkdir -p ${debug_builddir} ;\
@@ -596,6 +612,9 @@ install-headers:
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${ext_builddir}
for file in ${ext_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${ext_builddir}; done
+ $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${tr1_builddir}
+ for file in ${tr1_headers}; do \
+ $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${tr1_builddir}; done
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${c_base_builddir}
for file in ${c_base_headers_rename}; do \
$(INSTALL_DATA) ${c_base_builddir}/$${file} $(DESTDIR)${gxx_include_dir}/${c_base_builddir}; done
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index b6f4be72c69..4a2ec864dd8 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -117,6 +117,8 @@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
GLIBCXX_TEST_ABI_FALSE = @GLIBCXX_TEST_ABI_FALSE@
GLIBCXX_TEST_ABI_TRUE = @GLIBCXX_TEST_ABI_TRUE@
+GLIBCXX_TEST_THREAD_FALSE = @GLIBCXX_TEST_THREAD_FALSE@
+GLIBCXX_TEST_THREAD_TRUE = @GLIBCXX_TEST_THREAD_TRUE@
GLIBCXX_TEST_WCHAR_T_FALSE = @GLIBCXX_TEST_WCHAR_T_FALSE@
GLIBCXX_TEST_WCHAR_T_TRUE = @GLIBCXX_TEST_WCHAR_T_TRUE@
INSTALL_DATA = @INSTALL_DATA@
@@ -416,6 +418,7 @@ ext_srcdir = ${glibcxx_srcdir}/include/ext
ext_builddir = ./ext
ext_headers = \
${ext_srcdir}/algorithm \
+ ${ext_srcdir}/array_allocator.h \
${ext_srcdir}/bitmap_allocator.h \
${ext_srcdir}/debug_allocator.h \
${ext_srcdir}/enc_filebuf.h \
@@ -439,6 +442,11 @@ ext_headers = \
${ext_srcdir}/hash_fun.h \
${ext_srcdir}/hashtable.h
+tr1_srcdir = ${glibcxx_srcdir}/include/tr1
+tr1_builddir = ./tr1
+tr1_headers = \
+ ${tr1_srcdir}/array
+
# This is the common subset of files that all three "C" header models use.
c_base_srcdir = $(C_INCLUDE_DIR)
@@ -591,7 +599,7 @@ PCHFLAGS = -Winvalid-pch -Wno-deprecated -x c++-header $(CXXFLAGS)
# CLEANFILES and all-local are kept up-to-date.
allstamped = \
stamp-std stamp-bits stamp-c_base stamp-c_compatibility \
- stamp-backward stamp-ext stamp-debug stamp-host
+ stamp-backward stamp-ext stamp-tr1 stamp-debug stamp-host
# List of all files that are created by explicit building, editing, or
@@ -839,6 +847,15 @@ stamp-ext: ${ext_headers}
fi ;\
$(STAMP) stamp-ext
+stamp-tr1: ${tr1_headers}
+ @if [ ! -d "${tr1_builddir}" ]; then \
+ mkdir -p ${tr1_builddir} ;\
+ fi ;\
+ if [ ! -f stamp-tr1 ]; then \
+ (cd ${tr1_builddir} && $(LN_S) $? . || true) ;\
+ fi ;\
+ $(STAMP) stamp-tr1
+
stamp-debug: ${debug_headers}
@if [ ! -d "${debug_builddir}" ]; then \
mkdir -p ${debug_builddir} ;\
@@ -970,6 +987,9 @@ install-headers:
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${ext_builddir}
for file in ${ext_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${ext_builddir}; done
+ $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${tr1_builddir}
+ for file in ${tr1_headers}; do \
+ $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${tr1_builddir}; done
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${c_base_builddir}
for file in ${c_base_headers_rename}; do \
$(INSTALL_DATA) ${c_base_builddir}/$${file} $(DESTDIR)${gxx_include_dir}/${c_base_builddir}; done
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index 7142416120f..0a0950d110b 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -35,7 +35,7 @@
#include <bits/os_defines.h>
// The current version of the C++ library in compressed ISO date format.
-#define __GLIBCXX__ 20041006
+#define __GLIBCXX__ 20041008
// Allow use of "export template." This is currently not a feature
// that g++ supports.
diff --git a/libstdc++-v3/include/bits/list.tcc b/libstdc++-v3/include/bits/list.tcc
index 851c4ad70cc..59f9d1ad703 100644
--- a/libstdc++-v3/include/bits/list.tcc
+++ b/libstdc++-v3/include/bits/list.tcc
@@ -125,8 +125,9 @@ namespace _GLIBCXX_STD
iterator __last1 = end();
const_iterator __first2 = __x.begin();
const_iterator __last2 = __x.end();
- while (__first1 != __last1 && __first2 != __last2)
- *__first1++ = *__first2++;
+ for (; __first1 != __last1 && __first2 != __last2;
+ ++__first1, ++__first2)
+ *__first1 = *__first2;
if (__first2 == __last2)
erase(__first1, __last1);
else
diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h
index 5e21ccdbb42..0b47dd2de73 100644
--- a/libstdc++-v3/include/bits/stl_tree.h
+++ b/libstdc++-v3/include/bits/stl_tree.h
@@ -1087,7 +1087,8 @@ namespace std
if (__first == begin() && __last == end())
clear();
else
- while (__first != __last) erase(__first++);
+ for (; __first != __last; ++__first)
+ erase(__first);
}
template<typename _Key, typename _Val, typename _KeyOfValue,
diff --git a/libstdc++-v3/include/ext/array_allocator.h b/libstdc++-v3/include/ext/array_allocator.h
new file mode 100644
index 00000000000..22564c821d9
--- /dev/null
+++ b/libstdc++-v3/include/ext/array_allocator.h
@@ -0,0 +1,141 @@
+// array allocator -*- C++ -*-
+
+// 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.
+
+#ifndef _ARRAY_ALLOCATOR_H
+#define _ARRAY_ALLOCATOR_H 1
+
+#include <cstddef>
+#include <new>
+#include <tr1/array>
+
+namespace __gnu_cxx
+{
+ template<typename _Tp>
+ class array_allocator_base
+ {
+ public:
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef _Tp* pointer;
+ typedef const _Tp* const_pointer;
+ typedef _Tp& reference;
+ typedef const _Tp& const_reference;
+ typedef _Tp value_type;
+
+ pointer
+ address(reference __x) const { return &__x; }
+
+ const_pointer
+ address(const_reference __x) const { return &__x; }
+
+ void
+ deallocate(pointer __p, size_type)
+ {
+ // Does nothing.
+ }
+
+ size_type
+ max_size() const throw()
+ { return size_t(-1) / sizeof(_Tp); }
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 402. wrong new expression in [some_] allocator::construct
+ void
+ construct(pointer __p, const _Tp& __val)
+ { ::new(__p) value_type(__val); }
+
+ void
+ destroy(pointer __p) { __p->~_Tp(); }
+ };
+
+ /**
+ * @brief An allocator that uses previously allocated memory.
+ * This memory can be externally, globally, or otherwise allocated.
+ *
+ * (See @link Allocators allocators info @endlink for more.)
+ */
+ template<typename _Tp, typename _Array = std::tr1::array<_Tp> >
+ class array_allocator : public array_allocator_base<_Tp>
+ {
+ public:
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef _Tp* pointer;
+ typedef const _Tp* const_pointer;
+ typedef _Tp& reference;
+ typedef const _Tp& const_reference;
+ typedef _Tp value_type;
+
+ typedef _Array array_type;
+
+ array_type* _M_array;
+
+ template<typename _Tp1, typename _Array1 = _Array>
+ struct rebind
+ { typedef array_allocator<_Tp1, _Array1> other; };
+
+ array_allocator(array_type* __array = NULL) throw()
+ : _M_array(__array)
+ { }
+
+ array_allocator(const array_allocator& __o) throw()
+ : _M_array(__o._M_array) { }
+
+ template<typename _Tp1, typename _Array1>
+ array_allocator(const array_allocator<_Tp1, _Array1>&) throw()
+ : _M_array(NULL) { }
+
+ ~array_allocator() throw() { }
+
+ pointer
+ allocate(size_type __n, const void* = 0)
+ {
+ static size_type used;
+ if (__builtin_expect(used > array_type::_S_index, false))
+ throw std::bad_alloc();
+ pointer __ret = _M_array->begin() + used;
+ used += __n;
+ return __ret;
+ }
+ };
+
+ template<typename _Tp, typename _Array>
+ inline bool
+ operator==(const array_allocator<_Tp, _Array>&,
+ const array_allocator<_Tp, _Array>&)
+ { return true; }
+
+ template<typename _Tp, typename _Array>
+ inline bool
+ operator!=(const array_allocator<_Tp, _Array>&,
+ const array_allocator<_Tp, _Array>&)
+ { return false; }
+} // namespace __gnu_cxx
+
+#endif
diff --git a/libstdc++-v3/include/tr1/array b/libstdc++-v3/include/tr1/array
new file mode 100644
index 00000000000..e41fced7f3b
--- /dev/null
+++ b/libstdc++-v3/include/tr1/array
@@ -0,0 +1,200 @@
+// class template array -*- C++ -*-
+
+// 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.
+
+#ifndef _ARRAY
+#define _ARRAY 1
+
+#include <new>
+#include <iterator>
+
+//namespace std::tr1
+namespace std
+{
+namespace tr1
+{
+ // [6.2.2] Class template array template
+ // Requires complete type _Tp.
+ // Use of char array allows _Tp to skirt default constructable requirement.
+ template<typename _Tp, size_t _Nm = 1>
+ struct array
+ {
+ enum { _S_index = _Nm };
+
+ typedef _Tp value_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ typedef value_type* iterator;
+ typedef const value_type* const_iterator;
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef char layout_type[sizeof(_Tp)] __attribute__ ((aligned(__alignof__(_Tp))));
+
+ layout_type _M_instance[_Nm];
+
+ // No explicit construct/copy/destroy for aggregate type.
+
+ void
+ assign(const value_type& u);
+
+ void
+ swap(array&);
+
+ // Iterators.
+ iterator
+ begin()
+ { return reinterpret_cast<iterator>(&_M_instance[0]); }
+
+ const_iterator
+ begin() const
+ { return reinterpret_cast<const_iterator>(&_M_instance[0]); }
+
+ iterator
+ end()
+ { return reinterpret_cast<iterator>(&_M_instance[_S_index - 1]); }
+
+ const_iterator
+ end() const
+ { return reinterpret_cast<iterator>(&_M_instance[_S_index - 1]); }
+
+ reverse_iterator
+ rbegin()
+ { return reverse_iterator(this->end()); }
+
+ const_reverse_iterator
+ rbegin() const
+ { return const_reverse_iterator(this->end()); }
+
+ reverse_iterator
+ rend()
+ { return reverse_iterator(this->begin()); }
+
+ const_reverse_iterator
+ rend() const
+ { return const_reverse_iterator(this->begin()); }
+
+ // Capacity.
+ size_type
+ size() const { return _S_index; }
+
+ size_type
+ max_size() const
+ {
+ // XXX Not specified. Unnecessary, this is fixed-size.
+ return _S_index;
+ }
+
+ bool
+ empty() const;
+
+ // Element access.
+ reference
+ operator[](size_type __n)
+ { return reinterpret_cast<reference>(_M_instance[__n]); }
+
+ const_reference
+ operator[](size_type __n) const
+ { return reinterpret_cast<const_reference>(_M_instance[__n]); }
+
+ const_reference
+ at(size_type __n) const
+ {
+ if (__builtin_expect(__n > _S_index, false))
+ throw std::bad_alloc();
+ return reinterpret_cast<const_reference>(_M_instance[__n]);
+ }
+
+ reference
+ at(size_type __n)
+ {
+ if (__builtin_expect(__n > _S_index, false))
+ throw std::bad_alloc();
+ return reinterpret_cast<reference>(_M_instance[__n]);
+ }
+
+ reference
+ front();
+
+ const_reference
+ front() const;
+
+ reference
+ back();
+
+ const_reference
+ back() const;
+
+ _Tp*
+ data();
+
+ const _Tp*
+ data() const;
+ };
+
+ // Array comparisons.
+ template<typename _Tp, size_t _Nm>
+ bool
+ operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+ { return false; }
+
+ template<typename _Tp, size_t _Nm>
+ bool
+ operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+ { return !(__one == __two); }
+
+ template<typename _Tp, size_t _Nm>
+ bool
+ operator<(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+ { return false; }
+
+ template<typename _Tp, size_t _Nm>
+ bool
+ operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+ { return false; }
+
+ template<typename _Tp, size_t _Nm>
+ bool
+ operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+ { return false; }
+
+ template<typename _Tp, size_t _Nm>
+ bool
+ operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+ { return false; }
+
+ // [6.2.2.2] Specialized algorithms.
+ template<typename _Tp, size_t _Nm>
+ void
+ swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two)
+ { swap_ranges(__one.begin(), __one.end(), __two.begin()); }
+} // namespace std::tr1
+}
+
+#endif
diff --git a/libstdc++-v3/libmath/Makefile.in b/libstdc++-v3/libmath/Makefile.in
index 87b0dae8530..03b598be469 100644
--- a/libstdc++-v3/libmath/Makefile.in
+++ b/libstdc++-v3/libmath/Makefile.in
@@ -134,6 +134,8 @@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
GLIBCXX_TEST_ABI_FALSE = @GLIBCXX_TEST_ABI_FALSE@
GLIBCXX_TEST_ABI_TRUE = @GLIBCXX_TEST_ABI_TRUE@
+GLIBCXX_TEST_THREAD_FALSE = @GLIBCXX_TEST_THREAD_FALSE@
+GLIBCXX_TEST_THREAD_TRUE = @GLIBCXX_TEST_THREAD_TRUE@
GLIBCXX_TEST_WCHAR_T_FALSE = @GLIBCXX_TEST_WCHAR_T_FALSE@
GLIBCXX_TEST_WCHAR_T_TRUE = @GLIBCXX_TEST_WCHAR_T_TRUE@
INSTALL_DATA = @INSTALL_DATA@
diff --git a/libstdc++-v3/libsupc++/Makefile.in b/libstdc++-v3/libsupc++/Makefile.in
index 765d4c9b354..9c622e04451 100644
--- a/libstdc++-v3/libsupc++/Makefile.in
+++ b/libstdc++-v3/libsupc++/Makefile.in
@@ -173,6 +173,8 @@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
GLIBCXX_TEST_ABI_FALSE = @GLIBCXX_TEST_ABI_FALSE@
GLIBCXX_TEST_ABI_TRUE = @GLIBCXX_TEST_ABI_TRUE@
+GLIBCXX_TEST_THREAD_FALSE = @GLIBCXX_TEST_THREAD_FALSE@
+GLIBCXX_TEST_THREAD_TRUE = @GLIBCXX_TEST_THREAD_TRUE@
GLIBCXX_TEST_WCHAR_T_FALSE = @GLIBCXX_TEST_WCHAR_T_FALSE@
GLIBCXX_TEST_WCHAR_T_TRUE = @GLIBCXX_TEST_WCHAR_T_TRUE@
INSTALL_DATA = @INSTALL_DATA@
diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in
index 3694b33749f..edd8f270b3b 100644
--- a/libstdc++-v3/po/Makefile.in
+++ b/libstdc++-v3/po/Makefile.in
@@ -117,6 +117,8 @@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
GLIBCXX_TEST_ABI_FALSE = @GLIBCXX_TEST_ABI_FALSE@
GLIBCXX_TEST_ABI_TRUE = @GLIBCXX_TEST_ABI_TRUE@
+GLIBCXX_TEST_THREAD_FALSE = @GLIBCXX_TEST_THREAD_FALSE@
+GLIBCXX_TEST_THREAD_TRUE = @GLIBCXX_TEST_THREAD_TRUE@
GLIBCXX_TEST_WCHAR_T_FALSE = @GLIBCXX_TEST_WCHAR_T_FALSE@
GLIBCXX_TEST_WCHAR_T_TRUE = @GLIBCXX_TEST_WCHAR_T_TRUE@
INSTALL_DATA = @INSTALL_DATA@
diff --git a/libstdc++-v3/scripts/create_testsuite_files b/libstdc++-v3/scripts/create_testsuite_files
index 50f2e13f856..582f8f5b0ac 100755
--- a/libstdc++-v3/scripts/create_testsuite_files
+++ b/libstdc++-v3/scripts/create_testsuite_files
@@ -47,15 +47,22 @@ else
grep -v wchar_t $tmp.1 > $tmp.2
fi
+# If the library is not configured to support threads, don't run those tests.
+if test -f "$outdir/testsuite_thread"; then
+ mv $tmp.2 $tmp.3
+else
+ grep -v thread $tmp.2 > $tmp.3
+fi
+
# Now filter out classes of tests. These classes are run using special rules.
-grep _xin $tmp.2 > $tests_file_inter
-grep -v _xin $tmp.2 > $tmp.3
+grep _xin $tmp.3 > $tests_file_inter
+grep -v _xin $tmp.3 > $tmp.4
-grep performance $tmp.3 > $tests_file_perf
-grep -v performance $tmp.3 > $tmp.4
+grep performance $tmp.4 > $tests_file_perf
+grep -v performance $tmp.4 > $tmp.5
# ...more filters go here.
-cp $tmp.4 $tests_file_normal
+cp $tmp.5 $tests_file_normal
rm $tmp*
exit 0
diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in
index 91644529c25..ba9df3c4999 100644
--- a/libstdc++-v3/src/Makefile.in
+++ b/libstdc++-v3/src/Makefile.in
@@ -152,6 +152,8 @@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
GLIBCXX_TEST_ABI_FALSE = @GLIBCXX_TEST_ABI_FALSE@
GLIBCXX_TEST_ABI_TRUE = @GLIBCXX_TEST_ABI_TRUE@
+GLIBCXX_TEST_THREAD_FALSE = @GLIBCXX_TEST_THREAD_FALSE@
+GLIBCXX_TEST_THREAD_TRUE = @GLIBCXX_TEST_THREAD_TRUE@
GLIBCXX_TEST_WCHAR_T_FALSE = @GLIBCXX_TEST_WCHAR_T_FALSE@
GLIBCXX_TEST_WCHAR_T_TRUE = @GLIBCXX_TEST_WCHAR_T_TRUE@
INSTALL_DATA = @INSTALL_DATA@
diff --git a/libstdc++-v3/src/mt_allocator.cc b/libstdc++-v3/src/mt_allocator.cc
index 066726b0367..1e45f4cfb1b 100644
--- a/libstdc++-v3/src/mt_allocator.cc
+++ b/libstdc++-v3/src/mt_allocator.cc
@@ -298,10 +298,13 @@ namespace __gnu_cxx
_Block_record* __block = NULL;
if (__gthread_active_p())
{
+ __gthread_mutex_lock(__bin._M_mutex);
if (__bin._M_first[0] == NULL)
{
// No need to hold the lock when we are adding a whole
// chunk to our own list.
+ __gthread_mutex_unlock(__bin._M_mutex);
+
void* __v = ::operator new(__options._M_chunk_size);
__bin._M_first[__thread_id] = static_cast<_Block_record*>(__v);
__bin._M_free[__thread_id] = __block_count;
@@ -327,7 +330,6 @@ namespace __gnu_cxx
// Is the number of required blocks greater than or equal
// to the number that can be provided by the global free
// list?
- __gthread_mutex_lock(__bin._M_mutex);
__bin._M_first[__thread_id] = __bin._M_first[0];
if (__block_count >= __bin._M_free[0])
{
diff --git a/libstdc++-v3/testsuite/Makefile.am b/libstdc++-v3/testsuite/Makefile.am
index 9e11ac30ae9..a003497ecaf 100644
--- a/libstdc++-v3/testsuite/Makefile.am
+++ b/libstdc++-v3/testsuite/Makefile.am
@@ -57,7 +57,7 @@ endif
abi_check_SOURCES = abi_check.cc
abi_check_DEPENDENCIES = libv3test.a
-all-local: stamp_wchar testsuite_files
+all-local: stamp_wchar stamp_thread testsuite_files
# Enable wchar_t tests if capable.
if GLIBCXX_TEST_WCHAR_T
@@ -67,6 +67,14 @@ else
stamp_wchar:
endif
+# Enable thread tests if capable.
+if GLIBCXX_TEST_THREAD
+stamp_thread:
+ touch testsuite_thread
+else
+stamp_thread:
+endif
+
# Generated lists of files to run. All of these names are valid make
# targets, if you wish to generate a list manually.
lists_of_files = \
@@ -183,4 +191,4 @@ check-script check-script-install check-performance
# By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
- testsuite_* site.exp abi_check baseline_symbols
+ testsuite_* site.exp abi_check baseline_symbols *TEST*
diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in
index 3a79b7ec10b..1005b34e58d 100644
--- a/libstdc++-v3/testsuite/Makefile.in
+++ b/libstdc++-v3/testsuite/Makefile.in
@@ -146,6 +146,8 @@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
GLIBCXX_TEST_ABI_FALSE = @GLIBCXX_TEST_ABI_FALSE@
GLIBCXX_TEST_ABI_TRUE = @GLIBCXX_TEST_ABI_TRUE@
+GLIBCXX_TEST_THREAD_FALSE = @GLIBCXX_TEST_THREAD_FALSE@
+GLIBCXX_TEST_THREAD_TRUE = @GLIBCXX_TEST_THREAD_TRUE@
GLIBCXX_TEST_WCHAR_T_FALSE = @GLIBCXX_TEST_WCHAR_T_FALSE@
GLIBCXX_TEST_WCHAR_T_TRUE = @GLIBCXX_TEST_WCHAR_T_TRUE@
INSTALL_DATA = @INSTALL_DATA@
@@ -311,7 +313,7 @@ performance_script = ${glibcxx_srcdir}/scripts/check_performance
# By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
- testsuite_* site.exp abi_check baseline_symbols
+ testsuite_* site.exp abi_check baseline_symbols *TEST*
all: all-am
@@ -575,13 +577,18 @@ uninstall-am: uninstall-info-am
tags uninstall uninstall-am uninstall-info-am
-all-local: stamp_wchar testsuite_files
+all-local: stamp_wchar stamp_thread testsuite_files
# Enable wchar_t tests if capable.
@GLIBCXX_TEST_WCHAR_T_TRUE@stamp_wchar:
@GLIBCXX_TEST_WCHAR_T_TRUE@ touch testsuite_wchar_t
@GLIBCXX_TEST_WCHAR_T_FALSE@stamp_wchar:
+# Enable thread tests if capable.
+@GLIBCXX_TEST_THREAD_TRUE@stamp_thread:
+@GLIBCXX_TEST_THREAD_TRUE@ touch testsuite_thread
+@GLIBCXX_TEST_THREAD_FALSE@stamp_thread:
+
# We need more things in site.exp, but automake completely controls the
# creation of that file; there's no way to append to it without messing up
# the dependancy chains. So we overrule automake. This rule is exactly
diff --git a/libstdc++-v3/testsuite/ext/array_allocator/1.cc b/libstdc++-v3/testsuite/ext/array_allocator/1.cc
new file mode 100644
index 00000000000..68cbc73f3f7
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/array_allocator/1.cc
@@ -0,0 +1,65 @@
+// 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.
+
+#include <cassert>
+#include <string>
+#include <ext/array_allocator.h>
+
+typedef char char_type;
+typedef std::char_traits<char_type> traits_type;
+typedef std::tr1::array<char_type, 4> array_type;
+
+array_type extern_array;
+
+void test01()
+{
+ using std::basic_string;
+ typedef __gnu_cxx::array_allocator<char_type, array_type> allocator_type;
+ typedef basic_string<char_type, traits_type, allocator_type> string_type;
+
+ allocator_type a(&extern_array);
+ string_type s(a);
+
+ try
+ {
+ s.reserve(4); // Actually need 4 + 1 + sizeof(std::string::_Rep).
+ }
+ catch(std::bad_alloc& obj)
+ {
+ assert(true);
+ }
+ catch(...)
+ {
+ assert(false);
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/array_allocator/2.cc b/libstdc++-v3/testsuite/ext/array_allocator/2.cc
new file mode 100644
index 00000000000..2d757b533aa
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/array_allocator/2.cc
@@ -0,0 +1,72 @@
+// 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.
+
+#include <cassert>
+#include <string>
+#include <iostream>
+#include <ext/array_allocator.h>
+
+typedef char char_type;
+typedef std::char_traits<char_type> traits_type;
+typedef std::tr1::array<char_type, 17> array_type;
+
+array_type extern_array;
+
+void test01()
+{
+ using std::basic_string;
+ typedef __gnu_cxx::array_allocator<char_type, array_type> allocator_type;
+ typedef basic_string<char_type, traits_type, allocator_type> string_type;
+
+ size_t index = array_type::_S_index;
+ allocator_type a(&extern_array);
+ string_type s(a);
+
+ try
+ {
+ s.reserve(4); // Actually need 4 + 1 + sizeof(std::string::_Rep).
+ }
+ catch(std::bad_alloc& obj)
+ {
+ assert(false);
+ }
+ catch(...)
+ {
+ assert(false);
+ }
+
+ s.append(1, 'c');
+ s.append(2, 'b');
+
+ std::cout << s.c_str() << std::endl;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global-1.cc b/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global_thread-1.cc
index 1f0ac281af7..1f0ac281af7 100644
--- a/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global-1.cc
+++ b/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global_thread-1.cc
diff --git a/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global-3.cc b/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global_thread-3.cc
index 10efea66ec6..10efea66ec6 100644
--- a/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global-3.cc
+++ b/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global_thread-3.cc
diff --git a/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-1.cc b/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-1.cc
index 5664d3caff8..5664d3caff8 100644
--- a/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-1.cc
+++ b/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-1.cc
diff --git a/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-3.cc b/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-3.cc
index 973f758d98d..973f758d98d 100644
--- a/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-3.cc
+++ b/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-3.cc
diff --git a/libstdc++-v3/testsuite/ext/mt_allocator/instantiate.cc b/libstdc++-v3/testsuite/ext/mt_allocator/instantiate.cc
index 579b8bcf18d..4fa49aa09cc 100644
--- a/libstdc++-v3/testsuite/ext/mt_allocator/instantiate.cc
+++ b/libstdc++-v3/testsuite/ext/mt_allocator/instantiate.cc
@@ -27,7 +27,9 @@
using namespace __gnu_cxx;
template class __mt_alloc<int>;
-template class __mt_alloc<short, __common_pool_policy<true> >;
template class __mt_alloc<short, __common_pool_policy<false> >;
-template class __mt_alloc<short, __per_type_pool_policy<short, true> >;
template class __mt_alloc<short, __per_type_pool_policy<short, false> >;
+#ifdef __GTHREADS
+template class __mt_alloc<short, __common_pool_policy<true> >;
+template class __mt_alloc<short, __per_type_pool_policy<short, true> >;
+#endif
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
index 2e8db1f4f5a..29ae62ed00c 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -29,7 +29,6 @@
# libstdc++_* callbacks we don't define, but could:
# ..._option_help prints additional --help output
# ..._option_proc (--foo) process our own options
-# ..._exit cleanup routines (do we need any?)
# ..._init (normal.exp) called once per test file
# ..._finish bracketing function for libstdc++_init
# ...-dg-prune removing output text, see top of system dg.exp
@@ -212,6 +211,16 @@ proc libstdc++_init { testfile } {
libstdc++_maybe_build_wrapper "${objdir}/testglue.o"
}
+# Callback for cleanup routines.
+proc libstdc++_exit { } {
+ global gluefile;
+
+ if [info exists gluefile] {
+ file_on_build delete $gluefile;
+ unset gluefile;
+ }
+}
+
# Callback from system dg-test.
proc libstdc++-dg-test { prog do_what extra_tool_flags } {
# Set up the compiler flags, based on what we're going to do.
diff --git a/libstdc++-v3/testsuite/thread/pthread1.cc b/libstdc++-v3/testsuite/thread/pthread1.cc
index 1b225f202c6..26d198a755e 100644
--- a/libstdc++-v3/testsuite/thread/pthread1.cc
+++ b/libstdc++-v3/testsuite/thread/pthread1.cc
@@ -34,7 +34,6 @@
// Do not include <pthread.h> explicitly; if threads are properly
// configured for the port, then it is picked up free from STL headers.
-#if __GTHREADS
using namespace std;
const int thread_cycles = 10;
@@ -135,6 +134,3 @@ main ()
return 0;
}
-#else
-int main (void) {}
-#endif
diff --git a/libstdc++-v3/testsuite/thread/pthread2.cc b/libstdc++-v3/testsuite/thread/pthread2.cc
index 7fbdfc03aeb..7a0efd067a2 100644
--- a/libstdc++-v3/testsuite/thread/pthread2.cc
+++ b/libstdc++-v3/testsuite/thread/pthread2.cc
@@ -28,8 +28,6 @@
// Do not include <pthread.h> explicitly; if threads are properly
// configured for the port, then it is picked up free from STL headers.
-#if __GTHREADS
-
const int max_thread_count = 2;
const int max_loop_count = 1000000;
@@ -62,6 +60,3 @@ main()
return 0;
}
-#else
-int main (void) {}
-#endif
diff --git a/libstdc++-v3/testsuite/thread/pthread3.cc b/libstdc++-v3/testsuite/thread/pthread3.cc
index ca8f77147e7..4696fb76cdc 100644
--- a/libstdc++-v3/testsuite/thread/pthread3.cc
+++ b/libstdc++-v3/testsuite/thread/pthread3.cc
@@ -28,8 +28,6 @@
// Do not include <pthread.h> explicitly; if threads are properly
// configured for the port, then it is picked up free from STL headers.
-#if __GTHREADS
-
const int max_thread_count = 2;
const int max_loop_count = 1000000;
@@ -59,6 +57,3 @@ main()
return 0;
}
-#else
-int main (void) {}
-#endif
diff --git a/libstdc++-v3/testsuite/thread/pthread4.cc b/libstdc++-v3/testsuite/thread/pthread4.cc
index be1ae680fa7..a9ec9b84e38 100644
--- a/libstdc++-v3/testsuite/thread/pthread4.cc
+++ b/libstdc++-v3/testsuite/thread/pthread4.cc
@@ -30,7 +30,6 @@
// Do not include <pthread.h> explicitly; if threads are properly
// configured for the port, then it is picked up free from STL headers.
-#if __GTHREADS
using namespace std;
static list<string> foo;
@@ -113,6 +112,3 @@ main (void)
return 0;
}
-#else
-int main (void) {}
-#endif
diff --git a/libstdc++-v3/testsuite/thread/pthread5.cc b/libstdc++-v3/testsuite/thread/pthread5.cc
index b950542fd61..93f03a22761 100644
--- a/libstdc++-v3/testsuite/thread/pthread5.cc
+++ b/libstdc++-v3/testsuite/thread/pthread5.cc
@@ -31,7 +31,6 @@
// Do not include <pthread.h> explicitly; if threads are properly
// configured for the port, then it is picked up free from STL headers.
-#if __GTHREADS
#ifdef _GLIBCXX_HAVE_UNISTD_H
#include <unistd.h> // To test for _POSIX_THREAD_PRIORITY_SCHEDULING
#endif
@@ -130,6 +129,3 @@ main ()
return (0);
}
-#else
-int main (void) {}
-#endif
diff --git a/libstdc++-v3/testsuite/thread/pthread6.cc b/libstdc++-v3/testsuite/thread/pthread6.cc
index e0fee71deac..ba8c341c3f8 100644
--- a/libstdc++-v3/testsuite/thread/pthread6.cc
+++ b/libstdc++-v3/testsuite/thread/pthread6.cc
@@ -30,8 +30,6 @@
// Do not include <pthread.h> explicitly; if threads are properly
// configured for the port, then it is picked up free from STL headers.
-#if __GTHREADS
-
const int max_thread_count = 8;
const int loops = 100000;
@@ -94,6 +92,3 @@ main (void)
return 0;
}
-#else
-int main (void) {}
-#endif
diff --git a/libstdc++-v3/testsuite/thread/pthread7-rope.cc b/libstdc++-v3/testsuite/thread/pthread7-rope.cc
index 2f401344ff4..307973c202d 100644
--- a/libstdc++-v3/testsuite/thread/pthread7-rope.cc
+++ b/libstdc++-v3/testsuite/thread/pthread7-rope.cc
@@ -29,13 +29,12 @@
// Do not include <pthread.h> explicitly; if threads are properly
// configured for the port, then it is picked up free from STL headers.
-#if __GTHREADS
-
const int max_thread_count = 4;
const int max_loop_count = 10000;
-__gnu_cxx::crope foo2;
-__gnu_cxx::crope foo4;
+typedef __gnu_cxx::rope<char, std::allocator<char> > rope_type;
+rope_type foo2;
+rope_type foo4;
void* thread_main(void *)
{
@@ -73,7 +72,7 @@ main()
pthread_setconcurrency (max_thread_count);
#endif
- __gnu_cxx::crope foo;
+ rope_type foo;
foo += "bar";
foo += "baz";
foo += "bongle";
@@ -89,7 +88,7 @@ main()
VERIFY( !std::strcmp (data2, "bar2baz2bongle2") );
}
- __gnu_cxx::crope foo3 ("hello");
+ rope_type foo3 ("hello");
const char* data3 = foo3.c_str();
VERIFY( !std::strcmp (data3, "hello") );
@@ -112,6 +111,3 @@ main()
return 0;
}
-#else
-int main (void) {}
-#endif