1. 20 Aug, 2019 27 commits
    • [Ada] Pragma Warning_As_Error works for style warnings · 6cd8f5b0
      Pragma Warning_As_Error now works for style warnings (messages that
      start with "(style)", enabled by -gnaty) the same way it works for
      regular warnings enabled by -gnatw.
      
      The following test should fail to build with style checks:
      
      gnat.adc:
      
      pragma Warning_As_Error ("two spaces required");
      
      style.adb:
      
      procedure Style is
         X : Integer;
      begin
         null;
         --Hello
      end;
      
      gnatmake -q -f -g style.adb -gnaty
      
      should get:
      
      style.adb:2:04: warning: variable "X" is never read and never assigned
      style.adb:5:06: error: (style) two spaces required [warning-as-error]
      style.adb:6:01: (style) "end Style" required
      gnatmake: "style.adb" compilation error
      
      and no executable should be created.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* errout.adb (Error_Msg_Internal): Set Warn_Err in case of
      	Is_Style_Msg.
      	* erroutc.adb (Output_Msg_Text): Do Warnings_Treated_As_Errors
      	processing and [warning-as-error] modification for style
      	messages.  Clean up code, simplify, remove unnecessary block
      	statement, add renaming of table entry.
      	* erroutc.ads (Warning_Treated_As_Error): Fix comment: no such
      	thing as Set_Warning_As_Error.
      	* opt.ads: Clean up comments and move related declarations near
      	each other.
      	* par-prag.adb: Process Warning_As_Error. This is necessary
      	because many style warning happen during parsing.
      	* sem_prag.adb: Use new Acquire_Warning_Match_String.
      	* sem_util.ads, sem_util.adb (Acquire_Warning_Match_String): New
      	function shared by par-prag.adb and sem_prag.adb. Replaces the
      	procedure in sem_prag.adb. Avoid use of global variables.
      	* stringt.ads, stringt.adb (To_String): New function to convert
      	String_Id to String.
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Document the
      	new feature.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r274721
      Bob Duff committed
    • [Ada] Get rid of linear searches in Lib · 98cbc7e4
      This change is aimed at removing a couple of linear searches in the
      units management code that can become problematic performance-wise when
      the number of loaded units is in the several hundreds, which can happen
      for large files even at -O0 without any inlining.
      
      It introduces an auxiliary hash table to record a mapping between the
      name of units and their entry in the units table, and then replaces the
      linear searches by lookups in this names table.  This can save up to 2%
      of the compilation time spent in the front-end in some cases.
      
      There should be no functional changes, except in the error message
      issued for circular unit dependencies in very peculiar and convoluted
      cases.
      
      2019-08-20  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* lib.ads: Add with clause for GNAT.HTable.
      	Add pragma Inline for Is_Loaded and alphabetize the list.
      	(Unit_Name_Table_Size): New constant.
      	(Unit_Name_Header_Num): New subtype.
      	(Unit_Name_Hash): New function declaration.
      	(Unit_Names): New simple hash table.
      	(Init_Unit_Name): New procedure declaration.
      	* lib.adb (Set_Unit_Name): Unregister the old name in the table,
      	if any, and then register the new name.
      	(Init_Unit_Name): New procedure.
      	(Is_Loaded): Reimplement using a lookup in the names table.
      	(Remove_Unit): Unregister the name.
      	(Unit_Name_Hash): New function.
      	* lib-load.adb (Create_Dummy_Package_Unit): Call Init_Unit_Name.
      	(Load_Unit): Use a lookup in the names table to find out whether
      	the unit has already been loaded.  Call Init_Unit_Name and then
      	Remove_Unit if the loading has failed.
      	(Make_Child_Decl_Unit): Call Init_Unit_Name.
      	(Make_Instance_Unit): Likewise.
      	* lib-writ.adb (Ensure_System_Dependency): Likewise.
      
      From-SVN: r274720
      Eric Botcazou committed
    • [Ada] Sem_Ch13: fix uninitialized parameter static analysis warning · a89a0dd3
      No functional change.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Record_Hole_Check): Initialize After_Last.
      
      From-SVN: r274719
      Bob Duff committed
    • [Ada] Revert change for gnatprove that is no longer needed · b6ad3c08
      Years ago, we adapted Get_Kind_Of_Unit so that gnatprove could use it to
      detect both bodies and specs of predefined units.
      
      However, this wasn't really needed: gnatprove could simply reuse
      Lib.In_Predefined_Unit and now it does. This patch simply reverts two
      commits mentioned above.
      
      No frontend test provided, because the removed comment is clear that this
      doesn't affect the compiler. Other tools similarly should not be affected
      (at least they were not when this change was introduced in 2012).
      
      2019-08-20  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* impunit.adb (Get_Kind_Of_Unit): Revert change for adapting
      	this routine for gnatprove.
      
      From-SVN: r274718
      Piotr Trojanek committed
    • [Ada] Document requirements for Pragma Lock_Free · 2beee64a
      2019-08-20  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Document
      	requirements for Pragma Lock_Free.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r274717
      Arnaud Charlet committed
    • [Ada] Initialize gnat_argc/gnat_argv only the first time · fdacd614
      2019-08-20  Philippe Gil  <gil@adacore.com>
      
      gcc/ada/
      
      	* bindgen.adb (Gen_Main): Set gnat_argc/gnat_argv to argc/argv
      	only when still uninitialized.
      
      From-SVN: r274716
      Philippe Gil committed
    • [Ada] Fix documentation for GNAT.Command_Line.Exit_From_Command_Line · e1976249
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* libgnat/g-comlin.ads (Exit_From_Command_Line): Fix
      	documentation for GNAT.Command_Line.
      
      From-SVN: r274715
      Bob Duff committed
    • [Ada] Add missing dot at the end of lang.opt doc for -fdump-scos · ca19ff23
      2019-08-20  Pierre-Marie de Rodat  <derodat@adacore.com>
      
      gcc/ada/
      
      	PR ada/91492
      	* gcc-interface/lang.opt (-fdump-scos): Add missing dot at the
      	end of the documentation.
      
      From-SVN: r274714
      Pierre-Marie de Rodat committed
    • re PR rtl-optimization/91347 (hppa: wrong code generated with tail call optimisation) · 7ee98586
      	PR rtl-optimization/91347
      	* dse.c (scan_insn): Call add_wild_read for non-const/memset tail calls
      	before reload if HARD_FRAME_POINTER_IS_ARG_POINTER.
      
      From-SVN: r274708
      Eric Botcazou committed
    • Add a pass_by_reference flag to function_arg_info · 257caa55
      This patch adds a flag that tells targets whether an argument
      has been converted to pass-by-reference form.  This replaces
      assign_parm_data_one::passed_pointer in function.c.
      
      The flag is set automatically for places that call
      apply_pass_by_reference_rules.  Places that apply
      pass-by-reference manually need to set it themselves.
      
      (After previous changes, no targets apply pass-by-reference
      manually.  They all go through apply_pass_by_reference_rules.)
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* calls.h (function_arg_info): Add a pass_by_reference field,
      	defaulting to false.
      	* calls.c (apply_pass_by_reference_rules): Set pass_by_reference
      	when applying pass-by-reference semantics.
      	(initialize_argument_information): Likewise.
      	(emit_library_call_value_1): Likewise.
      	* function.c (assign_parm_data_one): Remove passed_pointer field.
      	(assign_parm_find_data_types): Don't set it.
      	(assign_parm_find_stack_rtl, assign_parm_adjust_stack_rtl)
      	(assign_parm_setup_reg, assign_parms, gimplify_parameters): Use
      	arg.pass_by_reference instead of passed_pointer.
      
      From-SVN: r274707
      Richard Sandiford committed
    • Make calls.c use function_arg_info internally · cf0d189e
      This patch makes the two main calls.c argument-processing
      routines track the state of the argument in a function_arg_info
      instead of using separate mode variables.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* calls.c (emit_library_call_value_1): Merge arg and orig_arg
      	into a single function_arg_info, updating its fields when we
      	apply pass-by-reference and promotion semantics.  Use the
      	function_arg_info to track the mode rather than keeping it in
      	a separate local variable.
      	(initialize_argument_information): Likewise.  Base the final
      	arg_to_skip on this new function_arg_info rather than creating
      	a new one from scratch.
      
      From-SVN: r274706
      Richard Sandiford committed
    • Make function.c use function_arg_info internally · 634afa05
      This patch adds a function_arg_info field to assign_parm_data_one,
      so that:
      
        - passed_type -> arg.type
        - promoted_mode -> arg.mode
        - named_arg -> arg.named
      
      We can then pass this function_arg_info directly to the converted
      hooks.
      
      Between the initialisation of the assign_parm_data_one and the
      application of promotion rules (which is a state internal to
      assign_parm_find_data_types), arg.mode is equivalent to passed_mode
      (i.e. to TYPE_MODE).
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* function.c (assign_parm_data_one): Replace passed_type,
      	promoted_mode and named_arg with a function_arg_info field.
      	(assign_parm_find_data_types): Remove local variables and
      	assign directly to "data".  Make data->passed_mode shadow
      	data->arg.mode until promotion, then assign the promoted
      	mode to data->arg.mode.
      	(assign_parms_setup_varargs, assign_parm_find_entry_rtl)
      	(assign_parm_find_stack_rtl, assign_parm_adjust_entry_rtl)
      	(assign_parm_remove_parallels, assign_parm_setup_block_p)
      	(assign_parm_setup_block, assign_parm_setup_reg)
      	(assign_parm_setup_stack, assign_parms, gimplify_parameters): Use
      	arg.mode instead of promoted_mode, arg.type instead of passed_type
      	and arg.named instead of named_arg.  Use data->arg for
      	function_arg_info structures that had the field values passed_type,
      	promoted_mode and named_arg.  Base other function_arg_infos on
      	data->arg, changing the necessary properties.
      
      From-SVN: r274705
      Richard Sandiford committed
    • Add a apply_pass_by_reference_rules helper · b12cdd6e
      This patch adds a helper routine that applies pass-by-reference
      semantics to an existing function_arg_info.
      
      The c6x part means that c6x_function_arg and c6x_function_arg_advance
      see the same "named" value as pass_by_reference did, rather than
      pass_by_reference seeing "true" and the others seeing "false".
      This doesn't matter because the c6x port doesn't care about namedness.
      
      The rs6000.c patch removes an assignment to "type", but the only
      later code to use it was the patched promote_mode line.
      
      (The reason for patching these places despite the above is that
      often target code gets used as a basis for new targets or changes
      to existing ones.)
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* calls.h (apply_pass_by_reference_rules): Declare.
      	* calls.c (apply_pass_by_reference_rules): New function.
      	* config/c6x/c6x.c (c6x_call_saved_register_used): Use it.
      	* config/rs6000/rs6000-call.c (rs6000_parm_needs_stack): Likewise.
      	* config/s390/s390.c (s390_call_saved_register_used): Likewise.
      	* function.c (assign_parm_find_data_types): Likewise.
      	* var-tracking.c (prepare_call_arguments): Likewise.
      
      From-SVN: r274704
      Richard Sandiford committed
    • Use function_arg_info for TARGET_MUST_PASS_IN_STACK · 0ffef200
      The hook is passed the promoted mode instead of the original type mode.
      
      The expr.h reference in the documentation is no longer correct, but
      pointing to calls.h or calls.c doesn't help much either.  I just left
      this as-is since it's not related to the point of the series.
      
      After previous changes, most places already pass arg.mode and arg.type.
      Only i386 and mcore needed to construct a new one out of nothing.
      rs6000 needs to construct one slightly earlier than before.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (must_pass_in_stack): Take a function_arg_info instead
      	of a mode and a type.
      	* doc/tm.texi: Regenerate.
      	* calls.h (must_pass_in_stack_var_size): Take a function_arg_info
      	instead of a mode and a type.
      	(must_pass_in_stack_var_size_or_pad): Likewise.
      	* calls.c (must_pass_in_stack_var_size): Likewise.
      	(must_pass_in_stack_var_size_or_pad): Likewise.
      	(initialize_argument_information): Update call to
      	targetm.calls.must_pass_in_stack.
      	(must_pass_va_arg_on_stack): Likewise.
      	* function.c (assign_parm_find_entry_rtl): Likewise.
      	* targhooks.c (hook_pass_by_reference_must_pass_in_stack): Likewise.
      	* config/alpha/alpha.c (alpha_function_arg): Likewise.
      	(alpha_function_arg_advance): Likewise.
      	* config/cr16/cr16.c (cr16_function_arg): Likewise.
      	(cr16_function_arg_advance): Likewise.
      	* config/cris/cris.c (cris_pass_by_reference): Likewise.
      	(cris_arg_partial_bytes): Likewise.
      	* config/iq2000/iq2000.c (iq2000_pass_by_reference): Likewise.
      	* config/lm32/lm32.c (lm32_function_arg): Likewise.
      	* config/mcore/mcore.c (mcore_num_arg_regs): Likewise.
      	(mcore_function_arg, mcore_arg_partial_bytes): Likewise.
      	* config/mips/mips.c (mips_pass_by_reference): Likewise.
      	* config/mmix/mmix.c (mmix_function_arg_advance): Likewise.
      	(mmix_function_arg_1, mmix_pass_by_reference): Likewise.
      	* config/sh/sh.c (sh_pass_by_reference): Likewise.
      	* config/stormy16/stormy16.c (xstormy16_function_arg): Likewise.
      	* config/xtensa/xtensa.c (xtensa_function_arg_advance): Likewise.
      	* config/arm/arm.c (arm_must_pass_in_stack): Take a function_arg_info
      	instead of a mode and a type.
      	* config/fr30/fr30.c (fr30_must_pass_in_stack): Likewise.
      	(fr30_num_arg_regs): Likewise.
      	(fr30_setup_incoming_varargs): Update calls accordingly.
      	(fr30_arg_partial_bytes, fr30_function_arg): Likewise.
      	(fr30_function_arg_advance): Likewise.
      	* config/frv/frv.c (frv_must_pass_in_stack): Take a function_arg_info
      	instead of a mode and a type.
      	* config/gcn/gcn.c (num_arg_regs): Likewise.
      	(gcn_function_arg, gcn_function_arg_advance): Update calls to
      	num_arg_regs and targetm.calls.must_pass_in_stack.
      	(gcn_arg_partial_bytes): Likewise.
      	* config/i386/i386.c (ix86_must_pass_in_stack): Take a
      	function_arg_info instead of a mode and a type.
      	(classify_argument): Update call accordingly.
      	* config/nds32/nds32.c (nds32_must_pass_in_stack): Take a
      	function_arg_info instead of a mode and a type.
      	* config/rs6000/rs6000-internal.h (rs6000_must_pass_in_stack):
      	Likewise.
      	* config/rs6000/rs6000-call.c (rs6000_must_pass_in_stack): Likewise.
      	(rs6000_parm_needs_stack): Update call accordingly.
      	(setup_incoming_varargs): Likewise.
      
      From-SVN: r274703
      Richard Sandiford committed
    • Use function_arg_info for TARGET_CALLEE_COPIES · 7256c719
      The hook is passed the unpromoted type mode instead of the promoted mode.
      
      The aarch64 definition is redundant, but worth keeping for emphasis.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (callee_copies): Take a function_arg_info instead
      	of a mode, type and named flag.
      	* doc/tm.texi: Regenerate.
      	* targhooks.h (hook_callee_copies_named): Take a function_arg_info
      	instead of a mode, type and named flag.
      	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Delete.
      	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): Likewise.
      	(hook_bool_CUMULATIVE_ARGS_arg_info_true): New function.
      	* targhooks.c (hook_callee_copies_named): Take a function_arg_info
      	instead of a mode, type and named flag.
      	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Delete.
      	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): Likewise.
      	(hook_bool_CUMULATIVE_ARGS_arg_info_true): New function.
      	* calls.h (reference_callee_copied): Take a function_arg_info
      	instead of a mode, type and named flag.
      	* calls.c (reference_callee_copied): Likewise.
      	(initialize_argument_information): Update call accordingly.
      	(emit_library_call_value_1): Likewise.
      	* function.c (gimplify_parameters): Likewise.
      	* config/aarch64/aarch64.c (TARGET_CALLEE_COPIES): Define to
      	hook_bool_CUMULATIVE_ARGS_arg_info_false instead of
      	hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false.
      	* config/c6x/c6x.c (c6x_callee_copies): Delete.
      	(TARGET_CALLEE_COPIES): Define to
      	hook_bool_CUMULATIVE_ARGS_arg_info_true instead.
      	* config/epiphany/epiphany.c (TARGET_CALLEE_COPIES): Define to
      	hook_bool_CUMULATIVE_ARGS_arg_info_true instead of
      	hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true.
      	* config/mips/mips.c (mips_callee_copies): Take a function_arg_info
      	instead of a mode, type and named flag.
      	* config/mmix/mmix.c (TARGET_CALLEE_COPIES): Define to
      	hook_bool_CUMULATIVE_ARGS_arg_info_true instead of
      	hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true.
      	* config/mn10300/mn10300.c (TARGET_CALLEE_COPIES): Likewise.
      	* config/msp430/msp430.c (msp430_callee_copies): Delete.
      	(TARGET_CALLEE_COPIES): Define to
      	hook_bool_CUMULATIVE_ARGS_arg_info_true instead.
      	* config/pa/pa.c (pa_callee_copies): Take a function_arg_info
      	instead of a mode, type and named flag.
      	* config/sh/sh.c (sh_callee_copies): Likewise.
      	* config/v850/v850.c (TARGET_CALLEE_COPIES): Define to
      	hook_bool_CUMULATIVE_ARGS_arg_info_true instead of
      	hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true.
      
      From-SVN: r274702
      Richard Sandiford committed
    • Use function_arg_info for TARGET_FUNCTION_ARG_ADVANCE · 6930c98c
      There seems to be a bit of confusion around this one.  Almost all
      callers pass the same arguments as TARGET_FUNCTION_ARG, meaning
      that the mode is the promoted mode rather than the type mode.
      But the calls.c handling for normal typed arguments instead passes
      the unpromoted TYPE_MODE (despite passing the promoted mode to
      TARGET_FUNCTION_ARG).  I've kept this behaviour with a ??? comment.
      
      (The calls.c handling of libgcc functions does pass the promoted
      mode though, as does the function.c handling of incoming arguments.)
      
      Also, a couple of the arm callers don't seem to be using the hook
      correctly.  Again I kept the current choices and added a ??? comment.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (function_arg_advance): Take a function_arg_info instead
      	of a mode, type and named flag.
      	* doc/tm.texi: Regenerate.
      	* targhooks.h (default_function_arg_advance): Take a function_arg_info
      	instead of a mode, type and named flag.
      	* targhooks.c (default_function_arg_advance): Likewise.
      	* calls.c (initialize_argument_information): Update call to
      	targetm.calls.function_arg_advance.
      	(emit_library_call_value_1): Likewise.
      	* dse.c (get_call_args): Likewise.
      	* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
      	* function.c (assign_parms, gimplify_parameters): Likewise.
      	* var-tracking.c (prepare_call_arguments): Likewise.
      	* config/aarch64/aarch64.c (aarch64_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(aarch64_setup_incoming_varargs): Update call accordingly.
      	* config/alpha/alpha.c (alpha_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(alpha_setup_incoming_varargs): Update call accordingly.
      	* config/arc/arc.c (arc_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(arc_setup_incoming_varargs): Update call accordingly.
      	* config/arm/arm.c (arm_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(cmse_func_args_or_return_in_stack): Update call accordingly.
      	(arm_function_ok_for_sibcall): Likewise.
      	(cmse_nonsecure_call_clear_caller_saved): Likewise.
      	* config/avr/avr.c (avr_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/bfin/bfin.c (bfin_function_arg_advance): Likewise.
      	* config/c6x/c6x.c (c6x_function_arg_advance): Likewise.
      	(c6x_call_saved_register_used): Update call accordingly.
      	* config/cr16/cr16.c (cr16_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/cris/cris.c (cris_function_arg_advance): Likewise.
      	* config/csky/csky.c (csky_function_arg_advance): Likewise.
      	(csky_setup_incoming_varargs): Update call accordingly.
      	* config/epiphany/epiphany.c (epiphany_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/fr30/fr30.c (fr30_function_arg_advance): Likewise.
      	* config/frv/frv.c (frv_function_arg_advance): Likewise.
      	* config/ft32/ft32.c (ft32_function_arg_advance): Likewise.
      	* config/gcn/gcn.c (gcn_function_arg_advance): Likewise.
      	* config/h8300/h8300.c (h8300_function_arg_advance): Likewise.
      	* config/i386/i386.c (ix86_function_arg_advance): Likewise.
      	(ix86_setup_incoming_varargs): Update call accordingly.
      	* config/ia64/ia64.c (ia64_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(ia64_setup_incoming_varargs): Update call accordingly.
      	* config/iq2000/iq2000.c (iq2000_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(iq2000_expand_prologue): Update call accordingly.
      	* config/lm32/lm32.c (lm32_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/m32c/m32c.c (m32c_function_arg_advance): Likewise.
      	* config/m32r/m32r.c (m32r_function_arg_advance): Likewise.
      	* config/m68k/m68k.c (m68k_function_arg_advance): Likewise.
      	* config/mcore/mcore.c (mcore_function_arg_advance): Likewise.
      	* config/microblaze/microblaze.c (microblaze_function_arg_advance):
      	Likewise.
      	(microblaze_expand_prologue): Update call accordingly.
      	* config/mips/mips.c (mips_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(mips_setup_incoming_varargs): Update call accordingly.
      	(mips_output_args_xfer): Likewise.
      	* config/mmix/mmix.c (mmix_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/mn10300/mn10300.c (mn10300_function_arg_advance): Likewise.
      	* config/moxie/moxie.c (moxie_function_arg_advance): Likewise.
      	* config/msp430/msp430.c (msp430_function_arg_advance): Likewise.
      	* config/nds32/nds32.c (nds32_function_arg_advance): Likewise.
      	* config/nios2/nios2.c (nios2_function_arg_advance): Likewise.
      	(nios2_setup_incoming_varargs): Update call accordingly.
      	* config/nvptx/nvptx.c (nvptx_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/or1k/or1k.c (or1k_function_arg_advance): Likewise.
      	* config/pa/pa.c (pa_function_arg_advance): Likewise.
      	* config/pdp11/pdp11.c (pdp11_function_arg_advance): Likewise.
      	* config/pru/pru.c (pru_function_arg_advance): Likewise.
      	* config/riscv/riscv.c (riscv_function_arg_advance): Likewise.
      	(riscv_setup_incoming_varargs): Update call accordingly.
      	* config/rl78/rl78.c (rl78_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/rs6000/rs6000-internal.h (rs6000_function_arg_advance):
      	Likewise.
      	* config/rs6000/rs6000-call.c (rs6000_function_arg_advance): Likewise.
      	(rs6000_parm_needs_stack): Update call accordingly.
      	* config/rx/rx.c (rx_function_arg_advance): Take a function_arg_info
      	instead of a mode, type and named flag.
      	* config/s390/s390.c (s390_function_arg_advance): Likewise.
      	(s390_call_saved_register_used): Update call accordingly.
      	* config/sh/sh.c (sh_function_arg_advance): Take a function_arg_info
      	instead of a mode, type and named flag.
      	(sh_output_mi_thunk): Update call accordingly.
      	* config/sparc/sparc.c (sparc_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/spu/spu.c (spu_function_arg_advance): Likewise.
      	(spu_setup_incoming_varargs): Update call accordingly.
      	* config/stormy16/stormy16.c (xstormy16_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/tilegx/tilegx.c (tilegx_function_arg_advance): Likewise.
      	(tilegx_setup_incoming_varargs): Update call accordingly.
      	* config/tilepro/tilepro.c (tilepro_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(tilegx_setup_incoming_varargs): Update call accordingly.
      	* config/v850/v850.c (v850_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/vax/vax.c (vax_function_arg_advance): Likewise.
      	* config/visium/visium.c (visium_function_arg_advance): Likewise.
      	(visium_setup_incoming_varargs): Update call accordingly.
      	* config/xtensa/xtensa.c (xtensa_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      
      From-SVN: r274701
      Richard Sandiford committed
    • Use function_arg_info for TARGET_FUNCTION_(INCOMING_)ARG · 6783fdb7
      This patch makes both TARGET_FUNCTION_ARG and
      TARGET_FUNCTION_INCOMING_ARG take a function_arg_info.
      They have to be done together since many targets use the
      same function for both.
      
      The hooks are passed the promoted mode instead of the original type mode.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (function_arg, function_incoming_arg): Take a
      	function_arg_info instead of a mode, tree and named flag.
      	* doc/tm.texi: Regenerate.
      	* targhooks.h (default_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	(default_function_incoming_arg): Likewise.
      	* targhooks.c (default_function_arg): Likewise.
      	(default_function_incoming_arg): Likewise.
      	* calls.h (function_arg_info::end_marker_p): New function.
      	(function_arg_info::end_marker): Likewise.
      	* calls.c (prepare_call_address, initialize_argument_information)
      	(expand_call, emit_library_call_value_1): Update calls to
      	targetm.calls.function_arg and targetm.calls.function_incoming_arg.
      	* dse.c: Include calls.h.
      	(get_call_args): Update call to targetm.calls.function_arg.
      	* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
      	* var-tracking.c (prepare_call_arguments): Likewise.
      	* function.c (assign_parm_find_entry_rtl): Update call to
      	targetm.calls.function_incoming_arg.
      	* config/aarch64/aarch64.c (aarch64_function_arg): Take a
      	function_arg_info instead of a mode, tree and named flag.
      	* config/alpha/alpha.c (alpha_function_arg): Likewise.
      	* config/arc/arc.c (arc_function_arg): Likewise.
      	* config/arm/arm.c (arm_function_arg): Likewise.
      	(cmse_func_args_or_return_in_stack): Update call accordingly.
      	(arm_function_ok_for_sibcall): Likewise.
      	(cmse_nonsecure_call_clear_caller_saved): Likewise.
      	* config/avr/avr.c (avr_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	* config/bfin/bfin.c (bfin_function_arg): Likewise.
      	* config/c6x/c6x.c (c6x_function_arg): Likewise.
      	(c6x_call_saved_register_used): Update call accordingly.
      	* config/cr16/cr16.c (cr16_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	* config/cris/cris.c (cris_function_arg, cris_function_incoming_arg)
      	(cris_function_arg_1): Likewise.
      	* config/csky/csky.c (csky_function_arg): Likewise.
      	* config/epiphany/epiphany.c (epiphany_function_arg): Likewise.
      	* config/fr30/fr30.c (fr30_function_arg): Likewise.
      	* config/frv/frv.c (frv_function_arg, frv_function_incoming_arg)
      	(frv_function_arg_1): Likewise.
      	* config/ft32/ft32.c (ft32_function_arg): Likewise.
      	* config/gcn/gcn.c (gcn_function_arg): Likewise.
      	* config/h8300/h8300.c (h8300_function_arg): Likewise.
      	* config/i386/i386.c (ix86_function_arg): Likewise.
      	* config/ia64/ia64.c (ia64_function_arg, ia64_function_incoming_arg)
      	(ia64_function_arg_1): Likewise.
      	* config/iq2000/iq2000.c (iq2000_function_arg): Likewise.
      	(iq2000_expand_prologue, iq2000_pass_by_reference): Update call
      	accordingly.
      	* config/lm32/lm32.c (lm32_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	* config/m32c/m32c.c (m32c_function_arg): Likewise.
      	* config/m32r/m32r.c (m32r_function_arg): Likewise.
      	* config/m68k/m68k.c (m68k_function_arg): Likewise.
      	* config/mcore/mcore.c (mcore_function_arg): Likewise.
      	* config/microblaze/microblaze.c (microblaze_function_arg): Likewise.
      	(microblaze_expand_prologue): Update call accordingly.
      	* config/mips/mips.c (mips_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	* config/mmix/mmix.c (mmix_function_incoming_arg, mmix_function_arg)
      	(mmix_function_arg_1): Likewise.
      	* config/mn10300/mn10300.c (mn10300_function_arg): Likewise.
      	* config/moxie/moxie.c (moxie_function_arg): Likewise.
      	* config/msp430/msp430.c (msp430_function_arg): Likewise.
      	* config/nds32/nds32.c (nds32_function_arg): Likewise.
      	* config/nios2/nios2.c (nios2_function_arg): Likewise.
      	* config/nvptx/nvptx.c (nvptx_function_arg): Likewise.
      	(nvptx_function_incoming_arg): Likewise.
      	* config/or1k/or1k.c (or1k_function_arg): Likewise.
      	* config/pa/pa.c (pa_function_arg): Likewise.
      	* config/pdp11/pdp11.c (pdp11_function_arg): Likewise.
      	* config/pru/pru.c (pru_function_arg): Likewise.
      	* config/riscv/riscv.c (riscv_function_arg): Likewise.
      	* config/rl78/rl78.c (rl78_function_arg): Likewise.
      	* config/rs6000/rs6000-internal.h (rs6000_function_arg): Likewise.
      	* config/rs6000/rs6000-call.c (rs6000_function_arg): Likewise.
      	(rs6000_parm_needs_stack): Update call accordingly.
      	* config/rx/rx.c (rx_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	* config/s390/s390.c (s390_function_arg): Likewise.
      	(s390_call_saved_register_used): Update call accordingly.
      	* config/sh/sh.c (sh_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	(sh_output_mi_thunk): Update call accordingly.
      	* config/sparc/sparc.c (sparc_function_arg_1, sparc_function_arg)
      	(sparc_function_incoming_arg): Take a function_arg_info instead of
      	a mode, tree and named flag.
      	* config/spu/spu.c (spu_function_arg): Likewise.
      	* config/stormy16/stormy16.c (xstormy16_function_arg): Likewise.
      	* config/tilegx/tilegx.c (tilegx_function_arg): Likewise.
      	* config/tilepro/tilepro.c (tilepro_function_arg): Likewise.
      	* config/v850/v850.c (v850_function_arg): Likewise.
      	* config/vax/vax.c (vax_function_arg): Likewise.
      	* config/visium/visium.c (visium_function_arg): Likewise.
      	* config/xtensa/xtensa.c (xtensa_function_arg_1, xtensa_function_arg)
      	(xtensa_function_incoming_arg): Likewise.
      
      From-SVN: r274700
      Richard Sandiford committed
    • Use function_arg_info for TARGET_SETUP_INCOMING_ARGS · e7056ca4
      The hook is passed the promoted mode instead of the original type mode.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (setup_incoming_varargs): Take a function_arg_info
      	instead of a mode and tree.
      	* doc/tm.texi: Regenerate.
      	* targhooks.h (default_setup_incoming_varargs): Take a
      	function_arg_info instead of a mode and tree.
      	* targhooks.c (default_setup_incoming_varargs): Likewise.
      	* config/aarch64/aarch64.c (aarch64_setup_incoming_varargs): Likewise.
      	* config/alpha/alpha.c (alpha_setup_incoming_varargs): Likewise.
      	* config/arc/arc.c (arc_setup_incoming_varargs): Likewise.
      	* config/arm/arm.c (arm_setup_incoming_varargs): Likewise.
      	* config/bfin/bfin.c (setup_incoming_varargs): Likewise.
      	* config/cris/cris.c (cris_setup_incoming_varargs): Likewise.
      	* config/csky/csky.c (csky_setup_incoming_varargs): Likewise.
      	* config/epiphany/epiphany.c (epiphany_setup_incoming_varargs):
      	Likewise.
      	* config/fr30/fr30.c (fr30_setup_incoming_varargs): Likewise.
      	* config/frv/frv.c (frv_setup_incoming_varargs): Likewise.
      	* config/ft32/ft32.c (ft32_setup_incoming_varargs): Likewise.
      	* config/i386/i386.c (ix86_setup_incoming_varargs): Likewise.
      	* config/ia64/ia64.c (ia64_setup_incoming_varargs): Likewise.
      	* config/iq2000/iq2000.c (iq2000_setup_incoming_varargs): Likewise.
      	* config/lm32/lm32.c (lm32_setup_incoming_varargs): Likewise.
      	* config/m32r/m32r.c (m32r_setup_incoming_varargs): Likewise.
      	* config/mcore/mcore.c (mcore_setup_incoming_varargs): Likewise.
      	* config/mips/mips.c (mips_setup_incoming_varargs): Likewise.
      	* config/mmix/mmix.c (mmix_setup_incoming_varargs): Likewise.
      	* config/moxie/moxie.c (moxie_setup_incoming_varargs): Likewise.
      	* config/nds32/nds32.c (nds32_setup_incoming_varargs): Likewise.
      	* config/nios2/nios2.c (nios2_setup_incoming_varargs): Likewise.
      	* config/riscv/riscv.c (riscv_setup_incoming_varargs): Likewise.
      	* config/rs6000/rs6000-internal.h (setup_incoming_varargs): Likewise.
      	* config/rs6000/rs6000-call.c (setup_incoming_varargs): Likewise.
      	* config/sh/sh.c (sh_setup_incoming_varargs): Likewise.
      	* config/spu/spu.c (spu_setup_incoming_varargs): Likewise.
      	* config/tilegx/tilegx.c (tilegx_setup_incoming_varargs): Likewise.
      	* config/tilepro/tilepro.c (tilepro_setup_incoming_varargs): Likewise.
      	* config/visium/visium.c (visium_setup_incoming_varargs): Likewise.
      	* function.c (assign_parms_setup_varargs): Update call to
      	targetm.calls.setup_incoming_varargs.
      
      From-SVN: r274699
      Richard Sandiford committed
    • Use function_arg_info for TARGET_PASS_BY_REFERENCE · 52090e4d
      The hook is passed the unpromoted type mode instead of the promoted mode.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (pass_by_reference): Take a function_arg_info instead
      	of a mode, type and named flag.
      	* doc/tm.texi: Regenerate.
      	* targhooks.h (hook_pass_by_reference_must_pass_in_stack): Update
      	accordingly.
      	(hook_bool_CUMULATIVE_ARGS_arg_info_false): Declare.
      	* targhooks.c (hook_pass_by_reference_must_pass_in_stack): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(hook_bool_CUMULATIVE_ARGS_arg_info_false): New function.
      	* calls.h (pass_by_reference): Take a function_arg_info instead of a
      	mode, type and named flag.
      	* calls.c (pass_by_reference): Likewise.
      	(pass_va_arg_by_reference): Update call accordingly.
      	(initialize_argument_information): Likewise.
      	(emit_library_call_value_1): Likewise.
      	* function.c (assign_parm_find_data_types): Likewise.
      	* var-tracking.c (prepare_call_arguments): Likewise.
      	* stor-layout.c: Include calls.h.
      	(compute_record_mode): Update call to targetm.calls.pass_by_reference.
      	* config/aarch64/aarch64.c (aarch64_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/alpha/alpha.c (alpha_pass_by_reference): Likewise.
      	* config/arc/arc.c (arc_pass_by_reference): Likewise.
      	* config/arm/arm.c (arm_pass_by_reference): Likewise.
      	* config/bfin/bfin.c (bfin_pass_by_reference): Likewise.
      	* config/c6x/c6x.c (c6x_pass_by_reference): Likewise.
      	(c6x_call_saved_register_used): Update call to pass_by_reference.
      	* config/cris/cris.c (cris_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/epiphany/epiphany.c (epiphany_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(epiphany_arg_partial_bytes): Update call accordingly.
      	* config/ft32/ft32.c (ft32_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(ft32_arg_partial_bytes): Update call accordingly.
      	* config/i386/i386.c (ix86_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/iq2000/iq2000.c (iq2000_pass_by_reference): Likewise.
      	* config/m32c/m32c.c (m32c_pass_by_reference): Likewise.
      	* config/m32r/m32r.c (m32r_pass_by_reference): Likewise.
      	(m32r_return_in_memory): Update call accordingly.
      	* config/mips/mips.c (mips_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/mmix/mmix.c (mmix_pass_by_reference): Likewise.
      	* config/mn10300/mn10300.c (mn10300_pass_by_reference): Likewise.
      	* config/moxie/moxie.c (moxie_pass_by_reference): Likewise.
      	(moxie_arg_partial_bytes): Update call accordingly.
      	* config/msp430/msp430.c (msp430_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/nvptx/nvptx.c (nvptx_pass_by_reference): Likewise.
      	* config/or1k/or1k.c (or1k_pass_by_reference): Likewise.
      	* config/pa/pa.c (pa_pass_by_reference): Likewise.
      	* config/riscv/riscv.c (riscv_pass_by_reference): Likewise.
      	(riscv_return_in_memory): Update call accordingly.
      	* config/rs6000/rs6000-internal.h (rs6000_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/rs6000/rs6000-call.c (rs6000_pass_by_reference): Likewise.
      	(rs6000_parm_needs_stack): Update call to pass_by_reference.
      	* config/s390/s390.c (s390_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(s390_call_saved_register_used): Update call accordingly.
      	* config/sh/sh.c (sh_pass_by_reference): Take a function_arg_info
      	instead of a mode, type and named flag.
      	* config/sparc/sparc.c (sparc_pass_by_reference): Likewise.
      	* config/spu/spu.c (spu_pass_by_reference): Likewise.
      	* config/tilegx/tilegx.c (tilegx_pass_by_reference): Likewise.
      	* config/tilepro/tilepro.c (tilepro_pass_by_reference): Likewise.
      	* config/v850/v850.c (v850_pass_by_reference): Likewise.
      	* config/visium/visium.c (visium_pass_by_reference): Likewise.
      
      gcc/ada/
      	* gcc-interface/misc.c (default_pass_by_ref): Update call to
      	pass_by_reference.
      
      From-SVN: r274698
      Richard Sandiford committed
    • Use function_arg_info for TARGET_ARG_PARTIAL_BYTES · a7c81bc1
      This patch adds the function_arg_info class and uses it for
      TARGET_ARG_PARTIAL_BYTES.
      
      The hook is passed the promoted mode instead of the original type mode.
      
      The arguments aren't mentioned in the documentation, which is why the
      target.def change is so small.
      
      The patch changes "true" to "arg.named" in:
      
        gcc_assert (!epiphany_pass_by_reference (cum, mode, type, /* named */ true));
      
      but epiphany_pass_by_reference doesn't care about the named flag.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (arg_partial_bytes): Take a function_arg_info instead
      	of a mode, type and named flag.
      	* doc/tm.texi: Regenerate.
      	* target.h (function_arg_info): Declare.
      	* calls.h (function_arg_info): New class.
      	* targhooks.h (hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Delete.
      	(hook_int_CUMULATIVE_ARGS_arg_info_0): Declare.
      	* targhooks.c (hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Delete.
      	(hook_int_CUMULATIVE_ARGS_arg_info_0): New function.
      	* calls.c (initialize_argument_information): Update call to
      	targetm.calls.partial_bytes.
      	(emit_library_call_value_1): Likewise.
      	* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
      	* function.c (assign_parm_find_entry_rtl): Likewise.
      	* config/alpha/alpha.c (alpha_arg_partial_bytes): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/arc/arc.c (arc_arg_partial_bytes): Likewise.
      	* config/arm/arm.c (arm_arg_partial_bytes): Likewise.
      	(cmse_func_args_or_return_in_stack): Update accordingly.
      	* config/bfin/bfin.c (bfin_arg_partial_bytes): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/cris/cris.c (cris_arg_partial_bytes): Likewise.
      	* config/csky/csky.c (csky_arg_partial_bytes): Likewise.
      	* config/epiphany/epiphany.c (epiphany_arg_partial_bytes): Likewise.
      	* config/fr30/fr30.c: Include calls.h.
      	(fr30_arg_partial_bytes): Take a function_arg_info instead of a mode,
      	type and named flag.
      	* config/frv/frv.c: Include calls.h.
      	(frv_arg_partial_bytes): Take a function_arg_info instead of a mode,
      	type and named flag.
      	* config/ft32/ft32.c (ft32_arg_partial_bytes): Likewise.
      	* config/gcn/gcn.c (gcn_arg_partial_bytes): Likewise.
      	* config/ia64/ia64.c (ia64_arg_partial_bytes): Likewise.
      	* config/iq2000/iq2000.c (iq2000_arg_partial_bytes): Likewise.
      	* config/m32r/m32r.c (m32r_arg_partial_bytes): Likewise.
      	* config/mcore/mcore.c (mcore_arg_partial_bytes): Likewise.
      	* config/microblaze/microblaze.c (function_arg_partial_bytes):
      	Likewise.
      	* config/mips/mips.c (mips_arg_partial_bytes): Likewise.
      	* config/mn10300/mn10300.c (mn10300_arg_partial_bytes): Likewise.
      	* config/moxie/moxie.c (moxie_arg_partial_bytes): Likewise.
      	* config/msp430/msp430.c (msp430_arg_partial_bytes): Likewise.
      	* config/nds32/nds32.c (nds32_arg_partial_bytes): Likewise.
      	* config/nios2/nios2.c (nios2_arg_partial_bytes): Likewise.
      	* config/pa/pa.c (pa_arg_partial_bytes): Likewise.
      	* config/pru/pru.c (pru_arg_partial_bytes): Likewise.
      	* config/riscv/riscv.c (riscv_arg_partial_bytes): Likewise.
      	* config/rs6000/rs6000-internal.h (rs6000_arg_partial_bytes): Likewise.
      	* config/rs6000/rs6000-call.c (rs6000_arg_partial_bytes): Likewise.
      	(rs6000_parm_needs_stack): Update call accordingly.
      	* config/sh/sh.c (sh_arg_partial_bytes): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/sparc/sparc.c (sparc_arg_partial_bytes): Likewise.
      	* config/v850/v850.c (v850_arg_partial_bytes): Likewise.
      
      From-SVN: r274697
      Richard Sandiford committed
    • Add must_pass_va_arg_in_stack · 4f53599c
      This patch splits out another idiom from the va_arg gimplification
      routines, so that there's only one place to update later.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* calls.h (must_pass_va_arg_in_stack): Declare.
      	* calls.c (must_pass_va_arg_in_stack): New function.
      	* config/alpha/alpha.c (alpha_gimplify_va_arg_1): Use it.
      	* config/sh/sh.c (sh_gimplify_va_arg_expr): Likewise.
      	* config/stormy16/stormy16.c (xstormy16_gimplify_va_arg_expr):
      	Likewise.
      	* config/xtensa/xtensa.c (xtensa_gimplify_va_arg_expr): Likewise.
      
      From-SVN: r274696
      Richard Sandiford committed
    • Add pass_va_arg_by_reference · fde65a89
      This patch splits out a common idiom from the va_arg gimplification
      routines, so that there's only one place to update later.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* calls.h (pass_va_arg_by_reference): Declare.
      	* calls.c (pass_va_arg_by_reference): New function.
      	* config/aarch64/aarch64.c (aarch64_gimplify_va_arg_expr): Use it.
      	* config/alpha/alpha.c (alpha_gimplify_va_arg): Likewise.
      	* config/gcn/gcn.c (gcn_gimplify_va_arg_expr): Likewise.
      	* config/i386/i386.c (ix86_gimplify_va_arg): Likewise.
      	* config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise.
      	* config/mips/mips.c (mips_std_gimplify_va_arg_expr): Likewise.
      	(mips_gimplify_va_arg_expr): Likewise.
      	* config/msp430/msp430.c (msp430_gimplify_va_arg_expr): Likewise.
      	* config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise.
      	* config/rs6000/rs6000-call.c (rs6000_gimplify_va_arg): Likewise.
      	* config/s390/s390.c (s390_gimplify_va_arg): Likewise.
      	* config/sparc/sparc.c (sparc_gimplify_va_arg): Likewise.
      	* config/spu/spu.c (spu_gimplify_va_arg_expr): Likewise.
      	* config/tilegx/tilegx.c (tilegx_gimplify_va_arg_expr): Likewise.
      	* config/tilepro/tilepro.c (tilepro_gimplify_va_arg_expr): Likewise.
      	* config/visium/visium.c (visium_gimplify_va_arg): Likewise.
      	* config/xtensa/xtensa.c (xtensa_gimplify_va_arg_expr): Likewise.
      	* targhooks.c (std_gimplify_va_arg_expr): Likewise.
      
      From-SVN: r274695
      Richard Sandiford committed
    • re PR target/91498 (STV change in r274481 causes 300.twolf regression on Haswell) · f386ca41
      2019-08-20  Richard Biener  <rguenther@suse.de>
      
      	PR target/91498
      	* config/i386/i386-features.c (general_scalar_chain::convert_op):
      	Use (vec_merge (vec_duplicate..)) style vector from scalar move.
      	(convert_scalars_to_vector): Add timode_p parameter and use it
      	to guard TImode-only operation.
      	(pass_stv::gate): Adjust so STV runs twice for TARGET_64BIT.
      	(pass_stv::execute): Pass down timode_p.
      
      	* gcc.target/i386/minmax-7.c: New testcase.
      
      From-SVN: r274694
      Richard Biener committed
    • Add TIGERLAKE and COOPERLAKE to GCC. · a9fcfec3
      2019-08-20  Lili Cui  <lili.cui@intel.com>
      
      gcc/
      	* common/config/i386/i386-common.c
      	(processor_names): Add tigerlake and cooperlake.
      	(processor_alias_table): Add tigerlake and cooperlake.
      	* config.gcc: Add -march=tigerlake and cooperlake.
      	* config/i386/driver-i386.c
      	(host_detect_local_cpu): Detect tigerlake and cooperlake.
      	Add "has_avx" to classify processor.
      	* config/i386/i386-builtins.c (processor_model):
      	Add M_INTEL_COREI7_TIGERLAKE and M_INTEL_COREI7_COOPERLAKE.
      	(arch_names_table): Add tigerlake and cooperlake.
      	(get_builtin_code_for_version) : Handle PROCESSOR_TIGERLAKE and
      	PROCESSOR_COOPERLAKE.
      	* config/i386/i386-c.c
      	(ix86_target_macros_internal): Handle tigerlake and cooperlake.
      	* config/i386/i386-options.c
      	(m_TIGERLAKE)  : Define.
      	(m_COOPERLAKE) : Ditto.
      	(m_CORE_AVX512): Ditto.
      	(processor_cost_table): Add cascadelake.
      	(ix86_option_override_internal): Hadle PTA_MOVDIRI, PTA_MOVDIR64B.
      	* config/i386/i386.h
      	(ix86_size_cost) : Define TARGET_TIGERLAKE and TARGET_COOPERLAKE.
      	(processor_type) : Add PROCESSOR_TIGERLAKE and PROCESSOR_COOPERLAKE.
      	(PTA_MOVDIRI): Ditto.
      	(PTA_MOVDIR64B): Ditto.
      	(PTA_COOPERLAKE) : Ditto.
      	(PTA_TIGERLAKE)  : Ditto.
      	(processor_type) : Add PROCESSOR_TIGERLAKE and PROCESSOR_COOPERLAKE.
      	* doc/extend.texi: Add tigerlake and cooperlake.
      	* doc/invoke.texi: Add tigerlake and cooperlake.
      
      gcc/testsuite/
      	* gcc.target/i386/funcspec-56.inc: Handle new march.
      	* g++.target/i386/mv16.C: Handle new march
      
      libgcc/
      	* config/i386/cpuinfo.h: Add INTEL_COREI7_TIGERLAKE and
      	INTEL_COREI7_COOPERLAKE.
      
      From-SVN: r274693
      Hongtao Liu committed
    • install.texi (Specific, alpha): Remove note to use binutils 2.11.2 or later. · 607a71e8
      	* doc/install.texi (Specific, alpha): Remove note to use
      	binutils 2.11.2 or later.
      
      From-SVN: r274692
      Gerald Pfeifer committed
    • re PR middle-end/89544 (Argument marshalling incorrectly assumes stack slots are… · 1bcec8df
      re PR middle-end/89544 (Argument marshalling incorrectly assumes stack slots are naturally aligned.)
      
      2019-08-20  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR middle-end/89544
              * function.c (assign_parm_find_stack_rtl): Use larger alignment
              when possible.
      
      testsuite:
      2019-08-20  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR middle-end/89544
              * gcc.target/arm/unaligned-argument-1.c: New test.
              * gcc.target/arm/unaligned-argument-2.c: New test.
      
      From-SVN: r274691
      Bernd Edlinger committed
    • Daily bump. · 876013aa
      From-SVN: r274689
      GCC Administrator committed
  2. 19 Aug, 2019 13 commits
    • compiler: new debugging output methods/functions · 5582fc15
          
          Add new hooks for dumping named objects, package bindings,
          and top level Gogo package list.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/190877
      
      From-SVN: r274682
      Ian Lance Taylor committed
    • runtime: be more strict in GC · 4f6bdb08
          
          With CL 190599, along with what we do in greyobject, we ensure
          that we only mark allocated heap objects. As a result we can be
          more strict in GC:
          
          - Enable "sweep increased allocation count" check, which checks
            that the number of mark bits set are no more than the number of
            allocation bits.
          
          - Enable invalid pointer check on heap scan. We only trace
            allocated heap objects, which should not contain invalid
            pointer.
          
          This also makes the libgo runtime more convergent with the gc
          runtime.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/190797
      
      From-SVN: r274678
      Ian Lance Taylor committed
    • [AArch64] Use scvtf fbits option where appropriate · 188d0079
      gcc/ChangeLog:
      2019-08-19  Joel Hutton  <Joel.Hutton@arm.com>
      
      	* config/aarch64/aarch64-protos.h (aarch64_fpconst_pow2_recip): New prototype
      	* config/aarch64/aarch64.c (aarch64_fpconst_pow2_recip): New function
      	* config/aarch64/aarch64.md (*aarch64_<su_optab>cvtf<fcvt_target><GPF:mode>2_mult): New pattern
      	(*aarch64_<su_optab>cvtf<fcvt_iesize><GPF:mode>2_mult): New pattern
      	* config/aarch64/constraints.md (Dt): New constraint
      	* config/aarch64/predicates.md (aarch64_fpconst_pow2_recip): New predicate
      
      gcc/testsuite/ChangeLog:
      2019-08-19  Joel Hutton  <Joel.Hutton@arm.com>
      
      	* gcc.target/aarch64/fmul_scvtf_1.c: New test.
      
      From-SVN: r274676
      Joel Hutton committed
    • Add --with-static-standard-libraries to the top level · aac9103b
      gdb should normally not be linked with -static-libstdc++.  Currently
      this has not caused problems, but it's incompatible with catching an
      exception thrown from a shared library -- and a subsequent patch
      changes gdb to do just this.
      
      This patch adds a new --with-static-standard-libraries flag to the
      top-level configure.  It defaults to "auto", which means enabled if
      gcc is being built, and disabled otherwise.
      
      ChangeLog
      2019-08-19  Tom Tromey  <tom@tromey.com>
      
      	* configure: Rebuild.
      	* configure.ac: Add --with-static-standard-libraries.
      
      From-SVN: r274673
      Tom Tromey committed
    • re PR tree-optimization/91403 (GCC fails with ICE.) · 3bbc329b
      2019-08-19  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/91403
      	* tree-scalar-evolution.c (follow_ssa_edge_binary): Inline
      	cases we can handle with tail-recursion...
      	(follow_ssa_edge_expr): ... here.  Do so.
      
      From-SVN: r274672
      Richard Biener committed
    • PR c++/91264 - detect modifying const objects in constexpr. · 04e1749c
      	* constexpr.c (modifying_const_object_error): New function.
      	(cxx_eval_call_expression): Set TREE_READONLY on a CONSTRUCTOR of
      	a const-qualified object after it's been fully constructed.
      	(modifying_const_object_p): New function.
      	(cxx_eval_store_expression): Detect modifying a const object
      	during constant expression evaluation.
      	(cxx_eval_increment_expression): Use a better location when building
      	up the store.
      	(cxx_eval_constant_expression) <case DECL_EXPR>: Mark a constant
      	object's constructor TREE_READONLY.
      
      	* g++.dg/cpp1y/constexpr-tracking-const1.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const2.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const3.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const4.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const5.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const6.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const7.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const8.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const9.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const10.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const11.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const12.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const13.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const14.C: New test.
      
      From-SVN: r274671
      Marek Polacek committed
    • Update BOZ constant documentation. · 5a9ea4ff
      In the section "BOZ Literal constants" delete paragraph about integer
      overload errors when initialising integer variables with BOZ constants
      as these no longer occur.
      
      From-SVN: r274667
      Mark Eggleston committed
    • [Ada] Fix documentation for stream oriented attributes · 8fd97fcd
      2019-08-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_rm/implementation_advice.rst: Fix documentation for
      	stream oriented attributes.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r274666
      Bob Duff committed
    • [Ada] Einfo: update comments for E_Function and E_Procedure · c27a8bce
      2019-08-19  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* einfo.ads (E_Function, E_Procedure): Update comments to
      	reflect that Renamed_Entity is also used for nongeneric
      	subprograms.
      
      From-SVN: r274665
      Gary Dismukes committed
    • [Ada] Fix bogus compilation error with Elaborate_Body and -gnatN · 8fafa0b4
      This fixes a bogus compilation error when a unit with SPARK_Mode
      containing a pragma Elaborate_Body is with-ed by a generic unit
      containing an inlined subprogram, and front-end inlining is enabled.
      
      2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Is_Before_First_Decl): Deal with rewritten
      	pragmas.
      
      gcc/testsuite/
      
      	* gnat.dg/elab8.adb, gnat.dg/elab8_gen.adb,
      	gnat.dg/elab8_gen.ads, gnat.dg/elab8_pkg.adb,
      	gnat.dg/elab8_pkg.ads: New testcase.
      
      From-SVN: r274664
      Eric Botcazou committed
    • [Ada] Suppress warnings on unreferenced parameters of dispatching ops · bfa6962f
      If the -gnatwf switch is used to activate warnings on unreferenced
      formal parameters, the warning is no longer given if the subprogram is
      dispatching, because such warnings tend to be noise. It is quite common
      to have a parameter that is necessary just because the subprogram is
      overriding, or just because we need a controlling parameter for the
      dispatch.
      
      2019-08-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_warn.adb (Warn_On_Unreferenced_Entity): Suppress warning
      	on formal parameters of dispatching operations.
      
      gcc/testsuite/
      
      	* gnat.dg/warn29.adb, gnat.dg/warn29.ads: New testcase.
      
      From-SVN: r274663
      Bob Duff committed
    • [Ada] Crash on object initialization that is call to expression function · fcef060c
      This patch fixes a compiler abort on an object declaration for a
      class-wide type whose expression is a call to an expression function
      that returns type extension.
      
      2019-08-19  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_res.adb (Resolve_Call): A call to an expression function
      	freezes when expander is active, unless the call appears within
      	the body of another expression function,
      
      gcc/testsuite/
      
      	* gnat.dg/expr_func9.adb: New testcase.
      
      From-SVN: r274662
      Ed Schonberg committed
    • [Ada] Conversion routines between GNAT.OS_Lib.OS_Time and long integer · c7022038
      The new routines convert back and forth between private type OS_Time and
      a long integer which can be used in package Ada.Calendar.Conversions
      routines to convert to Ada.Calendar.Time.
      
      2019-08-19  Dmitriy Anisimkov  <anisimko@adacore.com>
      
      gcc/ada/
      
      	* libgnat/s-os_lib.ads, libgnat/s-os_lib.adb (To_Ada, To_C): New
      	routines.
      
      From-SVN: r274661
      Dmitriy Anisimkov committed