merge GCC 4.1-20061021.

This commit is contained in:
mrg 2006-10-22 00:41:20 +00:00
parent 1df0b9ba30
commit d8a42ed9c7
19 changed files with 2795 additions and 262 deletions

View File

@ -2158,6 +2158,7 @@ acx_cv_cc_gcc_supports_ada=no
# given a .adb file, but produce no object file. So we must check
# if an object file was really produced to guard against this.
errors=`(${CC} -c conftest.adb) 2>&1 || echo failure`
echo $errors
if test x"$errors" = x && test -f conftest.$ac_objext; then
acx_cv_cc_gcc_supports_ada=yes
fi
@ -6175,15 +6176,34 @@ trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
cat > conftest.defs <<\EOF
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
s%\[%\\&%g
s%\]%\\&%g
s%\$%$$%g
EOF
DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
rm -f conftest.defs
#
# If the first sed substitution is executed (which looks for macros that
# take arguments), then we branch to the quote section. Otherwise,
# look for a macro that doesn't take arguments.
cat >confdef2opt.sed <<\_ACEOF
t clear
: clear
s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
t quote
s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
t quote
d
: quote
s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
s,\[,\\&,g
s,\],\\&,g
s,\$,$$,g
p
_ACEOF
# We use echo to avoid assuming a particular line-breaking character.
# The extra dot is to prevent the shell from consuming trailing
# line-breaks from the sub-command output. A line-break within
# single-quotes doesn't work because, if this script is created in a
# platform that uses two characters for line-breaks (e.g., DOS), tr
# would break.
ac_LF_and_DOT=`echo; echo .`
DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
rm -f confdef2opt.sed
# Without the "./", some shells look in PATH for config.status.

View File

