1. 20 Jul, 2018 9 commits
    • Add "-fsave-optimization-record" · 4a4412b9
      This patch implements a -fsave-optimization-record option, which
      leads to a JSON file being written out, recording the dump_* calls
      made (via the optinfo infrastructure).
      
      The patch includes a minimal version of the JSON patch I posted last
      year, with just enough support needed for optimization records (I
      removed all of the parser code, leaving just the code for building
      in-memory JSON trees and writing them to a pretty_printer).
      
      gcc/ChangeLog:
      	* Makefile.in (OBJS): Add json.o and optinfo-emit-json.o.
      	(CFLAGS-optinfo-emit-json.o): Define TARGET_NAME.
      	* common.opt (fsave-optimization-record): New option.
      	* coretypes.h (struct kv_pair): Move here from dumpfile.c.
      	* doc/invoke.texi (-fsave-optimization-record): New option.
      	* dumpfile.c: Include "optinfo-emit-json.h".
      	(struct kv_pair): Move to coretypes.h.
      	(optgroup_options): Make non-static.
      	(dump_context::end_scope): Call
      	optimization_records_maybe_pop_dump_scope.
      	* dumpfile.h (optgroup_options): New decl.
      	* json.cc: New file.
      	* json.h: New file.
      	* optinfo-emit-json.cc: New file.
      	* optinfo-emit-json.h: New file.
      	* optinfo.cc: Include "optinfo-emit-json.h".
      	(optinfo::emit): Call optimization_records_maybe_record_optinfo.
      	(optinfo_enabled_p): Check optimization_records_enabled_p.
      	(optinfo_wants_inlining_info_p): Likewise.
      	* optinfo.h: Update comment.
      	* profile-count.c (profile_quality_as_string): New function.
      	* profile-count.h (profile_quality_as_string): New decl.
      	(profile_count::quality): New accessor.
      	* selftest-run-tests.c (selftest::run_tests): Call json_cc_tests
      	and optinfo_emit_json_cc_tests.
      	* selftest.h (selftest::json_cc_tests): New decl.
      	(selftest::optinfo_emit_json_cc_tests): New decl.
      	* toplev.c: Include "optinfo-emit-json.h".
      	(compile_file): Call optimization_records_finish.
      	(do_compile): Call optimization_records_start.
      	* tree-ssa-live.c: Include optinfo.h.
      	(remove_unused_scope_block_p): Retain inlining information if
      	optinfo_wants_inlining_info_p returns true.
      
      From-SVN: r262905
      David Malcolm committed
    • PR libstdc++/86595 add missing noexcept · bf0086f1
      	PR libstdc++/86595
      	* include/bits/fs_dir.h (directory_entry::refresh(error_code&)): Add
      	noexcept.
      
      From-SVN: r262904
      Jonathan Wakely committed
    • Use default visibility to work around clang -fvisibility-inlines-hidden bug · 2143168e
      Clang (including trunk and many older versions) incorrectly marks static
      local variables (__tag) hidden when -fvisibility-inlines-hidden is used.
      This can lead to multiple instances of __tag when shares objects are used.
      
      2018-07-20  Fangrui Song  <maskray@google.com>
      
      	* include/bits/shared_ptr_base.h (_Sp_make_shared_tag::_S_ti): Use
      	_GLIBCXX_VISIBILITY(default).
      
      From-SVN: r262903
      Fangrui Song committed
    • PR libstdc++/86603 Move __cpp_lib_list_remove_return_type macro · afa07bdd
      This should only be defined for C++2a not C++17.
      
      	PR libstdc++/86603
      	* include/std/version: Move __cpp_lib_list_remove_return_type macro.
      
      From-SVN: r262902
      Jonathan Wakely committed
    • re PR debug/86585 (ICE in gen_member_die, at dwarf2out.c:24935) · efe0e6cd
      2018-07-20  Richard Biener  <rguenther@suse.de>
      
      	PR debug/86585
      	* dwarf2out.c (dwarf2out_die_ref_for_decl): Test in_lto_p
      	to cover -flto-partition=none.
      	
      	lto/
      	* lto.c (unify_scc): Before we throw away an SCC see if we
      	can amend prevailing single-entry SCC with debug refs.
      
      	* g++.dg/lto/pr86585_0.C: New testcase.
      	* g++.dg/lto/pr86585_1.C: Likewise.
      
      From-SVN: r262901
      Richard Biener committed
    • Remove unused code. · 4e51aacb
      2018-07-20  Martin Liska  <mliska@suse.cz>
      
      	* tree.h (DECL_LOCATION_RANGE): Remove unused macro.
      	(get_decl_source_range): Remove unused function.
      
      From-SVN: r262900
      Martin Liska committed
    • tree-ssa-sccvn.h (struct vn_nary_op_s): Add next member. · b89ffb98
      2018-07-20  Richard Biener  <rguenther@suse.de>
      
      	* tree-ssa-sccvn.h (struct vn_nary_op_s): Add next member.
      	(struct vn_phi_s): Likewise.
      	(struct vn_reference_s): Likewise.
      	* tree-ssa-sccvn.c (vn_nary_op_hasher::equal): Add shortcut
      	for searching the slot of an entry known to be in the hash itself.
      	(vn_phi_hasher::equal): Likewise.
      	(vn_reference_hasher::equal): Likewise.
      	(last_inserted_ref, last_inserted_phi, last_inserted_nary): New
      	globals.
      	(optimistic_info, current_info): Remove, keeping only valid_info.
      	(vn_reference_lookup_1): Remove fallback lookup.
      	(vn_reference_lookup_2): Likewise.
      	(vn_nary_op_lookup_1): Likewise.
      	(vn_phi_lookup): Likewise.
      	(vn_nary_build_or_lookup_1): Make sure to not chain the built
      	hash element.
      	(vn_reference_insert): Adjust, chain the inserted hash element
      	at last_inserted_ref.
      	(vn_reference_insert_pieces): Likewise.
      	(visit_reference_op_call): Likewise.
      	(vn_nary_op_insert_into): Chain the inserted hash element at
      	last_inserted_nary.
      	(vn_nary_op_insert_pieces): Adjust.
      	(vn_nary_op_insert): Likewise.
      	(vn_nary_op_insert_stmt): Likewise.
      	(vn_phi_insert): Adjust, chain the inserted hash element at
      	last_inserted_phi.
      	(process_scc): Remove clearing and copying the optimistic
      	table.  Instead remove elements inserted during an optimistic
      	iteration from the single table we maintain.
      	(init_scc_vn): Adjust.
      	(free_scc_vn): Likewise.
      	(sccvn_dom_walker::record_cond): Likewise.
      	(sccvn_dom_walker::after_dom_children): Likewise.
      
      From-SVN: r262899
      Richard Biener committed
    • MAINTAINERS (m32c, [...]): Remove myself as maintainer. · 3b0df776
      * MAINTAINERS (m32c, msp43, rl78, libiberty, build): Remove myself
      as maintainer.
      
      From-SVN: r262898
      DJ Delorie committed
    • Daily bump. · f5aa5955
      From-SVN: r262897
      GCC Administrator committed
  2. 19 Jul, 2018 19 commits
    • PR tree-optimization/84047 - missing -Warray-bounds on an out-of-bounds index into an array · d893b683
      PR tree-optimization/84047 - missing -Warray-bounds on an out-of-bounds index into an array
      PR tree-optimization/83776 - missing -Warray-bounds indexing past the end of a string literal
      
      gcc/ChangeLog:
      
      	PR tree-optimization/84047
      	PR tree-optimization/83776
      	* tree-vrp.c (vrp_prop::check_mem_ref): New function.
      	(check_array_bounds): Call it.
      
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/83776
      	PR tree-optimization/84047
      	* gcc.dg/Warray-bounds-29.c: New test.
      	* gcc.dg/Warray-bounds-30.c: New test.
      	* gcc.dg/Warray-bounds-31.c: New test.
      	* gcc.dg/Warray-bounds-32.c: New test.
      
      From-SVN: r262893
      Martin Sebor committed
    • align.h (align_flags): Use member initialization. · a34ab135
      gcc/ChangeLog:
      
      	* align.h (align_flags): Use member initialization.
      
      From-SVN: r262892
      Martin Sebor committed
    • Add "optinfo" framework · 4df3629e
      This patch implements a way to consolidate dump_* calls into
      optinfo objects, as enabling work towards being able to write out
      optimization records to a file.
      
      The patch adds the support for building optinfo instances from dump_*
      calls, but leaves implementing any *users* of them to followup patches.
      
      gcc/ChangeLog:
      	* Makefile.in (OBJS): Add optinfo.o.
      	* coretypes.h (class symtab_node): New forward decl.
      	(struct cgraph_node): New forward decl.
      	(class varpool_node): New forward decl.
      	* dump-context.h: New file.
      	* dumpfile.c: Include "optinfo.h", "dump-context.h", "cgraph.h",
      	"tree-pass.h".
      	(refresh_dumps_are_enabled): Use optinfo_enabled_p.
      	(set_dump_file): Call dumpfile_ensure_any_optinfo_are_flushed.
      	(set_alt_dump_file): Likewise.
      	(dump_context::~dump_context): New dtor.
      	(dump_gimple_stmt): Move implementation to...
      	(dump_context::dump_gimple_stmt): ...this new member function.
      	Add the stmt to any pending optinfo, creating one if need be.
      	(dump_gimple_stmt_loc): Move implementation to...
      	(dump_context::dump_gimple_stmt_loc): ...this new member function.
      	Start a new optinfo and add the stmt to it.
      	(dump_gimple_expr): Move implementation to...
      	(dump_context::dump_gimple_expr): ...this new member function.
      	Add the stmt to any pending optinfo, creating one if need be.
      	(dump_gimple_expr_loc): Move implementation to...
      	(dump_context::dump_gimple_expr_loc): ...this new member function.
      	Start a new optinfo and add the stmt to it.
      	(dump_generic_expr): Move implementation to...
      	(dump_context::dump_generic_expr): ...this new member function.
      	Add the tree to any pending optinfo, creating one if need be.
      	(dump_generic_expr_loc): Move implementation to...
      	(dump_context::dump_generic_expr_loc): ...this new member
      	function.  Add the tree to any pending optinfo, creating one if
      	need be.
      	(dump_printf): Move implementation to...
      	(dump_context::dump_printf_va): ...this new member function.  Add
      	the text to any pending optinfo, creating one if need be.
      	(dump_printf_loc): Move implementation to...
      	(dump_context::dump_printf_loc_va): ...this new member function.
      	Start a new optinfo and add the stmt to it.
      	(dump_dec): Move implementation to...
      	(dump_context::dump_dec): ...this new member function.  Add the
      	value to any pending optinfo, creating one if need be.
      	(dump_context::dump_symtab_node): New member function.
      	(dump_context::get_scope_depth): New member function.
      	(dump_context::begin_scope): New member function.
      	(dump_context::end_scope): New member function.
      	(dump_context::ensure_pending_optinfo): New member function.
      	(dump_context::begin_next_optinfo): New member function.
      	(dump_context::end_any_optinfo): New member function.
      	(dump_context::s_current): New global.
      	(dump_context::s_default): New global.
      	(dump_scope_depth): Delete global.
      	(dumpfile_ensure_any_optinfo_are_flushed): New function.
      	(dump_symtab_node): New function.
      	(get_dump_scope_depth): Reimplement in terms of dump_context.
      	(dump_begin_scope): Likewise.
      	(dump_end_scope): Likewise.
      	(selftest::temp_dump_context::temp_dump_context): New ctor.
      	(selftest::temp_dump_context::~temp_dump_context): New dtor.
      	(selftest::verify_item): New function.
      	(ASSERT_IS_TEXT): New macro.
      	(ASSERT_IS_TREE): New macro.
      	(ASSERT_IS_GIMPLE): New macro.
      	(selftest::test_capture_of_dump_calls): New test.
      	(selftest::dumpfile_c_tests): Call it.
      	* dumpfile.h (dump_printf, dump_printf_loc, dump_basic_block)
      	(dump_generic_expr_loc, dump_generic_expr, dump_gimple_stmt_loc)
      	(dump_gimple_stmt, dump_dec): Gather these related decls and add a
      	descriptive comment.
      	(dump_function, print_combine_total_stats, enable_rtl_dump_file)
      	(dump_node, dump_bb): Move these unrelated decls.
      	(class dump_manager): Add leading comment.
      	* optinfo.cc: New file.
      	* optinfo.h: New file.
      
      From-SVN: r262891
      David Malcolm committed
    • aarch64.md (subv<GPI>4, [...]): New patterns. · 30c46053
      2018-07-19  Michael Collison  <michael.collison@arm.com>
      	    Richard Henderson <rth@redhat.com>
      
      	* config/aarch64/aarch64.md (subv<GPI>4, usubv<GPI>4): New patterns.
      	(subti): Handle op1 zero.
      	(subvti4, usub4ti4): New.
      	(*sub<GPI>3_compare1_imm): New.
      	(sub<GPI>3_carryinCV): New.
      	(*sub<GPI>3_carryinCV_z1_z2, *sub<GPI>3_carryinCV_z1): New.
      	(*sub<GPI>3_carryinCV_z2, *sub<GPI>3_carryinCV): New.
      
      2018-07-19  Michael Collison  <michael.collison@arm.com>
      	    Richard Henderson <rth@redhat.com>
      
      	* config/aarch64/aarch64.md: (addv<GPI>4, uaddv<GPI>4): New.
      	(addti3): Create simpler code if low part is already known to be 0.
      	(addvti4, uaddvti4): New.
      	(*add<GPI>3_compareC_cconly_imm): New.
      	(*add<GPI>3_compareC_cconly): New.
      	(*add<GPI>3_compareC_imm): New.
      	(*add<GPI>3_compareC): Rename from add<GPI>3_compare1; do not
      	handle constants within this pattern..
      	(*add<GPI>3_compareV_cconly_imm): New.
      	(*add<GPI>3_compareV_cconly): New.
      	(*add<GPI>3_compareV_imm): New.
      	(add<GPI>3_compareV): New.
      	(add<GPI>3_carryinC, add<GPI>3_carryinV): New.
      	(*add<GPI>3_carryinC_zero, *add<GPI>3_carryinV_zero): New.
      	(*add<GPI>3_carryinC, *add<GPI>3_carryinV): New.
      	((*add<GPI>3_compareC_cconly_imm): Replace 'ne' operator
      	with 'comparison' operator.
      	(*add<GPI>3_compareV_cconly_imm): Ditto.
      	(*add<GPI>3_compareV_cconly): Ditto.
      	(*add<GPI>3_compareV_imm): Ditto.
      	(add<GPI>3_compareV): Ditto.
      	(add<mode>3_carryinC): Ditto.
      	(*add<mode>3_carryinC_zero): Ditto.
      	(*add<mode>3_carryinC): Ditto.
      	(add<mode>3_carryinV): Ditto.
      	(*add<mode>3_carryinV_zero): Ditto.
      	(*add<mode>3_carryinV): Ditto.
      
      2018-07-19  Michael Collison  <michael.collison@arm.com>
      	    Richard Henderson <rth@redhat.com>
      
      	* config/aarch64/aarch64-modes.def (CC_V): New.
      	* config/aarch64/aarch64-protos.h
      	(aarch64_addti_scratch_regs): Declare
      	(aarch64_subvti_scratch_regs): Declare.
      	(aarch64_expand_subvti): Declare.
      	(aarch64_gen_unlikely_cbranch): Declare
      	* config/aarch64/aarch64.c (aarch64_select_cc_mode): Test
      	for signed overflow using CC_Vmode.
      	(aarch64_get_condition_code_1): Handle CC_Vmode.
      	(aarch64_gen_unlikely_cbranch): New function.
      	(aarch64_addti_scratch_regs): New function.
      	(aarch64_subvti_scratch_regs): New function.
      	(aarch64_expand_subvti): New function.
      
      2018-07-19  Michael Collison  <michael.collison@arm.com>
      	    Richard Henderson <rth@redhat.com>
      
      	* gcc.target/aarch64/builtin_sadd_128.c: New testcase.
      	* gcc.target/aarch64/builtin_saddl.c: New testcase.
      	* gcc.target/aarch64/builtin_saddll.c: New testcase.
      	* gcc.target/aarch64/builtin_uadd_128.c: New testcase.
      	* gcc.target/aarch64/builtin_uaddl.c: New testcase.
      	* gcc.target/aarch64/builtin_uaddll.c: New testcase.
      	* gcc.target/aarch64/builtin_ssub_128.c: New testcase.
      	* gcc.target/aarch64/builtin_ssubl.c: New testcase.
      	* gcc.target/aarch64/builtin_ssubll.c: New testcase.
      	* gcc.target/aarch64/builtin_usub_128.c: New testcase.
      	* gcc.target/aarch64/builtin_usubl.c: New testcase.
      	* gcc.target/aarch64/builtin_usubll.c: New testcase.
      
      
      Co-Authored-By: Richard Henderson <rth@redhat.com>
      
      From-SVN: r262890
      Michael Collison committed
    • Simplify the base characteristics for some type traits · c01f9216
      	* include/std/type_traits (__is_member_object_pointer_helper): Use
      	__not_<is_function<_Tp>>::type instead of integral_constant.
      	(__is_member_function_pointer_helper): Likewise for
      	is_function<_Tp>::type.
      	(is_compund): Likewise for __not_<is_fundamental<_Tp>>::type.
      	(__do_is_nt_destructible_impl): Use __bool_constant and reindent.
      	(is_trivially_constructible): Remove redundant use of
      	is_constructible.
      	(__is_trivially_copy_assignable_impl): Remove redundant use of
      	is_copy_assignable.
      	(__is_trivially_move_assignable_impl): Remove redundant use of
      	is_move_assignable.
      	(is_trivially_destructible): Use __bool_constant.
      	* testsuite/20_util/is_trivially_assignable/value.cc: Add some more
      	tests for scalar types.
      
      From-SVN: r262889
      Jonathan Wakely committed
    • Use __builtin_memmove for trivially copyable types · 20a0c4e3
      2018-07-19  Glen Joseph Fernandes  <glenjofe@gmail.com>
      
      	* include/bits/stl_algobase.h (__copy_move_a): Used
      	__is_trivially_copyable.
      	(__copy_move_backward_a): Likewise.
      	* testsuite/20_util/specialized_algorithms/uninitialized_copy/1.cc:
      	New test.
      
      From-SVN: r262884
      Glen Joseph Fernandes committed
    • revert: [multiple changes] · 0d214821
      2018-07-19  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	Revert fix for c++/59480 (and testsuite followup)
      
      	/testsuite
      	2018-07-19  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* g++.old-deja/g++.mike/p784.C: Add -fpermissive.
      
      	/cp
      	2019-07-18  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/59480, DR 136
      	* decl.c (check_no_redeclaration_friend_default_args): New.
      	(duplicate_decls): Use the latter; also check that a friend
      	declaration specifying default arguments is a definition.
      
      	/testsuite
      	2019-07-18  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/59480, DR 136
      	* g++.dg/other/friend8.C: New.
      	* g++.dg/other/friend9.C: Likewise.
      	* g++.dg/other/friend10.C: Likewise.
      	* g++.dg/other/friend11.C: Likewise.
      	* g++.dg/other/friend12.C: Likewise.
      	* g++.dg/parse/defarg4.C: Compile with -fpermissive -w.
      	* g++.dg/parse/defarg8.C: Likewise.
      
      From-SVN: r262883
      Paolo Carlini committed
    • [PATCH, GCC, AARCH64] Add support for +profile extension · 5170e47e
      This patch adds support for the Statistical Profiling Extension (SPE) on
      AArch64. Even though the compiler will not generate code any differently
      given this extension, it will need to pass it on to the assembler in
      order to let it correctly assemble inline asm containing accesses to the
      extension's system registers.  The same applies when using the
      preprocessor on an assembly file as this first must pass through cc1.
      
      I left the hwcaps string for SPE empty as the kernel does not define a
      feature string for this extension.  The current effect of this is that
      driver will disable profile feature bit in GCC.  This is OK though
      because we don't, nor do we ever, enable this feature bit, as codegen is
      not affect by the SPE support and more importantly the driver will still
      pass the extension down to the assembler regardless.
      
      gcc/ChangeLog
      2018-07-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/aarch64/aarch64-option-extensions.def: New entry for profile
      	extension.
      	* config/aarch64/aarch64.h (AARCH64_FL_PROFILE): New.
      	* doc/invoke.texi (aarch64-feature-modifiers): New entry for profile
      	extension.
      
      gcc/testsuite/ChangeLog
      2018-07-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* gcc.target/aarch64/profile.c: New test.
      
      From-SVN: r262882
      Andre Vieira committed
    • [AArch64][PATCH 2/2] PR target/83009: Relax strict address checking for store · bedc2d2c
      pair lanes
      
      gcc/ChangeLog
      2018-07-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	PR target/83009
      	* config/aarch64/predicates.md (aarch64_mem_pair_lanes_operand): Make
      	address check not strict.
      
      gcc/testsuite/ChangeLog
      2018-07-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	PR target/83009
      	* gcc/target/aarch64/store_v2vec_lanes.c: Add extra tests.
      
      From-SVN: r262881
      Andre Vieira committed
    • [AArch64][PATCH 1/2] Fix addressing printing of LDP/STP · a25831ac
      gcc/ChangeLog
      2018-07-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/aarch64/aarch64-simd.md (aarch64_simd_mov<VQ:mode>): Replace
      	Umq with Umn.
      	(store_pair_lanes<mode>): Likewise.
      	* config/aarch64/aarch64-protos.h (aarch64_addr_query_type): Add new
      	enum value 'ADDR_QUERY_LDP_STP_N'.
      	* config/aarch64/aarch64.c (aarch64_addr_query_type): Likewise.
      	(aarch64_print_address_internal): Add declaration.
      	(aarch64_print_ldpstp_address): Remove.
      	(aarch64_classify_address): Adapt mode for 'ADDR_QUERY_LDP_STP_N'.
      	(aarch64_print_operand): Change printing of 'y'.
      	* config/aarch64/predicates.md (aarch64_mem_pair_lanes_operand): Use
      	new enum value 'ADDR_QUERY_LDP_STP_N', don't hardcode mode and use
      	'true' rather than '1'.
      	* gcc/config/aarch64/constraints.md (Uml): Likewise.
      	(Uml): Rename to Umn.
      	(Umq): Remove.
      
      From-SVN: r262880
      Andre Vieira committed
    • tree-ssa-sccvn.h (struct vn_phi_s): Make phiargs member a trailing array. · 851fd366
      2018-07-19  Richard Biener  <rguenther@suse.de>
      
      	* tree-ssa-sccvn.h (struct vn_phi_s): Make phiargs member
      	a trailing array.
      	* tree-ssa-sccvn.c: Remove alloc-pool.h use.
      	(vn_phi_hasher): Derive from nofree_ptr_hash and remove remove method.
      	(vn_reference_hasher): Likewise.
      	(struct vn_tables_s): Remove obstack and alloc-pool members.
      	(vn_tables_obstack, vn_tables_insert_obstack): New global obstacks.
      	(vn_nary_build_or_lookup_1): Manually build in vn_tables_insert_obstack.
      	(vn_reference_insert): Allocate from obstack instead of from alloc-pool.
      	(vn_reference_insert_pieces): Likewise.
      	(alloc_vn_nary_op_noinit): Adjust.
      	(vn_nary_op_insert_stmt): Allocate phiargs in-place.
      	(vn_phi_eq): Adjust.
      	(shared_lookup_phiargs): Remove.
      	(vn_phi_lookup): Allocate temporary vn_phi_s on the stack.
      	(vn_phi_insert): Allocate from obstack instead of from alloc-pool.
      	(visit_reference_op_call): Likewise.
      	(copy_nary, copy_phi, copy_reference): Remove.
      	(process_scc): Rewind the obstack when iterating.  Do not
      	copy the elements to valid_info but just move them from one
      	hashtable to the other.
      	(allocate_vn_table): Adjust.
      	(free_vn_table): Likewise.
      	(init_scc_vn): Likewise.
      	(free_scc_vn): Likewise.
      
      From-SVN: r262879
      Richard Biener committed
    • i386: Test __has_attribute (__indirect_return__) · ea298fe5
      The new indirect_return attribute is intended to mark swapcontext in
      <ucontext.h>.  Test __has_attribute (__indirect_return__) so that it
      can be backported to GCC 8.
      
      	PR target/86560
      	* gcc.target/i386/pr86560-4.c: New test.
      	* gcc.target/i386/pr86560-5.c: Likewise.
      ---
       gcc/testsuite/gcc.target/i386/pr86560-4.c | 21 +++++++++++++++++++++
       gcc/testsuite/gcc.target/i386/pr86560-5.c | 21 +++++++++++++++++++++
       2 files changed, 42 insertions(+)
       create mode 100644 gcc/testsuite/gcc.target/i386/pr86560-4.c
       create mode 100644 gcc/testsuite/gcc.target/i386/pr86560-5.c
      
      diff --git a/gcc/testsuite/gcc.target/i386/pr86560-4.c b/gcc/testsuite/gcc.target/i386/pr86560-4.c
      new file mode 100644
      index 00000000000..a623e3dcbeb
      --- /dev/null
      +++ b/gcc/testsuite/gcc.target/i386/pr86560-4.c
      @@ -0,0 +1,21 @@
      +/* { dg-do compile } */
      +/* { dg-options "-O2 -fcf-protection" } */
      +/* { dg-final { scan-assembler-times {\mendbr} 2 } } */
      +
      +struct ucontext;
      +
      +extern int (*bar) (struct ucontext *)
      +#ifdef __has_attribute
      +# if __has_attribute (indirect_return)
      +  __attribute__((__indirect_return__))
      +# endif
      +#endif
      +;
      +
      +extern int res;
      +
      +void
      +foo (struct ucontext *oucp)
      +{
      +  res = bar (oucp);
      +}
      diff --git a/gcc/testsuite/gcc.target/i386/pr86560-5.c b/gcc/testsuite/gcc.target/i386/pr86560-5.c
      new file mode 100644
      index 00000000000..33b0f6424c2
      --- /dev/null
      +++ b/gcc/testsuite/gcc.target/i386/pr86560-5.c
      @@ -0,0 +1,21 @@
      +/* { dg-do compile } */
      +/* { dg-options "-O2 -fcf-protection" } */
      +/* { dg-final { scan-assembler-times {\mendbr} 2 } } */
      +
      +struct ucontext;
      +
      +extern int (*bar) (struct ucontext *)
      +#ifdef __has_attribute
      +# if __has_attribute (__indirect_return__)
      +  __attribute__((__indirect_return__))
      +# endif
      +#endif
      +;
      +
      +extern int res;
      +
      +void
      +foo (struct ucontext *oucp)
      +{
      +  res = bar (oucp);
      +}
      -- 
      2.17.1
      
      From-SVN: r262878
      H.J. Lu committed
    • i386: Change indirect_return to function type attribute · 39a6a243
      In
      
      struct ucontext;
      typedef struct ucontext ucontext_t;
      
      extern int (*bar) (ucontext_t *__restrict __oucp,
                         const ucontext_t *__restrict __ucp)
        __attribute__((__indirect_return__));
      
      extern int res;
      
      void
      foo (ucontext_t *oucp, ucontext_t *ucp)
      {
        res = bar (oucp, ucp);
      }
      
      bar() may return via indirect branch.  This patch changes indirect_return
      to type attribute to allow indirect_return attribute on variable or type
      of function pointer so that ENDBR can be inserted after call to bar().
      
      gcc/
      
      	PR target/86560
      	* config/i386/i386.c (rest_of_insert_endbranch): Lookup
      	indirect_return as function type attribute.
      	(ix86_attribute_table): Change indirect_return to function
      	type attribute.
      	* doc/extend.texi: Update indirect_return attribute.
      
      gcc/testsuite/
      
      	PR target/86560
      	* gcc.target/i386/pr86560-1.c: New test.
      	* gcc.target/i386/pr86560-2.c: Likewise.
      	* gcc.target/i386/pr86560-3.c: Likewise.
      
      From-SVN: r262877
      H.J. Lu committed
    • [Fortran] Use MIN/MAX_EXPR or IFN_FMIN/MAX for min/max intrinsics when possible · e0c27d52
      	* trans-intrinsic.c: (gfc_conv_intrinsic_minmax): Emit MIN_MAX_EXPR
      	or IFN_FMIN/FMAX sequence to calculate the min/max when possible.
      
      	* gfortran.dg/max_fmax_aarch64.f90: New test.
      	* gfortran.dg/min_fmin_aarch64.f90: Likewise.
      	* gfortran.dg/minmax_integer.f90: Likewise.
      
      From-SVN: r262876
      Kyrylo Tkachov committed
    • p784.C: Add -fpermissive. · b4a3f1e9
      2018-07-19  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* g++.old-deja/g++.mike/p784.C: Add -fpermissive.
      
      From-SVN: r262875
      Paolo Carlini committed
    • wide-int.h (widest2_int): New. · 3bb1161f
      	* wide-int.h (widest2_int): New.
      	* gimple-fold.c (arith_overflowed_p): Use it.
      	* tree.h (widest2_int_cst): New.
      	* tree-vrp.c (wide_int_binop_overflow): Rename from
      	vrp_int_const_binop.
      	Rewrite to work on trees.
      	(extract_range_from_multiplicative_op_1): Abstract code to...
      	(wide_int_range_min_max): ...here.
      	(wide_int_range_cross_product): ...and here.
      	(extract_range_from_binary_expr_1): Abstract overflow code to...
      	(wide_int_range_cross_product_wrapping): ...here.
      	* tree-vrp.h (wide_int_range_cross_product): New.
      	(wide_int_range_cross_product_wrapping): New.
      
      From-SVN: r262874
      Aldy Hernandez committed
    • simple-object-elf.c (ENOTSUP): If not defined by errno.h, redirect to ENOSYS. · 30ae6662
      2018-07-19  Eli Zaretskii  <eliz@gnu.org>
      
      	* simple-object-elf.c (ENOTSUP): If not defined by errno.h, redirect
      	to ENOSYS.
      
      From-SVN: r262872
      Eli Zaretskii committed
    • x86-tune-costs.h (skylake_memcpy, [...]): Replace rep_prefix with unrolling for size 512. · 6e559c70
      	* config/i386/x86-tune-costs.h (skylake_memcpy,
      	skylake_memset): Replace rep_prefix with unrolling for size 512.
      
      Co-Authored-By: Julia Koval <julia.koval@intel.com>
      
      From-SVN: r262871
      Andrew Senkevich committed
    • Daily bump. · 4a4dab51
      From-SVN: r262870
      GCC Administrator committed
  3. 18 Jul, 2018 12 commits
    • re PR tree-optimization/86544 (Popcount detection generates different code on C and C++) · 7f15cc4d
      gcc/ChangeLog:
      
      2018-07-18  Kugan Vivekanandarajah  <kuganv@linaro.org>
      
      	PR middle-end/86544
      	* tree-ssa-phiopt.c (cond_removal_in_popcount_pattern): Handle comparision with EQ_EXPR
      	in last stmt.
      
      gcc/testsuite/ChangeLog:
      
      2018-07-18  Kugan Vivekanandarajah  <kuganv@linaro.org>
      
      	PR middle-end/86544
      	* g++.dg/tree-ssa/pr86544.C: New test.
      
      From-SVN: r262864
      Kugan Vivekanandarajah committed
    • extend.texi (PowerPC AltiVec Built-in Functions): Rename this subsection to… · d46d010b
      extend.texi (PowerPC AltiVec Built-in Functions): Rename this subsection to "PowerPC AltiVec/VSX Built-in Functions".
      
      gcc/ChangeLog:
      
      2018-07-18  Kelvin Nilsen  <kelvin@gcc.gnu.org>
      
      	* doc/extend.texi (PowerPC AltiVec Built-in Functions): Rename
      	this subsection to "PowerPC AltiVec/VSX Built-in Functions".
      	(PowerPC AltiVec/VSX Built-in Functions): New name for subsection
      	previously known as "PowerPC AltiVec Built-in Functions".  Move
      	some material to new subsubsections "PowerPC AltiVec Built-in
      	Functions on ISA 2.06" and "PowerPC AltiVec Built-in Functions on
      	ISA 2.07".
      	(PowerPC Altivec Built-in Functions on ISA 2.05): New subsubsection.
      	(PowerPC Altivec Built-in Functions on ISA 2.06): Likewise.
      	(PowerPC Altivec Built-in Functions on ISA 2.07): Likewise.
      	(PowerPC Altivec Built-in Functions on ISA 3.0): Likewise.
      
      From-SVN: r262863
      Kelvin Nilsen committed
    • re PR c++/86550 (Lambda parsing allows arbitrary types in decl-specifier-seq) · a171a8bb
      	PR c++/86550
      	* parser.c (cp_parser_decl_specifier_seq): Diagnose invalid type
      	specifier if CP_PARSER_FLAGS_ONLY_MUTABLE_OR_CONSTEXPR.
      
      	* g++.dg/cpp0x/lambda/lambda-86550.C: New test.
      
      From-SVN: r262862
      Jakub Jelinek committed
    • re PR c/69558 (glib2 warning pragmas stopped working) · 6f41f92b
      libcpp:
      2018-07-18  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR 69558
              * macro.c (enter_macro_context): Change the location info for builtin
              macros and _Pragma from location of the closing parenthesis to location
              of the macro expansion point.
      
      testsuite:
      2018-07-18  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR 69558
              * c-c++-common/cpp/diagnostic-pragma-2.c: New test.
              * c-c++-common/pr69558.c: Remove xfail.
              * gcc.dg/cpp/builtin-macro-1.c: Adjust test expectations.
              * gcc.dg/pr61817-1.c: Likewise.
              * gcc.dg/pr61817-2.c: Likewise.
              * g++.dg/plugin/pragma_plugin.c: Warn at expansion_point_location.
      
      From-SVN: r262861
      Bernd Edlinger committed
    • re PR fortran/85599 (warn about short-circuiting of logical expressions for non-pure functions) · 6457b1f0
      2018-07-18  Janus Weil  <janus@gcc.gnu.org>
      	    Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	PR fortran/85599
      	* dump-parse-tree.c (show_attr): Add handling of implicit_pure.
      	* frontend-passes.c (do_warn_function_elimination): Do not warn for
      	pure functions.
      	* gfortran.h: Add prototypes for gfc_pure_function and
      	gfc_implicit_pure_function.
      	* gfortran.texi: Add chapter on evaluation of logical expressions.
      	* invoke.texi: Mention that -Wfunction-elimination is implied
      	by -Wextra.
      	* lang.opt: Make -Wextra imply -Wfunction-elimination.
      	* resolve.c (pure_function): Rename to gfc_pure_function.
      	(gfc_implicit_pure_function): New function.
      	(check_pure_function): Use it here.
      	(impure_function_callback): New function.
      	(resolve_operator): Call it via gfc_expr_walker.
      
      
      2018-07-18  Janus Weil  <janus@gcc.gnu.org>
      
      	PR fortran/85599
      	* gfortran.dg/function_optimize_5.f90: Add option
      	'-faggressive-function-elimination' and update dg-warning clauses.
      	* gfortran.dg/short_circuiting.f90: New test.
      
      Co-Authored-By: Thomas Koenig <tkoenig@gcc.gnu.org>
      
      From-SVN: r262860
      Janus Weil committed
    • PR c++/86190 - bogus -Wsign-conversion warning · c56e9727
      	PR c++/86190 - bogus -Wsign-conversion warning
      	* typeck.c (cp_build_binary_op): Fix formatting.  Add a warning
      	sentinel.
      
      	* g++.dg/warn/Wsign-conversion-3.C: New test.
      	* g++.dg/warn/Wsign-conversion-4.C: New test.
      
      From-SVN: r262855
      Marek Polacek committed
    • re PR target/86557 (missed vectorization with std::vector compared to icc 18) · eb592645
      2018-07-18  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/86557
      	* tree-vect-patterns.c (vect_recog_divmod_pattern): Also handle
      	EXACT_DIV_EXPR.
      
      From-SVN: r262854
      Richard Biener committed
    • 2018-07-18 Paolo Carlini <paolo.carlini@oracle.com> · 02920765
      	* Fix typos in ChangeLog entries.
      
      From-SVN: r262852
      Paolo Carlini committed
    • re PR c++/59480 (Missing error diagnostic: friend declaration specifying a… · 6498dea6
      re PR c++/59480 (Missing error diagnostic: friend declaration specifying a default argument must be a definition)
      
      /cp
      2018-07-18  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* class.c (note_name_declared_in_class): Prefer permerror + inform
      	to a pair of permerrors; use DECL_SOURCE_LOCATION.
      
      /testsuite
      2018-07-18  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* g++.dg/ext/uow-3.C: Adjust.
      	* g++.dg/ext/uow-4.C: Likewise.
      	* g++.dg/lookup/name-clash11.C: Likewise.
      	* g++.dg/lookup/name-clash7.C: Likewise.
      	* g++.dg/lookup/redecl1.C: Likewise.
      	* g++.dg/warn/changes-meaning.C: Likewise.
      	* g++.old-deja/g++.jason/scoping8.C: Likewise.
      	* g++.old-deja/g++.law/nest1.C: Likewise.
      
      /cp
      2019-07-18  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/59480, DR 136
      	* decl.c (check_no_redeclaration_friend_default_args): New.
      	(duplicate_decls): Use the latter; also check that a friend
      	declaration specifying default arguments is a definition.
      
      /testsuite
      2019-07-18  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/59480, DR 136
      	* g++.dg/other/friend8.C: New.
      	* g++.dg/other/friend9.C: Likewise.
      	* g++.dg/other/friend10.C: Likewise.
      	* g++.dg/other/friend11.C: Likewise.
      	* g++.dg/other/friend12.C: Likewise.
      	* g++.dg/parse/defarg4.C: Compile with -fpermissive -w.
      	* g++.dg/parse/defarg8.C: Likewise.
      
      From-SVN: r262851
      Paolo Carlini committed
    • S/390: Add CFI for mcount call sequences · 0559979c
      2018-07-18  Ilya Leoshkevich  <iii@linux.ibm.com>
      
      	* config/s390/s390.c (s390_function_profiler): Generate CFI.
      
      From-SVN: r262850
      Ilya Leoshkevich committed
    • re PR debug/86523 (ICE in gen_member_die, at dwarf2out.c:24933 starting from r262560) · 97f13235
      2018-07-18  Richard Biener  <rguenther@suse.de>
      
      	PR debug/86523
      	cp/
      	* decl2.c (c_parse_final_cleanups): Call write_out_vars before
      	start_static_storage_duration_function sets current_function_decl.
      
      	* g++.dg/lto/pr86523-3_0.C: New testcase.
      
      From-SVN: r262849
      Richard Biener committed
    • arm.c (get_label_padding): Update for recent changes to label_to_alignment. · df6a7b9d
      	* config/arm/arm.c (get_label_padding): Update for recent
      	changes to label_to_alignment.
      
      From-SVN: r262848
      Jeff Law committed