1. 20 Dec, 2019 15 commits
    • re PR target/92841 (Optimize -fstack-protector-strong code generation a bit) · 3439487f
      	PR target/92841
      	* config/i386/i386.md (*stack_protect_set_3): For pic_32bit_operand
      	always use lea{q}, no matter what value which_alternative has.
      
      	* gcc.target/i386/pr92841-2.c: New test.
      
      From-SVN: r279633
      Jakub Jelinek committed
    • re PR target/93002 (while(i--) optimization) · 99675d5c
      	PR target/93002
      	* config/i386/i386.md (dec reg; cmp $-1, reg; jne lab): New
      	define_peephole2.
      
      	* gcc.target/i386/pr93002.c: New test.
      
      From-SVN: r279632
      Jakub Jelinek committed
    • Fortran polymorphic class-type support for OpenACC · 9be3ac5d
      	gcc/fortran/
      	* openmp.c (resolve_oacc_data_clauses): Don't disallow allocatable
      	polymorphic types for OpenACC.
      	* trans-openmp.c (gfc_trans_omp_clauses): Support polymorphic class
      	types.
      
      	libgomp/
      	* testsuite/libgomp.oacc-fortran/class-ptr-param.f95: New test.
      	* testsuite/libgomp.oacc-fortran/classtypes-1.f95: New test.
      	* testsuite/libgomp.oacc-fortran/classtypes-2.f95: New test.
      
      From-SVN: r279631
      Julian Brown committed
    • OpenACC 2.6 deep copy: Fortran execution tests · 02817027
      	libgomp/
      	* testsuite/libgomp.oacc-fortran/deep-copy-1.f90: New test.
      	* testsuite/libgomp.oacc-fortran/deep-copy-2.f90: New test.
      	* testsuite/libgomp.oacc-fortran/deep-copy-3.f90: New test.
      	* testsuite/libgomp.oacc-fortran/deep-copy-4.f90: New test.
      	* testsuite/libgomp.oacc-fortran/deep-copy-5.f90: New test.
      	* testsuite/libgomp.oacc-fortran/deep-copy-6.f90: New test.
      	* testsuite/libgomp.oacc-fortran/deep-copy-7.f90: New test.
      	* testsuite/libgomp.oacc-fortran/deep-copy-8.f90: New test.
      	* testsuite/libgomp.oacc-fortran/derived-type-1.f90: New test.
      	* testsuite/libgomp.oacc-fortran/derivedtype-1.f95: New test.
      	* testsuite/libgomp.oacc-fortran/derivedtype-2.f95: New test.
      	* testsuite/libgomp.oacc-fortran/multidim-slice.f95: New test.
      	* testsuite/libgomp.oacc-fortran/update-2.f90: New test.
      
      Co-Authored-By: Cesar Philippidis <cesar@codesourcery.com>
      
      From-SVN: r279630
      Julian Brown committed
    • OpenACC 2.6 deep copy: C and C++ execution tests · c2eb021f
      	libgomp/
      	* testsuite/libgomp.oacc-c-c++-common/deep-copy-1.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/deep-copy-2.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/deep-copy-4.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/deep-copy-6.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/deep-copy-7.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/deep-copy-8.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/deep-copy-9.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/deep-copy-10.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/deep-copy-11.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/deep-copy-14.c: New test.
      	* testsuite/libgomp.oacc-c++/deep-copy-12.C: New test.
      	* testsuite/libgomp.oacc-c++/deep-copy-13.C: New test.
      
      From-SVN: r279629
      Julian Brown committed
    • OpenACC 2.6 deep copy: Fortran front-end parts · 549188ea
              gcc/fortran/
              * gfortran.h (gfc_omp_map_op): Add OMP_MAP_ATTACH, OMP_MAP_DETACH.
              * openmp.c (gfc_match_omp_variable_list): Add allow_derived parameter.
              Parse derived-type member accesses if true.
              (omp_mask2): Add OMP_CLAUSE_ATTACH and OMP_CLAUSE_DETACH.
              (gfc_match_omp_map_clause): Add allow_derived parameter.  Pass to
              gfc_match_omp_variable_list.
              (gfc_match_omp_clauses): Support attach and detach.  Support derived
              types for appropriate OpenACC directives.
              (OACC_PARALLEL_CLAUSES, OACC_SERIAL_CLAUSES, OACC_KERNELS_CLAUSES,
              OACC_DATA_CLAUSES, OACC_ENTER_DATA_CLAUSES): Add OMP_CLAUSE_ATTACH.
              (OACC_EXIT_DATA_CLAUSES): Add OMP_CLAUSE_DETACH.
              (check_symbol_not_pointer): Don't disallow pointer objects of derived
              type.
              (resolve_oacc_data_clauses): Don't disallow allocatable derived types.
              (resolve_omp_clauses): Perform duplicate checking only for non-derived
              type component accesses (plain variables and arrays or array sections).
              Support component refs.
              * trans-expr.c (gfc_conv_component_ref,
              conv_parent_component_references): Make global.
              (gfc_maybe_dereference_var): New function, broken out of...
              (gfc_conv_variable): ...here.  Call above function.
              * trans-openmp.c (gfc_omp_privatize_by_reference): Support component
              refs.
              (gfc_trans_omp_array_section): New function, broken out of...
              (gfc_trans_omp_clauses): ...here.  Support component refs/derived
              types, attach and detach clauses.
              * trans.h (gfc_conv_component_ref, conv_parent_component_references,
              gfc_maybe_dereference_var): Add prototypes.
      
              gcc/testsuite/
              * gfortran.dg/goacc/derived-types.f90: New test.
              * gfortran.dg/goacc/derived-types-2.f90: New test.
              * gfortran.dg/goacc/derived-types-3.f90: New test.
              * gfortran.dg/goacc/data-clauses.f95: Adjust for expected errors.
              * gfortran.dg/goacc/enter-exit-data.f95: Likewise.
      
      From-SVN: r279628
      Julian Brown committed
    • OpenACC 2.6 deep copy: C and C++ front-end parts · 519d7496
      	gcc/c-family/
      	* c-common.h (c_omp_map_clause_name): Add prototype.
      	* c-omp.c (c_omp_map_clause_name): New function.
      	* c-pragma.h (pragma_omp_clause): Add PRAGMA_OACC_CLAUSE_ATTACH and
      	PRAGMA_OACC_CLAUSE_DETACH.
      
      	gcc/c/
      	* c-parser.c (c_parser_omp_clause_name): Add parsing of attach and
      	detach clauses.
      	(c_parser_omp_variable_list): Add ALLOW_DEREF optional parameter.
      	Allow deref (->) in variable lists if true.
      	(c_parser_omp_var_list_parens): Add ALLOW_DEREF optional parameter.
      	Pass to c_parser_omp_variable_list.
      	(c_parser_oacc_data_clause): Support attach and detach clauses.  Update
      	call to c_parser_omp_variable_list.
      	(c_parser_oacc_all_clauses): Support attach and detach clauses.
      	(OACC_DATA_CLAUSE_MASK, OACC_ENTER_DATA_CLAUSE_MASK,
      	OACC_KERNELS_CLAUSE_MASK, OACC_PARALLEL_CLAUSE_MASK,
      	OACC_SERIAL_CLAUSE_MASK): Add PRAGMA_OACC_CLAUSE_ATTACH.
      	(OACC_EXIT_DATA_CLAUSE_MASK): Add PRAGMA_OACC_CLAUSE_DETACH.
      	* c-typeck.c (handle_omp_array_sections_1): Reject subarrays for attach
      	and detach.  Support deref.
      	(handle_omp_array_sections): Use GOMP_MAP_ATTACH_DETACH instead of
      	GOMP_MAP_ALWAYS_POINTER for OpenACC.
      	(c_oacc_check_attachments): New function.
      	(c_finish_omp_clauses): Check attach/detach arguments for being
      	pointers using above.  Support deref.
      
      	gcc/cp/
      	* parser.c (cp_parser_omp_clause_name): Support attach and detach
      	clauses.
      	(cp_parser_omp_var_list_no_open): Add ALLOW_DEREF optional parameter.
      	Parse deref if true.
      	(cp_parser_omp_var_list): Add ALLOW_DEREF optional parameter.  Pass to
      	cp_parser_omp_var_list_no_open.
      	(cp_parser_oacc_data_clause): Support attach and detach clauses.
      	Update call to cp_parser_omp_var_list_no_open.
      	(cp_parser_oacc_all_clauses): Support attach and detach.
      	(OACC_DATA_CLAUSE_MASK, OACC_ENTER_DATA_CLAUSE_MASK,
      	OACC_KERNELS_CLAUSE_MASK, OACC_PARALLEL_CLAUSE_MASK,
      	OACC_SERIAL_CLAUSE_MASK): Add PRAGMA_OACC_CLAUSE_ATTACH.
      	(OACC_EXIT_DATA_CLAUSE_MASK): Add PRAGMA_OACC_CLAUSE_DETACH.
      	* semantics.c (handle_omp_array_sections_1): Reject subarrays for
      	attach and detach.
      	(handle_omp_array_sections): Use GOMP_MAP_ATTACH_DETACH instead of
      	GOMP_MAP_ALWAYS_POINTER for OpenACC.
      	(cp_oacc_check_attachments): New function.
      	(finish_omp_clauses): Use above function.  Allow structure fields and
      	class members to appear in OpenACC data clauses.  Support
      	GOMP_MAP_ATTACH_DETACH.  Support deref.
      
      	gcc/testsuite/
      	* c-c++-common/goacc/deep-copy-arrayofstruct.c: New test.
      	* c-c++-common/goacc/mdc-1.c: New test.
      	* c-c++-common/goacc/mdc-2.c: New test.
      	* gcc.dg/goacc/mdc.C: New test.
      
      Co-Authored-By: Cesar Philippidis <cesar@codesourcery.com>
      
      From-SVN: r279627
      Julian Brown committed
    • OpenACC 2.6 deep copy: middle-end parts · 4fd872bc
      	gcc/
      	* gimplify.c (gimplify_omp_var_data): Add GOVD_MAP_HAS_ATTACHMENTS.
      	(insert_struct_comp_map): Support derived-type member mappings
      	for arrays with descriptors which use GOMP_MAP_TO_PSET.  Support
      	GOMP_MAP_ATTACH_DETACH.
      	(gimplify_scan_omp_clauses): Tidy up OACC_ENTER_DATA/OACC_EXIT_DATA
      	mappings.  Handle attach/detach clauses and component references.
      	(gimplify_adjust_omp_clauses_1): Skip adjustments for explicit
      	attach/detach clauses.
      	(gimplify_omp_target_update): Handle struct mappings and finalize for
      	detach operations.
      	* omp-low.c (lower_omp_target): Support GOMP_MAP_ATTACH,
      	GOMP_MAP_DETACH, GOMP_MAP_FORCE_DETACH.
      	* tree-pretty-print.c (dump_omp_clause): Likewise, plus
      	GOMP_MAP_ATTACH_DETACH.
      
      	include/
      	* gomp-constants.h (gomp_map_kind): Add GOMP_MAP_ATTACH_DETACH.
      
      From-SVN: r279626
      Julian Brown committed
    • OpenACC 2.6 deep copy: libgomp parts · 8e7e71ff
      	include/
      	* gomp-constants.h (GOMP_MAP_FLAG_SPECIAL_4, GOMP_MAP_DEEP_COPY):
      	Define.
      	(gomp_map_kind): Add GOMP_MAP_ATTACH, GOMP_MAP_DETACH,
      	GOMP_MAP_FORCE_DETACH.
      
      	libgomp/
      	* libgomp.h (struct target_var_desc): Add do_detach flag.
      	* oacc-init.c (acc_shutdown_1): Free aux block if present.
      	* oacc-mem.c (find_group_last): Add SIZES parameter. Support
      	struct components.  Tidy up and add some new checks.
      	(goacc_enter_data_internal): Update call to find_group_last.
      	(goacc_exit_data_internal): Support detach operations and
      	GOMP_MAP_STRUCT.
      	(GOACC_enter_exit_data): Handle initial GOMP_MAP_STRUCT or
      	GOMP_MAP_FORCE_PRESENT in finalization detection code.  Handle
      	attach/detach in enter/exit data detection code.
      	* target.c (gomp_map_vars_existing): Initialise do_detach field of
      	tgt_var_desc.
      	(gomp_map_vars_internal): Support attach.
      	(gomp_unmap_vars_internal): Support detach.
      
      From-SVN: r279625
      Julian Brown committed
    • OpenACC 2.6 deep copy: attach/detach API routines · 5d5be7bf
      	libgomp/
      	* libgomp.h (struct splay_tree_aux): Add attach_count field.
      	(gomp_attach_pointer, gomp_detach_pointer): Add prototypes.
      	* libgomp.map (OACC_2.6): New section. Add acc_attach,
      	acc_attach_async, acc_detach, acc_detach_async, acc_detach_finalize,
      	acc_detach_finalize_async.
      	* oacc-mem.c (acc_attach_async, acc_attach, goacc_detach_internal,
      	acc_detach, acc_detach_async, acc_detach_finalize,
      	acc_detach_finalize_async): New functions.
      	* openacc.h (acc_attach, acc_attach_async, acc_detach,
      	(acc_detach_async, acc_detach_finalize, acc_detach_finalize_async): Add
      	prototypes.
      	* target.c (gomp_attach_pointer, gomp_detach_pointer): New functions.
      	(gomp_remove_var_internal): Free attachment counts if present.
      	* testsuite/libgomp.oacc-c-c++-common/deep-copy-3.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/deep-copy-5.c: New test.
      
      Co-Authored-By: Thomas Schwinge <thomas@codesourcery.com>
      
      From-SVN: r279624
      Julian Brown committed
    • Factor out duplicate code in gimplify_scan_omp_clauses · 4d83edf7
      	gcc/
      	* gimplify.c (insert_struct_comp_map, extract_base_bit_offset): New.
      	(gimplify_scan_omp_clauses): Outline duplicated code into calls to
      	above two functions.
      
      From-SVN: r279623
      Julian Brown committed
    • Use gomp_map_val for OpenACC host-to-device address translation · 5bcd470b
      	libgomp/
      	* libgomp.h (gomp_map_val): Add prototype.
      	* oacc-parallel.c (GOACC_parallel_keyed): Use gomp_map_val instead of
      	open-coding device-address calculation.
      	* target.c (gomp_map_val): Make global. Use OFFSET_POINTER in
      	non-present case.
      
      Co-Authored-By: Cesar Philippidis <cesar@codesourcery.com>
      
      From-SVN: r279622
      Julian Brown committed
    • OpenACC reference count overhaul · 378da98f
      	libgomp/
      	* libgomp.h (struct splay_tree_key_s): Substitute dynamic_refcount
      	field for virtual_refcount.
      	(enum gomp_map_vars_kind): Add GOMP_MAP_VARS_OPENACC_ENTER_DATA.
      	(gomp_free_memmap): Remove prototype.
      	* oacc-init.c (acc_shutdown_1): Iteratively call gomp_remove_var
      	instead of calling gomp_free_memmap.
      	* oacc-mem.c (acc_map_data): Use virtual_refcount instead of
      	dynamic_refcount.
      	(acc_unmap_data): Open code instead of forcing target_mem_desc's
      	to_free field to NULL then calling gomp_unmap_vars.  Handle
      	REFCOUNT_INFINITY on target blocks.
      	(goacc_enter_data): Rename to...
      	(goacc_enter_datum): ...this.  Remove MAPNUM parameter and special
      	handling for mapping groups.  Use virtual_refcount instead of
      	dynamic_refcount.  Use GOMP_MAP_VARS_OPENACC_ENTER_DATA for
      	map_map_vars_async call.  Re-do lookup for target pointer return value.
      	(acc_create, acc_create_async, acc_copyin, acc_copyin_async): Call
      	renamed goacc_enter_datum function.
      	(goacc_exit_data): Rename to...
      	(goacc_exit_datum): ...this.  Update for virtual_refcount semantics.
      	(acc_delete, acc_delete_async, acc_delete_finalize,
      	acc_delete_finalize_async, acc_copyout, acc_copyout_async,
      	acc_copyout_finalize, acc_copyout_finalize_async): Call renamed
      	goacc_exit_datum function.
      	(gomp_acc_remove_pointer, find_pointer): Remove functions.
      	(find_group_last, goacc_enter_data_internal, goacc_exit_data_internal):
      	New functions.
      	(GOACC_enter_exit_data): Use goacc_enter_data_internal and
      	goacc_exit_data_internal helper functions.
      	* target.c (gomp_map_vars_internal): Handle
      	GOMP_MAP_VARS_OPENACC_ENTER_DATA.  Update for virtual_refcount
      	semantics.
      	(gomp_unmap_vars_internal): Update for virtual_refcount semantics.
      	(gomp_load_image_to_device, omp_target_associate_ptr): Zero-initialise
      	virtual_refcount field instead of dynamic_refcount.
      	(gomp_free_memmap): Remove function.
      	* testsuite/libgomp.oacc-c-c++-common/unmap-infinity-1.c: New test.
      	* testsuite/libgomp.c-c++-common/unmap-infinity-2.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/pr92843-1.c: Add XFAIL.
      
      From-SVN: r279621
      Julian Brown committed
    • Use aux struct in libgomp for infrequently-used/API-specific data · 2a656a93
      	libgomp/
      	* libgomp.h (struct splay_tree_aux): New.
      	(struct splay_tree_key_s): Replace link_key field with aux pointer.
      	* target.c (gomp_map_vars_internal): Adjust for link_key being moved
      	to aux struct.
      	(gomp_remove_var_internal): Free aux block if present.
      	(gomp_load_image_to_device): Zero-initialise aux field instead of
      	link_key field.
      	(omp_target_associate_pointer): Zero-initialise aux field.
      
      Co-Authored-By: Thomas Schwinge <thomas@codesourcery.com>
      
      From-SVN: r279620
      Julian Brown committed
    • Daily bump. · 8cce8b85
      From-SVN: r279619
      GCC Administrator committed
  2. 19 Dec, 2019 24 commits
    • re PR target/92905 (Spills float-int union to memory) · a8a728aa
      2019-12-19  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR target/92905
      	* lra-constraints.c (process_alt_operands): Check offmemok when
      	processing preferred_reload_class.
      
      2019-12-19  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR target/92905
      	* gcc.target/i386/pr92905.c: New test.
      
      From-SVN: r279596
      Vladimir Makarov committed
    • Update g++.dg/ext/sve-sizeless-2.C after r279471 · 38830e50
      2019-12-19  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/testsuite/
      	* g++.dg/ext/sve-sizeless-2.C: Don't expect an error for
      	alias templates.
      
      From-SVN: r279588
      Richard Sandiford committed
    • Allow constants in amdgcn extends and truncates · 82975c74
      2019-12-19  Andrew Stubbs  <ams@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn-valu.md
      	(<convop><VEC_ALL1REG_INT_ALT:mode><VEC_ALL1REG_INT_MODE:mode>2<exec>):
      	Change input predcate to gcn_alu_operand.
      	(extend<VEC_ALL1REG_INT_ALT:mode><VEC_ALL1REG_INT_MODE:mode>2<exec>):
      	Likewise.
      	(truncv64di<mode>2): Likewise.
      	(truncv64di<mode>2_exec): Likewise.
      	(<convop><mode>v64di2): Likewise.
      	(<convop><mode>v64di2_exec): Likewise.
      
      From-SVN: r279587
      Andrew Stubbs committed
    • Use V64SI for all amdgcn add-with-carry insns · 3a4d2bbc
      2019-12-19  Andrew Stubbs  <ams@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn-valu.md (*plus_carry_dpp_shr_<mode>): Rename to ...
      	(*plus_carry_dpp_shr_v64si): ... this, and replace all
      	VEC_1REG_INT_MODE with V64SI.
      
      From-SVN: r279584
      Andrew Stubbs committed
    • Prevent conversion of character data in array constructors. · 8405874a
         
      Fix for PR fortran/92896 [10 Regression] [DEC] ICE in reduce_unary, at
      fortran/arith.c:1283.
          
      This was caused by an unintended side affect of "Allow CHARACTER literals
      in assignments and data statements" (revision 277975). If the conversion
      occurs in a array constructor it is rejected.
      
      From-SVN: r279583
      Mark Eggleston committed
    • hash-map-tests.c: add a selftest involving int_hash · aa0e90e7
      gcc/ChangeLog:
      	* hash-map-tests.c (selftest::test_map_of_int_to_strings): New
      	selftest.
      	(selftest::hash_map_tests_c_tests): Call it.
      
      From-SVN: r279582
      David Malcolm committed
    • gimple const-correctness fixes · 0e7b6a51
      This patch converts various "gimple *" to "const gimple *" and similar
      fixes for gimple subclasses, adding is_a_helper for gimple subclasses
      to support the const form of as_a, and adding a few "const" overloads
      of accessors.
      
      This is enough to make pp_gimple_stmt_1's stmt const.
      
      gcc/ChangeLog:
      	* gimple-predict.h (gimple_predict_predictor): Make "gs" param
      	const.
      	(gimple_predict_outcome): Likewise.
      	* gimple-pretty-print.c (do_niy): Likewise.
      	(dump_unary_rhs): Likewise.
      	(dump_binary_rhs): Likewise.
      	(dump_ternary_rhs): Likewise.
      	(dump_gimple_assign): Likewise.
      	(dump_gimple_return): Likewise.
      	(dump_gimple_call_args): Likewise.
      	(pp_points_to_solution): Make "pt" param const.
      	(dump_gimple_call): Make "gs" param const.
      	(dump_gimple_switch): Likewise.
      	(dump_gimple_cond): Likewise.
      	(dump_gimple_label): Likewise.
      	(dump_gimple_goto): Likewise.
      	(dump_gimple_bind): Likewise.
      	(dump_gimple_try): Likewise.
      	(dump_gimple_catch): Likewise.
      	(dump_gimple_eh_filter): Likewise.
      	(dump_gimple_eh_must_not_throw): Likewise.
      	(dump_gimple_eh_else): Likewise.
      	(dump_gimple_resx): Likewise.
      	(dump_gimple_eh_dispatch): Likewise.
      	(dump_gimple_debug): Likewise.
      	(dump_gimple_omp_for): Likewise.
      	(dump_gimple_omp_continue): Likewise.
      	(dump_gimple_omp_single): Likewise.
      	(dump_gimple_omp_taskgroup): Likewise.
      	(dump_gimple_omp_target): Likewise.
      	(dump_gimple_omp_teams): Likewise.
      	(dump_gimple_omp_sections): Likewise.
      	(dump_gimple_omp_block): Likewise.
      	(dump_gimple_omp_critical): Likewise.
      	(dump_gimple_omp_ordered): Likewise.
      	(dump_gimple_omp_scan): Likewise.
      	(dump_gimple_omp_return): Likewise.
      	(dump_gimple_transaction): Likewise.
      	(dump_gimple_asm): Likewise.
      	(dump_gimple_phi): Make "phi" param const.
      	(dump_gimple_omp_parallel): Make "gs" param const.
      	(dump_gimple_omp_task): Likewise.
      	(dump_gimple_omp_atomic_load): Likewise.
      	(dump_gimple_omp_atomic_store): Likewise.
      	(dump_gimple_mem_ops): Likewise.
      	(pp_gimple_stmt_1): Likewise.  Add "const" to the various as_a <>
      	casts throughout.
      	* gimple-pretty-print.h (gimple_stmt_1): Make gimple * param const.
      	* gimple.h (is_a_helper <const gdebug *>::test): New.
      	(is_a_helper <const ggoto *>::test): New.
      	(is_a_helper <const glabel *>::test): New.
      	(is_a_helper <const geh_else *>::test): New.
      	(is_a_helper <const geh_mnt *>::test): New.
      	(is_a_helper <const gswitch *>::test): New.
      	(is_a_helper <const gtry *>::test): New.
      	(is_a_helper <const greturn *>::test): New.
      	(gimple_call_tail_p): Make param const.
      	(gimple_call_return_slot_opt_p): Likewise.
      	(gimple_call_va_arg_pack_p): Likewise.
      	(gimple_call_use_set): Add const overload.
      	(gimple_call_clobber_set): Likewise.
      	(gimple_has_lhs): Make param const.
      	(gimple_bind_body): Likewise.
      	(gimple_catch_handler): Likewise.
      	(gimple_eh_filter_failure): Likewise.
      	(gimple_eh_must_not_throw_fndecl): Likewise.
      	(gimple_eh_else_n_body): Likewise.
      	(gimple_eh_else_e_body): Likewise.
      	(gimple_try_eval): Likewise.
      	(gimple_try_cleanup): Likewise.
      	(gimple_phi_arg): Add const overload.
      	(gimple_phi_arg_def): Make param const.
      	(gimple_phi_arg_edge): Likewise.
      	(gimple_phi_arg_location): Likewise.
      	(gimple_phi_arg_has_location): Likewise.
      	(gimple_debug_bind_get_var): Likewise.
      	(gimple_debug_bind_get_value): Likewise.
      	(gimple_debug_source_bind_get_var): Likewise.
      	(gimple_debug_source_bind_get_value): Likewise.
      	(gimple_omp_body): Likewise.
      	(gimple_omp_for_collapse): Likewise.
      	(gimple_omp_for_pre_body): Likewise.
      	(gimple_transaction_body): Likewise.
      	* tree-eh.c (lookup_stmt_eh_lp_fn): Make param "t" const.
      	(lookup_stmt_eh_lp): Likewise.
      	* tree-eh.h (lookup_stmt_eh_lp_fn): Make param const.
      	(lookup_stmt_eh_lp): Likewise.
      	* tree-ssa-alias.h (pt_solution_empty_p): Make param const.
      	* tree-ssa-structalias.c (pt_solution_empty_p): Likewise.
      
      From-SVN: r279581
      David Malcolm committed
    • [AArch64] Fix handling of npatterns>1 constants for partial SVE modes · b23c6a2c
      For partial SVE vectors of element X, we want to treat duplicates
      of single X elements in the same way as for full vectors of X.
      But if a constant instead contains a repeating pattern of X elements,
      the transition from one value to the next must happen at container
      boundaries rather than element boundaries.  E.g. a VNx4HI should
      in that case contain the same number of constants as a VNx4SI.
      
      Fixing this means that we need a reinterpret from the container-based
      mode to the partial mode; e.g. in the above example we need a
      reinterpret from VNx4SI to VNx4HI.  We can't use subregs for that
      because they're forbidden by aarch64_can_change_class_mode; we should
      handle them in the same way as for big-endian instead.
      
      2019-12-19  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* config/aarch64/aarch64.c (aarch64_simd_valid_immediate): When
      	handling partial SVE vectors, use the container mode rather than
      	the element mode if the constant isn't a single-element duplicate.
      	* config/aarch64/aarch64-sve.md (@aarch64_sve_reinterpret<mode>):
      	Check targetm.can_change_mode_class instead of BYTES_BIG_ENDIAN.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/mixed_size_9.c: New test.
      
      From-SVN: r279580
      Richard Sandiford committed
    • comment tweak · 3561caa2
      From-SVN: r279579
      Jason Merrill committed
    • PR c++/52320 - EH cleanups for partially constructed arrays. · 26a68e92
      This testcase wasn't fixed by the 66139 patch; split_nonconstant_init_1 was
      failing to add a cleanup for an array member of a class (e.g. e1) that will
      run if initializing a later member (e.g. e2) throws.
      
      	* typeck2.c (split_nonconstant_init_1): Add nested parm.
      	Add cleanup for whole array if true.
      
      From-SVN: r279577
      Jason Merrill committed
    • PR c++/66139 - EH cleanups for partially constructed aggregates. · 942d334e
      There were several overlapping PRs about failure to clean up fully
      constructed subobjects when an exception is thrown during aggregate
      initialization of a temporary.  I fixed this for non-temporaries in the
      context of 57510, but that fix didn't handle temporaries.  So this patch
      does split_nonconstant_init at gimplification time, which is much smaller
      than alternatives I tried.
      
      	PR c++/57510
      	* cp-gimplify.c (cp_gimplify_init_expr): Use split_nonconstant_init.
      	* typeck2.c (split_nonconstant_init): Handle non-variable dest.
      	(split_nonconstant_init_1): Clear TREE_SIDE_EFFECTS.
      	* tree.c (is_local_temp): New.
      
      From-SVN: r279576
      Jason Merrill committed
    • Add changelog for commit r279573 (added myself to write-after-approval) · 39f8777c
      2019-12-19  Stam Markianos-Wright  <stam.markianos-wright@arm.com>
      
      	* MAINTAINERS (write_after_approval): Add myself.
      
      From-SVN: r279575
      Stam Markianos-Wright committed
    • Implement sub-dword add/sub on amdgcn · 77f7566e
      2019-12-19  Andrew Stubbs  <ams@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn-valu.md (addv64si3<exec_clobber>): Rename to ...
      	(add<mode>3<exec_clobber>): ... this, and use VEC_ALL1REG_INT_MODE.
      	(addv64si3_dup<exec_clobber>): Rename to ...
      	(add<mode>3_dup<exec_clobber>): ... this, and use VEC_ALL1REG_INT_MODE.
      	(subv64si3<exec_clobber>): Rename to ...
      	(sub<mode>3<exec_clobber>): ... this, and use VEC_ALL1REG_INT_MODE.
      
      From-SVN: r279574
      Andrew Stubbs committed
    • Add myself to MAINTAINERS · 2b91bb48
      From-SVN: r279573
      Stam Markianos-Wright committed
    • [AArch64] Reject invalid subregs involving partial SVE modes · 76607e7e
      When adding partial SVE modes, I'd remembered to handle reloads
      in a similar way to full big-endian SVE vectors, but forgot the
      just-as-important mode-change rules.
      
      2019-12-19  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* config/aarch64/aarch64.c (aarch64_can_change_mode_class):
      	Don't allow changes between partial SVE modes and other kinds
      	of mode.  Don't allow changes between two partial SVE modes
      	if they have different container or element sizes.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/mixed_size_8.c: New test.
      
      From-SVN: r279572
      Richard Sandiford committed
    • [AArch64] Handle arguments and return types with partial SVE modes · 6aa5370c
      Partial SVE modes can be picked up and used by the vector_size(N)
      attribute.[*] This means that we need to cope with arguments and return
      values with partial SVE modes, which previously triggered asserts like:
      
        /* Generic vectors that map to SVE modes with -msve-vector-bits=N are
           passed by reference, not by value.  */
        gcc_assert (!aarch64_sve_mode_p (mode));
      
      The ABI for these types is fixed from pre-SVE days, and must in any case
      be the same for all -msve-vector-bits=N values.  All we need to do is
      ensure that the vectors are passed and returned in the traditional way.
      
      [*] Advanced SIMD always wins for 64-bit and 128-bit vectors though.
      
      2019-12-19  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* config/aarch64/aarch64.c (aarch64_function_value_1): New function,
      	split out from...
      	(aarch64_function_value): ...here.  Handle partial SVE modes by
      	pretending that they have the associated/traditional integer mode,
      	then wrap the result in the real mode.
      	(aarch64_layout_arg): Take an orig_mode argument and pass it to
      	aarch64_function_arg_alignment.  Handle partial SVE modes analogously
      	to aarch64_function_value.
      	(aarch64_function_arg): Update call accordingly.
      	(aarch64_function_arg_advance): Likewise.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/pcs/gnu_vectors_3.c: New test.
      
      From-SVN: r279571
      Richard Sandiford committed
    • Revert accidental commit · 022d11a3
      From-SVN: r279570
      Richard Sandiford committed
    • Don't mangle attributes that have a space in their name · ed0eca5e
      The SVE port needs to maintain a different type identity for
      GNU vectors and "SVE vectors" even during LTO, since the types
      use different ABIs.  The easiest way of doing that seemed to be
      to use type attributes.  However, these type attributes shouldn't
      be user-facing; they're just a convenient way of representing the
      types internally in GCC.
      
      There are already several internal-only attributes, such as "fn spec"
      and "omp declare simd".  They're distinguished from normal user-facing
      attributes by having a space in their name, which means that it isn't
      possible to write them directly in C or C++.
      
      Taking the same approach mostly works well for SVE.  The only snag
      I've hit so far is that the new attribute needs to (and only exists to)
      affect type identity.  This means that it would normally get included
      in mangled names, to distinguish it from types without the attribute.
      
      However, the SVE ABI specifies a separate mangling for SVE vector types,
      rather than using an attribute mangling + a normal vector mangling.
      So we need some way of suppressing the attribute mangling for this case.
      
      There are currently no other target-independent or target-specific
      internal-only attributes that affect type identity, so this patch goes
      for the simplest fix of skipping mangling for attributes whose names
      contain a space.  Other options I thought about were:
      
      (1) Also make sure that targetm.mangled_type returns nonnull.
      
      (2) Check directly for the target-specific name.
      
      (3) Add a new target hook.
      
      (4) Add new information to attribute_spec.  This would be very invasive
          at this stage, but maybe we should consider replacing all the boolean
          fields with flags?  That should make the tables slightly easier to
          read and would make adding new flags much simpler in future.
      
      2019-12-19  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/cp/
      	* mangle.c (write_CV_qualifiers_for_type): Don't mangle attributes
      	that contain a space.
      
      From-SVN: r279569
      Richard Sandiford committed
    • re PR fortran/92977 (ICE in gfc_trans_omp_atomic, at fortran/trans-openmp.c:3526) · 23cdc1e9
      	PR fortran/92977
      	* frontend-passes.c (call_external_blas): Use || instead of |.
      
      From-SVN: r279567
      Jakub Jelinek committed
    • Fix symver attribute with LTO · 40ebe1fc
      	* cgraph.c (cgraph_node_cannot_be_local_p_1): Prevent targets of
      	symver attributes to be localized.
      	* ipa-visibility.c (cgraph_externally_visible_p,
      	varpool_node::externally_visible_p): Likewise.
      	* symtab.c (symtab_node::verify_base): Check visibility of symbol
      	versions.
      
      	* lto-common.c (read_cgraph_and_symbols): Work around binutils
      	PR25424
      
      
      Co-Authored-By: Xi Ruoyao <xry111@mengyan1223.wang>
      
      From-SVN: r279566
      Jan Hubicka committed
    • ipa: duplicate ipa_size_summary for cloned nodes · 44fca832
      	* ipa-fnsummary.h (ipa_size_summary): Remove copy consturctor.
      	(ipa_size_summary_t): Add duplicate method; move to heap.
      	* ipa-fnsumary.c (ipa_fn_summary_alloc): Fix allocation.
      
      From-SVN: r279563
      Jan Hubicka committed
    • Handle aggregate pass-through for self-recursive call (PR ipa/92794) · 951e27f5
      2019-12-19  Feng Xue  <fxue@os.amperecomputing.com>
      
              PR ipa/92794
              * ipa-cp.c (self_recursive_agg_pass_through_p): New function.
              (intersect_with_plats): Use error_mark_node as place holder
              when aggregate jump function is simple pass-through for
              self-recursive call.
              (intersect_with_agg_replacements): Likewise.
              (intersect_aggregates_with_edge): Likewise.
              (find_aggregate_values_for_callers_subset): Likewise.
      
      2019-12-19  Feng Xue  <fxue@os.amperecomputing.com>
      
              PR ipa/92794
              * gcc.dg/ipa/92794.c: New test.
      
      From-SVN: r279561
      Feng Xue committed
    • Daily bump. · 1ed63309
      From-SVN: r279560
      GCC Administrator committed
    • PR c++/91165 follow-on tweak · db38a029
      I talked in the PR about possibly stripping the location from the args in
      the hash table, since if we use the cache the locations would be wrong, but
      didn't actually do anything about that.  Then I noticed that there's already
      unshare_expr_without_location...
      
      	* constexpr.c (cxx_eval_call_expression): Use
      	unshare_expr_without_location.
      
      From-SVN: r279557
      Jason Merrill committed
  3. 18 Dec, 2019 1 commit
    • Add diagnostic_metadata and CWE support · 6d4a35ca
      This patch adds support for associating a diagnostic message with an
      optional diagnostic_metadata object, so that plugins can add extra data
      to their diagnostics (e.g. mapping a diagnostic to a taxonomy or coding
      standard such as from CERT or MISRA).
      
      Currently this only supports associating a CWE identifier with a
      diagnostic (which is what I'm using for the warnings in the analyzer
      patch kit), but adding a diagnostic_metadata class allows for future
      growth in this area without an explosion of further "warning_at"
      overloads for all of the different kinds of custom data that a plugin
      might want to add.
      
      This version of the patch renames the overly-general
      -fdiagnostics-show-metadata to -fdiagnostics-show-cwe and adds test
      coverage for it via a plugin.
      
      It also adds a note to the documentation that no GCC diagnostics
      currently use this; it's a feature for plugins (and, at some point,
      I hope, the analyzer).
      
      gcc/ChangeLog:
      	* common.opt (fdiagnostics-show-cwe): Add.
      	* diagnostic-core.h (class diagnostic_metadata): New forward decl.
      	(warning_at): Add overload taking a const diagnostic_metadata &.
      	(emit_diagnostic_valist): Add overload taking a
      	const diagnostic_metadata *.
      	* diagnostic-format-json.cc: Include "diagnostic-metadata.h".
      	(json_from_metadata): New function.
      	(json_end_diagnostic): Call it to add "metadata" child for
      	diagnostics with metadata.
      	(diagnostic_output_format_init): Clear context->show_cwe.
      	* diagnostic-metadata.h: New file.
      	* diagnostic.c: Include "diagnostic-metadata.h".
      	(diagnostic_impl): Add const diagnostic_metadata * param.
      	(diagnostic_n_impl): Likewise.
      	(diagnostic_initialize): Initialize context->show_cwe.
      	(diagnostic_set_info_translated): Initialize diagnostic->metadata.
      	(get_cwe_url): New function.
      	(print_any_cwe): New function.
      	(diagnostic_report_diagnostic): Call print_any_cwe if the
      	diagnostic has non-NULL metadata.
      	(emit_diagnostic): Pass NULL as the metadata in the call to
      	diagnostic_impl.
      	(emit_diagnostic_valist): Likewise.
      	(emit_diagnostic_valist): New overload taking a
      	const diagnostic_metadata *.
      	(inform): Pass NULL as the metadata in the call to
      	diagnostic_impl.
      	(inform_n): Likewise for diagnostic_n_impl.
      	(warning): Likewise.
      	(warning_at): Likewise.  Add overload that takes a
      	const diagnostic_metadata &.
      	(warning_n): Pass NULL as the metadata in the call to
      	diagnostic_n_impl.
      	(pedwarn): Likewise for diagnostic_impl.
      	(permerror): Likewise.
      	(error): Likewise.
      	(error_n): Likewise.
      	(error_at): Likewise.
      	(sorry): Likewise.
      	(sorry_at): Likewise.
      	(fatal_error): Likewise.
      	(internal_error): Likewise.
      	(internal_error_no_backtrace): Likewise.
      	* diagnostic.h (diagnostic_info::metadata): New field.
      	(diagnostic_context::show_cwe): New field.
      	* doc/invoke.texi (-fno-diagnostics-show-cwe): New option.
      	* opts.c (common_handle_option): Handle OPT_fdiagnostics_show_cwe.
      	* toplev.c (general_init): Initialize global_dc->show_cwe.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/plugin/diagnostic-test-metadata.c: New test.
      	* gcc.dg/plugin/diagnostic_plugin_test_metadata.c: New test plugin.
      	* gcc.dg/plugin/plugin.exp (plugin_test_list): Add them.
      
      From-SVN: r279556
      David Malcolm committed