@ -1,3 +1,772 @@
2006-10-19 Eric Botcazou <ebotcazou@adacore.com>
* fold-const.c (add_double): Rename to add_double_with_sign.
Add 'unsigned_p' parameter and take it into account for the overflow.
(mul_double): Rename to mul_double_with_sign.
Add 'unsigned_p' parameter and take it into account for the overflow.
(fold_div_compare): Call add_double_with_sign instead of add_double
and mul_double_with_sign instead of mul_double, passing them the
unsignedness of the type.
* tree.h (add_double): Macroize.
(add_double_with_sign): New prototype.
(mul_double): Macroize.
(mul_double_with_sign): New prototype.
2006-10-19 Ira Rosen <irar@il.ibm.com>
Backport from mainline:
2006-08-07 Victor Kaplansky <victork@il.ibm.com>
PR tree-optimization/26969
* tree-vect-analyze.c (vect_analyze_loop_form): Add check of latch
with an empty list of PHIs.
2006-10-18 Richard Guenther <rguenther@suse.de>
Backport from mainline:
2006-08-16 Zdenek Dvorak <dvorakz@suse.cz>
PR gcov/profile/26570
* value-prof.c (static_values): Removed.
(tree_find_values_to_profile): Do not set static_values.
(find_values_to_profile): Do not free static_values.
* profile.c (instrument_values): Do not free the values.
(branch_prob): Free the values.
2006-10-18 Richard Guenther <rguenther@suse.de>
Backport from mainline:
2006-05-11 Jan Hubicka <jh@suse.cz>
PR debug/26881
* Makefile.in (gt-cgraphunit.h): Add.
* cgraphunit.c: Include gt-cgraphunit.h.
(local_static_output): New static vector.
(cgraph_varpool_assemble_decl): Defer outputting debug info
for local statics to...
(cgraph_varpool_debug_local_statics): ... here.
(cgraph_optimize): Use it.
2006-10-18 Richard Guenther <rguenther@suse.de>
* except.c (set_nothrow_function_flags): Fix return value.
2006-10-17 Paul Brook <paul@codesourcery.com>
Backport from mainline:
* config/arm/arm.c (arm_rtx_costs_1): Handle multiply-accumulate.
2006-10-16 Richard Guenther <rguenther@suse.de>
PR target/28960
Backport from mainline:
2006-08-23 Stuart Hastings <stuart@apple.com>
PR target/28825
* gcc/config/i386/i386.c (ix86_expand_vector_init_duplicate,
ix86_expand_vector_init_one_nonzero): Remove TARGET_SSE test.
2006-10-16 Richard Guenther <rguenther@suse.de>
Backport from mainline:
2006-10-10 Richard Guenther <rguenther@suse.de>
PR inline-asm/29119
* gimplify.c (gimplify_asm_expr): Mark the gimplified lvalue
addressable.
2006-10-16 Richard Guenther <rguenther@suse.de>
Backport from mainline:
2006-08-13 Alexandre Oliva <aoliva@redhat.com>
Andrew Pinski <pinskia@physics.uc.edu>
PR c/27184
* tree.c (build_array_type): Unify array types with
unspecified index_type.
* c-decl.c (grokdeclarator): Make sure we do not modify a
unified incomplete array type.
* c-typeck.c (store_init_value): Create distinct type before
filling in the index type in an initializer from a compound
literal.
* c-decl.c (grokdeclarator): Remove code where we copy the
array type over.
2006-10-16 Jakub Jelinek <jakub@redhat.com>
PR c/29091
* varasm.c (output_constant): If TREE_VECTOR_CST_ELTS chain is shorter than
the number of vector elements fill the rest with zeros.
2006-10-16 Richard Guenther <rguenther@suse.de>
PR target/25519
* doc/extend.texi (X86 Built-in Functions): Fix typos in
SSE builtin documentation. Document SSE2 builtins.
2006-10-15 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* pa64-hpux.h (LINK_SPEC): Force __cxa_finalize to be an undefined
symbol in the output file for non-shared links when -nostdlib or
-nodefaultlibs isn't specified.
* config.gcc (hppa*64*-*-hpux11*, hppa[12]*-*-hpux11*): Default to
posix thread support.
2006-10-14 Richard Guenther <rguenther@suse.de>
PR rtl-optimization/29323
* except.c (set_nothrow_function_flags): For functions
that do not bind local bail out early.
2006-10-14 Uros Bizjak <uros@kss-loka.si>
* config/i386/athlon.md (athlon_fist): Add fisttp.
2006-10-12 Jie Zhang <jie.zhang@analog.com>
* config/bfin/bfin.md (eh_return): Call emit_jump_insn instead of
emit_insn to emit eh_return_internal instruction.
(eh_return_internal): Explicitly set pc.
2006-10-06 Steve Ellcey <sje@cup.hp.com>
PR target/28490
Backport from mainline
2006-09-15 Jim Wilson <wilson@specifix.com>
2006-09-19 Steve Ellcey <sje@cup.hp.com>
* config/ia64/ia64.c (ia64_legitimate_constant_p): Allow function
pointers as legitimate constants. Handle symbol offsets same as
they are handled in ia64_expand_move and move_operand.
2006-10-06 Jakub Jelinek <jakub@redhat.com>
* tree-loop-linear.c (linear_transform_loops): Don't forget to
free DEPENDENCE_RELATIONS and DATAREFS.
PR target/28924
* builtins.c (expand_builtin_sync_operation,
expand_builtin_compare_and_swap, expand_builtin_lock_test_and_set):
Use convert_to_mode to handle promoted arguments.
2006-10-05 Uros Bizjak <uros@kss-loka.si>
* config/i386/sync.md ("sync_add<mode>", "sync_sub<mode>",
"sync_ior<mode>", "sync_and<mode>", "sync_xor<mode>"):
Use <modeconstraint> instead of "r" as operand 1 constraint.
2006-10-06 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/29290
* tree-loop-linear.c (linear_transform_loops): Bail if loop_nest has
multiple exits.
PR target/29198
* config/i386/i386.c (legitimize_pic_address): Reject TLS symbols.
* config/i386/predicates.md (local_symbolic_operand): Likewise.
2006-10-05 David Edelsohn <edelsohn@gnu.org>
Backport from mainline
2006-09-11 Guenter Roeck <guenter@roeck-us.net>
David Edelsohn <edelsohn@gnu.org>
PR target/27287
* config/rs6000/spe.md (frob_df_di): Remove %H.
(frob_di_df): Remove %H. Change evmergelo to mr.
(frob_di_df_2): Remove %H. Change evldd to two loads.
2006-10-05 Andrew Pinski <pinskia@physics.uc.edu>
PR debug/28980
* dwarf2out.c (loc_descriptor_from_tree_1): Handle
FUNCTION_DECL.
2006-10-04 Andrew Pinski <pinskia@physics.uc.edu>
PR c/27490
PR c/27489
* c-typeck.c (build_compound_expr): If the second expression
is an error mark, then just return an error mark instead of
creating a COMPOUND_EXPR.
2006-10-04 Andrew Pinski <pinskia@physics.uc.edu>
PR tree-opt/28952
* tree-vect-transform.c (vectorizable_condition): Move the check
for the type after the check for simple condition.
2006-10-03 Andrew Pinski <pinskia@physics.uc.edu>
PR middle-end/28862
* stor-layout.c (relayout_decl): Don't zero the alignment if it
was set by the user.
2006-10-02 Jakub Jelinek <jakub@redhat.com>
Backport from mainline
2006-02-20 Angel Nunez Mencias <anunez@de.ibm.com>
* config/s390/s390.c (legitimize_pic_address): Assertions checking
for non tls symbols added.
(legitimize_address): Do nothing for PLUS expressions if one of the
addends is a tls symbol reference.
2006-10-02 Jakub Jelinek <jakub@redhat.com>
PR c/29154
* gimplify.c (gimplify_self_mod_expr): Run inner expression's post
side effects after the outer expression's post side effects.
2006-09-27 Paul Brook <paul@codesourcery.com>
PR target/29230
Backport from mainline.
* config/arm/arm.md (arith_adjacentmem): Handle large offsets.
2006-09-25 Matthias Klose <doko@debian.org>
* doc/invoke.texi: Add missing full stop.
2006-09-24 Roger Sayle <roger@eyesopen.com>
PR debug/29132
Backport from mainline
* dwarf2out.c (dwarf2out_begin_prologue): Initialise the current label,
dw_fde_current_label, to be the start of the function, i.e. the same
value as dw_fde_begin.
2006-09-20 Steven Bosscher <steven@gcc.gnu.org>
PR middle-end/26983
Backport from mainline
* builtins.c (expand_builtin_setjmp): Force next_lab to be
preserved.
2006-09-20 Paul Brook <paul@codesourcery.com>
Backport from mainline.
* config/arm/unwind-arm.c (selfrel_offset31): Clear top bit for
positive offsets.
2006-09-18 Roger Sayle <roger@eyesopen.com>
PR middle-end/4520
Backport from mainline
* cselib.c (cselib_hash_rtx): Avoid hashing on the address of labels
and symbols. Instead use the implementation from cse.c's hash_rtx.
2006-09-18 Richard Guenther <rguenther@suse.de>
Backport from mainline:
PR tree-optimization/28900
* tree-if-conv.c (find_phi_replacement_condition): Gimplify
compound conditional before creating COND_EXPR condition.
2006-09-18 Richard Guenther <rguenther@suse.de>
Backport from mainline:
J"orn Rennecke <joern.rennecke@st.com>
Richard Guenther <rguenther@suse.de>
Adam Nemet <anemet@caviumnetworks.com>
PR middle-end/27226
* builtins.c (get_pointer_alignment): Handle more forms
of base addresses that can be used to derive more precise
information about alignment.
2006-09-15 Uros Bizjak <uros@kss-loka.si>
PR target/28946
* config/i386/i386.md ("*ashldi3_cconly_rex64", "*ashlsi3_cconly",
"*ashlhi3_cconly", "*ashlqi3_cconly", "*ashrdi3_one_bit_cconly_rex64",
"*ashrdi3_cconly_rex64", "*ashrsi3_one_bit_cconly", "*ashrsi3_cconly",
"*ashrhi3_one_bit_cconly", "*ashrhi3_cconly",
"*ashrqi3_one_bit_cconly", "*ashrqi3_cconly",
"*lshrdi3_cconly_one_bit_rex64", "*lshrdi3_cconly_rex64",
"*lshrsi3_one_bit_cconly", "*lshrsi3_cconly",
"*lshrhi3_one_bit_cconly", "*lshrhi3_cconly",
"*lshrqi2_one_bit_cconly", "*lshrqi2_cconly": New patterns to
implement only CC setting effects of shift instructions.
2006-09-14 Jason Merrill <jason@redhat.com>
PR middle-end/28493
* builtins.c (expand_builtin_setjmp_receiver): Clobber
hard_frame_pointer_rtx after using it to update the frame pointer.
2006-09-14 Anatoly Sokolov <aesok@post.ru>
PR target/26504
* config/avr/avr.h (FRAME_POINTER_CFA_OFFSET): Define.
2006-09-12 H.J. Lu <hongjiu.lu@intel.com>
* doc/invoke.texi (mpreferred-stack-boundary): Remove exception
for -Os. Update __m128 alignment requirement.
2006-09-12 Eric Botcazou <ebotcazou@libertysurf.fr>
PR rtl-optimization/28243
* combine.c (distribute_notes) <REG_DEAD>: Do not consider SETs past
the insn to which the note was originally attached.
2006-09-11 H.J. Lu <hongjiu.lu@intel.com>
PR target/13685
PR target/27537
PR target/28621
* config/i386/i386.c (override_options): Always default to 16
byte stack boundary.
2006-09-11 Eric Botcazou <ebotcazou@libertysurf.fr>
PR rtl-optimization/28726
* sched-deps.c (sched_analyze_reg): New function extracted from...
(sched_analyze_1): ...here. Call it to analyze references to
registers. Treat again writes to a stack register as writing to the
register.
(sched_analyze_2): ...and here. Call it to analyze references to
registers. Treat again reads of a stack register as reading the
register.
2006-09-11 Hideki Iwamoto <h-iwamoto@kit.hi-ho.ne.jp>
* doc/cpp.texi: Fix names of charset options.
2006-09-10 Roger Sayle <roger@eyesopen.com>
Nicolas Setton <setton@adacore.com>
Backport from mainline
* dwarf2out.c (convert_cfa_to_fb_loc_list): Handle DW_CFA_set_loc.
2006-09-10 Eric Botcazou <ebotcazou@libertysurf.fr>
PR rtl-optimization/28636
* combine.c (force_to_mode): Test for side-effects before
substituting by zero.
(simplify_shift_const): Likewise for zero or other constants.
2006-09-10 Richard Sandiford <richard@codesourcery.com>
PR target/29006
* config/mips/mips-protos.h (mips_mem_fits_mode_p): Declare.
* config/mips/mips.c (mips_expand_unaligned_store): Use the mode
returned by mode_for_size, rather than the mode of src itself,
to choose between 32-bit and 64-bit patterns.
(mips_mem_fits_mode_p): New function.
* config/mips/mips.md (mov_<load>l, mov_<load>r): Use it to check
that the size of the source matches the size of the destination.
(mov_<store>l, mov_<store>r): Likewise.
2006-09-10 Richard Sandiford <richard@codesourcery.com>
PR target/27681
Backport from mainline:
2006-05-23 Richard Sandiford <richard@codesourcery.com>
* libgcc2.c (LIBGCC2_MAX_UNITS_PER_WORD): New macro.
(LIBGCC2_UNITS_PER_WORD): Use LIBGCC2_MAX_UNITS_PER_WORD rather than
MIN_UNITS_PER_WORD to set the default. Also use it in the guard.
2006-05-22 Richard Sandiford <richard@codesourcery.com>
* mklibgcc.in (lib2funcs): Remove _floatdidf from initial assignment.
2006-05-19 Richard Sandiford <richard@codesourcery.com>
* libgcc2.c (MIN_UNITS_PER_WORD): Move default definition from
libgcc2.h.
(LIBGCC2_UNITS_PER_WORD): Provide default definition, using old
MIN_UNITS_PER_WORD logic from libgcc2.h. Do nothing if
LIBGCC2_UNITS_PER_WORD > MIN_UNITS_PER_WORD.
* libgcc2.h (MIN_UNITS_PER_WORD): Remove definition from here.
Use LIBGCC2_UNITS_PER_WORD rather than MIN_UNITS_PER_WORD to
determine the size of Wtype, etc.
* mklibgcc.in (LIB2_SIDITI_CONV_FUNCS): New argument.
(swfloatfuncs): New variable.
(dwfloatfuncs): Likewise.
(lib2funcs): Remove floating-point conversion functions from
initial assignment. Use LIB2_SIDITI_CONV_FUNCS to determine
the set of conversion routines needed. Allow entries to specify
an object name, filename and word size. Update users accordingly.
* Makefile.in (libgcc.mk): Pass LIB2_SIDITI_CONV_FUNCS.
* config/mips/t-mips (LIB2_SIDITI_CONV_FUNCS): Define.
Revert:
2006-02-08 Roger Sayle <roger@eyesopen.com>
PR target/22209
* config/fixtfdi.c: New libgcc source file.
* config/fixunstfdi.c: New source file.
* config/floatditf.c: New source file.
* config/floatunditf.c: New souce file.
* config/mips/t-iris6 (LIB2FUNCS_EXTRA): Include the new source
files above instead of config/mips/_tilib.c.
* config/mips/t-linux64 (LIB2FUNCS_EXTRA): Likewise.
2006-09-09 Richard Sandiford <richard@codesourcery.com>
PR rtl-optimization/28634
* reorg.c (fill_slots_from_thread): Do not assume A + X - X == A
for floating-point modes unless flag_unsafe_math_optimizations.
2006-09-07 Jason Merrill <jason@redhat.com>
PR middle-end/27724
* varasm.c (output_constant): Only strip actual no-op conversions.
2006-09-06 Matthias Klose <doko@debian.org>
PR bootstrap/26764
PR bootstrap/27334
* Makefile.in (s-macro_list): Conform to POSIX rules in single quoted
strings.
2006-09-05 Eric Botcazou <ebotcazou@libertysurf.fr>
PR rtl-optimization/28386
* loop.c (biased_biv_may_wrap_p): Rename to biv_may_wrap_p and
remove 'bias' parameter.
(maybe_eliminate_biv_1): Adjust for above change.
2006-09-04 Eric Botcazou <ebotcazou@libertysurf.fr>
PR rtl-optimization/27616
* cse.c (table_size): New static variable.
(new_basic_block): Initialize it to 0.
(remove_from_table): Decrement it.
(insert): Increment it.
(fold_rtx_mem_1): New function, renamed from fold_rtx_mem.
(fold_rtx_mem): Enforce a cap on the recursion depth. Call
fold_rtx_mem_1 if under the cap.
(fold_rtx) <RTX_COMM_ARITH>: In the associative case, delay a little
the lookup of the equivalent expression and test for equality of the
first operand of the equivalent expression before in turn looking up
an equivalent constant for the second operand.
2006-09-01 Richard Guenther <rguenther@suse.de>
Backport from mainline:
PR middle-end/28814
* fold-const.c (fold_binary): Fold temporary to correct
type before constructing new comparison.
2006-09-01 Roger Sayle <roger@eyesopen.com>
PR other/22313
* dwarf2out.c (add_fde_cfi): Use a set_loc if the current label is
NULL, otherwise use an advance_loc4 to adjust relative to the
current label.
(output_cfi) <DW_CFA_set_loc>: Update the current label.
(dwarf2out_switch_text_section): Reset the current label to avoid
using advance_loc4 over section boundaries.
2006-09-01 Jakub Jelinek <jakub@redhat.com>
PR middle-end/28683
* cfgexpand.c (add_reg_br_prob_note): Check if last has exactly
3 following insns.
2006-08-31 Andreas Krebbel <krebbel1@de.ibm.com>
PR target/24367
* config/s390/s390.md ("movsi", "movdi" expander): Accept rtxes like
r12 + SYMBOLIC_CONST.
2006-08-25 Joseph S. Myers <joseph@codesourcery.com>
PR c/27893
* gimplify.c (gimplify_decl_expr, gimplify_init_ctor_preeval):
Treat sizes as variable whenever not INTEGER_CST.
2006-08-25 Fariborz Jahanian <fjahanian@apple.com>
PR c/28418
* c-gimplify.c (gimplify_compound_literal_expr): Don't add
variable again if DECL_SEEN_IN_BIND_EXPR_P.
2006-08-25 Joseph S. Myers <joseph@codesourcery.com>
PR c/28299
* c-decl.c (start_function): Don't try to process prototype
information from old declaration that isn't a function.
2006-08-25 Joseph Myers <joseph@codesourcery.com>
PR c/27558
Backport:
2006-04-20 Jakub Jelinek <jakub@redhat.com>
* c-pretty-print.c (pp_c_direct_abstract_declarator): Print
TYPE_MAX_VALUE (TYPE_DOMAIN (t)) + 1 for ARRAY_TYPE rather
than plain TYPE_MAX_VALUE (TYPE_DOMAIN (t)).
2006-08-25 Alan Modra <amodra@bigpond.net.au>
PR target/27075
* config/rs6000/rs6000.c (print_operand): Only use e500 %y syntax
for 8 byte objects.
2006-08-21 Mark Shinwell <shinwell@codesourcery.com>
* config/arm/pr-support.c (__gnu_unwind_execute): Insert " + 1" in
necessary places to pass the correct "number of registers" values
to _Unwind_VRS_Pop.
2006-08-18 Joseph Myers <joseph@codesourcery.com>
PR target/27565
* config/rs6000/rs6000.h (LOCAL_ALIGNMENT): For SPE, only adjust
alignment of SPE vector types.
2006-08-17 Sebastian Pop <pop@cri.ensmp.fr>
PR middle-end/25211
PR middle-end/20256
PR middle-end/26435
* tree-loop-linear.c (linear_transform_loops): Don't test perfect_nest_p.
Call rewrite_into_loop_closed_ssa only when something changed.
* lambda.h (gcc_loopnest_to_lambda_loopnest): Update declaration.
* lambda-code.c (can_convert_to_perfect_nest): Declared.
(gcc_loopnest_to_lambda_loopnest): Removed need_perfect_nest parameter.
Test for perfect_nest_p here. Fix formating.
(replace_uses_equiv_to_x_with_y): Fix formating.
(stmt_uses_op): Removed.
(can_convert_to_perfect_nest): Removed loopivs parameter.
Complete the test by checking the scalar dependences.
(perfect_nestify): Remove the test for can_convert_to_perfect_nest.
Fix formating. Don't copy statements in the inner loop: move them to
the inner loop header.
2006-08-16 Joseph S. Myers <joseph@codesourcery.com>
PR c/27697
* c-typeck.c (build_component_ref): Combine qualifiers of
structure or union and field.
2006-08-15 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c/28649
* c-parser.c (c_parser_compound_statement_nostart): Reset
parser->error after each statement.
2006-08-14 Andrew Pinski <pinskia@gmail.com>
PR middle-end/28075
* tree-inline.c (setup_one_parameter): Strip useless
type conversion before adding it to the IR.
(declare_return_variable): Likewise.
2006-08-13 Andrew MacLeod <amacleod@redhat.com>
PR middle-end/27793
* tree-dfa.c (add_referenced_var): Assert DECL_UID is unique for
different decls.
2006-08-13 Jakub Jelinek <jakub@redhat.com>
PR c++/28677
Revert:
2006-06-06 Andrew MacLeod <amacleod@redhat.com>
PR middle-end/27793
* tree-dfa.c (referenced_vars_dup_list): New. List of duplicate
referenced_variables with matching DECL_UID's.
(find_referenced_vars): Make sure duplicate list is empty to start.
(add_referenced_var): Add var to duplicate list if required.
* tree-ssa.c (delete_tree_ssa): Clear var_ann's on duplicates.
* tree-flow.h (referenced_vars_dup_list): External declaration.
2006-08-13 Matthias Klose <doko@debian.org>
* doc/invoke.texi: Fix spelling errors.
2006-08-11 Eric Botcazou <ebotcazou@libertysurf.fr>
PR rtl-optimization/23454
* reorg.c (relax_delay_slots): Update comment.
2006-08-11 Paolo Bonzini <bonzini@gnu.org>
PR target/27827
* config/i386/i386.md: Add peephole2 to avoid "fld %st"
instructions.
2006-08-11 Richard Guenther <rguenther@suse.de>
PR middle-end/28651
* simplify-rtx.c (simplify_const_relational_operation):
Simplify A CMP B to A - B CMP 0 only for EQ and NE comparison
codes.
2006-08-05 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c/27721
* c-typeck.c (build_modify_expr): Test earlier for non-lvalues.
PR c/28136
* c-parser.c (c_parser_postfix_expression_after_paren_type): Robustify.
2006-08-03 Mark Mitchell <mark@codesourcery.com>
PR c++/28148
* varasm.c (output_constant): Give the front end another chance to
expand constants, after stripping NOPs.
2006-08-03 David Edelsohn <edelsohn@gnu.org>
Backport from mainline
PR target/27566
* config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Do
not reload a SPE symbol_ref into a lo_sum address.
2006-08-03 Steve Ellcey <sje@cup.hp.com>
PR rtl-optimization/28221
Backport from mainline.
2005-11-30 Nathan Sidwell <nathan@codesourcery.com>
* loop-doloop.c (add_test): Only add jump note if we did emit a jump.
2006-05-01 Zdenek Dvorak <dvorakz@suse.cz>
PR rtl-optimization/27291
* loop-doloop.c (add_test, doloop_modify): Handle the case condition
is folded to a constant.
2006-08-03 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/28257
PR c++/28259
PR c++/28267
* toplev.c (compile_file): Return early on errorcount or sorrycount.
* cgraphunit.c (cgraph_finalize_compilation_unit): Likewise.
(cgraph_optimize): Likewise.
2006-08-02 Janis Johnson <janis187@us.ibm.com>
Backport from mainline
* doc/sourcebuild.texi (Test Directives): Document dg-shouldfail.
2006-08-01 Steven Bosscher <steven@gcc.gnu.org>
PR debug/25468
Backport from mainline
* config/elfos.h (ASM_OUTPUT_ASCII): Remove 'register' marks.
Cache the last found '\0' marker to avoid quadratic behavior.
2006-07-29 Roger Sayle <roger@eyesopen.com>
PR middle-end/28473
Backport from mainline
* convert.c (convert_to_integer): When transforming (T)foo(x) into
bar(x) check that bar's result type can represent all the values of T.
* builtins.c (fold_fixed_mathfn): When long and long long are the
same size, canonicalize llceil*, llfloor*, llround* and llrint*
functions to their lceil*, lfloor*, lround* and lrint* forms.
2006-07-26 David delsohn <edelsohn@gnu.org>
Backport from mainline
2006-07-14 Eliot Dresselhaus <eliot@sonic.net>
PR target/27287
* config/rs6000/spe.md (frob_di_df_2): Add m->r alternative.
2006-07-06 David Edelsohn <edelsohn@gnu.org>
PR target/28150
* config/rs6000/rs6000.c (rs6000_legitimate_address): Do not allow
PRE_{INC,DEC} of TFmode.
2006-07-06 David Edelsohn <edelsohn@gnu.org>
Alan Modra <amodra@bigpond.net.au>
PR target/28170
* config/rs6000/rs6000.c (insvdi_rshift_rlwimi_p): Correct shiftop
bounds. Simplify.
2006-07-26 Richard Sandiford <richard@codesourcery.com>
PR middle-end/28403
* optabs.c (expand_doubleword_shift): Wrap the call to
do_compare_rtx_and_jump with NO_DEFER_POP and OK_DEFER_POP.
2006-07-26 Richard Sandiford <richard@codesourcery.com>
PR middle-end/28402
* optabs.c (expand_binop): Pass next_methods rather than methods
to expand_doubleword_shift.
2006-07-25 Zdenek Dvorak <dvorakz@suse.cz>
* tree-chrec.c (chrec_convert_aggressive): Return NULL on failure.
2006-07-24 Richard Guenther <rguenther@suse.de>
Backport from mainline
2006-07-17 Zdenek Dvorak <dvorakz@suse.cz>
* tree-chrec.c (avoid_arithmetics_in_type_p): New.
(convert_affine_scev, chrec_convert_aggressive): Use
avoid_arithmetics_in_type_p. Do not check for the subtypes
separately.
2006-07-24 Richard Guenther <rguenther@suse.de>
PR tree-optimization/28238
* tree-inline.c (copy_bb): Check if we produced valid
gimple copying and substituting a stmt. If not, gimplify
it.
2006-07-24 Toon Moene <toon@moene.indiv.nluug.nl>
* doc/invoke.texi: Remove mention of f77; Reformat table for
inline parameter options correctly; mention that -malign-double
is default on x86-64 targets.
2006-07-24 Richard Guenther <rguenther@suse.de>
PR tree-optimization/27795
PR tree-optimization/27639
PR tree-optimization/26719
Backport from mainline
2006-05-24 Zdenek Dvorak <dvorakz@suse.cz>
* tree-vrp.c (adjust_range_with_scev): Use scev_direction and adjust
call to scev_probably_wraps_p.
* tree-ssa-loop-niter.c (compare_trees, convert_step_widening,
used_in_pointer_arithmetic_p, convert_step): Removed.
(nowrap_type_p): New function.
(scev_probably_wraps_p): Rewritten.
* tree-scalar-evolution.c (instantiate_parameters_1): Do not call
chrec_convert if chrec_convert_aggressive might have been used.
* tree-chrec.c (convert_affine_scev, chrec_convert_1,
scev_direction): New functions.
(chrec_convert): Changed to a wrapper over chrec_convert_1.
* tree-ssa-loop-ivopts.c (idx_find_step): Use convert_affine_scev
instead of convert_step.
* tree-flow.h (scev_probably_wraps_p): Declaration changed.
(convert_step): Declaration removed.
(convert_affine_scev, nowrap_type_p, scev_direction): Declare.
2006-07-24 Richard Guenther <rguenther@suse.de>
PR tree-optimization/28029
Backport
2006-02-15 Daniel Berlin <dberlin@dberlin.org>
* tree-ssa-alias.c (get_tmt_for): Don't handle TYPE_READONLY
specially here.
2006-07-24 Roger Sayle <roger@eyesopen.com>
PR target/28247
* gthr-solaris.h: Prototype __gthrw forms of thr_self, mutex_init and
mutex_destroy even when !_LIBOOBJC. Remove duplicate prototype of
the __gthrw form of thr_keycreate.
(__gthread_key_delete): Silence the unused argument warning.
2006-07-21 Roger Sayle <roger@eyesopen.com>
PR middle-end/28283
@ -7,6 +776,124 @@
* config/sh/sh.c (shift_costs): Return MAX_COST to inform the
middle-end that DImode shifts need to be synthesized by expand.
2006-07-20 Richard Henderson <rth@redhat.com>
PR 27889
* tree-nested.c (create_tmp_var_for): Set DECL_COMPLEX_GIMPLE_REG_P
if needed.
2006-07-20 Paul Brook <paul@codesourcery.com>
Backport from mainline.
PR 27363
* cse.c (cse_insn): Add destination addresses to hash table. Check if
they are invalidated by this instruction.
2006-07-18 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c/28286
* c-pragma.c (handle_pragma_pack): Handle invalid constants.
2006-07-18 Andrew Haley <aph@redhat.com>
PR tree-optimization/19505
* tree-cfgcleanup.c (tree_forwarder_block_p): If we have an EH
edge leaving this block, make sure that the destination of this
block has only one predecessor.
2006-07-18 Alexandre Oliva <aoliva@redhat.com>
PR c/26993
* c-common.c (handle_weakref_attribute): Ignore attribute in
the same conditions the alias attribute is ignored.
2006-07-16 Eric Botcazou <ebotcazou@libertysurf.fr>
* doc/install.texi (sparc-sun-solaris2*): Add GMP version number.
2006-07-12 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/27878
* doc/install.texi (mips-sgi-irix6): Add note about IRIX 6.5.x,
x < 19, vs wchar_t support.
2006-07-12 Richard Guenther <rguenther@suse.de>
PR tree-optimization/28187
* tree-vrp.c (vrp_operand_equal_p): New function.
(vrp_bitmap_equal_p): Likewise.
(update_value_range): Use them to compare old and new
max and min values.
2006-07-11 Richard Guenther <rguenther@suse.de>
PR tree-optimization/28162
* fold-const.c (fold_binary): For (-A) * (-B) -> A * B
make sure to convert the operands to the correct type.
2006-07-08 Matthias Klose <doko@debian.org>
* doc/sourcebuild.texi: Fix typo.
2006-07-05 Jason Merrill <jason@redhat.com>
PR c++/13983
PR c++/17519
* stor-layout.c (finish_record_layout): Copy TYPE_PACKED to variants.
2006-07-04 Paolo Bonzini <bonzini@gnu.org>
PR tree-optimization/28218
* tree-ssa-math-opts.c (execute_cse_reciprocals): Fix calls
to calculate and free the dominator information.
2006-07-04 Peter O'Gorman <peter@pogma.com>
* mklibgcc.in: chmod 644 before ranlib during install.
2006-07-04 Jakub Jelinek <jakub@redhat.com>
PR middle-end/26991
Backport from mainline
2006-02-16 Bernd Schmidt <bernd.schmidt@analog.com>
PR rtl-optimization/25636
* local-alloc.c (update_equiv_regs): Lose a bogus rtx_equal_p test
when deciding whether an insn is an initializing insn.
2006-07-04 Alan Modra <amodra@bigpond.net.au>
PR target/28207
* config/rs6000/rs6000.c (function_arg_boundary): Double-word align
128-bit IBM long doubles for ABI_V4.
2006-07-03 Pete Steinmetz <steinmtz@us.ibm.com>
Backport from mainline
* doc/invoke.texi: Add cpu_type power6.
* config.gcc: Add cpu_type power6.
* config/rs6000/rs6000.c (rs6000_override_options): Alias power6
to power5+ with Altivec.
* config/rs6000/aix52.h (ASM_CPU_SPEC): Add power6.
* config/rs6000/rs6000.h (ASM_CPU_SPEC): Add power6.
2006-07-01 Roger Sayle <roger@eyesopen.com>
PR middle-end/27428
* c-lex.c (c_lex_with_flags) <CPP_N_INVALID>: Increment errorcount
to indicate the cpplib has issued an error message for us.
2006-07-01 Martin Michlmayr <tbm@cyrius.com>
* doc/gcov.texi (Invoking Gcov): Add a missing word.
2006-06-28 Jason Merrill <jason@redhat.com>
PR c++/27768
* tree-ssa-alias.c (compute_flow_insensitive_aliasing): Add
may_aliases already in the tag's annotations to the bitmap.
2006-06-25 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/28151

View File

@ -1339,6 +1339,7 @@ libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) $(LIB2ADD_ST) specs \
LIB2ADDEHSTATIC='$(LIB2ADDEHSTATIC)' \
LIB2ADDEHSHARED='$(LIB2ADDEHSHARED)' \
LIB2ADDEHDEP='$(LIB2ADDEHDEP)' \
LIB2_SIDITI_CONV_FUNCS='$(LIB2_SIDITI_CONV_FUNCS)' \
LIBUNWIND='$(LIBUNWIND)' \
LIBUNWINDDEP='$(LIBUNWINDDEP)' \
SHLIBUNWIND_LINK='$(SHLIBUNWIND_LINK)' \
@ -2178,7 +2179,8 @@ cgraphunit.o : cgraphunit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) langhooks.h tree-inline.h toplev.h $(FLAGS_H) $(GGC_H) \
$(TARGET_H) $(CGRAPH_H) intl.h pointer-set.h function.h $(TREE_GIMPLE_H) \
$(TREE_FLOW_H) tree-pass.h $(C_COMMON_H) debug.h $(DIAGNOSTIC_H) \
$(FIBHEAP_H) output.h $(PARAMS_H) $(RTL_H) $(TIMEVAR_H) ipa-prop.h
$(FIBHEAP_H) output.h $(PARAMS_H) $(RTL_H) $(TIMEVAR_H) ipa-prop.h \
gt-cgraphunit.h
ipa.o : ipa.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(CGRAPH_H)
ipa-prop.o : ipa-prop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
langhooks.h $(GGC_H) target.h $(CGRAPH_H) ipa-prop.h \
@ -2747,7 +2749,7 @@ GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h \
$(srcdir)/cselib.h $(srcdir)/basic-block.h $(srcdir)/cgraph.h \
$(srcdir)/c-common.h $(srcdir)/c-tree.h $(srcdir)/reload.h \
$(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c $(srcdir)/cgraph.c \
$(srcdir)/ipa-prop.c $(srcdir)/ipa-cp.c\
$(srcdir)/ipa-prop.c $(srcdir)/ipa-cp.c $(srcdir)/cgraphunit.c \
$(srcdir)/dbxout.c $(srcdir)/dwarf2out.c $(srcdir)/dwarf2asm.c \
$(srcdir)/dojump.c $(srcdir)/tree-profile.c \
$(srcdir)/emit-rtl.c $(srcdir)/except.c $(srcdir)/explow.c $(srcdir)/expr.c \
@ -2789,7 +2791,7 @@ gt-tree-profile.h gt-tree-ssa-address.h \
gt-tree-ssanames.h gt-tree-iterator.h gt-gimplify.h \
gt-tree-phinodes.h gt-tree-nested.h \
gt-tree-ssa-operands.h gt-tree-ssa-propagate.h \
gt-tree-ssa-structalias.h \
gt-tree-ssa-structalias.h gt-cgraphunit.h \
gt-stringpool.h gt-targhooks.h : s-gtype ; @true
define echo_quoted_to_gtyp
@ -3158,8 +3160,8 @@ install-gcc-tooldir:
macro_list: s-macro_list; @true
s-macro_list : $(GCC_PASSES)
echo | $(GCC_FOR_TARGET) -E -dM - | \
sed -n 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p ; \
s/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \
sed -n -e 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p' \
-e 's/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \
sort -u > tmp-macro_list
$(SHELL) $(srcdir)/../move-if-change tmp-macro_list macro_list
$(STAMP) s-macro_list

View File

@ -276,16 +276,44 @@ get_pointer_alignment (tree exp, unsigned int max_align)
/* See what we are pointing at and look at its alignment. */
exp = TREE_OPERAND (exp, 0);
inner = max_align;
while (handled_component_p (exp))
if (handled_component_p (exp))
{
/* Fields in a structure can be packed, honour DECL_ALIGN
of the FIELD_DECL. For all other references the conservative
alignment is the element type alignment. */
if (TREE_CODE (exp) == COMPONENT_REF)
inner = MIN (inner, DECL_ALIGN (TREE_OPERAND (exp, 1)));
else
inner = MIN (inner, TYPE_ALIGN (TREE_TYPE (exp)));
exp = TREE_OPERAND (exp, 0);
HOST_WIDE_INT bitsize, bitpos;
tree offset;
enum machine_mode mode;
int unsignedp, volatilep;
exp = get_inner_reference (exp, &bitsize, &bitpos, &offset,
&mode, &unsignedp, &volatilep, true);
if (bitpos)
inner = MIN (inner, (unsigned) (bitpos & -bitpos));
if (offset && TREE_CODE (offset) == PLUS_EXPR
&& host_integerp (TREE_OPERAND (offset, 1), 1))
{
/* Any overflow in calculating offset_bits won't change
the alignment. */
unsigned offset_bits
= ((unsigned) tree_low_cst (TREE_OPERAND (offset, 1), 1)
* BITS_PER_UNIT);
if (offset_bits)
inner = MIN (inner, (offset_bits & -offset_bits));
offset = TREE_OPERAND (offset, 0);
}
if (offset && TREE_CODE (offset) == MULT_EXPR
&& host_integerp (TREE_OPERAND (offset, 1), 1))
{
/* Any overflow in calculating offset_factor won't change
the alignment. */
unsigned offset_factor
= ((unsigned) tree_low_cst (TREE_OPERAND (offset, 1), 1)
* BITS_PER_UNIT);
if (offset_factor)
inner = MIN (inner, (offset_factor & -offset_factor));
}
else if (offset)
inner = MIN (inner, BITS_PER_UNIT);
}
if (TREE_CODE (exp) == FUNCTION_DECL)
align = FUNCTION_BOUNDARY;
@ -295,6 +323,9 @@ get_pointer_alignment (tree exp, unsigned int max_align)
else if (CONSTANT_CLASS_P (exp))
align = MIN (inner, (unsigned)CONSTANT_ALIGNMENT (exp, align));
#endif
else if (TREE_CODE (exp) == VIEW_CONVERT_EXPR
|| TREE_CODE (exp) == INDIRECT_REF)
align = MIN (TYPE_ALIGN (TREE_TYPE (exp)), inner);
else
align = MIN (align, inner);
return MIN (align, max_align);
@ -647,7 +678,12 @@ expand_builtin_setjmp_receiver (rtx receiver_label ATTRIBUTE_UNUSED)
#ifdef HAVE_nonlocal_goto
if (! HAVE_nonlocal_goto)
#endif
emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
{
emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
/* This might change the hard frame pointer in ways that aren't
apparent to early optimization passes, so force a clobber. */
emit_insn (gen_rtx_CLOBBER (VOIDmode, hard_frame_pointer_rtx));
}
#if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
if (fixed_regs[ARG_POINTER_REGNUM])
@ -728,6 +764,12 @@ expand_builtin_setjmp (tree arglist, rtx target)
emit_label (next_lab);
/* Because setjmp and longjmp are not represented in the CFG, a cfgcleanup
may find that the basic block starting with NEXT_LAB is unreachable.
The whole block, along with NEXT_LAB, would be removed (see PR26983).
Make sure that never happens. */
LABEL_PRESERVE_P (next_lab) = 1;
expand_builtin_setjmp_receiver (next_lab);
/* Set TARGET to one. */
@ -5507,6 +5549,8 @@ expand_builtin_sync_operation (enum machine_mode mode, tree arglist,
arglist = TREE_CHAIN (arglist);
val = expand_expr (TREE_VALUE (arglist), NULL, mode, EXPAND_NORMAL);
/* If VAL is promoted to a wider mode, convert it back to MODE. */
val = convert_to_mode (mode, val, 1);
if (ignore)
return expand_sync_operation (mem, val, code);
@ -5530,9 +5574,13 @@ expand_builtin_compare_and_swap (enum machine_mode mode, tree arglist,
arglist = TREE_CHAIN (arglist);
old_val = expand_expr (TREE_VALUE (arglist), NULL, mode, EXPAND_NORMAL);
/* If OLD_VAL is promoted to a wider mode, convert it back to MODE. */
old_val = convert_to_mode (mode, old_val, 1);
arglist = TREE_CHAIN (arglist);
new_val = expand_expr (TREE_VALUE (arglist), NULL, mode, EXPAND_NORMAL);
/* If NEW_VAL is promoted to a wider mode, convert it back to MODE. */
new_val = convert_to_mode (mode, new_val, 1);
if (is_bool)
return expand_bool_compare_and_swap (mem, old_val, new_val, target);
@ -5557,6 +5605,8 @@ expand_builtin_lock_test_and_set (enum machine_mode mode, tree arglist,
arglist = TREE_CHAIN (arglist);
val = expand_expr (TREE_VALUE (arglist), NULL, mode, EXPAND_NORMAL);
/* If VAL is promoted to a wider mode, convert it back to MODE. */
val = convert_to_mode (mode, val, 1);
return expand_sync_lock_test_and_set (mem, val, target);
}
@ -6885,6 +6935,50 @@ fold_fixed_mathfn (tree fndecl, tree arglist)
return build_function_call_expr (decl, arglist);
}
}
/* Canonicalize llround (x) to lround (x) on LP64 targets where
sizeof (long long) == sizeof (long). */
if (TYPE_PRECISION (long_long_integer_type_node)
== TYPE_PRECISION (long_integer_type_node))
{
tree newfn = NULL_TREE;
switch (fcode)
{
case BUILT_IN_LLCEIL:
case BUILT_IN_LLCEILF:
case BUILT_IN_LLCEILL:
newfn = mathfn_built_in (TREE_TYPE (arg), BUILT_IN_LCEIL);
break;
case BUILT_IN_LLFLOOR:
case BUILT_IN_LLFLOORF:
case BUILT_IN_LLFLOORL:
newfn = mathfn_built_in (TREE_TYPE (arg), BUILT_IN_LFLOOR);
break;
case BUILT_IN_LLROUND:
case BUILT_IN_LLROUNDF:
case BUILT_IN_LLROUNDL:
newfn = mathfn_built_in (TREE_TYPE (arg), BUILT_IN_LROUND);
break;
case BUILT_IN_LLRINT:
case BUILT_IN_LLRINTF:
case BUILT_IN_LLRINTL:
newfn = mathfn_built_in (TREE_TYPE (arg), BUILT_IN_LRINT);
break;
default:
break;
}
if (newfn)
{
tree newcall = build_function_call_expr (newfn, arglist);
return fold_convert (TREE_TYPE (TREE_TYPE (fndecl)), newcall);
}
}
return 0;
}

