1. 20 Aug, 2019 12 commits
    • 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 28 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
    • [Ada] Incorrect code for -gnateV switch · 382b0e97
      This patch corrects the code generated by the -gnateV switch in the case
      of a private type whose full type is a modular type, removing spurious
      run-time failures.
      
      In addition, this corrects the initialization of exception occurrences
      in exception handlers to avoid leaving data uninitialized, which caused
      -gnateV to raise spurious errors.
      
      2019-08-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb (Attribute_Valid): Correct the handling of
      	private types where the full type is modular. System.Address is
      	an example. Otherwise, we convert uncheckedly to a signed type,
      	so we get an incorrect range 0 .. -1, for which all values will
      	fail.  The 'Valid attribute is illegal for such types, but we
      	generate such illegal attribute_references for 'Valid_Scalars,
      	and we generate 'Valid_Scalars when the -gnateV switch is used.
      	Rename Btyp --> PBtyp to avoid hiding the outer Btyp, which was
      	confusing.
      	* libgnat/a-except.adb: Set the Exception_Raised component.
      	Otherwise, we have incorrect reads of invalid data.
      
      gcc/testsuite/
      
      	* gnat.dg/valid_scalars2.adb: New testcase.
      
      From-SVN: r274660
      Bob Duff committed
    • [Ada] Import documentation from the RM for various runtime units · 27ebda19
      2019-08-19  Pierre-Marie de Rodat  <derodat@adacore.com>
      
      gcc/ada/
      
      	* libgnat/a-cgaaso.ads, libgnat/a-cgarso.ads,
      	libgnat/a-cogeso.ads, libgnat/a-contai.ads,
      	libgnat/a-locale.ads: Import documentation from the RM.
      
      From-SVN: r274659
      Pierre-Marie de Rodat committed
    • [Ada] Generate ada_target_properties · bd0feb3c
      Generate target-dependent info into a file named ada_target_properties.
      This information is used by tools for static analysis: they need to know
      the size of standard types for a given run-time library. This metadata
      is meant to be saved at the root of the run-time directory.
      
      2019-08-19  Jerome Guitton  <guitton@adacore.com>
      
      gcc/ada/
      
      	* Makefile.rtl (system.o): New target to add generation of
      	target properties.
      	* gcc-interface/Makefile.in (install-gnatlib): Install
      	ada_target_properties.
      
      From-SVN: r274658
      Jerome Guitton committed
    • [Ada] Lift restriction on instantiations that are compilation units · 6c87c83b
      This change lifts the restriction that was still present in the new
      on-demand instantiation scheme for the body of generics instantiated in
      non-main units.
      
      The instantiations that are compilation units were still dealt with in
      the old-fashioned way, that is to say the decision of instantiating the
      body was still made up front during the analysis of the instance
      declaration, instead of being deferred until after a call to an inlined
      subprogram is encountered.
      
      This should save a few more cycles when full inlining across units is
      enabled, but there should otherwise be no functional changes.
      
      2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Add_Inlined_Body): Do not special-case instances
      	that are compilation units.
      	(Add_Pending_Instantiation): Likewise.
      	(Instantiate_Body): Skip instantiations that are compilation
      	units and have already been performed.
      	* sem_ch12.adb (Needs_Body_Instantiated): Do not special-case
      	instances that are compilation units.
      	(Load_Parent_Of_Generic): Be prepared for parent that is a
      	compilation unit but whose instantiation node has not been
      	replaced.
      
      gcc/testsuite/
      
      	* gnat.dg/generic_inst12.adb, gnat.dg/generic_inst12_pkg1.adb,
      	gnat.dg/generic_inst12_pkg1.ads,
      	gnat.dg/generic_inst12_pkg2.ads: New testcase.
      
      From-SVN: r274657
      Eric Botcazou committed
    • [Ada] Further cleanup in inlining machinery · 92b635e5
      This adds missing boilerplate stuff.  No functional changes.
      
      2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Initialize, Lock): Deal with
      	Called_Pending_Instantiations.
      
      From-SVN: r274656
      Eric Botcazou committed
    • [Ada] Legality of protected subp. implementing interface operations · 432c8cdd
      This patch refines the predicate that implements rule in RM 9.4 (11.9/2)
      
      Compiling b94.ads must yield:
      
         b94.ads:11:17: illegal overriding of subprogram inherited from interface
         b94.ads:11:17: first formal of "N" declared at line 8 must be of mode
           "out", "in out" or access-to-variable
      
      ----
      package B94 is
      
         type Prot2_Int is protected interface;
         procedure  J (PI : in     Prot2_Int; N : in Integer)  is null;
         procedure  K (PI : in out Prot2_Int; N : in Integer)  is null;
         procedure  L (PI :    out Prot2_Int; N : in Integer)  is null;
         procedure  M (PI : access Prot2_Int; N : in Integer)  is null;
         procedure  N (PI : access constant Prot2_Int; N : in Integer)  is null;
      
         protected type Protected_2 is new Prot2_Int with
            procedure N (N : in Integer);                   -- ERROR: {7;1}
         end Protected_2;
      
      end B94;
      
      2019-08-19  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch6.adb (Check_Synchronized_Overriding): Complete
      	predicate that applies legality check in 9.4 (11.9/2): if an
      	inherited subprogram is implemented by a protected procedure or
      	entry, its first paarameter must be out, in_out or
      	access_to_varible.
      
      From-SVN: r274655
      Ed Schonberg committed
    • [Ada] Buffer reading overflow in dispatch table initialization · bd5ed03a
      For tagged types not defined at library level that derive from library
      level tagged types the compiler may generate code to initialize their
      dispatch table of predefined primitives copying from the parent type
      data stored in memory after the dispatch table of the parent; that is,
      at runtime the initialization of dispatch tables overflows reading the
      parent dispatch table.
      
      This problem does not affect the execution of the program since the
      target dispatch table always has enough space to store the extra data,
      and after such copy the compiler generates code to complete the
      initialization of the dispatch table.
      
      The following test must compile and execute without errors.
      
      package pkg_a is
         type Root is tagged null record;
      end pkg_a;
      
      with pkg_a;
      procedure main is
         type Derived is new pkg_a.Root with null record;  -- Test
      begin
         null;
      end main;
      
      Command: gnatmake -q main -fsanitize=address; ./main
      
      2019-08-19  Javier Miranda  <miranda@adacore.com>
      
      gcc/ada/
      
      	PR ada/65696
      	* exp_atag.ads, exp_atag.adb (Build_Inherit_Predefined_Prims):
      	Adding formal to specify how many predefined primitives are
      	inherited from the parent type.
      	* exp_disp.adb (Number_Of_Predefined_Prims): New subprogram.
      	(Make_Secondary_DT): Compute the number of predefined primitives
      	of all tagged types (including tagged types not defined at
      	library level).  Previously we unconditionally relied on the
      	Max_Predef_Prims constant value when building the dispatch
      	tables of tagged types not defined at library level (thus
      	consuming more memory for their dispatch tables than required).
      	(Make_DT): Compute the number of predefined primitives that must
      	be inherited from their parent type when building the dispatch
      	tables of tagged types not defined at library level. Previously
      	we unconditionally relied on the Max_Predef_Prims constant value
      	when building the dispatch tables of tagged types not defined at
      	library level (thus copying more data than required from the
      	parent type).
      
      From-SVN: r274654
      Javier Miranda committed
    • [Ada] Process type extensions for -gnatw.h · d403cfad
      This patch enables gap detection in type extensions.
      
      With the -gnatw.h switch, on 64-bit machines,
      the following test should get warnings:
      
      gcc -c gaps.ads -gnatw.h
      gaps.ads:16:07: warning: 48-bit gap before component "Comp2"
      gaps.ads:17:07: warning: 8-bit gap before component "Comp3"
      
      package Gaps is
         type Integer_16 is mod 2**16;
      
         type TestGap is tagged record
            Comp1 : Integer_16;
         end record;
         for TestGap use record
            Comp1 at 0 + 8 range 0..15;
         end record;
      
         type TestGap2 is new TestGap with record
            Comp2  : Integer_16;
            Comp3  : Integer_16;
         end record;
         for TestGap2 use record
            Comp2 at 08 + 8 range 0..15;
            Comp3 at 11 + 8 range 0..15;
         end record;
      
      end Gaps;
      
      2019-08-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Record_Hole_Check): Procedure to check for holes
      	that incudes processing type extensions. A type extension is
      	processed by first calling Record_Hole_Check recursively on the
      	parent type to compute the bit number after the last component
      	of the parent.
      
      From-SVN: r274653
      Bob Duff committed
    • [Ada] Improve warnings about "too few elements" and "too many elements" · eb6b9c9b
      When warning about length-check failures detected at compile time that
      are flagged with "too few elements" or "too many elements", the compiler
      now gives an additional message indicating the number of elements
      expected by the context versus how many are present in the conflicting
      expression (such as an aggregate that has too few or too many
      components).
      
      The test below reports the following warnings when compiled with this command:
      
      $ gcc -c -gnatj78 length_warnings.adb
      
      length_warnings.adb:6:09: warning: too few elements for subtype of
                                "Boolean_Array" defined at line 5, expected 10
                                elements; found 9 elements, "Constraint_Error" will
                                be raised at run time
      length_warnings.adb:10:09: warning: too few elements for subtype of
                                 "Boolean_Array" defined at line 9, expected 2
                                 elements; found 1 element, "Constraint_Error" will
                                 be raised at run time
      length_warnings.adb:14:09: warning: too many elements for subtype of
                                 "Boolean_Array" defined at line 13, expected 10
                                 elements; found 11 elements, "Constraint_Error"
                                 will be raised at run time
      length_warnings.adb:18:09: warning: too many elements for subtype of
                                 "Boolean_Array" defined at line 17, expected 0
                                 elements; found 1 element, "Constraint_Error" will
                                 be raised at run time
      length_warnings.adb:22:09: warning: too many elements for subtype of
                                 "Boolean_Array" defined at line 21, expected 1
                                 element; found 2 elements, "Constraint_Error" will
                                 be raised at run time
      
      procedure Length_Check_Warnings is
      
         type Boolean_Array is array (Natural range <>) of Boolean;
      
         Bits_A : Boolean_Array (1 .. 10)
           := (True, True, True, True, True, True, True, True, True);
         -- Too few elements
      
         Bits_B : Boolean_Array (1 .. 2)
           := (1 => False);
         -- Too few elements
      
         Bits_C : Boolean_Array (1 .. 10)
           := (True, True, True, True, True, True, True, True, True, True, True);
         -- Too many elements
      
         Bits_D : Boolean_Array (1 .. 0)
           := (1 => True);
         -- Too many elements
      
         Bits_E : Boolean_Array (1 .. 1)
           := (True, False);
         -- Too many elements
      
      begin
         null;
      end Length_Check_Warnings;
      
      2019-08-19  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* checks.adb (Length_Mismatch_Info_Message): New function in
      	Selected_Length_Checks to return a message indicating the
      	element counts for the mismatched lengths for a failed
      	compile-time length check.
      	(Plural_Or_Singular_Ending): Support function in
      	Length_Mismatch_Info_Message to return either "" or "s", for
      	concatenating to the end of words.
      	(Selected_Length_Checks): Pass the result of
      	Length_Mismatch_Info_Message as an extra warning message to
      	Compile_Time_Constraint_Error to indicate the mismatched lengths
      	for a failed compile-time length check.
      	* sem_util.ads (Compile_Time_Constraint_Error): Add an optional
      	message formal (Extra_Msg), defaulted to the empty string.
      	* sem_util.adb (Compile_Time_Constraint_Error): Output an extra
      	message following the main warning message (when Extra_Msg is
      	not the empty string).
      
      From-SVN: r274652
      Gary Dismukes committed
    • [Ada] Enable use of GNAT.Sockets for VxWorks RTP · 593e0eba
      The recent introduction of GNAT.Sockets IPv6 support broke support for
      VxWorks RTPs due to the use of internal VxWorks kernel calls. This patch
      rectifies this by using the VxWorks public API for these routines.
      
      The following RTP should compile successfully on a Development profile
      VxWorks kernel that includes the INCLUDE_GETNAMEINFO component:
      
      with GNAT.Sockets;      use GNAT.Sockets;
      
      procedure IPvX is
         procedure Print_Address_Info
           (Host, Serv   : String;
            Family       : Family_Type := Family_Unspec)
         is
            Addresses : Address_Info_Array :=
              Get_Address_Info
                (Host, Serv, Family,
                 Passive      => False,
                 Numeric_Host => False);
         begin
            Sort (Addresses, IPv6_TCP_Preferred'Access);
         end Print_Address_Info;
      
      begin
         Print_Address_Info ("localhost", "ssh");
      end IPvX;
      
      2019-08-19  Patrick Bernardi  <bernardi@adacore.com>
      
      gcc/ada/
      
      	* socket.c: Removed the redefinition of getaddrinfo, getnameinfo
      	and freeaddrinfo to internal VxWorks kernel calls because they
      	are, well, internal kernel calls and cannot be called from RTPs.
      	VxWorks provides the necessary components to call these routines
      	directly.
      
      From-SVN: r274651
      Patrick Bernardi committed
    • [Ada] Fix incorrect stub generation for types in instances · 1f5c7ba8
      This fixes a fallout of a recent change clearing the
      Is_Generic_Actual_Type on the implicit full view of a private actual
      type in an instance.  This flag is used to help disambiguating formal
      types instantiated on the same actual type within an instance, but it
      should be cleared outside the instance to let the usual disambiguation
      rules apply again to these types outside the instance.
      
      This in particular means that Exp_Dist cannot rely on it to detect
      subtypes representing generic actual types, hence the need for the new
      predicate.
      
      2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_dist.adb (Is_Generic_Actual_Subtype): New predicate.
      	(Build_From_Any_Call, Build_To_Any_Call, Build_TypeCode_Call):
      	Use it instead of Is_Generic_Actual_Type flag to detect subtypes
      	representing generic actual types.
      
      From-SVN: r274650
      Eric Botcazou committed
    • [Ada] Improve placement of warning on formals of generic subprograms · 4527ea2e
      This patch modifies the handling of warnings on unused formal parameters
      of generic subprograms. Previously such warnings were placed on the
      formal appearing in the subprogram declaration, in contrast with
      warnings on non-generic subprograms, where the warning is placed on the
      corresponding entity in the body of the subprogram. This patch makes the
      handling of both cases uniform. It is preferable to place the warning in
      the body because this also provides a better suggestion for the
      placement of an Unreferenced pragma to suppress the warning when desired.
      
      2019-08-19  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_warn.adb (Check_References, Generic_Body_Formal): When a
      	formal parameter of a generic subprogram is not referenced in
      	the body, place the corresponding warning on the corresponding
      	entity in the specification of the generic body, as is done for
      	non-generic subprograms.
      
      gcc/testsuite/
      
      	* gnat.dg/warn28.adb, gnat.dg/warn28.ads: New testcase.
      
      From-SVN: r274649
      Ed Schonberg committed
    • [Ada] Factor out the "size for& too small..." error message · dafa2ae4
      Use a constant for the Size_Too_Small_Message, so if it changes, it
      won't change in one place but not another.  DRY. It might be better to
      move this code out of errout.adb, but that's for another day.
      
      2019-08-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* errout.ads (Size_Too_Small_Message): New constant.
      	* errout.adb, freeze.adb, sem_ch13.adb: Use it.
      
      From-SVN: r274648
      Bob Duff committed
    • [Ada] Fix internal error on subprogram instantiation with -gnatzc · 27b2fbc9
      This fixes a fallout of the recent change keeping the
      Is_Generic_Instance flag on the wrapper package built for the
      instantiation of a generic subprogram.
      
      There is no need to visit the Instance_Spec of an
      N_Subprogram_Instantiation node anymore because the regular processing
      for an N_Package_Declaration node now does the job for instantiations of
      generic subprograms.
      
      The following subprogram must compile again quietly with -gnatzc:
      
      with Gen_Proc;
      
      package RCI is
         pragma Remote_Call_Interface;
      
         procedure Inst_Proc is new Gen_Proc;
      
         procedure P (S : String);
      end RCI;
      
      generic
      procedure Gen_Proc (S : String);
      pragma Remote_Call_Interface (Gen_Proc);
      
      with Ada.Text_IO; use Ada.Text_IO;
      procedure Gen_Proc (S : String) is
      begin
         Put_Line ("Gen_Proc called: " & S);
      end Gen_Proc;
      
      2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_dist.adb (Build_Package_Stubs): Do not specifically visit
      	the declarations of an N_Subprogram_Instantiation node.
      
      From-SVN: r274647
      Eric Botcazou committed
    • [Ada] Document missing gnatmetric switches · d41f5c1f
      2019-08-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_ugn/gnat_utility_programs.rst: Document missing
      	metrics switches.
      
      From-SVN: r274646
      Bob Duff committed