Jakub Jelinek [Mon, 30 May 2011 12:16:04 +0000 (14:16 +0200)]
re PR c++/49223 (Internal compiler error when using OpenMP)
PR c++/49223
* semantics.c (finish_omp_clauses): Call require_complete_type
even for copyin/copyprivate clauses. Only call
cxx_omp_create_clause_info if inner_type is COMPLETE_TYPE_P.
* g++.dg/gomp/pr49223-1.C: New test.
* g++.dg/gomp/pr49223-2.C: New test.
Richard Guenther [Mon, 30 May 2011 09:19:58 +0000 (09:19 +0000)]
tree-ssa-forwprop.c (forward_propagate_into_comparison): New function split out from ...
2011-05-30 Richard Guenther <rguenther@suse.de>
* tree-ssa-forwprop.c (forward_propagate_into_comparison):
New function split out from ...
(forward_propagate_into_gimple_cond): ... here. Adjust.
(forward_propagate_into_cond): Likewise.
(forward_propagate_comparison): Also propagate into
comparisons on assignment RHS. Change return value to
behave similar to forward_propagate_into_cond.
(tree_ssa_forward_propagate_single_use_vars): Handle
strict-overflow warnings properly for forward_propagate_comparison.
Ira Rosen [Mon, 30 May 2011 07:15:31 +0000 (07:15 +0000)]
re PR tree-optimization/49199 (ICE: in vect_create_epilog_for_reduction at tree-vect-loop.c:3445 with -O -fno-tree-scev-cprop -ftree-vectorize -funswitch-loops)
PR tree-optimization/49199
* tree-vect-loop.c (vect_is_slp_reduction): Check that the
non-reduction operands are either defined in the loop or
by induction.
Uros Bizjak [Sun, 29 May 2011 21:33:27 +0000 (23:33 +0200)]
i386.md (*movoi_internal_avx): Use standard_sse_constant_opcode for alternative 0.
* config/i386/i386.md (*movoi_internal_avx): Use
standard_sse_constant_opcode for alternative 0.
(*movti_internal_sse): Ditto.
(*movti_internal_rex64): Use standard_sse_constant_opcode for
alternative 2.
(*movdi_internal_rex64): Use standard_sse_constant_opcode for
sselog1 type moves.
(*movsi_internal): Ditto.
(*movdi_internal): Ditto. Add ssecvt type moves.
Jakub Jelinek [Sun, 29 May 2011 18:51:48 +0000 (20:51 +0200)]
re PR rtl-optimization/49095 (Horrible code generation for trivial decrement with test)
PR rtl-optimization/49095
* config/i386/predicates.md (plusminuslogic_operator): New predicate.
* config/i386/i386.md: Add peepholes for mem {+,-,&,|,^}= x; mem != 0.
Thomas Koenig [Sun, 29 May 2011 18:41:00 +0000 (18:41 +0000)]
re PR fortran/45786 (Relational operators .eq. and == are not recognized as equivalent)
2011-05-29 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/45786
* interface.c (gfc_equivalent_op): New function.
(gfc_check_interface): Use gfc_equivalent_op instead
of switch statement.
* decl.c (access_attr_decl): Also set access to an
equivalent operator.
2011-05-29 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/45786
* gfortran.dg/operator_7.f90: New test case.
re PR target/43995 (internal compiler error: Segmentation fault on Mips64 crossbuild of ext2progs)
gcc/
PR target/43995
* config/mips/mips.c (mips_pic_call_symbol_from_set): Add a
recurse_p argument. Only follow register copies if it is set,
and prevent mips_find_pic_call_symbol from recursing.
(mips_find_pic_call_symbol): Add a recurse_p argument.
Pass it to mips_pic_call_symbol_from_set.
(mips_annotate_pic_calls): Update accordingly.
Jason Merrill [Sat, 28 May 2011 22:01:38 +0000 (18:01 -0400)]
re PR c++/46124 ([C++0x] ICE: tree check: expected var_decl or function_decl, have error_mark in cp_parser_lambda_declarator_opt, at cp/parser.c:7817 on invalid lambda function)
Ian Lance Taylor [Fri, 27 May 2011 22:46:11 +0000 (22:46 +0000)]
Change export code to use the backend interface.
* go-backend.c: Include "output.h".
(go_write_export_data): New function.
* go-c.h (go_write_export_data): Declare.
* Make-lang.in (go/go-backend.o): Depend on output.h.
(go/export.o): Depend on $(GO_C_H). Do not depend on
$(MACHMODE_H), output.h, or $(TARGET_H).
Andrew Pinski [Fri, 27 May 2011 20:19:13 +0000 (13:19 -0700)]
re PR other/48981 (bootstrap-lto -O3 produces miscompiled, broken gcc)
2011-05-27 Andrew Pinski <pinskia@gmail.com>
PR middle-end/48981
* gengtype.c (vec_prefix_type): New function.
(note_def_vec): Use vec_prefix_type and change the length
attribute to be based on the prefix.
* vec.c: Include coretypes.h before vec.h.
(struct vec_prefix): Remove.
(vec_gc_p_reserve): Change the offsetof to sizeof.
(vec_gc_p_reserve_exact): Likewise.
(vec_heap_p_reserve): Likewise.
(vec_heap_p_reserve_exact): Likewise.
(vec_stack_o_reserve_1): Copy from +1 instead of from vec.
(vec_stack_p_reserve): Change the offsetof to sizeof.
(vec_stack_p_reserve_exact): Likewise.
* vec.h (struct vec_prefix): New struct definition.
(VEC_T(T,B)): Use vec_prefix instead of having num/alloc fields.
(VEC_T_GTY(T,B)): Likewise.
(DEF_VEC_FUNC_P(T)): Use prefix field.
(DEF_VEC_NONALLOC_FUNCS_O(T,A)): Likewise.
(DEF_VEC_NONALLOC_FUNCS_I(T,A)): Likewise.
Nathan Froyd [Fri, 27 May 2011 17:43:44 +0000 (17:43 +0000)]
move TS_STATEMENT_LIST to be a substructure of TS_TYPED
move TS_STATEMENT_LIST to be a substructure of TS_TYPED
gcc/
* c-decl.c (c_push_function_context): Copy the current statement
list stack.
(add_stmt): Check building_stmt_list_p and push_stmt if necessary.
(finish_struct): Call building_stmt_list_p instead of checking
cur_stmt_list.
* c-parser.c (c_parser_postfix_expression): Likewise.
* c-typeck.c (c_end_compound_stmt): Likewise.
* print-tree.c (print_node) [STATEMENT_LIST]: Don't print TREE_CHAIN.
* tree-iterator.c (stmt_list_cache): Change to a VEC.
(alloc_stmt_list): Adjust for stmt_list_cache's new type.
(free_stmt_list): Likewise.
* tree.h (struct tree_statement_list): Include typed_tree instead
of tree_common.
* tree.c (initialize_tree_contains_struct): Mark TS_STATEMENT_LIST
as TS_TYPED instead of TS_COMMON.
gcc/c-family/
* c-common.h (struct stmt_tree_s) [x_cur_stmt_list]: Change to a VEC.
(stmt_list_stack): Define.
(cur_stmt_list): Adjust for new type of x_cur_stmt_list.
* c-semantics.c (push_stmt_list, pop_stmt_list): Likewise.
* configure.ac (gcc_cv_as_ix86_tlsgdplt): Check for @tlsgdplt
(HAVE_AS_IX86_TLSGDPTL): Define.
(gcc_cv_as_ix86_tlsldmplt): Check for @tlsldmplt.
(HAVE_AS_IX86_TLSLDMPLT): Define.
* configure: Regenerate.
* config.in: Regenerate.
* config/i386/i386.c (ix86_print_operand): Handle code 'p'.
* config/i386/i386.md (*tls_global_dynamic_32_gnu): If
TARGET_SUN_TLS, use @tlsgdplt or @plt.
(*tls_global_dynamic_64): Use @plt if TARGET_SUN_TLS.
(*tls_local_dynamic_base_32_gnu): If TARGET_SUN_TLS, use
@tlsldmplt or @plt.
(*tls_local_dynamic_base_64): Use @plt if TARGET_SUN_TLS.
Bernd Schmidt [Fri, 27 May 2011 14:17:36 +0000 (14:17 +0000)]
sched-int.h (struct _haifa_deps_insn_data): New members cond and reverse_cond.
* sched-int.h (struct _haifa_deps_insn_data): New members cond
and reverse_cond.
(INSN_COND, INSN_REVERSE_COND): New macros.
* sched-deps.c (deps_analyze_insn): Call sched_get_condition_with_rev
once.
(sched_get_condition_with_rev): Cache the results, and look them up
if possible.
(sched_analyze_insn): Destroy INSN_COND of previous insns if they
are clobbered by the current insn.
* target.def (exposed_pipline): New sched data hook.
* doc/tm.texi.in: TARGET_SCHED_EXPOSED_PIPELINE: Add hook.
* doc/tm.texi: Regenerate.
Bernd Schmidt [Fri, 27 May 2011 10:47:48 +0000 (10:47 +0000)]
haifa-sched.c (sched_scan_info): Remove.
* haifa-sched.c (sched_scan_info): Remove.
(schedule_block): Call sched_extend_luids rather than sched_init_luids
with NULL args.
(extend_bb, init_bb, extend_insn, init_insn, init_insns_in_bb):
Remove functions.
(sched_scan): Remove.
(sched_extend_luids): Renamed from luids_extend_insn and no longer
static. All callers changed.
(sched_init_insn_luid): Renamed from luids_init_insn and no longer
static. All callers changed.
(sched_init_luids): Remove all arguments except the first. All
callers changed. Don't use sched_scan.
(haifa_init_h_i_d): Likewise.
(haifa_init_insn): Call sched_extend_luids and sched_init_insn_luid
manually rather than using sched_init_luids. Likewise with
extend_h_i_d, init_h_i_d and haifa_init_h_i_d.
* sel-sched.c (sel_region_target_finish): Call sched_extend_luids
rather than sched_init_luids with NULL args.
* sel-sched-ir.c (new_insns): Remove variable.
(sched_scan): New static function, previously in haifa-sched.c. Remove
all arguments but the first two; all callers changed.
(sel_init_new_insn): Call sched_extend_luids and sched_init_insn_luid
rather than sched_init_luids.
(sel_init_bbs): Remove second argument. All callers changed.
(sel_add_bb): Call sched_extend_luids rather than sched_init_luids
with NULL arguments.
(create_insn_rtx_from_pattern): Likewise.
* sel-sched-ir.h (sel_init_bbs): Adjust declaration.
* sched-int.h (sched_init_luids, haifa_init_h_i_d): Likewise.
(sched_init_insn_luid, sched_extend_luids): Declare.
(sched_scan_info_def, sched_scan_info, sched_scan): Remove
declarations.
Jan Hubicka [Fri, 27 May 2011 09:57:40 +0000 (11:57 +0200)]
lto-streamer-out.c (lto_string_index): break out from...; offset by 1 so 0 means NULL string.
* lto-streamer-out.c (lto_string_index): break out from...; offset by 1
so 0 means NULL string.
(lto_output_string_with_length): ... here.
(lto_output_string, output_string_cst, output_identifier): Update handling
of NULL strings.
(lto_output_location_bitpack): New function.
(lto_output_location): Use it.
(lto_output_tree_ref): Use output_record_start.
(pack_ts_type_common_value_fields): Pack aliagn & alias set in var len values.
* lto-streamer-in.c (string_for_index): Break out from ...; offset values by 1.
(input_string_internal): ... here;
(input_string_cst, input_identifier, lto_input_string): Update handling of
NULL strings.
(lto_input_location_bitpack): New function
(lto_input_location): Use it.
(unpack_ts_type_common_value_fields): Pack align & alias in var len values.
* lto-streamer.h (bp_pack_val_len_unsigned, bp_pack_val_len_int,
bp_unpack_val_len_unsigned, bp_unpack_val_len_int): Declare.
(bp_pack_value): Sanity check the value range.
* lto-section-in.c (bp_unpack_val_len_unsigned, bp_unpack_val_len_int):
New functions.
* lto-section-out.h (bp_pack_val_len_unsigned, bp_pack_val_len_int):
New functions.
Jason Merrill [Fri, 27 May 2011 04:01:46 +0000 (00:01 -0400)]
re PR c++/47956 ([C++0x] gcc accepts static data member declaration with initializer for non-const literal type if type-specifier is auto)
PR c++/47956
* decl.c (check_static_variable_definition): Now static.
(cp_finish_decl): Call it here.
(grokdeclarator): Not here.
* pt.c (instantiate_class_template_1): Or here.
* cp-tree.h: Don't declare it.
re PR rtl-optimization/48575 (RTL vector patterns are limited to 26 elements)
gcc/
PR rtl-optimization/48575
* genrecog.c (position_type): New enum.
(position): New structure.
(decision): Use position structure instead of a string.
(root_pos, peep2_insn_pos_list): New variables.
(next_position, compare_positions): New functions.
(new_decision): Use position structures instead of strings.
(maybe_both_true): Likewise.
(change_state): Likewise.
(write_tree): Likewise.
(make_insn_sequence): Likewise.
Paul Thomas [Thu, 26 May 2011 18:19:36 +0000 (18:19 +0000)]
[multiple changes]
2011-05-26 Paul Thomas <pault@gcc.gnu.org>
Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/48955
* trans-expr.c (gfc_trans_assignment_1): GFC_REVERSE_NOT_SET
changed to GFC_ENABLE_REVERSE.
* trans-array.c (gfc_init_loopinfo): GFC_CANNOT_REVERSE changed
to GFC_INHIBIT_REVERSE.
* gfortran.h : Enum gfc_reverse is now GFC_ENABLE_REVERSE,
GFC_FORWARD_SET, GFC_REVERSE_SET and GFC_INHIBIT_REVERSE.
* dependency.c (gfc_dep_resolver): Change names for elements of
gfc_reverse as necessary. Change the logic so that forward
dependences are remembered as well as backward ones. When both
have appeared, force a temporary.
2011-05-26 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/48955
* gfortran.dg/dependency_40.f90 : New test.
Tobias Burnus [Thu, 26 May 2011 17:41:34 +0000 (19:41 +0200)]
re PR fortran/18918 (Eventually support Fortran 2008's coarrays [co-arrays])
2011-05-26 Tobias Burnus <burnus@net-b.de>
PR fortran/18918
* trans-array.c (gfc_conv_array_ref): Handle pointer coarrays.
* trans-decl.c (has_coarray_vars, caf_init_block,
gfor_fndecl_caf_register): New file-global variables.
(gfc_finish_var_decl): Make sure that coarrays in main are static.
(gfc_build_qualified_array): Generate coarray token variable.
(gfc_get_symbol_decl): Don't use a static initializer for coarrays.
(gfc_build_builtin_function_decls): Set gfor_fndecl_caf_register.
(gfc_trans_deferred_vars, gfc_emit_parameter_debug_info): Skip for
static coarrays.
(generate_local_decl): Check for local coarrays.
(create_main_function): SYNC ALL before calling MAIN.
(generate_coarray_sym_init): Register static coarray.
(generate_coarray_init): Generate CAF registering constructor
function.
(gfc_generate_function_code): Call it, if needed, do not create
cgraph twice.
(gfc_generate_module_vars, gfc_process_block_locals): Call
generate_coarray_init.
* trans-types.c (gfc_get_nodesc_array_type): Generate pointers
* for
-fcoarray=lib.
* trans.h (gfor_fndecl_caf_register): New variable.
(lang_type): New element caf_token.
(GFC_TYPE_ARRAY_CAF_TOKEN): New macro.
Nathan Froyd [Thu, 26 May 2011 17:38:51 +0000 (17:38 +0000)]
make TS_BLOCK a substructure of TS_BASE
make TS_BLOCK a substructure of TS_BASE
gcc/
* tree.c (initialize_tree_contains_struct): Mark TS_BLOCK as
TS_BASE instead of TS_COMMON.
(find_decls_types_r): Check for TS_TYPED structure before looking at
TREE_TYPE.
* tree.h (struct tree_block): Inherit from tree_base, not tree_common.
Add chain field.
(BLOCK_CHAIN): Use new chain field.
gcc/c-family/
* c-common.c (warning_candidate_p): Check for BLOCKs.
Nathan Froyd [Thu, 26 May 2011 13:29:42 +0000 (13:29 +0000)]
make TS_IDENTIFIER be a substructure of TS_TYPED
make TS_IDENTIFIER be a substructure of TS_TYPED
gcc/
* tree.h (struct tree_identifier): Inherit from tree_typed, not
tree_common.
(HT_IDENT_TO_GCC_IDENT): Adjust for said change.
* tree.c (initialize_tree_contains_struct): Mark TS_IDENTIFIER as
TS_BASE instead of TS_COMMON.
* varasm.c (assemble_name): Remove assert.
gcc/c-family/
* c-common.h (struct c_common_identifier): Inherit from tree_typed,
not tree_common.
Jason Merrill [Thu, 26 May 2011 13:22:51 +0000 (09:22 -0400)]
re PR c++/48424 (C++0x parameter packs expansion problem)
PR c++/48424
* decl.c (grokparms): Function parameter packs don't need to
go at the end.
* pt.c (type_unification_real): But they aren't deduced otherwise.
Richard Guenther [Thu, 26 May 2011 13:01:48 +0000 (13:01 +0000)]
re PR tree-optimization/48702 (optimization regression with gcc-4.6 on x86_64-unknown-linux-gnu)
2011-05-26 Richard Guenther <rguenther@suse.de>
PR tree-optimization/48702
* tree-ssa-address.c (create_mem_ref_raw): Create MEM_REFs
only when we know the base address is within bounds.
* tree-ssa-alias.c (indirect_ref_may_alias_decl_p): Do not
assume the base address of TARGET_MEM_REFs is in bounds.
picochip.md (cbranchhi4): No :CC for match_operator.
* config/picochip/picochip.md (cbranchhi4): No :CC for match_operator.
The instruction is then expanded explicitly.
(supported_compare): Callable instruction.
(compare): Likewise.