1. 01 Nov, 2017 16 commits
    • Turn var-tracking.c:INT_MEM_OFFSET into a function · 0299d48b
      This avoids the double evaluation mentioned in the comments and
      simplifies the change to make MEM_OFFSET variable.
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* var-tracking.c (INT_MEM_OFFSET): Replace with...
      	(int_mem_offset): ...this new function.
      	(var_mem_set, var_mem_delete_and_set, var_mem_delete)
      	(find_mem_expr_in_1pdv, dataflow_set_preserve_mem_locs)
      	(same_variable_part_p, use_type, add_stores, vt_get_decl_and_offset):
      	Update accordingly.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254309
      Richard Sandiford committed
    • Factor out the mode handling in lower-subreg.c · 8536340f
      This patch adds a helper routine (interesting_mode_p) to lower-subreg.c,
      to make the decision about whether a mode can be split and, if so,
      calculate the number of bytes and words in the mode.  At present this
      function always returns true; a later patch will add cases in which it
      can return false.
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* lower-subreg.c (interesting_mode_p): New function.
      	(compute_costs, find_decomposable_subregs, decompose_register)
      	(simplify_subreg_concatn, can_decompose_p, resolve_simple_move)
      	(resolve_clobber, dump_choices): Use it.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254308
      Richard Sandiford committed
    • Use more specific hash functions in rtlhash.c · 8c4dcf35
      Avoid using add_object when we have more specific routines available.
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* rtlhash.c (add_rtx): Use add_hwi for 'w' and add_int for 'i'.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254307
      Richard Sandiford committed
    • More is_a <scalar_int_mode> · 6645d841
      alias.c:find_base_term and find_base_value checked:
      
            if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
      
      but (a) comparing the precision seems more correct, since it's possible
      for modes to have the same memory size as Pmode but fewer bits and
      (b) the functions are called on arbitrary rtl, so there's no guarantee
      that we're handling an integer truncation.
      
      Since there's no point processing truncations of anything other than an
      integer, this patch checks that first.
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* alias.c (find_base_value, find_base_term): Only process integer
      	truncations.  Check the precision rather than the size.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254306
      Richard Sandiford committed
    • Add an is_narrower_int_mode helper function · 7aaba298
      This patch adds a function for testing whether an arbitrary mode X
      is an integer mode that is narrower than integer mode Y.  This is
      useful for code like expand_float and expand_fix that could in
      principle handle vectors as well as scalars.
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* machmode.h (is_narrower_int_mode): New function
      	* optabs.c (expand_float, expand_fix): Use it.
      	* dwarf2out.c (rotate_loc_descriptor): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254305
      Richard Sandiford committed
    • Add narrower_subreg_mode helper function · b3ad445f
      This patch adds a narrowing equivalent of wider_subreg_mode.  At present
      there is only one user.
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* rtl.h (narrower_subreg_mode): New function.
      	* ira-color.c (update_costs_from_allocno): Use it.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254304
      Richard Sandiford committed
    • Widening optab cleanup · 4b926fea
      widening_optab_handler had the comment:
      
            /* ??? Why does find_widening_optab_handler_and_mode attempt to
               widen things that can't be widened?  E.g. add_optab... */
            if (op > LAST_CONV_OPTAB)
              return CODE_FOR_nothing;
      
      I think it comes from expand_binop using
      find_widening_optab_handler_and_mode for two things: to test whether
      a "normal" optab like add_optab is supported for a standard binary
      operation and to test whether a "convert" optab is supported for a
      widening operation like umul_widen_optab.  In the former case from_mode
      and to_mode must be the same, in the latter from_mode must be narrower
      than to_mode.
      
      For the former case, find_widening_optab_handler_and_mode is only really
      testing the modes that are passed in.  permit_non_widening must be true
      here.
      
      For the latter case, find_widening_optab_handler_and_mode should only
      really consider new from_modes that are wider than the original
      from_mode and narrower than the original to_mode.  Logically
      permit_non_widening should be false, since widening optabs aren't
      supposed to take operands that are the same width as the destination.
      We get away with permit_non_widening being true because no target
      would/should define a widening .md pattern with matching modes.
      
      But really, it seems better for expand_binop to handle these two
      cases itself rather than pushing them down.  With that change,
      find_widening_optab_handler_and_mode is only ever called with
      permit_non_widening set to false and is only ever called with
      a "proper" convert optab.  We then no longer need widening_optab_handler,
      we can just use convert_optab_handler directly.
      
      The patch also passes the instruction code down to expand_binop_directly.
      This should be more efficient and removes an extra call to
      find_widening_optab_handler_and_mode.
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* optabs-query.h (convert_optab_p): New function, split out from...
      	(convert_optab_handler): ...here.
      	(widening_optab_handler): Delete.
      	(find_widening_optab_handler): Remove permit_non_widening parameter.
      	(find_widening_optab_handler_and_mode): Likewise.  Provide an
      	override that operates on mode class wrappers.
      	* optabs-query.c (widening_optab_handler): Delete.
      	(find_widening_optab_handler_and_mode): Remove permit_non_widening
      	parameter.  Assert that the two modes are the same class and that
      	the "from" mode is narrower than the "to" mode.  Use
      	convert_optab_handler instead of widening_optab_handler.
      	* expmed.c (expmed_mult_highpart_optab): Use convert_optab_handler
      	instead of widening_optab_handler.
      	* expr.c (expand_expr_real_2): Update calls to
      	find_widening_optab_handler.
      	* optabs.c (expand_widen_pattern_expr): Likewise.
      	(expand_binop_directly): Take the insn_code as a parameter.
      	(expand_binop): Only call find_widening_optab_handler for
      	conversion optabs; use optab_handler otherwise.  Update calls
      	to find_widening_optab_handler and expand_binop_directly.
      	Use convert_optab_handler instead of widening_optab_handler.
      	* tree-ssa-math-opts.c (convert_mult_to_widen): Update calls to
      	find_widening_optab_handler and use scalar_mode rather than
      	machine_mode.
      	(convert_plusminus_to_widen): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254302
      Richard Sandiford committed
    • Add a fixed_size_mode class · ef1d3b57
      This patch adds a fixed_size_mode machine_mode wrapper
      for modes that are known to have a fixed size.  That applies
      to all current modes, but future patches will add support for
      variable-sized modes.
      
      The use of this class should be pretty restricted.  One important
      use case is to hold the mode of static data, which can never be
      variable-sized with current file formats.  Another is to hold
      the modes of registers involved in __builtin_apply and
      __builtin_result, since those interfaces don't cope well with
      variable-sized data.
      
      The class can also be useful when reinterpreting the contents of
      a fixed-length bit string as a different kind of value.
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* machmode.h (fixed_size_mode): New class.
      	* rtl.h (get_pool_mode): Return fixed_size_mode.
      	* gengtype.c (main): Add fixed_size_mode.
      	* target.def (get_raw_result_mode): Return a fixed_size_mode.
      	(get_raw_arg_mode): Likewise.
      	* doc/tm.texi: Regenerate.
      	* targhooks.h (default_get_reg_raw_mode): Return a fixed_size_mode.
      	* targhooks.c (default_get_reg_raw_mode): Likewise.
      	* config/ia64/ia64.c (ia64_get_reg_raw_mode): Likewise.
      	* config/mips/mips.c (mips_get_reg_raw_mode): Likewise.
      	* config/msp430/msp430.c (msp430_get_raw_arg_mode): Likewise.
      	(msp430_get_raw_result_mode): Likewise.
      	* config/avr/avr-protos.h (regmask): Use as_a <fixed_side_mode>
      	* dbxout.c (dbxout_parms): Require fixed-size modes.
      	* expr.c (copy_blkmode_from_reg, copy_blkmode_to_reg): Likewise.
      	* gimple-ssa-store-merging.c (encode_tree_to_bitpos): Likewise.
      	* omp-low.c (lower_oacc_reductions): Likewise.
      	* simplify-rtx.c (simplify_immed_subreg): Take fixed_size_modes.
      	(simplify_subreg): Update accordingly.
      	* varasm.c (constant_descriptor_rtx::mode): Change to fixed_size_mode.
      	(force_const_mem): Update accordingly.  Return NULL_RTX for modes
      	that aren't fixed-size.
      	(get_pool_mode): Return a fixed_size_mode.
      	(output_constant_pool_2): Take a fixed_size_mode.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254300
      Richard Sandiford committed
    • Add a VEC_SERIES rtl code · ef339d6e
      This patch adds an rtl representation of a vector linear series
      of the form:
      
        a[I] = BASE + I * STEP
      
      Like vec_duplicate;
      
      - the new rtx can be used for both constant and non-constant vectors
      - when used for constant vectors it is wrapped in a (const ...)
      - the constant form is only used for variable-length vectors;
        fixed-length vectors still use CONST_VECTOR
      
      At the moment the code is restricted to integer elements, to avoid
      concerns over floating-point rounding.
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* doc/rtl.texi (vec_series): Document.
      	(const): Say that the operand can be a vec_series.
      	* rtl.def (VEC_SERIES): New rtx code.
      	* rtl.h (const_vec_series_p_1): Declare.
      	(const_vec_series_p): New function.
      	* emit-rtl.h (gen_const_vec_series): Declare.
      	(gen_vec_series): Likewise.
      	* emit-rtl.c (const_vec_series_p_1, gen_const_vec_series)
      	(gen_vec_series): Likewise.
      	* optabs.c (expand_mult_highpart): Use gen_const_vec_series.
      	* simplify-rtx.c (simplify_unary_operation): Handle negations
      	of vector series.
      	(simplify_binary_operation_series): New function.
      	(simplify_binary_operation_1): Use it.  Handle VEC_SERIES.
      	(test_vector_ops_series): New function.
      	(test_vector_ops): Call it.
      	* config/powerpcspe/altivec.md (altivec_lvsl): Use
      	gen_const_vec_series.
      	(altivec_lvsr): Likewise.
      	* config/rs6000/altivec.md (altivec_lvsl, altivec_lvsr): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254297
      Richard Sandiford committed
    • Allow vector CONSTs · 06ec586d
      This patch allows (const ...) wrappers to be used for rtx vector
      constants, as an alternative to const_vector.  This is useful
      for SVE, where the number of elements isn't known until runtime.
      
      It could also be useful in future for fixed-length vectors, to
      reduce the amount of memory needed to represent simple constants
      with high element counts.  However, one nice thing about keeping
      it restricted to variable-length vectors is that there is never
      any need to handle combinations of (const ...) and CONST_VECTOR.
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* doc/rtl.texi (const): Update description of address constants.
      	Say that vector constants are allowed too.
      	* common.md (E, F): Use CONSTANT_P instead of checking for
      	CONST_VECTOR.
      	* emit-rtl.c (gen_lowpart_common): Use const_vec_p instead of
      	checking for CONST_VECTOR.
      	* expmed.c (make_tree): Use build_vector_from_val for a CONST
      	VEC_DUPLICATE.
      	* expr.c (expand_expr_real_2): Check for vector modes instead
      	of checking for CONST_VECTOR.
      	* rtl.h (const_vec_p): New function.
      	(const_vec_duplicate_p): Check for a CONST VEC_DUPLICATE.
      	(unwrap_const_vec_duplicate): Handle them here too.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254296
      Richard Sandiford committed
    • Add more vec_duplicate simplifications · 9b1de7e2
      This patch adds a vec_duplicate_p helper that tests for constant
      or non-constant vector duplicates.  Together with the existing
      const_vec_duplicate_p, this complements the gen_vec_duplicate
      and gen_const_vec_duplicate added by a previous patch.
      
      The patch uses the new routines to add more rtx simplifications
      involving vector duplicates.  These mirror simplifications that
      we already do for CONST_VECTOR broadcasts and are needed for
      variable-length SVE, which uses:
      
        (const:M (vec_duplicate:M X))
      
      to represent constant broadcasts instead.  The simplifications do
      trigger on the testsuite for variable duplicates too, and in each
      case I saw the change was an improvement.
      
      The best way of testing the new simplifications seemed to be
      via selftests.  The patch cribs part of David's patch here:
      https://gcc.gnu.org/ml/gcc-patches/2016-07/msg00270.html .
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    David Malcolm  <dmalcolm@redhat.com>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* rtl.h (vec_duplicate_p): New function.
      	* selftest-rtl.c (assert_rtx_eq_at): New function.
      	* selftest-rtl.h (ASSERT_RTX_EQ): New macro.
      	(assert_rtx_eq_at): Declare.
      	* selftest.h (selftest::simplify_rtx_c_tests): Declare.
      	* selftest-run-tests.c (selftest::run_tests): Call it.
      	* simplify-rtx.c: Include selftest.h and selftest-rtl.h.
      	(simplify_unary_operation_1): Recursively handle vector duplicates.
      	(simplify_binary_operation_1): Likewise.  Handle VEC_SELECTs of
      	vector duplicates.
      	(simplify_subreg): Handle subregs of vector duplicates.
      	(make_test_reg, test_vector_ops_duplicate, test_vector_ops)
      	(selftest::simplify_rtx_c_tests): New functions.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Malcolm <dmalcolm@redhat.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254294
      Richard Sandiford committed
    • Add gen_(const_)vec_duplicate helpers · 59d06c05
      This patch adds helper functions for generating constant and
      non-constant vector duplicates.  These routines help with SVE because
      it is then easier to use:
      
         (const:M (vec_duplicate:M X))
      
      for a broadcast of X, even if the number of elements in M isn't known
      at compile time.  It also makes it easier for general rtx code to treat
      constant and non-constant duplicates in the same way.
      
      In the target code, the patch uses gen_vec_duplicate instead of
      gen_rtx_VEC_DUPLICATE if handling constants correctly is potentially
      useful.  It might be that some or all of the call sites only handle
      non-constants in practice, in which case the change is a harmless
      no-op (and a saving of a few characters).
      
      Otherwise, the target changes use gen_const_vec_duplicate instead
      of gen_rtx_CONST_VECTOR if the constant is obviously a duplicate.
      They also include some changes to use CONSTxx_RTX for easy global
      constants.
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* emit-rtl.h (gen_const_vec_duplicate): Declare.
      	(gen_vec_duplicate): Likewise.
      	* emit-rtl.c (gen_const_vec_duplicate_1): New function, split
      	out from...
      	(gen_const_vector): ...here.
      	(gen_const_vec_duplicate, gen_vec_duplicate): New functions.
      	(gen_rtx_CONST_VECTOR): Use gen_const_vec_duplicate for constants
      	whose elements are all equal.
      	* optabs.c (expand_vector_broadcast): Use gen_const_vec_duplicate.
      	* simplify-rtx.c (simplify_const_unary_operation): Likewise.
      	(simplify_relational_operation): Likewise.
      	* config/aarch64/aarch64.c (aarch64_simd_gen_const_vector_dup):
      	Likewise.
      	(aarch64_simd_dup_constant): Use gen_vec_duplicate.
      	(aarch64_expand_vector_init): Likewise.
      	* config/arm/arm.c (neon_vdup_constant): Likewise.
      	(neon_expand_vector_init): Likewise.
      	(arm_expand_vec_perm): Use gen_const_vec_duplicate.
      	(arm_block_set_unaligned_vect): Likewise.
      	(arm_block_set_aligned_vect): Likewise.
      	* config/arm/neon.md (neon_copysignf<mode>): Likewise.
      	* config/i386/i386.c (ix86_expand_vec_perm): Likewise.
      	(expand_vec_perm_even_odd_pack): Likewise.
      	(ix86_vector_duplicate_value): Use gen_vec_duplicate.
      	* config/i386/sse.md (one_cmpl<mode>2): Use CONSTM1_RTX.
      	* config/ia64/ia64.c (ia64_expand_vecint_compare): Use
      	gen_const_vec_duplicate.
      	* config/ia64/vect.md (addv2sf3, subv2sf3): Use CONST1_RTX.
      	* config/mips/mips.c (mips_gen_const_int_vector): Use
      	gen_const_vec_duplicate.
      	(mips_expand_vector_init): Use CONST0_RTX.
      	* config/powerpcspe/altivec.md (abs<mode>2, nabs<mode>2): Likewise.
      	(define_split): Use gen_const_vec_duplicate.
      	* config/rs6000/altivec.md (abs<mode>2, nabs<mode>2): Use CONST0_RTX.
      	(define_split): Use gen_const_vec_duplicate.
      	* config/s390/vx-builtins.md (vec_genmask<mode>): Likewise.
      	(vec_ctd_s64, vec_ctd_u64, vec_ctsl, vec_ctul): Likewise.
      	* config/spu/spu.c (spu_const): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254292
      Richard Sandiford committed
    • Prevent invalid register mode changes in combine · a9b76c89
      This patch stops combine from changing the mode of an existing register
      in-place if doing so would change the size of the underlying register
      allocation size, as given by REGMODE_NATURAL_SIZE.  Without this,
      many tests fail in adjust_reg_mode after SVE is added.  One example
      is gcc.c-torture/compile/20090401-1.c.
      
      2017-11-01  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* combine.c (can_change_dest_mode): Reject changes in
      	REGMODE_NATURAL_SIZE.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254291
      Richard Sandiford committed
    • sqrt.c: New test. · 6e0cb45f
      	* gcc.target/alpha/sqrt.c: New test.
      
      From-SVN: r254289
      Uros Bizjak committed
    • configure.ac (--enable-libssp): New. · 78fd4c51
      2017-10-31  Sandra Loosemore  <sandra@codesourcery.com>
      
      	gcc/
      	* configure.ac (--enable-libssp): New.
      	(gcc_cv_libc_provides_ssp): Check for explicit setting before
      	trying to determine target-specific default.  Adjust indentation.
      	* configure: Regenerated.
      	* doc/install.texi (Configuration): Expand --disable-libssp
      	documentation.
      
      From-SVN: r254288
      Sandra Loosemore committed
    • Daily bump. · 15e9b45a
      From-SVN: r254287
      GCC Administrator committed
  2. 31 Oct, 2017 24 commits
    • PR target/82002 Part 1: Correct ICE caused by wrong calculation · 98df3ab0
      gcc:
      	config/i386/i386.c (ix86_expand_epilogue): Correct stack
      	calculation.
      
      gcc/testsuite:
      	gcc.target/i386/pr82002-1.c: New test.
      	gcc.target/i386/pr82002-2a.c: New xfail test.
      	gcc.target/i386/pr82002-2b.c: New xfail test.
      
      From-SVN: r254284
      Daniel Santos committed
    • [PR 81702] Remove devirtualization assert · 0a9088ee
      2017-10-31  Martin Jambor  <mjambor@suse.cz>
      
      	PR c++/81702
      	* gimple-fold.c (gimple_get_virt_method_for_vtable): Remove assert.
      
      testsuite/
      	* g++.dg/tree-ssa/pr81702.C: New test.
      
      From-SVN: r254283
      Martin Jambor committed
    • jit: add a way to preserve testsuite executables · 77f4ead7
      gcc/jit/ChangeLog:
      	* docs/internals/index.rst (Running the test suite): Document
      	PRESERVE_EXECUTABLES.
      	(Running under valgrind): Add markup to RUN_UNDER_VALGRIND.
      	* docs/_build/texinfo/libgccjit.texi: Regenerate.
      
      gcc/testsuite/ChangeLog:
      	* jit.dg/jit.exp (jit-dg-test): If PRESERVE_EXECUTABLES is set in
      	the environment, don't delete the generated executable.
      
      From-SVN: r254282
      David Malcolm committed
    • pt.c: add missing %< and %> · 84ffba12
      gcc/cp/ChangeLog:
      	* pt.c (listify): Use %< and %> for description of #include.
      
      gcc/testsuite/ChangeLog:
      	* g++.dg/cpp0x/auto21.C: Update dg-error to reflect addition of
      	quotes.
      	* g++.dg/cpp0x/missing-initializer_list-include.C: Likewise.
      
      From-SVN: r254281
      David Malcolm committed
    • diagnostics: get rid of *_at_rich_loc in favor of overloading · 64a5912c
      Adding a fix-it hint currently involves changing e.g.:
      
        error_at (token->location,
                  "unknown type name %qE; did you mean %qs?",
                  token->value, hint);
      to:
      
        gcc_rich_location richloc (token->location);
        richloc.add_fixit_replace (hint);
        error_at_rich_loc (&richloc,
                           "unknown type name %qE; did you mean %qs?",
                           token->value, hint);
      
      to make the change from taking a location_t to a rich_location *.
      
      This patch renames the "*_at_rich_loc" diagnostic entrypoints to use
      the same function names for rich_location * as for location_t,
      via overloading, to simplify the above change to just changing from:
      
        error_at (token->location,
                  "unknown type name %qE; did you mean %qs?",
                  token->value, hint);
      to:
      
        gcc_rich_location richloc (token->location);
        richloc.add_fixit_replace (hint);
        error_at (&richloc,
                  "unknown type name %qE; did you mean %qs?",
                  token->value, hint);
      
      thus saving space (and typing) and usually avoiding the need to reindent
      the "error_at" invocation.
      
      With this change, 0 is no longer acceptable as a location_t to these
      entrypoints, as e.g.:
      
      ../../src/gcc/auto-profile.c:855:37: error: call of overloaded
      'inform(int, const char [18])' is ambiguous
             inform (0, "Not expected TAG.");
                                           ^
      In file included from ../../src/gcc/auto-profile.c:35:0:
      ../../src/gcc/diagnostic-core.h:88:13: note: candidate:
      'void inform(location_t, const char*, ...)'
       extern void inform (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
                   ^~~~~~
      ../../src/gcc/diagnostic-core.h:89:13: note: candidate:
      'void inform(rich_location*, const char*, ...)'
       extern void inform (rich_location *, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
                   ^~~~~~
      
      Such locations now need to be spelled out as UNKNOWN_LOCATION,
      rather than 0.
      
      I considered making the API take a rich_location & rather than a
      rich_location *, but doing so would mean replacing
        diagnostic_set_info
      and
        diagnostic_set_info_translated
      with a constructor for diagnostic_info, which was a more invasive
      change.  Maybe in the future.
      
      gcc/ChangeLog:
      	* auto-profile.c (autofdo_source_profile::read): Use
      	UNKNOWN_LOCATION rather than 0.
      	* diagnostic-core.h (warning_at_rich_loc): Rename to...
      	(warning_at): ...this overload.
      	(warning_at_rich_loc_n): Rename to...
      	(warning_n): ...this overload.
      	(error_at_rich_loc): Rename to...
      	(error_at): ...this overload.
      	(pedwarn_at_rich_loc): Rename to...
      	(pedwarn): ...this overload.
      	(permerror_at_rich_loc): Rename to...
      	(permerror): ...this overload.
      	(inform_at_rich_loc): Rename to...
      	(inform): ...this overload.
      	* diagnostic.c: (diagnostic_n_impl): Delete location_t-based decl.
      	(diagnostic_n_impl_richloc): Rename to...
      	(diagnostic_n_impl): ...this rich_location *-based decl.
      	(inform_at_rich_loc): Rename to...
      	(inform): ...this, and add an assertion.
      	(inform_n): Update for removal of location_t-based diagnostic_n_impl.
      	(warning_at_rich_loc): Rename to...
      	(warning_at): ...this, and add an assertion.
      	(warning_at_rich_loc_n): Rename to...
      	(warning_n): ...this, and add an assertion.
      	(warning_n): Update location_t-based implementation for removal of
      	location_t-based diagnostic_n_impl.
      	(pedwarn_at_rich_loc): Rename to...
      	(pedwarn): ...this, and add an assertion.
      	(permerror_at_rich_loc): Rename to...
      	(permerror): ...this, and add an assertion.
      	(error_n): Update for removal of location_t-based diagnostic_n_impl.
      	(error_at_rich_loc): Rename to...
      	(error_at): ...this, and add an assertion.
      	* gcc.c (do_spec_1): Use UNKNOWN_LOCATION rather than 0.
      	(driver::do_spec_on_infiles): Likewise.
      	* substring-locations.c (format_warning_va): Update for renaming
      	of inform_at_rich_loc.
      
      gcc/c-family/ChangeLog:
      	* c-common.c (binary_op_error): Update for renaming of
      	error_at_rich_loc.
      	(c_parse_error): Likewise.
      	* c-warn.c (warn_logical_not_parentheses): Likewise for
      	renaming of inform_at_rich_loc.
      	(warn_for_restrict): Likewise for renaming of
      	warning_at_rich_loc_n.
      
      gcc/c/ChangeLog:
      	* c-decl.c (implicit_decl_warning): Update for renaming of
      	pedwarn_at_rich_loc and warning_at_rich_loc.
      	(implicitly_declare): Likewise for renaming of inform_at_rich_loc.
      	(undeclared_variable): Likewise for renaming of error_at_rich_loc.
      	* c-parser.c (c_parser_declaration_or_fndef): Likewise.
      	(c_parser_struct_or_union_specifier): Likewise for renaming of
      	pedwarn_at_rich_loc.
      	(c_parser_parameter_declaration): Likewise for renaming of
      	error_at_rich_loc.
      	* c-typeck.c (build_component_ref): Likewise.
      	(build_unary_op): Likewise for renaming of inform_at_rich_loc.
      	(pop_init_level): Likewise for renaming of warning_at_rich_loc.
      	(set_init_label): Likewise for renaming of error_at_rich_loc.
      
      gcc/cp/ChangeLog:
      	* class.c (explain_non_literal_class): Use UNKNOWN_LOCATION rather
      	than 0.
      	* name-lookup.c (suggest_alternatives_for): Update for renaming of
      	inform_at_rich_loc.
      	(maybe_suggest_missing_header): Likewise.
      	(suggest_alternative_in_explicit_scope): Likewise.
      	* parser.c (cp_parser_diagnose_invalid_type_name): Likewise for
      	renaming of error_at_rich_loc.
      	(cp_parser_string_literal): Likewise.
      	(cp_parser_nested_name_specifier_opt): Likewise.
      	(cp_parser_cast_expression): Likewise for renaming of
      	warning_at_rich_loc.
      	(cp_parser_decl_specifier_seq): Likewise for renaming of
      	error_at_rich_loc and warning_at_rich_loc.
      	(cp_parser_elaborated_type_specifier): Likewise for renaming of
      	pedwarn_at_rich_loc.
      	(cp_parser_cv_qualifier_seq_opt): Likewise for renaming of
      	error_at_rich_loc.
      	(cp_parser_virt_specifier_seq_opt): Likewise.
      	(cp_parser_class_specifier_1): Likewise.
      	(cp_parser_class_head): Likewise.
      	(cp_parser_member_declaration): Likewise for renaming of
      	pedwarn_at_rich_loc, warning_at_rich_loc, and error_at_rich_loc.
      	(cp_parser_enclosed_template_argument_list): Likewise for renaming
      	of error_at_rich_loc.
      	(set_and_check_decl_spec_loc): Likewise.
      	* pt.c (listify): Likewise.
      	* rtti.c (typeid_ok_p): Likewise.
      	* semantics.c (process_outer_var_ref): Use UNKNOWN_LOCATION rather
      	than 0.
      	* typeck.c (access_failure_info::maybe_suggest_accessor): Update
      	for renaming of inform_at_rich_loc.
      	(finish_class_member_access_expr): Likewise for renaming of
      	error_at_rich_loc.
      
      gcc/objc/ChangeLog:
      	* objc-gnu-runtime-abi-01.c (objc_gnu_runtime_abi_01_init): Use
      	UNKNOWN_LOCATION rather than 0.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/plugin/diagnostic_plugin_show_trees.c (show_tree): Update
      	for renaming of error_at_rich_loc and inform_at_rich_loc.
      	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
      	(test_show_locus): Likewise for renaming of warning_at_rich_loc.
      
      libcpp/ChangeLog:
      	* directives.c (_cpp_handle_directive): Update for renaming of
      	cpp_error_at_richloc to cpp_error_at.
      	* errors.c (cpp_diagnostic_at_richloc): Rename to...
      	(cpp_diagnostic_at): ...this, dropping the location_t-based
      	implementation.
      	(cpp_diagnostic): Update for removal of location_t-based
      	cpp_diagnostic_at.
      	(cpp_error_at): Likewise.
      	(cpp_error_at_richloc): Rename to...
      	(cpp_error_at): ...this, and update for renaming of
      	cpp_diagnostic_at_richloc.
      	* include/cpplib.h (cpp_error_at_richloc): Rename to...
      	(cpp_error_at): ...this.
      
      From-SVN: r254280
      David Malcolm committed
    • [C++ PATCH] overloaded operator fns [5/N] · 881c969c
      https://gcc.gnu.org/ml/gcc-patches/2017-10/
      	* cp-tree.h (struct operator_name_info_t): Rename to ...
      	(struct ovl_op_info_t): ... here.  Add tree_code field.
      	(operator_name_info, assignment_operator_name_info): Delete.
      	(ovl_op_info): Declare.
      	(OVL_OP_INFO): Adjust.
      	* decl.c (grok_op_properties): Use ovl_op_flags.
      	* lex.c (operator_name_info, assignment_operator_name_info):
      	Delete.
      	(ovl_op_info): Define.
      	(set_operator_ident): Adjust.
      	(init_operators): Set tree_code.
      	* mangle.c (write_unqualified_id): Adjust operator array scan.
      
      From-SVN: r254279
      Nathan Sidwell committed
    • builtins.def (DEF_FLOATN_BUILTIN): Change most _Float<N> and _Float<N>X built-in… · c6762423
      builtins.def (DEF_FLOATN_BUILTIN): Change most _Float<N> and _Float<N>X built-in functions so that the variant...
      
      2017-10-31  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	* builtins.def (DEF_FLOATN_BUILTIN): Change most _Float<N> and
      	_Float<N>X built-in functions so that the variant without the
      	"__builtin_" prefix is only enabled for the GNU C and Objective C
      	languages when they are in non-strict ANSI/ISO mode.
      	(DEF_EXT_LIB_FLOATN_NX_BUILTINS): Likewise.
      	* target.def (floatn_builtin_p): Add a target hook to control
      	whether _Float<N> and _Float<N>X built-in functions without the
      	"__builtin_" prefix are enabled, and return true for C and
      	Objective C in the default hook.  Include langhooks.h in
      	targhooks.c.
      	* targhooks.h (default_floatn_builtin_p): Likewise.
      	* targhooks.c (default_floatn_builtin_p): Likewise.
      	* doc/tm.texi.in (TARGET_FLOATN_BUILTIN_P): Document the
      	floatn_builtin_p target hook.
      	* doc/tm.texi (TARGET_FLOATN_BUILTIN_P): Likewise.
      
      From-SVN: r254277
      Michael Meissner committed
    • [C++ PATCH] overloaded operator fns [4/N] · 6ff16d19
      https://gcc.gnu.org/ml/gcc-patches/2017-10/msg02362.html
      	* lex.c (init_operators): Allow NULL operator name.  Don't add
      	special cases.
      	* operators.def: Use NULL for mangling only operators.  Move to
      	after regular operators but move assignment operators last.
      
      From-SVN: r254276
      Nathan Sidwell committed
    • re PR rtl-optimization/81803 (miscompilation at -O1 on mips64el) · 8e02e8a0
      	PR rtl-optimization/81803
      	* lra-constraints.c (curr_insn_transform): Also reload the whole
      	register for a strict subreg no wider than a word if this is for
      	a WORD_REGISTER_OPERATIONS target.
      
      Co-Authored-By: Eric Botcazou <ebotcazou@adacore.com>
      
      From-SVN: r254275
      Matthew Fortune committed
    • re PR ada/82785 (gnat bootstrap fails on m68k-linux-gnu) · e6b6e96a
      	PR ada/82785
      	* gcc-interface/Makefile.in (m68k/Linux): Fix typo.
      
      From-SVN: r254274
      Eric Botcazou committed
    • * gdbinit.in: Skip over inlines from timevar.h. · e1d74c91
      From-SVN: r254273
      Jason Merrill committed
    • constexpr.c, pt.c: Adjust comments. · 12d0e3aa
      	* constexpr.c, pt.c: Adjust comments.
      
      	* g++.dg/cpp1y/lambda-generic-69078-1.C: Remove #include.
      
      From-SVN: r254272
      Jason Merrill committed
    • [C++ PATCH] overloaded operator fns [3/N] · f26881e3
      https://gcc.gnu.org/ml/gcc-patches/2017-10/msg02343.html
      	* cp-tree.h (enum ovl_op_flags): New.
      	(struct operator_name_info_t): Rename arity to flags.
      	* lex.c (set_operator_ident): New.
      	(init_operators): Use it.  Adjust for flags.
      	* mangle.c (write_unqualified_id): Adjust for flags.
      	* operators.def: Replace arity with flags.
      
      From-SVN: r254271
      Nathan Sidwell committed
    • Fix fortran build error on AIX. · 5e36e11e
      	gcc/fortran/
      	* parse.c (unexpected_eof): Call gcc_unreachable before return.
      
      From-SVN: r254270
      James E Wilson committed
    • GCOV: add -j argument (human readable format). · 29a4ef18
      2017-10-31  Martin Liska  <mliska@suse.cz>
      
      	* doc/gcov.texi: Document new option.
      	* gcov.c (print_usage): Likewise print it.
      	(process_args): Support the argument.
      	(format_count): New function.
      	(format_gcov): Use the function.
      2017-10-31  Martin Liska  <mliska@suse.cz>
      
      	* g++.dg/gcov/loop.C: New test.
      	* lib/gcov.exp: Support human readable format for counts.
      
      From-SVN: r254269
      Martin Liska committed
    • Fix typo in my email, in changelog. · cbb449d1
      From-SVN: r254268
      Segher Boessenkool committed
    • [C++ PATCH] overloaded operator fns [2/N] · 88a819be
      https://gcc.gnu.org/ml/gcc-patches/2017-10/msg02326.html
      	gcc/cp/
      	* cp-tree.h (ovl_op_identifier): New.
      	(assign_op_identifier, call_op_identifier): Adjust.
      	(cp_operator_id, cp_assignment_operator_ide): Delete.
      	(SET_OVERLOADED_OPERATOR_CODE): Delete.
      	(OVL_OP_INFO): New.
      	* call.c (op_error): Use OVL_OP_INFO.
      	(build_conditional_expr_1): Use ovl_op_identifier.
      	(build_new_op_1): Use OVL_OP_INFO & ovl_op_identifier.
      	(build_op_delete_call): Likewise.
      	* class.c (type_requires_array_cookie): Use ovl_op_identifier.
      	* decl.c (duplicate_decls): Directly copy operator code.
      	(builtin_function_1): Do not set operator code.
      	(build_library_fn): Directly set operator code.
      	(push_cp_library_fn): Use ovl_op_identifier.
      	(grok_op_properties): Directly set operator code.
      	* decl2.c (maybe_warn_sized_delete): Use ovl_op_identifier.
      	* error.c (dump_expr): Use OVL_OP_INFO.
      	(op_to_string): Add assop arg. Use OVL_OP_INFO.
      	(assop_to_string): Delete.
      	(args_to_string): Adjust.
      	* init.c (build_new_1): Use ovl_op_identifier.
      	* mangle.c (write_unqualified_name): Use OVL_OP_INFO.
      	(write_expression): Likewise.
      	* method.c (synthesized_method_walk): Use ovl_op_identifier.
      	(implicitly_declare_fn): Use assign_op_identifier. Directly set
      	operator code.
      	* name-lookup.c (get_class_binding): Use assign_op_identifier.
      	* parser.c (cp_parser_operator): Use ovl_op_identifier.
      	(cp_parser_omp_clause_reduction): Likewise.
      	* semantics.c (omp_reduction_id): Likewise.
      	* typeck.c (cxx_sizeof_or_alignof_type): Use OVL_OP_INFO.
      
      	libcc1/
      	* libcp1plugin.cc (plugin_build_decl): Use ovl_op_identifier.
      	Directly set operator code.
      	(plugin_build_dependent_expr): Use ovl_op_identifier.
      
      From-SVN: r254267
      Nathan Sidwell committed
    • [BRIGFE] Fix PR 82771. · f6a35e89
      From-SVN: r254265
      Henry Linjamäki committed
    • Remove semicolon after do {} while (false) in HSA_LOG · 12e9c8ce
      2017-10-31  Tom de Vries  <tom@codesourcery.com>
      
      	* plugin/plugin-hsa.c (HSA_LOG): Remove semicolon after
      	"do {} while (false)".
      	(init_single_kernel, GOMP_OFFLOAD_async_run): Add missing semicolon
      	after HSA_DEBUG call.
      
      From-SVN: r254264
      Tom de Vries committed
    • [C++ PATCH] overloaded operator fns [1/N] · 137073d3
      https://gcc.gnu.org/ml/gcc-patches/2017-10/msg02315.html
      	* cp-tree.h (assign_op_identifier, call_op_identifier): Define.
      	(LAMBDA_FUNCTION_P): Use DECL_OVERLOADED_OPERATOR_IS.
      	(DECL_OVERLOADED_OPERATOR_P): Just retuurn true/false.
      	(DECL_OVERLOADED_OPERATOR_CODE, DECL_OVERLOADED_OPERATOR_IS): Define.
      	* call.c (add_function_candidate): Use
      	DECL_OVERLOADED_OPERATOR_IS.
      	(build_op_call_1): Use call_op_identifier &
      	DECL_OVERLOADED_OPERATOR_IS.
      	(build_over_call): Likewise.
      	(has_trivial_copy_assign_p): Use assign_op_identifier.
      	(build_special_member_call): Likewise.
      	* class.c (dfs_declare_virt_assop_and_dtor): Likewise.
      	(vbase_has_user_provided_move_assign,
      	classtype_has_move_assign_or_move_ctor_p): Likewise.
      	* decl.c (duplicate_decls): Use DECL_OVERLOADED_OPERATOR_CODE.
      	(grok_special_member_properties): Use assign_op_identifier.
      	(start_preparsed_function): Use DECL_OVERLOADED_OPERATOR_IS.
      	* decl2.c (mark_used): Use DECL_CONV_FN_P.
      	* dump.c (dump_access): Delete prototype.
      	(dump_op): Delete.
      	(cp_dump_tree): Don't call it.
      	* lambda.c (lambda_function): Use call_op_identifier.
      	(maybe_add_lambda_conv_op): Not an overloaded operator.  Remove
      	unneeded braces.
      	* mangle.c (write_unqualified_name): Use DECL_OVERLOADED_OPERTOR_CODE.
      	* method.c (do_build_copy_assign): Use assign_op_identifier.
      	(synthesize_method): Use DECL_OVERLOADED_OPERATOR_IS.
      	(get_copy_assign): Use assign_op_identifier.
      	(synthesized_method_walk): Likewise.
      	(defaultable_fn_check): Use DECL_OVERLOADED_OPERATOR_IS.
      	* parser.c (cp_parser_lambda_declarator_opt): Use
      	call_op_identifier.
      	* semanitics.c (classtype_has_nothrow_assign_or_copy_p): Use
      	assign_op_identifier.
      	* tree.c (special_function_p):  Use DECL_OVERLOADED_OPERATOR_IS.
      	* typeck.c (check_return_expr): Use DECL_OVERLOADED_OPERATOR_CODE.
      	(check_return_expr): Use assign_op_identifier.
      
      From-SVN: r254263
      Nathan Sidwell committed
    • GCOV: std::vector refactoring III · 8a3f457f
      2017-10-31  Martin Liska  <mliska@suse.cz>
      
      	* gcov.c (struct name_map): do not use typedef.
      	Define operator== and operator<.
      	(name_search): Remove.
      	(name_sort): Remove.
      	(main): Do not allocate names.
      	(process_file): Add vertical space.
      	(generate_results): Use std::find.
      	(release_structures): Do not release memory.
      	(find_source): Use std::find.
      
      From-SVN: r254262
      Martin Liska committed
    • GCOV: Vector refactoring II · 4695d816
      2017-10-31  Martin Liska  <mliska@suse.cz>
      
      	* gcov.c (struct line_info): Remove it's typedef.
      	(line_info::line_info): Add proper ctor.
      	(line_info::has_block): Do not use a typedef.
      	(struct source_info): Do not use typedef.
      	(circuit): Likewise.
      	(get_cycles_count): Likewise.
      	(output_intermediate_file): Iterate via vector iterator.
      	(add_line_counts): Use std::vector methods.
      	(accumulate_line_counts): Likewise.
      	(output_lines): Likewise.
      
      From-SVN: r254261
      Martin Liska committed
    • GCOV: std::vector refactoring. · c7432e76
      2017-10-31  Martin Liska  <mliska@suse.cz>
      
      	* gcov.c (struct source_info): Remove typedef.
      	(source_info::source_info): Add proper ctor.
      	(accumulate_line_counts): Use struct, not it's typedef.
      	(output_gcov_file): Likewise.
      	(output_lines): Likewise.
      	(main): Do not allocate an array.
      	(output_intermediate_file): Use size of vector container.
      	(process_file): Resize the vector.
      	(generate_results): Do not preallocate, use newly added vector
      	lines.
      	(release_structures): Do not release sources.
      	(find_source): Use vector methods.
      	(add_line_counts): Do not use typedef.
      
      From-SVN: r254260
      Martin Liska committed
    • GCOV: add support for lines with an unexecuted lines. · cdb07de7
      2017-10-31  Martin Liska  <mliska@suse.cz>
      
      	* doc/gcov.texi: Document that.
      	* gcov.c (add_line_counts): Mark lines with a non-executed
      	statement.
      	(output_line_beginning): Handle such lines.
      	(output_lines): Pass new argument.
      	(output_intermediate_file): Print it in intermediate format.
      2017-10-31  Martin Liska  <mliska@suse.cz>
      
      	* g++.dg/gcov/ternary.C: New test.
      	* g++.dg/gcov/gcov-threads-1.C (main): Update expected line
      	count.
      	* lib/gcov.exp: Support new format for intermediate file format.
      
      From-SVN: r254259
      Martin Liska committed