View File

@ -296,7 +296,7 @@ powerpc*-*-*)
extra_headers="ppc-asm.h altivec.h spe.h"
need_64bit_hwint=yes
case x$with_cpu in
xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[345]|xrs64a)
xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[3456]|xrs64a)
cpu_is_64bit=yes
;;
esac
@ -951,7 +951,7 @@ hppa*64*-*-hpux11*)
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o \
libgcc_stub.a"
case x${enable_threads} in
xyes | xposix )
x | xyes | xposix )
thread_file=posix
;;
esac
@ -980,7 +980,7 @@ hppa[12]*-*-hpux11*)
tmake_file="$tmake_file pa/t-slibgcc-dwarf-ver"
fi
case x${enable_threads} in
xyes | xposix )
x | xyes | xposix )
thread_file=posix
;;
esac
@ -2729,7 +2729,7 @@ case "${target}" in
eval "with_$which=405"
;;
"" | common \
| power | power[2345] | powerpc | powerpc64 \
| power | power[23456] | powerpc | powerpc64 \
| rios | rios1 | rios2 | rsc | rsc1 | rs64a \
| 401 | 403 | 405 | 405fp | 440 | 440fp | 505 \
| 601 | 602 | 603 | 603e | ec603e | 604 \

View File

@ -1,18 +0,0 @@
/* Public domain. */
#if __LDBL_MANT_DIG__ == 106 || __LDBL_MANT_DIG__ == 113
typedef int DItype __attribute__ ((mode (DI)));
typedef float TFtype __attribute__ ((mode (TF)));
DItype __fixtfdi (TFtype);
DItype __fixunstfdi (TFtype);
DItype
__fixtfdi (TFtype x)
{
if (x < 0)
return - __fixunstfdi (-x);
return __fixunstfdi (x);
}
#endif

