* tree-loop-distribution.c (enum rdg_dep_type): Add control_dd.
(dot_rdg_1): Handle control_dd.
(create_edge_for_control_dependence): New function.
(create_rdg_edges): Add control dependences if asked for.
(build_rdg): Likewise.
(generate_loops_for_partition): If there are not necessary
control stmts remove all their dependencies.
(collect_condition_stmts, rdg_flag_loop_exits): Remove.
(distribute_loop): Pass on control dependences.
(tree_loop_distribution): Compute control dependences and remove
restriction on number of loop nodes.
Adam Butcher [Mon, 16 Sep 2013 07:14:34 +0000 (08:14 +0100)]
Support using 'auto' in a function parameter list to introduce an implicit template parameter.
gcc/cp/
* cp-tree.h (type_uses_auto_or_concept): Declare.
(is_auto_or_concept): Declare.
* decl.c (grokdeclarator): Allow 'auto' parameters in lambdas with
-std=gnu++1y or -std=c++1y or, as a GNU extension, in plain functions.
* type-utils.h: New header defining ...
(find_type_usage): ... this new function based on pt.c (type_uses_auto)
for searching a type tree given a predicate.
* pt.c (type_uses_auto): Reimplement via type-utils.h (find_type_usage).
(is_auto_or_concept): New function.
(type_uses_auto_or_concept): New function.
* parser.h (struct cp_parser): Add fully_implicit_function_template_p.
* parser.c (cp_parser_new): Initialize fully_implicit_function_template_p.
(cp_parser_new): Initialize fully_implicit_function_template_p.
(cp_parser_lambda_expression): Copy and restore value of
fully_implicit_function_template_p as per other parser fields.
(cp_parser_parameter_declaration_list): Count generic
parameters and call ...
(add_implicit_template_parms): ... this new function to synthesize them
with help from type-utils.h (find_type_usage), ...
(tree_type_is_auto_or_concept): ... this new static function and ...
(make_generic_type_name): ... this new static function.
(cp_parser_direct_declarator): Account for implicit template parameters.
(cp_parser_lambda_declarator_opt): Finish fully implicit template if
necessary by calling ...
(finish_fully_implicit_template): ... this new function.
(cp_parser_init_declarator): Likewise.
(cp_parser_function_definition_after_declarator): Likewise.
(cp_parser_member_declaration): Likewise.
* Make-lang.in (cp/pt.o): Add dependency on type-utils.h.
(cp/parser.o): Likewise.
gcc/testsuite/
g++.dg/cpp0x/auto9.C: Downgrade two previously expected errors (now
interpreted as implicit templates) to be expected pedwarns instead.
Adam Butcher [Mon, 16 Sep 2013 07:14:21 +0000 (08:14 +0100)]
Support lambda templates.
* parser.c (cp_parser_lambda_declarator_opt): Accept template parameter
list with std=c++1y or std=gnu++1y.
(cp_parser_lambda_body): Don't call 'expand_or_defer_fn' for lambda call
operator template to avoid adding template result to symbol table.
* lambda.c (lambda_function): Return template result if call operator is
a template.
(maybe_add_lambda_conv_op): Move declarations to point of use. Refactor
operator call building in order to support conversion of a non-capturing
lambda template to a function pointer with help from ...
(prepare_op_call): ... this new function.
* decl2.c (check_member_template): Don't reject lambda call operator
template in local [lambda] class.
* pt.c (instantiate_class_template_1): Don't instantiate lambda call
operator template when instantiating lambda class.
re PR target/48094 (ld: warning: section has unexpectedly large size errors in objc/obj-c++ lto)
gcc:
PR target/48094
* config/darwin.c (darwin_objc2_section): Note if ObjC Metadata is seen.
(darwin_objc1_section): Likewise.
(darwin_file_end): Emit Image Info section when required.
Jan Hubicka [Sat, 14 Sep 2013 15:27:21 +0000 (17:27 +0200)]
tree-into-ssa.c (gate_into_ssa): New.
* tree-into-ssa.c (gate_into_ssa): New.
(pass_data_build_ssa): Use it.
* cgraph.h (expand_thunk): Update prototype.
* cgraphunit.c (analyze_function): Expand thunks early.
(expand_thunk): Fix DECL_CONTEXT of reust_decl;
build proper cgraph; set in_ssa_p; clear bogus TREE_ASM_WRITTEN;
set lowered flag; do not add new function.
(assemble_thunks_and_aliases): Update.
* tree-ssa.c (gate_init_datastructures): New gate.
(pass_data_init_datastructures): Use it.
* include/bits/regex.h (regex_match<>, regex_search<>):
Change regex_executor caller. Now use their return value instead
of checking __m[0].matched to find out if it's successful.
(regex_search<>): Move the search logic to regex_executor.
* include/bits/regex_automaton.h: Add some new _Opcode. Refactor
_NFA::_M_insert_*.
* include/bits/regex_automaton.tcc: Add DEBUG dump for new
_Opcode. Refactor _NFA::_M_insert_*.
* include/bits/regex_compiler.h (_Compiler<>::_M_get_nfa):
Use make_shared instead of construct by hand.
* include/bits/regex_compiler.tcc: Implement _Compiler<>::_M_assertion.
* include/bits/regex_constants.h: Fix indentation and line breaking.
* include/bits/regex_executor.h: Add _ResultsEntry to support
greedy/ungreedy mode. Move regex_search logic here.
* include/bits/regex_executor.tcc: Implement assertions and
greedy/ungreedy matching.
* include/bits/regex_scanner.h: Add a new token _S_token_ungreedy.
* include/bits/regex_scanner.tcc: Parse a new token _S_token_ungreedy.
* testsuite/28_regex/algorithms/regex_search/ecma/assertion.cc: New.
* testsuite/28_regex/algorithms/regex_search/ecma/greedy.cc: New.
* testsuite/28_regex/algorithms/regex_search/ecma/string_01.cc:
Fix comment.
Jacek Caban [Fri, 13 Sep 2013 18:06:41 +0000 (18:06 +0000)]
c-target.def: New hook
2013-09-13 Jacek Caban <jacek@codeweavers.com>
* c-target.def: New hook
gcc/ChangeLog:
2013-09-13 Jacek Caban <jacek@codeweavers.com>
* config.gcc: Use new winnt-c.c target hooks
* config/t-winnt: New file
* config/winnt-c.c: New file
* doc/tm.texi.in: Document new hook
* doc/tm.texi: Regenerated
gcc/cp/Changelog:
2013-09-13 Jacek Caban <jacek@codeweavers.com>
* decl.c: Use new cxx_implicit_extern_c hook
gcc/testsuite/ChangeLog:
2013-09-13 Jacek Caban <jacek@codeweavers.com>
* g++.dg/abi/main.C: Added implicit C linkage tests
Adam Butcher [Fri, 13 Sep 2013 16:14:15 +0000 (17:14 +0100)]
Revert r202554, r202540 and r202539.
- r202554: Fix uninitialized variables causing breakage with -Werror.
- r202540: Support using 'auto' in a function parameter list to introduce an implicit template parameter.
- r202539: Support lambda templates.
Jan Hubicka [Fri, 13 Sep 2013 14:35:32 +0000 (16:35 +0200)]
re PR middle-end/58094 (IPA devirt testsuite errors)
PR middle-end/58094
* ipa-inline.c (check_callers): New function.
(check_caller_edge): Remove.
(want_inline_function_to_all_callers_p): Also permit alises that are
called dirrectly.
(inline_to_all_callers): Terminate the walk when devirtualization
introduce new calls.
Jakub Jelinek [Fri, 13 Sep 2013 12:42:04 +0000 (14:42 +0200)]
re PR libgomp/58392 (internal compiler error: in expand_GOMP_SIMD_VF, at internal-fn.c (omp simd inside omp parallel))
PR tree-optimization/58392
* tree-cfg.c (move_sese_region_to_fn): Rename loop variable
to avoid shadowing of outer loop variable. If
saved_cfun->has_simduid_loops or saved_cfun->has_force_vect_loops,
replace_by_duplicate_decl simduid of loops that have it set and
set dest_cfun->has_simduid_loops and/or
dest_cfun->has_force_vect_loops.
* omp-low.c (build_outer_var_ref): Call maybe_lookup_decl_in_outer_ctx
instead of maybe_lookup_decl.
* tree-inline.c (copy_loops): Change blocks_to_copy argument to id.
Use id->blocks_to_copy instead of blocks_to_copy. Adjust recursive
call. Copy over force_vect and copy and remap simduid. Set
cfun->has_simduid_loops and/or cfun->has_force_vect_loops.
(copy_cfg_body): Remove blocks_to_copy argument. Use
id->blocks_to_copy instead of blocks_to_copy. Adjust copy_loops
caller. Don't set cfun->has_simduid_loops and/or
cfun->has_force_vect_loops here.
(copy_body): Remove blocks_to_copy argument. Adjust copy_cfg_body
caller.
(expand_call_inline, tree_function_versioning): Adjust copy_body
callers.
Martin Jambor [Fri, 13 Sep 2013 12:04:54 +0000 (14:04 +0200)]
re PR bootstrap/58388 (LTO profiledbootstrap fails in stage feedback for tree-ssa-structalias.c with "internal compiler error: in try_make_edge_direct_simple_call, at ipa-prop.c:2606")
2013-09-13 Martin Jambor <mjambor@suse.cz>
PR bootstrap/58388
* ipa-prop.c (try_make_edge_direct_simple_call): Be less strict in
the assert if the edge was a speculative one.
Richard Biener [Fri, 13 Sep 2013 10:58:35 +0000 (10:58 +0000)]
tree-data-ref.h (known_dependences_p): Move here ...
2013-09-13 Richard Biener <rguenther@suse.de>
* tree-data-ref.h (known_dependences_p): Move here ...
* tree-loop-distribution.c (known_dependences_p): ... from here.
(dump_rdg_component, debug_rdg_component): Remove.
(dump_rdg): Adjust.
(generate_loops_for_partition): Use gimple_uid instead of
relying on matching stmt visit order.
(rdg_build_partitions): Take starting stmt vector.
(ldist_gen): Merge into ...
(distribute_loop): ... this function. Do not compute starting
vertices vector.
* tree-cfg.c (gimple_duplicate_bb): Copy UID for PHIs.
* config/arm/arm.md (arm_cmpsi_insn): Split rI alternative.
Set type attribute correctly. Set predicable_short_it attribute.
(cmpsi_shiftsi): Remove %? from output template.
* tree-loop-distribution.c (struct rdg_component,
rdg_defs_used_in_other_loops_p, free_rdg_components,
rdg_build_components): Remove.
(stmts_from_loop): Do not record virtual PHIs.
(generate_loops_for_partition): Skip virtual PHIs.
(build_rdg_partition_for_component): Rename to ...
(build_rdg_partition_for_vertex): ... this and adjust.
(rdg_build_partitions): Take a vector of starting vertices
instead of components. Remove unnecessary leftover handling.
(ldist_gen): Do not build components or record other stores.
(distribute_loop): Do not distribute loops containing stmts
with side-effects.
Adam Butcher [Thu, 12 Sep 2013 21:04:52 +0000 (22:04 +0100)]
Support using 'auto' in a function parameter list to introduce an implicit template parameter.
* cp-tree.h (type_uses_auto_or_concept): Declare.
(is_auto_or_concept): Declare.
* decl.c (grokdeclarator): Allow 'auto' parameters in lambdas with
-std=gnu++1y or -std=c++1y or, as a GNU extension, in plain functions.
* type-utils.h: New header defining ...
(find_type_usage): ... this new function based on pt.c (type_uses_auto)
for searching a type tree given a predicate.
* pt.c (type_uses_auto): Reimplement via type-utils.h (find_type_usage).
(is_auto_or_concept): New function.
(type_uses_auto_or_concept): New function.
* parser.h (struct cp_parser): Add fully_implicit_function_template_p.
* parser.c (cp_parser_new): Initialize fully_implicit_function_template_p.
(cp_parser_new): Initialize fully_implicit_function_template_p.
(cp_parser_lambda_expression): Copy and restore value of
fully_implicit_function_template_p as per other parser fields.
(cp_parser_parameter_declaration_list): Count generic
parameters and call ...
(add_implicit_template_parms): ... this new function to synthesize them
with help from type-utils.h (find_type_usage), ...
(tree_type_is_auto_or_concept): ... this new static function and ...
(make_generic_type_name): ... this new static function.
(cp_parser_direct_declarator): Account for implicit template parameters.
(cp_parser_lambda_declarator_opt): Finish fully implicit template if
necessary by calling ...
(finish_fully_implicit_template): ... this new function.
(cp_parser_member_declaration): Likewise.
(cp_parser_function_definition_after_declarator): Likewise.
* Make-lang.in (cp/pt.o): Add dependency on type-utils.h.
(cp/parser.o): Likewise.
Adam Butcher [Thu, 12 Sep 2013 18:54:52 +0000 (19:54 +0100)]
Support lambda templates.
* parser.c (cp_parser_lambda_declarator_opt): Accept template parameter
list with std=c++1y or std=gnu++1y.
(cp_parser_lambda_body): Don't call 'expand_or_defer_fn' for lambda call
operator template to avoid adding template result to symbol table.
* lambda.c (lambda_function): Return template result if call operator is
a template.
(maybe_add_lambda_conv_op): Move declarations to point of use. Refactor
operator call building in order to support conversion of a non-capturing
lambda template to a function pointer with help from ...
(prepare_op_call): ... this new function.
* decl2.c (check_member_template): Don't reject lambda call operator
template in local [lambda] class.
* pt.c (instantiate_class_template_1): Don't instantiate lambda call
operator template when instantiating lambda class.
Adam Butcher [Thu, 12 Sep 2013 18:54:42 +0000 (19:54 +0100)]
Support decl instantiation in function-local templates.
* pt.c (instantiate_decl): Save/restore cp_unevaluated_operand and
c_inhibit_evaluation_warnings. Reset if instantiating within a
function-local template.
Vladimir Makarov [Thu, 12 Sep 2013 18:23:09 +0000 (18:23 +0000)]
re PR middle-end/58335 (S/390: reload vs lra regression - testcase builtin-in-setjmp)
2013-09-12 Vladimir Makarov <vmakarov@redhat.com>
PR middle-end/58335
* lra-eliminations (remove_reg_equal_offset_note): New.
(eliminate_regs_in_insn): Rewrite frame pointer to hard frame
pointer elimination with using remove_reg_equal_offset_note.
Martin Jambor [Thu, 12 Sep 2013 15:20:05 +0000 (17:20 +0200)]
re PR ipa/58389 (g++ ICE in ipa_find_reference)
2013-09-12 Martin Jambor <mjambor@suse.cz>
PR ipa/58389
* ipa-prop.c (remove_described_reference): Give up if the edge in the
reference descriptor is NULL.
(ipa_edge_removal_hook): If owning a reference descriptor, set its
edge to NULL.
Richard Biener [Thu, 12 Sep 2013 13:20:17 +0000 (13:20 +0000)]
re PR tree-optimization/58404 (&noninvariant_address not forwproped into ->handled_component)
2013-09-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/58404
* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Also
propagate non-invariant addresses into dereferences wrapped
in component references.
Richard Biener [Thu, 12 Sep 2013 11:18:46 +0000 (11:18 +0000)]
re PR tree-optimization/58396 (heap-use-after-free at gcc/tree-loop-distribution.c:1959)
2013-09-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/58396
* tree-loop-distribution.c (create_rdg_edges): Free unused DDRs.
(build_rdg): Take a loop-nest parameter, fix memleaks.
(distribute_loop): Compute loop-nest here and pass it to build_rdg.
Thomas Schwinge [Thu, 12 Sep 2013 09:41:42 +0000 (09:41 +0000)]
ChangeLog entry for
* gcc-interface/Makefile.in: Import target_cpu, target_vendor,
target_os and their host_ counterparts. Remove host_canonical and
target_cpu_default, unused. Remove local ad-hoc computations of
"host", "targ", "arch", "osys" and "manu". Replace uses of these by
uses of the now imported family, hence back to filters against
canonical values. Remove filters on e500 for target_cpu, expected to
be canonicalized into powerpc. Invert the logic filtering on 64bit
sparc for VxWorks. Simplify the filtering logic for bareboard tools
target pairs, now using straight elf/eabi filters on the target_os
part only.
Thomas Schwinge [Thu, 12 Sep 2013 09:35:54 +0000 (09:35 +0000)]
Makefile.in: Import target_cpu, target_vendor, target_os and their host_ counterparts.
2013-10-11 Thomas Schwinge <thomas@codesourcery.com>
Olivier Hainque <hainque@adacore.com>
* gcc-interface/Makefile.in: Import target_cpu, target_vendor,
target_os and their host_ counterparts. Remove host_canonical and
target_cpu_default, unused. Remove local ad-hoc computations of
"host", "targ", "arch", "osys" and "manu". Replace uses of these by
uses of the now imported family, hence back to filters against
canonical values. Remove filters on e500 for target_cpu, expected to
be canonicalized into powerpc. Invert the logic filtering on 64bit
sparc for VxWorks. Simplify the filtering logic for bareboard tools
target pairs, now using straight elf/eabi filters on the target_os
part only.
Richard Biener [Thu, 12 Sep 2013 08:49:01 +0000 (08:49 +0000)]
tree-loop-distribution.c (dot_rdg_1): Make graph prettier.
2013-09-12 Richard Biener <rguenther@suse.de>
* tree-loop-distribution.c (dot_rdg_1): Make graph prettier.
(dot_rdg): Use popen instead of system in optional code.
(remaining_stmts, upstream_mem_writes): Remove global bitmaps.
(already_processed_vertex_p): Adjust.
(has_anti_or_output_dependence, predecessor_has_mem_write,
mark_nodes_having_upstream_mem_writes, has_upstream_mem_writes,
rdg_flag_uses): Remove.
(rdg_flag_vertex): Simplify.
(rdg_flag_vertex_and_dependent): Rely on a correct RDG and
remove recursion.
(build_rdg_partition_for_component): Process the first vertex
of a component only.
(ldist_gen): Do not compute remaining_stmts or upstream_mem_writes.
* gcc.dg/tree-ssa/ldist-4.c: Remove undefined behavior. Adjust
expected outcome and comment why that happens.
re PR libstdc++/58358 (search_n has a Complexity violation for random access iterator)
2013-09-11 Mitsuru Kariya <kariya_mitsuru@hotmail.com>
Chris Jefferson <chris@bubblescope.net>
PR libstdc++/58358
* include/bits/stl_algo.h (search_n): Fix to guarantee a number
of comparisons <= number of elements in the range.
* testsuite/25_algorithms/search_n/58358.cc: New.
* testsuite/25_algorithms/search_n/iterator.cc: Extend.
Co-Authored-By: Chris Jefferson <chris@bubblescope.net>
From-SVN: r202510