* cgraph.c (cgraph_function_body_availability): Handle weakref
correctly.
* passes.def: Remove pass_fixup_cfg.
* ipa-inline.c (ipa_inline): When not optimizing, do not inline;
track when we need to remove functions.
(gate_ipa_inline): Execute inlining always; add comment why.
(pass_data_ipa_inline): Remove TODO_remove_functions.
* ipa-inline-analysis.c (inline_generate_summary): When not optimizing
do not produce summaries.
* symtab.c (change_decl_assembler_name): Handle renaming of weakrefs.
(symtab_nonoverwritable_alias): Assert we are not called on weakref.
* varpool.c (cgraph_variable_initializer_availability): Fix weakrefs,
constant pool and vtable.
Jakub Jelinek [Fri, 30 Aug 2013 12:41:17 +0000 (14:41 +0200)]
re PR tree-optimization/58277 (wrong code at -O3)
PR tree-optimization/58277
* tree-ssa-strlen.c (strlen_enter_block): If do_invalidate gave up
after seeing too many stmts with vdef in between dombb and current
bb, invalidate everything.
* gcc.c-torture/execute/pr58277-1.c: New test.
* gcc.c-torture/execute/pr58277-2.c: New test.
Eric Botcazou [Fri, 30 Aug 2013 11:13:20 +0000 (11:13 +0000)]
function.c (assign_parm_setup_reg): For a parameter passed by pointer and which can live in a register...
* function.c (assign_parm_setup_reg): For a parameter passed by pointer
and which can live in a register, always retrieve the value on entry.
* var-tracking.c (add_stores): Treat the copy on entry for a parameter
passed by invisible reference specially.
(emit_notes_in_bb) <MO_VAL_USE>: Emit notes before the instruction.
(vt_add_function_parameter): Correctly deal with a parameter passed by
invisible reference.
Torvald Riegel [Fri, 30 Aug 2013 10:33:41 +0000 (10:33 +0000)]
Add custom HTM fast path for RTM on x86_64.
* libitm_i.h (gtm_thread): Assign an asm name to serial_lock.
(htm_fastpath): Assign an asm name.
* libitm.h (_ITM_codeProperties): Add non-ABI flags used by custom
HTM fast paths.
(_ITM_actions): Likewise.
* config/x86/target.h (HTM_CUSTOM_FASTPATH): Enable custom fastpath on
x86_64.
* config/x86/sjlj.S (_ITM_beginTransaction): Add custom HTM fast path.
* config/posix/rwlock.h (gtm_rwlock): Update comments. Move summary
field to the start of the structure.
* config/linux/rwlock.h (gtm_rwlock): Update comments.
* beginend.cc (gtm_thread::begin_transaction): Add retry policy
handling for custom HTM fast paths.
Richard Biener [Fri, 30 Aug 2013 07:48:53 +0000 (07:48 +0000)]
re PR tree-optimization/58223 (wrong code at -O3 on x86_64-linux-gnu)
2013-08-30 Richard Biener <rguenther@suse.de>
PR tree-optimization/58223
* tree-loop-distribution.c (has_anti_dependence): Rename to ...
(has_anti_or_output_dependence): ... this and adjust to also
look for output dependences.
(mark_nodes_having_upstream_mem_writes): Adjust.
(rdg_flag_uses): Likewise.
* gcc.dg/torture/pr58223.c: New testcase.
* gcc.dg/tree-ssa/ldist-16.c: Flip expected behavior.
Adam Butcher [Thu, 29 Aug 2013 20:54:49 +0000 (21:54 +0100)]
Support dumping type bindings and 'mutable' qualifier in lambda diagnostics.
* error.c (dump_lambda_function): New function, dependent on ...
(dump_substitution): ... this new function, factored out of ...
(subst_to_string): ... here and ...
(dump_function_decl): ... here. Updated to early-out with call to
dump_lambda_function after determining template bindings.
* include/bits/regex.h (basic_regex<>::assign): Don't lose _M_traits.
(regex_iterator<>::regex_iterator): Return nullptr when regex_search
failed.
(regex_token_iterator<>::_M_end_of_seq): Should be defined true when
_M_result is(not isn't) nullptr.
* include/bits/regex_compiler.h: Store _Compiler::_M_traits by reference
instead of by value.
* include/bits/regex_executor.h (_DFSExecutor<>::_DFSExecutor): Add
_M_traits to _DFSExecutor.
* include/bits/regex_executor.tcc (__get_executor<>): Pass traits to
_DFSExecutor too.
* testsuite/28_regex/algorithms/regex_match/extended/wstring_locale.cc:
New.
* testsuite/28_regex/iterators/regex_token_iterator/wchar_t/
wstring_02.cc: New.
Teresa Johnson [Thu, 29 Aug 2013 13:51:04 +0000 (13:51 +0000)]
dumpfile.c (dump_loc): Output column number.
2013-08-29 Teresa Johnson <tejohnson@google.com>
* dumpfile.c (dump_loc): Output column number.
* dumpfile.h (OPTGROUP_OTHER): Add and enable under OPTGROUP_ALL.
* doc/invoke.texi: Document optall -fopt-info flag.
* profile.c (read_profile_edge_counts): Use new dump framework.
(compute_branch_probabilities): Ditto.
* passes.c (pass_manager::register_one_dump_file): Use OPTGROUP_OTHER
when pass not in any opt group.
* pass_manager.h (pass_manager::get_pass_profile): New method.
* value-prof.c (check_counter): Use new dump framework.
(check_ic_target): Ditto.
* coverage.c (get_coverage_counts): Ditto.
(coverage_init): Setup new dump framework.
* testsuite/gcc.dg/pr40209.c: Use -fopt-info.
* testsuite/gcc.dg/pr26570.c: Ditto.
* testsuite/gcc.dg/pr32773.c: Ditto.
* testsuite/g++.dg/tree-ssa/dom-invalid.C: Ditto.
* testsuite/gcc.dg/inline-dump.c: New test.
Ian Lance Taylor [Thu, 29 Aug 2013 00:49:36 +0000 (00:49 +0000)]
go-gcc.cc (Gcc_backend::immutable_struct): Set TREE_PUBLIC if the struct is not hidden.
* go-gcc.cc (Gcc_backend::immutable_struct): Set TREE_PUBLIC if
the struct is not hidden.
(Gcc_backend::immutable_struct_set_init): Don't set TREE_PUBLIC.
Jakub Jelinek [Wed, 28 Aug 2013 16:31:41 +0000 (18:31 +0200)]
re PR target/58067 (ICE in GFortran recog.c:2158)
PR target/58067
* config/i386/i386.md (*tls_global_dynamic_64_largepic): New insn.
(*tls_local_dynamic_base_64_largepic): Likewise.
(tls_global_dynamic_64_<mode>, tls_local_dynamic_base_64_<mode>):
Remove predicate from call operand.
* config/i386/i386.c (ix86_tls_get_addr): For -mcmodel=large -fpic
return sum of pic_offset_table_rtx and UNSPEC_PLTOFF of the symbol.
Jeff Law [Wed, 28 Aug 2013 15:07:45 +0000 (09:07 -0600)]
tree-ssa-threadedge.c (thread_around_empty_block): Remove checks for the number of predecessors and successors allowed.
* tree-ssa-threadedge.c (thread_around_empty_block): Remove
checks for the number of predecessors and successors allowed.
* tree-ssa-threadupdate.c (mark_threaded_blocks): Ignore requests
which require copying a joiner block if there is a request which
is a subpath that requires no joiner block copying.
Jan Hubicka [Wed, 28 Aug 2013 15:04:15 +0000 (15:04 +0000)]
lto-streamer-out.c (DFS_write_tree_body): Drop BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX and BINFO_VPTR_INDEX.
* lto-streamer-out.c (DFS_write_tree_body): Drop
BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX and BINFO_VPTR_INDEX.
(hash_tree): Do not hash DECL_DEFER_OUTPUT, BINFO_INHERITANCE_CHAIN,
BINFO_SUBVTT_INDEX, BINFO_VPTR_INDEX, DECL_IN_TEXT_SECTION.
* tree-streamer-in.c (unpack_ts_decl_common_value_fields):
Do not read DECL_ERROR_ISSUED.
(unpack_ts_decl_with_vis_value_fields): Do not read
DECL_DEFER_OUTPUT.
(lto_input_ts_binfo_tree_pointers): Do not read BINFO_INHERITANCE_CHAIN,
BINFO_SUBVTT_INDEX, BINFO_VPTR_INDEX
* tree-streamer-out.c (pack_ts_decl_common_value_fields): Do not
write DECL_ERROR_ISSUED..
(pack_ts_decl_with_vis_value_fields): Do not write
DECL_DEFER_OUTPUT.
(write_ts_binfo_tree_pointers): Do not read BINFO_INHERITANCE_CHAIN,
BINFO_SUBVTT_INDEX, BINFO_VPTR_INDEX
* print-tree.c (print_node): Do not print DECL_ERROR_ISSUED.
* tree.h (tree_decl_common): Update comment.
(DECL_ERROR_ISSUED): Remove.
Jan Hubicka [Wed, 28 Aug 2013 15:03:43 +0000 (17:03 +0200)]
lto.c (compare_tree_sccs_1): Drop DECL_ERROR_ISSUED, DECL_DEFER_OUTPUT and DECL_IN_TEXT_SECTION.
* lto.c (compare_tree_sccs_1): Drop DECL_ERROR_ISSUED,
DECL_DEFER_OUTPUT and DECL_IN_TEXT_SECTION.
(unify_scc): Do checking assert.
* lto-streamer-out.c (DFS_write_tree_body): Drop
BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX and BINFO_VPTR_INDEX.
(hash_tree): Do not hash DECL_DEFER_OUTPUT, BINFO_INHERITANCE_CHAIN,
BINFO_SUBVTT_INDEX, BINFO_VPTR_INDEX, DECL_IN_TEXT_SECTION.
* tree-streamer-in.c (unpack_ts_decl_common_value_fields):
Do not read DECL_ERROR_ISSUED.
(unpack_ts_decl_with_vis_value_fields): Do not read
DECL_DEFER_OUTPUT.
(lto_input_ts_binfo_tree_pointers): Do not read BINFO_INHERITANCE_CHAIN,
BINFO_SUBVTT_INDEX, BINFO_VPTR_INDEX
* tree-streamer-out.c (pack_ts_decl_common_value_fields): Do not
write DECL_ERROR_ISSUED..
(pack_ts_decl_with_vis_value_fields): Do not write
DECL_DEFER_OUTPUT.
(write_ts_binfo_tree_pointers): Do not read BINFO_INHERITANCE_CHAIN,
BINFO_SUBVTT_INDEX, BINFO_VPTR_INDEX
* print-tree.c (print_node): Do not print DECL_ERROR_ISSUED.
* tree.h (tree_decl_common): Update comment.
(DECL_ERROR_ISSUED): Remove.
Martin Jambor [Tue, 27 Aug 2013 21:41:15 +0000 (23:41 +0200)]
ipa-prop.h (ipa_pass_through_data): New field type_preserved.
2013-08-27 Martin Jambor <mjambor@suse.cz>
* ipa-prop.h (ipa_pass_through_data): New field type_preserved.
(ipa_ancestor_jf_data): Likewise.
(ipa_get_jf_pass_through_agg_preserved): Fix comment typo.
(ipa_get_jf_pass_through_type_preserved): New function.
(ipa_get_jf_ancestor_agg_preserved): Fix comment typo.
(ipa_get_jf_ancestor_type_preserved): New function.
* ipa-cp.c (ipa_get_jf_pass_through_result): Honor type_preserved
flag.
(ipa_get_jf_ancestor_result): Likewise.
(propagate_vals_accross_pass_through): Use
ipa_get_jf_pass_through_result to do all the value mappings.
* ipa-prop.c (ipa_print_node_jump_functions_for_edge): Dump the
type_preserved flag.
(ipa_set_jf_cst_copy): New function.
(ipa_set_jf_simple_pass_through): Set the type_preserved flag.
(ipa_set_jf_arith_pass_through): Likewise.
(ipa_set_ancestor_jf): Likewise.
(compute_complex_assign_jump_func): Set type_preserved instead of
punting.
(ipa_compute_jump_functions_for_edge): Likewise.
(combine_known_type_and_ancestor_jfs): Honor type_preserved.
(update_jump_functions_after_inlining): Update type_preserved.
Explicitely create jump functions when combining one with
pass_through.
(ipa_write_jump_function): Stream the type_preserved flags.
(ipa_read_jump_function): Likewise.
Richard Biener [Tue, 27 Aug 2013 10:10:34 +0000 (10:10 +0000)]
re PR tree-optimization/57521 (wrong code for expressions in loop at -O3)
2013-08-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/57521
* tree-if-conv.c (if_convertible_bb_p): Verify that at least
one edge is non-critical.
(find_phi_replacement_condition): Make sure to use a non-critical
edge. Cleanup and remove old bug workarounds.
(bb_postdominates_preds): Remove.
(if_convertible_loop_p_1): Do not compute post-dominators.
(combine_blocks): Do not free post-dominators.
(main_tree_if_conversion): Likewise.
(pass_data_if_conversion): Add TODO_verify_ssa.
Yufeng Zhang [Tue, 27 Aug 2013 02:45:17 +0000 (02:45 +0000)]
function.c (assign_parm_find_data_types): Set passed_mode and nominal_mode to the TYPE_MODE of nominal_type for the built...
gcc/
* function.c (assign_parm_find_data_types): Set passed_mode and
nominal_mode to the TYPE_MODE of nominal_type for the built
pointer type in case of the struct-pass-by-reference.
Joern Rennecke [Mon, 26 Aug 2013 16:57:28 +0000 (16:57 +0000)]
avr.opt (mfract-convert-truncate): New option.
* config/avr/avr.opt (mfract-convert-truncate): New option.
* config/avr/avr.c (avr_out_fract): Unless TARGET_FRACT_CONV_TRUNC
is set, round negative fractional integers according to n1169
when converting to integer types.
Joern Rennecke [Mon, 26 Aug 2013 16:52:19 +0000 (16:52 +0000)]
re PR c/35649 (Incorrect printf warning: expect double has float)
2013-08-26 Joern Rennecke <joern.rennecke@embecosm.com>
Joseph Myers <joseph@codesourcery.com>
c/35649
* c-typeck.c (c_common_type): Prefer double_type_node over
other REAL_TYPE types with the same precision.
(convert_arguments): Likewise.
Amend patch as suggested:
From: "Joseph S. Myers" <joseph@codesourcery.com>
In convert_arguments I think you should be comparing TYPE_MAIN_VARIANT
(valtype) against double_type_node and long_double_type_node, rather than
just valtype.
This is PR c/35649 (so include that number in your ChangeLog entry and
close that bug as fixed).
Co-Authored-By: Joseph Myers <joseph@codesourcery.com>
From-SVN: r202006
* cgraph.c (cgraph_redirect_edge_call_stmt_to_callee): Fix formatting;
fix edge count/frequency when speculation failed; fix type check
for the direct call.
Gabriel Dos Reis [Mon, 26 Aug 2013 03:12:38 +0000 (03:12 +0000)]
c-pretty-print.h (c_pretty_printer::postfix_expression): Now a virtual member function.
c-family/
* c-pretty-print.h (c_pretty_printer::postfix_expression): Now a
virtual member function.
(pp_postfix_expression): Adjust.
(pp_c_postfix_expression): Remove.
* c-pretty-print.c (c_pretty_printer::postfix_expression): Rename
from pp_c_postfix_expression. Adjust.
(c_pretty_printer::c_pretty_printer): Do not assign to
postfix_expression.
cp/
* cxx-pretty-print.h (cxx_pretty_printer::postfix_expression):
Declare as overrider.
* cxx-pretty-print.c (cxx_pretty_printer::postfix_expression):
Rename from pp_cxx_postfix_expression. Adjust.
(pp_cxx_expression): Use pp_postfix_expression.
(cxx_pretty_printer::cxx_pretty_printer): Do not assign to
postfix_expression.
Thomas Koenig [Sun, 25 Aug 2013 22:55:12 +0000 (22:55 +0000)]
re PR fortran/58146 (Array slice bounds checking)
2013-08-26 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/58146
* array.c (gfc_ref_dimen_size): If possible, use
gfc_dep_difference to calculate array refrence
sizes. Fall back to integer code otherwise.
* dependency.c (discard_nops). Move up.
Also discarde widening integer conversions.
(gfc_dep_compare_expr): Use discard_nops.
2013-08-26 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/58146
* gfortran.dg/bounds_check_18.f90: New test.
Gabriel Dos Reis [Sun, 25 Aug 2013 18:05:29 +0000 (18:05 +0000)]
c-pretty-print.h (c_pretty_printer::primary_expression): Now a virtua member function.
c-family/
* c-pretty-print.h (c_pretty_printer::primary_expression): Now a
virtua member function.
(pp_primary_expression): Adjust.
(pp_c_primary_expression): Remove.
* c-pretty-print.c (c_pretty_printer::primary_expression): Rename
from pp_c_primary_expression. Adjust.
(pp_c_initializer_list): Use pp_primary_expression.
(c_pretty_printer::c_pretty_printer): Do not assign to
primary_expression.
cp/
* cxx-pretty-print.h (cxx_pretty_printer::primary_expression): Now
an overrider of c_pretty_printer::primary_expression.
* cxx-pretty-print.c (cxx_pretty_printer::primary_expression):
Rename from pp_cxx_primary_expression. Adjust.
(pp_cxx_postfix_expression): Use pp_primary_expression.
(pp_cxx_ctor_initializer): Likewise.
(cxx_pretty_printer::cxx_pretty_printer): Do not assign to
primary_expression.
Jan Hubicka [Sun, 25 Aug 2013 09:43:34 +0000 (11:43 +0200)]
tree.h (TYPE_FINAL_P, [...]): New macros.
* tree.h (TYPE_FINAL_P, DECL_FINAL_P): New macros.
(tree_decl_with_vis): Add FINAL field.
* cp-tree.h (struct lang_type_class): Free is_final bit.
(CLASSTYPE_FINAL): Define using TYPE_FINAL_P.
(DECL_FINAL_P): Remove.
* pt.c (instantiate_class_template_1): Guard that CLASSTYPE_FINAL
is called on CLASS_TYPE_P.
Gabriel Dos Reis [Sun, 25 Aug 2013 00:24:27 +0000 (00:24 +0000)]
c-pretty-print.h (c_pretty_printer::id_expression): Now a virtual function.
c-family/
* c-pretty-print.h (c_pretty_printer::id_expression): Now a
virtual function.
(pp_c_id_expression): Remove.
(pp_id_expression): Adjust.
* c-pretty-print.c (c_pretty_printer::id_expression): Rename from
pp_c_id_expression. Adjust.
(pp_c_postfix_expression): Use pp_id_expression.
(c_pretty_printer::c_pretty_printer): Do not assign to id_expression.
cp/
* cxx-pretty-print.h (cxx_pretty_printer::id_expression): Declare.
* cxx-pretty-print.c (cxx_pretty_printer::id_expression): Rename
from pp_cxx_id_expression. Adjust.
(pp_cxx_userdef_literal): Use pp_id_expression.
(pp_cxx_primary_expression): Likewise.
(pp_cxx_direct_declarator): Likewise.
(cxx_pretty_printer::cxx_pretty_printer): Do not assign to
id_expression.
Gabriel Dos Reis [Sat, 24 Aug 2013 22:29:37 +0000 (22:29 +0000)]
c-pretty-print.h (c_pretty_printer::constant): Now a virtual member function.
* c-pretty-print.h (c_pretty_printer::constant): Now a virtual
member function.
(pp_constant): Adjust.
(pp_c_constant): Remove.
* c-pretty-print.c (c_pretty_printer::constant): Rename from
pp_c_constant. Adjust.
(pp_c_constant)
(pp_c_primary_expression): Call pp_constant in lieu of pp_c_constant.
(c_pretty_printer::c_pretty_printer): Remove assignment to constant.
cp/
* cxx-pretty-print.h (cxx_pretty_printer::constant): Now a member
function, overriding c_pretty_printer::constant.
* cxx-pretty-print.c (cxx_pretty_printer::constant): Rename from
pp_cxx_constant. Adjust.
(cxx_pretty_printer::cxx_pretty_printer): Do not assign to constant.