View File

@ -1,35 +0,0 @@
/* Public domain. */
#if __LDBL_MANT_DIG__ == 106 || __LDBL_MANT_DIG__ == 113
typedef int DItype __attribute__ ((mode (DI)));
typedef int SItype __attribute__ ((mode (SI)));
typedef unsigned int UDItype __attribute__ ((mode (DI)));
typedef unsigned int USItype __attribute__ ((mode (SI)));
typedef float TFtype __attribute__ ((mode (TF)));
DItype __fixunstfdi (TFtype);
DItype
__fixunstfdi (TFtype a)
{
if (a < 0)
return 0;
/* Compute high word of result, as a flonum. */
const TFtype b = (a / (((UDItype) 1) << (sizeof (SItype) * 8)));
/* Convert that to fixed (but not to DItype!),
and shift it into the high word. */
UDItype v = (USItype) b;
v <<= (sizeof (SItype) * 8);
/* Remove high part from the TFtype, leaving the low part as flonum. */
a -= (TFtype) v;
/* Convert that to fixed (but not to DItype!) and add it in.
Sometimes A comes out negative. This is significant, since
A has more bits than a long int does. */
if (a < 0)
v -= (USItype) (-a);
else
v += (USItype) a;
return v;
}
#endif

View File

@ -1,25 +0,0 @@
/* Public domain. */
#if __LDBL_MANT_DIG__ == 106 || __LDBL_MANT_DIG__ == 113
typedef int DItype __attribute__ ((mode (DI)));
typedef int SItype __attribute__ ((mode (SI)));
typedef unsigned int UDItype __attribute__ ((mode (DI)));
typedef unsigned int USItype __attribute__ ((mode (SI)));
typedef float DFtype __attribute__ ((mode (DF)));
typedef float TFtype __attribute__ ((mode (TF)));
TFtype __floatditf (UDItype);
TFtype
__floatditf (UDItype u)
{
DFtype dh, dl;
dh = (SItype) (u >> (sizeof (SItype) * 8));
dh *= 2.0 * (((UDItype) 1) << ((sizeof (SItype) * 8) - 1));
dl = (USItype) (u & ((((UDItype) 1) << (sizeof (SItype) * 8)) - 1));
return (TFtype) dh + (TFtype) dl;
}
#endif

View File

@ -1,25 +0,0 @@
/* Public domain. */
#if __LDBL_MANT_DIG__ == 106 || __LDBL_MANT_DIG__ == 113
typedef int DItype __attribute__ ((mode (DI)));
typedef int SItype __attribute__ ((mode (SI)));
typedef unsigned int UDItype __attribute__ ((mode (DI)));
typedef unsigned int USItype __attribute__ ((mode (SI)));
typedef float DFtype __attribute__ ((mode (DF)));
typedef float TFtype __attribute__ ((mode (TF)));
TFtype __floatunditf (UDItype);
TFtype
__floatunditf (UDItype u)
{
DFtype dh, dl;
dh = (USItype) (u >> (sizeof (SItype) * 8));
dh *= 2.0 * (((UDItype) 1) << ((sizeof (SItype) * 8) - 1));
dl = (USItype) (u & ((((UDItype) 1) << (sizeof (SItype) * 8)) - 1));
return (TFtype) dh + (TFtype) dl;
}
#endif

View File

@ -4439,13 +4439,15 @@ bool
mips_expand_unaligned_store (rtx dest, rtx src, unsigned int width, int bitpos)
{
rtx left, right;
enum machine_mode mode;
if (!mips_get_unaligned_mem (&dest, width, bitpos, &left, &right))
return false;
src = gen_lowpart (mode_for_size (width, MODE_INT, 0), src);
mode = mode_for_size (width, MODE_INT, 0);
src = gen_lowpart (mode, src);
if (GET_MODE (src) == DImode)
if (mode == DImode)
{
emit_insn (gen_mov_sdl (dest, src, left));
emit_insn (gen_mov_sdr (copy_rtx (dest), copy_rtx (src), right));
@ -4458,6 +4460,20 @@ mips_expand_unaligned_store (rtx dest, rtx src, unsigned int width, int bitpos)
return true;
}
/* Return true if X is a MEM with the same size as MODE. */
bool
mips_mem_fits_mode_p (enum machine_mode mode, rtx x)
{
rtx size;
if (!MEM_P (x))
return false;
size = MEM_SIZE (x);
return size && INTVAL (size) == GET_MODE_SIZE (mode);
}
/* Return true if (zero_extract OP SIZE POSITION) can be used as the
source of an "ext" instruction or the destination of an "ins"
instruction. OP must be a register operand and the following

View File

@ -39,7 +39,7 @@
.file "crtsavres.asm"
.section ".text"
#include "rs6000/ppc-asm.h"
#include "ppc-asm.h"
/* On PowerPC64 Linux, these functions are provided by the linker. */
#ifndef __powerpc64__

View File

@ -1160,6 +1160,9 @@ rs6000_override_options (const char *default_cpu)
{"power5+", PROCESSOR_POWER5,
POWERPC_BASE_MASK | MASK_POWERPC64 | MASK_PPC_GFXOPT
| MASK_MFCRF | MASK_POPCNTB | MASK_FPRND},
{"power6", PROCESSOR_POWER5,
POWERPC_7400_MASK | MASK_POWERPC64 | MASK_MFCRF | MASK_POPCNTB
| MASK_FPRND},
{"powerpc", PROCESSOR_POWERPC, POWERPC_BASE_MASK},
{"powerpc64", PROCESSOR_POWERPC64,
POWERPC_BASE_MASK | MASK_PPC_GFXOPT | MASK_POWERPC64},
@ -3367,6 +3370,7 @@ rs6000_legitimize_reload_address (rtx x, enum machine_mode mode,
if (GET_CODE (x) == SYMBOL_REF
&& !ALTIVEC_VECTOR_MODE (mode)
&& !SPE_VECTOR_MODE (mode)
#if TARGET_MACHO
&& DEFAULT_ABI == ABI_DARWIN
&& (flag_pic || MACHO_DYNAMIC_NO_PIC_P)
@ -3468,6 +3472,7 @@ rs6000_legitimate_address (enum machine_mode mode, rtx x, int reg_ok_strict)
if ((GET_CODE (x) == PRE_INC || GET_CODE (x) == PRE_DEC)
&& !ALTIVEC_VECTOR_MODE (mode)
&& !SPE_VECTOR_MODE (mode)
&& mode != TFmode
/* Restrict addressing for DI because of our SUBREG hackery. */
&& !(TARGET_E500_DOUBLE && (mode == DFmode || mode == DImode))
&& TARGET_UPDATE
@ -4403,7 +4408,12 @@ function_arg_padding (enum machine_mode mode, tree type)
of an argument with the specified mode and type. If it is not defined,
PARM_BOUNDARY is used for all arguments.
V.4 wants long longs to be double word aligned.
V.4 wants long longs and doubles to be double word aligned. Just
testing the mode size is a boneheaded way to do this as it means
that other types such as complex int are also double word aligned.
However, we're stuck with this because changing the ABI might break
existing library interfaces.
Doubleword align SPE vectors.
Quadword align Altivec vectors.
Quadword align large synthetic vector types. */
@ -4411,7 +4421,11 @@ function_arg_padding (enum machine_mode mode, tree type)
int
function_arg_boundary (enum machine_mode mode, tree type)
{
if (DEFAULT_ABI == ABI_V4 && GET_MODE_SIZE (mode) == 8)
if (DEFAULT_ABI == ABI_V4
&& (GET_MODE_SIZE (mode) == 8
|| (TARGET_HARD_FLOAT
&& TARGET_FPRS
&& mode == TFmode)))
return 64;
else if (SPE_VECTOR_MODE (mode)
|| (type && TREE_CODE (type) == VECTOR_TYPE
@ -9709,12 +9723,12 @@ effects of instruction do not correspond to semantics of RTL insn. */
int
insvdi_rshift_rlwimi_p (rtx sizeop, rtx startop, rtx shiftop)
{
if (INTVAL (startop) < 64
&& INTVAL (startop) > 32
&& (INTVAL (sizeop) + INTVAL (startop) < 64)
&& (INTVAL (sizeop) + INTVAL (startop) > 33)
&& (INTVAL (sizeop) + INTVAL (startop) + INTVAL (shiftop) < 96)
&& (INTVAL (sizeop) + INTVAL (startop) + INTVAL (shiftop) >= 64)
if (INTVAL (startop) > 32
&& INTVAL (startop) < 64
&& INTVAL (sizeop) > 1
&& INTVAL (sizeop) + INTVAL (startop) < 64
&& INTVAL (shiftop) > 0
&& INTVAL (sizeop) + INTVAL (shiftop) < 32
&& (64 - (INTVAL (shiftop) & 63)) >= INTVAL (sizeop))
return 1;
@ -10696,7 +10710,8 @@ print_operand (FILE *file, rtx x, int code)
tmp = XEXP (x, 0);
if (TARGET_E500)
/* Ugly hack because %y is overloaded. */
if (TARGET_E500 && GET_MODE_SIZE (GET_MODE (x)) == 8)
{
/* Handle [reg]. */
if (GET_CODE (tmp) == REG)

View File

@ -1,3 +1,537 @@
2006-10-18 Mark Shinwell <shinwell@codesourcery.com>
PR c++/26884
* typeck2.c (digest_init): Raise error upon attempts to
initialize arrays with variables.
2006-10-18 Richard Guenther <rguenther@suse.de>
PR C++/25878
Backport from mainline:
2006-08-25 Nathan Sidwell <nathan@codesourcery.com>
PR c++/27787
* decl.c (make_typename_type): Only try and resolve it when
context is not dependent. Refactor.
* decl2.c (check_classfn): Push to class scope before looking for
the function.
2006-10-17 Richard Guenther <rguenther@suse.de>
Backport from mainline:
2006-09-07 Andrew Pinski <pinskia@physics.uc.edu>
PR C++/28906
* init.c (build_new_1): Build a distinct type copy
for the array type that was returned from
build_cplus_array_type.
2006-10-16 Mark Mitchell <mark@codesourcery.com>
PR c++/29435
* typeck.c (cxx_sizeof_or_alignof_type): Complete non-dependent
types when their sizes are required. Refine test for VLAs.
2006-10-16 Mark Mitchell <mark@codesourcery.com>
PR c++/29408
* parser.c (cp_parser_using_declaration): Stop parsing when
something goes wrong with an access declaration.
2006-10-14 Richard Guenther <rguenther@suse.de>
PR rtl-optimization/29323
* decl.c (finish_function): Set TREE_NOTHROW only for
functions that bind local.
2006-10-13 Mark Mitchell <mark@codesourcery.com>
PR c++/28506
* parser.c (function_declarator_p): New function.
(cp_parser_init_declarator): Use it.
(cp_parser_member_declaration): Likewise.
2006-10-12 Mark Mitchell <mark@codesourcery.com>
PR c++/29318
* rtti.c (get_tinfo_decl): Refuse to create type info objects for
variably modified types.
2006-10-12 Mark Mitchell <mark@codesourcery.com>
PR c++/29175
* decl.c (check_initializer): Issue errors about trying to
initialize arrays whose elements have variable size.
2006-10-07 Andrew Pinski <pinskia@physics.uc.edu>
PR C++/29002
* init.c (build_zero_init): If we have an error mark node for
the array size, return.
2006-10-06 Andrew Pinski <pinskia@physics.uc.edu>
PR c++/28302
* typeck.c (build_unary_op <case BIT_NOT_EXPR:>): Don't call
perform_integral_promotions for non integral type
2006-10-06 Andrew Pinski <pinskia@physics.uc.edu>
PR C++/28450
* cp/init.c (build_zero_init): Handle VECTOR_TYPE and
COMPLEX_TYPEs.
2006-10-05 Andrew Pinski <pinskia@physics.uc.edu>
PR C++/28349
* call.c (build_x_va_arg): Remove the reference type
from the type before creating the pointer type.
2006-10-03 Mark Mitchell <mark@codesourcery.com>
PR c++/29138
* decl2.c (grokfield): Don't handle access declarations here.
* parser.c (cp_parser_using_declaration): Handle access
declarations too.
(cp_parser_block_declaration): Adjust calls to
cp_parser_using_declaration.
(cp_parser_member_declaration): Likewise. Use
cp_parser_using_declaration to look for access_declarations.
2006-10-02 Mark Mitchell <mark@codesourcery.com>
PR c++/29226
* typeck.c (cxx_sizeof_or_alignof_type): Tidy. In templates, do
not try to actually evaluate sizeof for a VLA type.
2006-10-01 Mark Mitchell <mark@codesourcery.com>
PR c++/29080
* parser.c (cp_parser_postfix_dot_deref_expression): Use
BASELINK_ACCESS_BINFO as the qualifying scope when calling
adjust_result_of_qualified_name_lookup.
2006-09-22 Jason Merrill <jason@redhat.com>
PR c++/28996
* cvt.c (convert_to_void): Strip COMPONENT_REF to functions.
2006-09-21 Steven Bosscher <steven@gcc.gnu.org>
PR c++/29087
Backport from mainline:
* parser.c (cp_parser_labeled_statement): Return nothing. Do
not take in_statement_expr and in_compound as arguments. Rename
to cp_parser_label_for_labeled_statement. Parse only the label,
not the statement.
(cp_parser_statement): Parse the statement of a labeled-statement
from here, using tail recursion.
2006-09-07 Jason Merrill <jason@redhat.com>
PR c++/26957
* method.c (use_thunk): Clear DECL_HAS_VALUE_EXPR_P on copied
parms.
2006-09-06 Mark Mitchell <mark@codesourcery.com>
PR c++/28886
* pt.c (unify): Avoid unnecessary calls to fold_build2 for array
dimensions.
2006-09-06 Zak Kipling <zak@transversal.com>
PR c++/26195
* decl.c (make_rtl_for_nonlocal_decl),
(start_preparsed_function): Don't use lbasename on
input_filename when calling get_fileinfo.
* semantics.c (begin_class_definition): Likewise.
* lex.c (cxx_make_type): Likewise.
(handle_pragma_interface): Call get_fileinfo on input_filename,
not on the parameter to the directive.
2006-09-06 Jason Merrill <jason@redhat.com>
PR c++/26696
* cvt.c (convert_to_void): Replace a subexpression with no side
effects with void_zero_node.
* tree.c (is_overloaded_fn): Look through COMPONENT_REF.
(get_first_fn): Ditto.
* decl.c (grokdeclarator): No need to look through COMPONENT_REF.
2006-09-05 Jason Merrill <jason@redhat.com>
PR c++/26571
* parser.c (cp_parser_diagnose_invalid_type_name): Handle the case
where the name is a type used incorrectly.
PR c++/26671
* typeck.c (maybe_warn_about_returning_address_of_local): Look
through COMPONENT_REF and ARRAY_REF.
PR c++/26102
* name-lookup.c (do_class_using_decl): Try to find the base even
if bases_dependent_p.
* pt.c (type_dependent_expression_p): A USING_DECL is dependent.
PR c++/19809
* pt.c (tsubst_friend_function): Set DECL_INITIAL before pushdecl.
2006-09-02 Jakub Jelinek <jakub@redhat.com>
PR c++/28878
* except.c (build_throw): Only set current_function_returns_abnormally
if cfun is not NULL.
PR c++/26917
* repo.c (repo_file): Remove.
(open_repo_file, reopen_repo_file_for_write): Return fopened
FILE * instead of setting global repo_file variable.
(init_repo): Adjust caller.
(finish_repo): Likewise. Return instead of goto out before
reopen_repo_file_for_write has been called.
2006-08-30 Jason Merrill <jason@redhat.com>
PR c++/26670
* class.c (check_field_decls): Don't unset TYPE_PACKED until all
the fields have been processed.
PR c++/26670
* class.c (check_field_decls): Unset TYPE_PACKED (t) if one of the
fields can't be packed.
2006-08-28 Jason Merrill <jason@redhat.com>
PR c++/26577
* cvt.c (convert_to_void): Don't automatically load from volatiles
of TREE_ADDRESSABLE type.
2006-08-28 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/28860
* cp-tree.h (maybe_process_partial_specialization): Return
tree instead of void.
* parser.c (cp_parser_class_head): Use return value of
maybe_process_partial_specialization.
* pt.c (maybe_process_partial_specialization): Return error_mark_node
for broken specializations, TYPE otherwise. Check for template
template parameters.
2006-08-27 Mark Mitchell <mark@codesourcery.com>
PR c++/28058
* pt.c (register_specialization): Return error_mark_node for
specialization-after-instantiation.
* decl2.c (mark_used): Mark the main function used when one of its
clones is used.
2006-08-26 Mark Mitchell <mark@codesourcery.com>
PR c++/28595
* pt.c (tsubst): Issue errors about attempts to create VLAs at
template-instantiation time.
2006-08-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/28853
* typeck2.c (cxx_incomplete_type_diagnostic): Handle template
template parameters. Improve error message for template type
parameters.
2006-08-25 Mark Mitchell <mark@codesourcery.com>
PR c++/28056
* decl.c (grokdeclarator): Disallow declarations with qualified
names in local scopes.
2006-08-23 Jason Merrill <jason@redhat.com>
PR c++/27714
* pt.c (push_template_decl_real): A friend template with class
scope isn't primary.
2006-08-22 Jason Merrill <jason@redhat.com>
PR c++/23372
* call.c (build_over_call): Don't make a copy here if build_call
will make one too.
2006-08-20 Mark Mitchell <mark@codesourcery.com>
PR c++/28346
* pt.c (tsubst_qualified_id): Do not strip references from
OFFSET_REFs.
2006-08-17 Jason Merrill <jason@redhat.com>
PR c++/28385
* pt.c (tsubst) [TEMPLATE_TYPE_PARM]: Ignore quals from template
if arg is a function.
2006-08-17 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/28606
* parser.c (cp_parser_diagnose_invalid_type_name): Handle BIT_NOT_EXPR.
Fix formatting.
(cp_parser_parse_and_diagnose_invalid_type_name): Tighten condition
for valid type-names.
(cp_parser_unqualified_id): Fix error handling for destructors.
PR c++/28710
* decl.c (xref_tag): Improve error message. Return early on error.
2006-08-16 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/28593
* init.c (build_new): Return early on invalid placement.
2006-08-13 Jakub Jelinek <jakub@redhat.com>
PR c++/28677
PR middle-end/27793
* cp-tree.h (cxx_int_tree_map): New struct.
(struct language_function): Add extern_decl_map field.
* name-lookup.c (pushdecl_maybe_friend): Add x -> t mapping
to cp_function_chain->extern_decl_map hash table instead of
copying over DECL_UID.
* cp-gimplify.c (cxx_int_tree_map_eq, cxx_int_tree_map_hash): New
functions.
(cp_genericize_r): Remap DECL_EXTERN local decls using
cp_function_chain->extern_decl_map hash table.
* decl.c (finish_function): Clear extern_decl_map.
2006-08-10 Lee Millward <lee.millward@codesourcery.com>
PR c++/28594
PR c++/28637
PR c++/28638
PR c++/28639
PR c++/28640
PR c++/28641
Revert
2006-07-28 Lee Millward <lee.millward@codesourcery.com>
PR c++/27668
PR c++/27962
* pt.c (process_template_parm) Store invalid template
parameters as error_mark_node in the paramater list.
(push_inline_template_parms_recursive): Handle invalid
template parameters.
(comp_template_parms): Likewise.
(check_default_tmpl_args): Likewise.
(coerce_template_template_parms): Likewise.
(coerce_template_parms): Likewise.
(mangle_class_name_for_template): Likewise.
(tsubst_template_parms): Likewise.
* error.c (dump_template_argument_list): Likewise.
2006-08-07 Lee Millward <lee.millward@codesourcery.com>
* pt.c (coerce_template_parms): Fix misplaced parenthesis.
2006-08-03 Lee Millward <lee.millward@codesourcery.com>
PR c++/28347
* decl.c (start_decl): Return error_mark_node if a
diagnostic was issed for an invalid typedef initialization
2006-08-03 Steve Ellcey <sje@cup.hp.com>
PR c++/28432
* decl2.c (check_classfn): Remove early return.
* search.c (lookup_member): Return NULL with bad type.
2006-08-03 Steve Ellcey <sje@cup.hp.com>
PR c++/28256
* decl.c (check_initializer): Check for 1 initializer on scalar types.
2006-08-03 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/27508
* parser.c (cp_parser_unqualified_id): Check for invalid scopes
when parsing destructor names.
PR c++/28274
* decl.c (duplicate_decls): Call check_default_args here.
(start_preparsed_function): Do not call check_default_args.
* name-lookup.c (pushdecl_maybe_friend): Only call
check_default_args if duplicate_decls got bypassed.
2006-08-02 Mark Mitchell <mark@codesourcery.com>
PR c++/28557
* pt.c (tsubst_baselink): Substitute into BASELINK_OPTYPE.
2006-07-31 Mark Mitchell <mark@codesourcery.com>
PR c++/28523
* tree.c (stabilize_expr): Tweak documentation. Add assertion.
(stabilize_call): Tweak documentation.
(stabilize_init): Only call stabilize_call for calls.
2006-07-28 Lee Millward <lee.millward@codesourcery.com>
PR c++/27668
PR c++/27962
* pt.c (process_template_parm) Store invalid template
parameters as error_mark_node in the paramater list.
(push_inline_template_parms_recursive): Handle invalid
template parameters.
(comp_template_parms): Likewise.
(check_default_tmpl_args): Likewise.
(coerce_template_template_parms): Likewise.
(coerce_template_parms): Likewise.
(mangle_class_name_for_template): Likewise.
(tsubst_template_parms): Likewise.
* error.c (dump_template_argument_list): Likewise.
2006-07-24 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/27572
* decl.c (grokdeclarator): Return error_mark_node after invalid
typedef.
2006-07-23 Mark Mitchell <mark@codesourcery.com>
PR c++/28025
* cp-tree.h (LOOKUP_HIDDEN): New macro. Reformat comments.
* name-lookup.c (unqualified_namespace_lookup): There is no way to
have a hidden name in non-namespace scopes.
* pt.c (tsubst_friend_class): Look for hidden names.
* decl.c (lookup_and_check_tag): Fix typo in comment.
* semantics.c (finish_compound_literal): Fix typo in comment.
2006-07-22 Lee Millward <lee.millward@gmail.com>
PR c++/28258
* method.c (locate_copy): Check for non_reference
returning error_mark_node.
2006-07-21 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/28363
* semantics.c (check_template_template_default_arg): Simplify
error handling.
2006-07-20 Steve Ellcey <sje@cup.hp.com>
PR c++/27495
* search.c (adjust_result_of_qualified_name_lookup): Change
assert to part of if statement.
2006-07-19 Mark Mitchell <mark@codesourcery.com>
PR c++/28338
* decl.c (layout_var_decl): Don't call push_local_name here.
(initialize_artificial_var): Assert artificiality.
(cp_finish_decl): Call push_local_name here.
2006-07-18 Mark Mitchell <mark@codesourcery.com>
PR c++/28337
* typeck.c (build_binary_op): Short-circuit pointer arithmetic in
templates.
PR c++/28048
* semantics.c (check_accessibility_of_qualified_id): Robustify.
2006-07-18 Mark Mitchell <mark@codesourcery.com>
PR c++/28235
* pt.c (tsubst_decl): Handling substitutions into a static data
member from within the scope of the tempalte itself.
2006-07-18 Steve Ellcey <sje@cup.hp.com>
PR c++/28291
* decl.c (reshape_init_class): Return error_mark_node on error.
2006-07-18 Steve Ellcey <sje@cup.hp.com>
PR c++/28304
* decl2.c (check_classfn): Return NULL_TREE on error.
2006-07-15 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/28249
* parser.c (cp_parser_check_decl_spec): New function.
(cp_parser_decl_specifier_seq): Factor out check for repeated
decl-specifiers into cp_parser_check_decl_spec. Use it.
(cp_parser_type_specifier_seq): Use it.
PR c++/28294
* semantics.c (finish_offsetof): Use TREE_OPERAND for COMPONENT_REFs
only.
2006-07-14 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/28343
* decl.c (cp_finish_decl): Check asmspec_tree for error_mark_node.
* decl2.c (grokfield): Likewise.
2006-06-16 Mark Mitchell <mark@codesourcery.com>
PR c++/28016
* decl.c (cp_finsh_decl): Do not emit uninstantiated static data
members.
2006-07-11 Lee Millward <lee.millward@gmail.com>
PR c++/28051
* mangle.c (mangle_conv_op_name_for_type): Check for
invalid types.
* name-lookup.c (push_class_level_binding): Robustify.
(do_class_using_decl): Return early if name is
error_mark_node.
2006-07-10 Steve Ellcey <sje@cup.hp.com>
PR c++/27019
* typeck2.c (process_init_constructor_array): Set ce->value on errors.
2006-07-10 Steve Ellcey <sje@cup.hp.com>
PR c++/28114
* name-lookup.c (pushtag): Return if we have error_mark_node.
2006-07-08 Lee Millward <lee.millward@gmail.com>
Andrew Pinski <pinskia@gmail.com>
PR c++/27820
* decl.c (define_label): Return error_mark_node on error.
* semantics.c (finish_label_stmt): Don't call
add_stmt for invalid labels.
2006-07-05 Jason Merrill <jason@redhat.com>
PR c++/13983
PR c++/17519
* class.c (check_field_decls): Check TYPE_PACKED after
stripping array types.
PR c++/18681
* friend.c (is_friend): Fix DR 45 implementation.
2006-06-30 Jason Merrill <jason@redhat.com>
PR c++/26577
* call.c (build_new_method_call): Force evaluation of the
instance pointer, not the object.
PR c++/18698
* decl2.c (grokfield): Only try to treat the decl as an access
declaration if the scope is a class.
2006-06-28 Jason Merrill <jason@redhat.com>
PR c++/27424
* pt.c (convert_template_argument): Pass all template arguments
on to coerce_template_template_parms.
2006-06-25 Lee Millward <lee.millward@gmail.com>
PR c++/27821

View File

@ -1621,6 +1621,9 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
check_redeclaration_exception_specification (newdecl, olddecl);
TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
if (TREE_CODE (newdecl) == FUNCTION_DECL)
check_default_args (newdecl);
/* Lay the type out, unless already done. */
if (! same_type_p (newtype, oldtype)
&& TREE_TYPE (newdecl) != error_mark_node
@ -2415,7 +2418,10 @@ define_label (location_t location, tree name)
pedwarn ("label named wchar_t");
if (DECL_INITIAL (decl) != NULL_TREE)
error ("duplicate label %qD", decl);
{
error ("duplicate label %qD", decl);
POP_TIMEVAR_AND_RETURN(TV_NAME_LOOKUP, error_mark_node);
}
else
{
/* Mark label as having been defined. */
@ -2640,6 +2646,8 @@ make_typename_type (tree context, tree name, enum tag_types tag_type,
tsubst_flags_t complain)
{
tree fullname;
tree t;
bool want_template;
if (name == error_mark_node
|| context == NULL_TREE
@ -2677,73 +2685,60 @@ make_typename_type (tree context, tree name, enum tag_types tag_type,
gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
gcc_assert (TYPE_P (context));
if (!dependent_type_p (context)
|| currently_open_class (context))
{
if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
{
tree tmpl = NULL_TREE;
if (IS_AGGR_TYPE (context))
tmpl = lookup_field (context, name, 0, false);
if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
{
if (complain & tf_error)
error ("no class template named %q#T in %q#T",
name, context);
return error_mark_node;
}
/* When the CONTEXT is a dependent type, NAME could refer to a
dependent base class of CONTEXT. So we cannot peek inside it,
even if CONTEXT is a currently open scope. */
if (dependent_type_p (context))
return build_typename_type (context, name, fullname, tag_type);
if (complain & tf_error)
perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
return lookup_template_class (tmpl,
TREE_OPERAND (fullname, 1),
NULL_TREE, context,
/*entering_scope=*/0,
tf_error | tf_warning | tf_user);
}
else
{
tree t;
if (!IS_AGGR_TYPE (context))
{
if (complain & tf_error)
error ("no type named %q#T in %q#T", name, context);
return error_mark_node;
}
t = lookup_field (context, name, 0, true);
if (t)
{
if (TREE_CODE (t) != TYPE_DECL)
{
if (complain & tf_error)
error ("no type named %q#T in %q#T", name, context);
return error_mark_node;
}
if (complain & tf_error)
perform_or_defer_access_check (TYPE_BINFO (context), t);
if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
t = TREE_TYPE (t);
return t;
}
}
}
/* If the CONTEXT is not a template type, then either the field is
there now or its never going to be. */
if (!dependent_type_p (context))
if (!IS_AGGR_TYPE (context))
{
if (complain & tf_error)
error ("no type named %q#T in %q#T", name, context);
error ("%q#T is not a class", context);
return error_mark_node;
}
want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
/* We should only set WANT_TYPE when we're a nested typename type.
Then we can give better diagnostics if we find a non-type. */
t = lookup_field (context, name, 0, /*want_type=*/true);
if (!t)
{
if (complain & tf_error)
error (want_template ? "no class template named %q#T in %q#T"
: "no type named %q#T in %q#T", name, context);
return error_mark_node;
}
if (want_template && !DECL_CLASS_TEMPLATE_P (t))
{
if (complain & tf_error)
error ("%<typename %T::%D%> names %q#T, which is not a class template",
context, name, t);
return error_mark_node;
}
if (!want_template && TREE_CODE (t) != TYPE_DECL)
{
if (complain & tf_error)
error ("%<typename %T::%D%> names %q#T, which is not a type",
context, name, t);
return error_mark_node;
}
if (complain & tf_error)
perform_or_defer_access_check (TYPE_BINFO (context), t);
return build_typename_type (context, name, fullname, tag_type);
if (want_template)
return lookup_template_class (t, TREE_OPERAND (fullname, 1),
NULL_TREE, context,
/*entering_scope=*/0,
tf_error | tf_warning | tf_user);
if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
t = TREE_TYPE (t);
return t;
}
/* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
@ -3721,8 +3716,7 @@ start_decl (const cp_declarator *declarator,
{
case TYPE_DECL:
error ("typedef %qD is initialized (use __typeof__ instead)", decl);
initialized = 0;
break;
return error_mark_node;
case FUNCTION_DECL:
error ("function %q#D is initialized like a variable", decl);
@ -4055,12 +4049,6 @@ layout_var_decl (tree decl)
{
tree type;
if (TREE_STATIC (decl)
&& !DECL_ARTIFICIAL (decl)
&& current_function_decl
&& DECL_CONTEXT (decl) == current_function_decl)
push_local_name (decl);
type = TREE_TYPE (decl);
if (type == error_mark_node)
return;
@ -4371,8 +4359,11 @@ reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
if (!field || TREE_CODE (field) != FIELD_DECL)
error ("%qT has no non-static data member named %qD", type,
d->cur->index);
{
error ("%qT has no non-static data member named %qD", type,
d->cur->index);
return error_mark_node;
}
}
/* If we processed all the member of the class, we are done. */
@ -4590,22 +4581,45 @@ check_initializer (tree decl, tree init, int flags, tree *cleanup)
if (type == error_mark_node)
/* We will have already complained. */
init = NULL_TREE;
else if (init && COMPLETE_TYPE_P (type)
&& !TREE_CONSTANT (TYPE_SIZE (type)))
if (TREE_CODE (type) == ARRAY_TYPE)
{
error ("variable-sized object %qD may not be initialized", decl);
init = NULL_TREE;
tree element_type = TREE_TYPE (type);
/* The array type itself need not be complete, because the
initializer may tell us how many elements are in the array.
But, the elements of the array must be complete. */
if (!COMPLETE_TYPE_P (complete_type (element_type)))
{
error ("elements of array %q#D have incomplete type", decl);
return NULL_TREE;
}
/* It is not valid to initialize an a VLA. */
if (init
&& ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
|| !TREE_CONSTANT (TYPE_SIZE (element_type))))
{
error ("variable-sized object %qD may not be initialized", decl);
return NULL_TREE;
}
}
else if (TREE_CODE (type) == ARRAY_TYPE
&& !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
{
error ("elements of array %q#D have incomplete type", decl);
init = NULL_TREE;
}
else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
else if (!COMPLETE_TYPE_P (type))
{
error ("%qD has incomplete type", decl);
TREE_TYPE (decl) = error_mark_node;
return NULL_TREE;
}
else
/* There is no way to make a variable-sized class type in GNU C++. */
gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
if (!CP_AGGREGATE_TYPE_P (type)
&& init && TREE_CODE (init) == CONSTRUCTOR
&& BRACE_ENCLOSED_INITIALIZER_P (init)
&& VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)) != 1)
{
error ("scalar object %qD requires one element in initializer", decl);
TREE_TYPE (decl) = error_mark_node;
init = NULL_TREE;
}
@ -4787,7 +4801,7 @@ make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
{
/* Fool with the linkage of static consts according to #pragma
interface. */
struct c_fileinfo *finfo = get_fileinfo (lbasename (filename));
struct c_fileinfo *finfo = get_fileinfo (filename);
if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
{
TREE_PUBLIC (decl) = 1;
@ -4875,6 +4889,7 @@ initialize_local_var (tree decl, tree init)
void
initialize_artificial_var (tree decl, tree init)
{
gcc_assert (DECL_ARTIFICIAL (decl));
if (TREE_CODE (init) == TREE_LIST)
init = build_constructor_from_list (NULL_TREE, init);
gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
@ -4932,7 +4947,7 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
/* If a name was specified, get the string. */
if (global_scope_p (current_binding_level))
asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
if (asmspec_tree)
if (asmspec_tree && asmspec_tree != error_mark_node)
asmspec = TREE_STRING_POINTER (asmspec_tree);
if (current_class_type
@ -5019,6 +5034,17 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
error ("%qD cannot be thread-local because it has non-POD type %qT",
decl, TREE_TYPE (decl));
/* If this is a local variable that will need a mangled name,
register it now. We must do this before processing the
initializer for the variable, since the initialization might
require a guard variable, and since the mangled name of the
guard variable will depend on the mangled name of this
variable. */
if (!processing_template_decl
&& DECL_FUNCTION_SCOPE_P (decl)
&& TREE_STATIC (decl)
&& !DECL_ARTIFICIAL (decl))
push_local_name (decl);
/* Convert the initializer to the type of DECL, if we have not
already initialized DECL. */
if (!DECL_INITIALIZED_P (decl)
@ -6776,7 +6802,27 @@ grokdeclarator (const cp_declarator *declarator,
break;
if (qualifying_scope)
{
if (TYPE_P (qualifying_scope))
if (at_function_scope_p ())
{
/* [dcl.meaning]
A declarator-id shall not be qualified except
for ...
None of the cases are permitted in block
scope. */
if (qualifying_scope == global_namespace)
error ("invalid use of qualified-name %<::%D%>",
decl);
else if (TYPE_P (qualifying_scope))
error ("invalid use of qualified-name %<%T::%D%>",
qualifying_scope, decl);
else
error ("invalid use of qualified-name %<%D::%D%>",
qualifying_scope, decl);
return error_mark_node;
}
else if (TYPE_P (qualifying_scope))
{
ctype = qualifying_scope;
if (innermost_code != cdk_function
@ -6821,8 +6867,6 @@ grokdeclarator (const cp_declarator *declarator,
tree fns = TREE_OPERAND (decl, 0);
dname = fns;
if (TREE_CODE (dname) == COMPONENT_REF)
dname = TREE_OPERAND (dname, 1);
if (TREE_CODE (dname) != IDENTIFIER_NODE)
{
gcc_assert (is_overloaded_fn (dname));
@ -7173,7 +7217,10 @@ grokdeclarator (const cp_declarator *declarator,
if (decl_context == PARM)
{
if (declspecs->specs[(int)ds_typedef])
error ("typedef declaration invalid in parameter declaration");
{
error ("typedef declaration invalid in parameter declaration");
return error_mark_node;
}
else if (storage_class == sc_static
|| storage_class == sc_extern
|| thread_p)
@ -9340,7 +9387,7 @@ lookup_and_check_tag (enum tag_types tag_code, tree name,
/* If that fails, the name will be placed in the smallest
non-class, non-function-prototype scope according to 3.3.1/5.
We may already have a hidden name declared as friend in this
scope. So lookup again but not ignoring hidden name.
scope. So lookup again but not ignoring hidden names.
If we find one, that name will be made visible rather than
creating a new tag. */
if (!decl)
@ -9517,7 +9564,8 @@ xref_tag (enum tag_types tag_code, tree name,
&& CLASSTYPE_IS_TEMPLATE (t))
{
error ("redeclaration of %qT as a non-template", t);
t = error_mark_node;
error ("previous declaration %q+D", t);
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
}
/* Make injected friend class visible. */
@ -10160,7 +10208,7 @@ start_preparsed_function (tree decl1, tree attrs, int flags)
struct cp_binding_level *bl;
tree current_function_parms;
struct c_fileinfo *finfo
= get_fileinfo (lbasename (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1))));
= get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
bool honor_interface;
/* Sanity check. */
@ -10259,8 +10307,6 @@ start_preparsed_function (tree decl1, tree attrs, int flags)
you declare a function, these types can be incomplete, but they
must be complete when you define the function. */
check_function_type (decl1, current_function_parms);
/* Make sure no default arg is missing. */
check_default_args (decl1);
/* Build the return declaration for the function. */
restype = TREE_TYPE (fntype);
@ -10918,7 +10964,8 @@ finish_function (int flags)
/* If this function can't throw any exceptions, remember that. */
if (!processing_template_decl
&& !cp_function_chain->can_throw
&& !flag_non_call_exceptions)
&& !flag_non_call_exceptions
&& targetm.binds_local_p (fndecl))
TREE_NOTHROW (fndecl) = 1;
/* This must come after expand_function_end because cleanups might
@ -11021,6 +11068,7 @@ finish_function (int flags)
f->x_vtt_parm = NULL;
f->x_return_value = NULL;
f->bindings = NULL;
f->extern_decl_map = NULL;
/* Handle attribute((warn_unused_result)). Relies on gimple input. */
c_warn_unused_result (&DECL_SAVED_TREE (fndecl));

View File

@ -3788,7 +3788,7 @@ execution character set.
Currently, CPP requires its input to be ASCII or UTF-8. The execution
character set may be controlled by the user, with the
@option{-ftarget-charset} and @option{-ftarget-wide-charset} options.
@option{-fexec-charset} and @option{-fwide-exec-charset} options.
@item Identifier characters.
@anchor{Identifier characters}

View File

@ -923,7 +923,6 @@ objective-c objective-c-header objective-c-cpp-output
objective-c++ objective-c++-header objective-c++-cpp-output
assembler assembler-with-cpp
ada
f77 f77-cpp-input
f95 f95-cpp-input
java
treelang
@ -2630,7 +2629,7 @@ To suppress this warning use the @samp{unused} attribute
@item -Wunused-variable
@opindex Wunused-variable
Warn whenever a local variable or non-constant static variable is unused
aside from its declaration
aside from its declaration.
This warning is enabled by @option{-Wall}.
To suppress this warning use the @samp{unused} attribute
@ -4553,14 +4552,14 @@ The @option{-finline-limit=@var{n}} option sets some of these parameters
as follows:
@table @gcctabopt
@item max-inline-insns-single
is set to @var{n}/2.
@item max-inline-insns-auto
is set to @var{n}/2.
@item min-inline-insns
is set to 130 or @var{n}/4, whichever is smaller.
@item max-inline-insns-rtl
is set to @var{n}.
@item max-inline-insns-single
is set to @var{n}/2.
@item max-inline-insns-auto
is set to @var{n}/2.
@item min-inline-insns
is set to 130 or @var{n}/4, whichever is smaller.
@item max-inline-insns-rtl
is set to @var{n}.
@end table
See below for a documentation of the individual
@ -5850,7 +5849,7 @@ Specifies maximum number of instructions out-of-line copy of self recursive inli
function can grow into by performing recursive inlining.
For functions declared inline @option{--param max-inline-insns-recursive} is
taken into acount. For function not declared inline, recursive inlining
taken into account. For function not declared inline, recursive inlining
happens only when @option{-finline-functions} (included in @option{-O3}) is
enabled and @option{--param max-inline-insns-recursive-auto} is used. The
default value is 450.
@ -5860,7 +5859,7 @@ default value is 450.
Specifies maximum recursion depth used by the recursive inlining.
For functions declared inline @option{--param max-inline-recursive-depth} is
taken into acount. For function not declared inline, recursive inlining
taken into account. For function not declared inline, recursive inlining
happens only when @option{-finline-functions} (included in @option{-O3}) is
enabled and @option{--param max-inline-recursive-depth-auto} is used. The
default value is 450.
@ -6063,7 +6062,7 @@ compile time increase with probably slightly better performance. The default
value is 100.
@item max-cselib-memory-location
The maximum number of memory locations cselib should take into acount.
The maximum number of memory locations cselib should take into account.
Increasing values mean more aggressive optimization, making the compile time
increase with probably slightly better performance. The default value is 500.
@ -9183,6 +9182,8 @@ boundary. Aligning @code{double} variables on a two word boundary will
produce code that runs somewhat faster on a @samp{Pentium} at the
expense of more memory.
On x86-64, @option{-malign-double} is enabled by default.
@strong{Warning:} if you use the @option{-malign-double} switch,
structures containing the above types will be aligned differently than
the published application binary interface specifications for the 386
@ -9284,15 +9285,13 @@ the system libraries and startup modules.
@opindex mpreferred-stack-boundary
Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
byte boundary. If @option{-mpreferred-stack-boundary} is not specified,
the default is 4 (16 bytes or 128 bits), except when optimizing for code
size (@option{-Os}), in which case the default is the minimum correct
alignment (4 bytes for x86, and 8 bytes for x86-64).
the default is 4 (16 bytes or 128 bits).
On Pentium and PentiumPro, @code{double} and @code{long double} values
should be aligned to an 8 byte boundary (see @option{-malign-double}) or
suffer significant run time performance penalties. On Pentium III, the
Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar
penalties if it is not 16 byte aligned.
Streaming SIMD Extension (SSE) data type @code{__m128} may not work
properly if it is not 16 byte aligned.
To ensure proper alignment of this values on the stack, the stack boundary
must be as aligned as that required by any value stored on the stack.
@ -10953,7 +10952,7 @@ Supported values for @var{cpu_type} are @samp{401}, @samp{403},
@samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
@samp{860}, @samp{970}, @samp{8540}, @samp{ec603e}, @samp{G3},
@samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3},
@samp{power4}, @samp{power5}, @samp{power5+},
@samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6},
@samp{common}, @samp{powerpc}, @samp{powerpc64},
@samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}.
@ -12722,7 +12721,7 @@ it.
@opindex fbounds-check
For front-ends that support it, generate additional code to check that
indices used to access arrays are within the declared range. This is
currently only supported by the Java and Fortran 77 front-ends, where
currently only supported by the Java and Fortran front-ends, where
this option defaults to true and false respectively.
@item -ftrapv

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@
in parentheses. You may also wish to include a number indicating
the revision of your modified compiler. */
#define VERSUFFIX " (NetBSD nb2 20060711)"
#define VERSUFFIX " (NetBSD nb1 20061021)"
/* This is the location of the online document giving instructions for
reporting bugs. If you distribute a modified version of GCC,

View File

@ -88372,7 +88372,7 @@ fi;
# Turn a 'yes' into a suitable default.
if test x$enable_symvers = xyes ; then
if test $enable_shared = no ||
test "x$LD" = x ; then
test "x$LD" = x || test x$gcc_no_link = xyes; then
enable_symvers=no
elif test $with_gnu_ld = yes ; then
enable_symvers=gnu