1. 17 May, 2018 11 commits
    • Allow gimple_build with internal functions · eb69361d
      This patch makes the function versions of gimple_build and
      gimple_simplify take combined_fns rather than built_in_codes,
      so that they work with internal functions too.  The old
      gimple_builds were unused, so no existing callers need
      to be updated.
      
      2018-05-17  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* gimple-fold.h (gimple_build): Make the function forms take
      	combined_fn rather than built_in_function.
      	(gimple_simplify): Likewise.
      	* gimple-match-head.c (gimple_simplify): Likewise.
      	* gimple-fold.c (gimple_build): Likewise.
      	* tree-vect-loop.c (get_initial_def_for_reduction): Use gimple_build
      	rather than gimple_build_call_internal.
      	(get_initial_defs_for_reduction): Likewise.
      	(vect_create_epilog_for_reduction): Likewise.
      	(vectorizable_live_operation): Likewise.
      
      From-SVN: r260315
      Richard Sandiford committed
    • Fix GNU coding style for G_. · 40659769
      2018-05-17  Martin Liska  <mliska@suse.cz>
      
      	* gimple-ssa-sprintf.c (format_directive): Do not use
      	space in between 'G_' and '('.
      2018-05-17  Martin Liska  <mliska@suse.cz>
      
      	* c-warn.c (overflow_warning): Do not use
      	space in between 'G_' and '('.
      2018-05-17  Martin Liska  <mliska@suse.cz>
      
      	* gcc.dg/plugin/ggcplug.c (plugin_init): Do not use
      	space in between 'G_' and '('.
      
      From-SVN: r260314
      Martin Liska committed
    • re PR target/85323 (SSE/AVX/AVX512 shift by 0 not optimized away) · 78b9544b
      	PR target/85323
      	* config/i386/i386.c (ix86_fold_builtin): Handle masked shifts
      	even if the mask is not all ones.
      
      	* gcc.target/i386/pr85323-7.c: New test.
      	* gcc.target/i386/pr85323-8.c: New test.
      	* gcc.target/i386/pr85323-9.c: New test.
      
      From-SVN: r260313
      Jakub Jelinek committed
    • re PR target/85323 (SSE/AVX/AVX512 shift by 0 not optimized away) · 6a03477e
      	PR target/85323
      	* config/i386/i386.c (ix86_fold_builtin): Fold shift builtins by
      	vector.
      	(ix86_gimple_fold_builtin): Likewise.
      
      	* gcc.target/i386/pr85323-4.c: New test.
      	* gcc.target/i386/pr85323-5.c: New test.
      	* gcc.target/i386/pr85323-6.c: New test.
      
      From-SVN: r260312
      Jakub Jelinek committed
    • re PR target/85323 (SSE/AVX/AVX512 shift by 0 not optimized away) · 28a8a768
      	PR target/85323
      	* config/i386/i386.c: Include tree-vector-builder.h.
      	(ix86_vector_shift_count): New function.
      	(ix86_fold_builtin): Fold shift builtins by scalar count.
      	(ix86_gimple_fold_builtin): Likewise.
      
      	* gcc.target/i386/pr85323-1.c: New test.
      	* gcc.target/i386/pr85323-2.c: New test.
      	* gcc.target/i386/pr85323-3.c: New test.
      
      From-SVN: r260311
      Jakub Jelinek committed
    • avx512fintrin.h (_mm512_set_epi16, [...]): New intrinsics. · 4e6a811f
      	* config/i386/avx512fintrin.h (_mm512_set_epi16, _mm512_set_epi8,
      	_mm512_setzero): New intrinsics.
      
      	* gcc.target/i386/avx512f-set-v32hi-1.c: New test.
      	* gcc.target/i386/avx512f-set-v32hi-2.c: New test.
      	* gcc.target/i386/avx512f-set-v32hi-3.c: New test.
      	* gcc.target/i386/avx512f-set-v32hi-4.c: New test.
      	* gcc.target/i386/avx512f-set-v32hi-5.c: New test.
      	* gcc.target/i386/avx512f-set-v64qi-1.c: New test.
      	* gcc.target/i386/avx512f-set-v64qi-2.c: New test.
      	* gcc.target/i386/avx512f-set-v64qi-3.c: New test.
      	* gcc.target/i386/avx512f-set-v64qi-4.c: New test.
      	* gcc.target/i386/avx512f-set-v64qi-5.c: New test.
      	* gcc.target/i386/avx512f-setzero-1.c: New test.
      
      From-SVN: r260310
      Jakub Jelinek committed
    • [patch AArch64] Do not perform a vector splat for vector initialisation if it is not useful · b4e2cd5b
      In the testcase in this patch we create an SLP vector with only two
      elements. Our current vector initialisation code will first duplicate
      the first element to both lanes, then overwrite the top lane with a new
      value.
      
      This duplication can be clunky and wasteful.
      
      Better would be to simply use the fact that we will always be
      overwriting the remaining bits, and simply move the first element to the corrcet
      place (implicitly zeroing all other bits).
      
      This reduces the code generation for this case, and can allow more
      efficient addressing modes, and other second order benefits for AArch64
      code which has been vectorized to V2DI mode.
      
      Note that the change is generic enough to catch the case for any vector
      mode, but is expected to be most useful for 2x64-bit vectorization.
      
      Unfortunately, on its own, this would cause failures in
      gcc.target/aarch64/load_v2vec_lanes_1.c and
      gcc.target/aarch64/store_v2vec_lanes.c , which expect to see many more
      vec_merge and vec_duplicate for their simplifications to apply. To fix
      this,
      add a special case to the AArch64 code if we are loading from two memory
      addresses, and use the load_pair_lanes patterns directly.
      
      We also need a new pattern in simplify-rtx.c:simplify_ternary_operation
      to catch:
      
        (vec_merge:OUTER
           (vec_duplicate:OUTER x:INNER)
           (subreg:OUTER y:INNER 0)
           (const_int N))
      
      And simplify it to:
      
        (vec_concat:OUTER x:INNER y:INNER) or (vec_concat y x)
      
      This is similar to the existing patterns which are tested in this
      function, without requiring the second operand to also be a vec_duplicate. 
      
      	* config/aarch64/aarch64.c (aarch64_expand_vector_init): Modify
      	code generation for cases where splatting a value is not useful.
      	* simplify-rtx.c (simplify_ternary_operation): Simplify
      	vec_merge across a vec_duplicate and a paradoxical subreg forming a vector
      	mode to a vec_concat.
      
      	* gcc.target/aarch64/vect-slp-dup.c: New.
      
      
      Co-Authored-By: Kyrylo Tkachov <kyrylo.tkachov@arm.com>
      
      From-SVN: r260309
      James Greenhalgh committed
    • re PR c++/85713 (ICE in dependent_type_p, at cp/pt.c:24582 on valid code) · 9b4ef22d
      2018-05-17  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/85713
      	* g++.dg/cpp1y/lambda-generic-85713-2.C: New.
      
      From-SVN: r260308
      Paolo Carlini committed
    • config.gcc: Support "goldmont-plus". · 74b2bb19
      2018-05-17  Olga Makhotina  <olga.makhotina@intel.com>
      
      gcc/
      
      	* config.gcc: Support "goldmont-plus".
      	* config/i386/driver-i386.c (host_detect_local_cpu): Detect
      	"goldmont-plus".
      	* config/i386/i386-c.c (ix86_target_macros_internal): Handle
      	PROCESSOR_GOLDMONT_PLUS.
      	* config/i386/i386.c (m_GOLDMONT_PLUS): Define.
      	(processor_target_table): Add "goldmont-plus".
      	(PTA_GOLDMONT_PLUS): Define.
      	(ix86_lea_outperforms): Add TARGET_GOLDMONT_PLUS.
      	(get_builtin_code_for_version): Handle PROCESSOR_GOLDMONT_PLUS.
      	(fold_builtin_cpu): Add M_INTEL_GOLDMONT_PLUS.
      	(fold_builtin_cpu): Add "goldmont-plus".
      	(ix86_add_stmt_cost): Add TARGET_GOLDMONT_PLUS.
      	(ix86_option_override_internal): Add "goldmont-plus".
      	* config/i386/i386.h (processor_costs): Define TARGET_GOLDMONT_PLUS.
      	(processor_type): Add PROCESSOR_GOLDMONT_PLUS.
      	* config/i386/x86-tune.def: Add m_GOLDMONT_PLUS.
      	* doc/invoke.texi: Add goldmont-plus as x86 -march=/-mtune= CPU type.
      
      libgcc/
      
      	* config/i386/cpuinfo.h (processor_types): Add INTEL_GOLDMONT_PLUS.
      	* config/i386/cpuinfo.c (get_intel_cpu): Detect Goldmont Plus.
      
      gcc/testsuite/
      
      	* gcc.target/i386/builtin_target.c: Test goldmont-plus.
      	* gcc.target/i386/funcspec-56.inc: Test arch=goldmont-plus.
      
      From-SVN: r260307
      Olga Makhotina committed
    • re PR tree-optimization/85757 (tree optimizers fail to fully clean up fixed-size memcpy) · 773d0331
      2018-05-17  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/85757
      	* tree-ssa-dse.c (dse_classify_store): Record a PHI def and
      	remove defs that only feed that PHI from further processing.
      
      	* gcc.dg/tree-ssa/ssa-dse-34.c: New testcase.
      
      From-SVN: r260306
      Richard Biener committed
    • Daily bump. · 8ee52021
      From-SVN: r260304
      GCC Administrator committed
  2. 16 May, 2018 16 commits
    • re PR c++/85363 (Throwing exception from member constructor (brace initializer… · 0932d398
      re PR c++/85363 (Throwing exception from member constructor (brace initializer vs initializer list))
      
      	PR c++/85363
      	* call.c (set_flags_from_callee): Handle AGGR_INIT_EXPRs too.
      	* tree.c (bot_manip): Call set_flags_from_callee for
      	AGGR_INIT_EXPRs too.
      
      	* g++.dg/cpp0x/initlist-throw1.C: New test.
      	* g++.dg/cpp0x/initlist-throw2.C: New test.
      
      From-SVN: r260300
      Marek Polacek committed
    • RISC-V: Minor pattern name cleanup. · 110fb19f
      	gcc/
      	* config/riscv/riscv.md (<optab>si3_mask, <optab>si3_mask_1): Prepend
      	asterisk to name.
      	(<optab>di3_mask, <optab>di3_mask_1): Likewise.
      
      From-SVN: r260299
      Jim Wilson committed
    • DWARF: Add header for .debug_str_offsets table for dwarf_version 5. · bb14f4c6
      DWARF5 defines a small header for .debug_str_offsets.  Since we only use
      it for split dwarf .dwo files we don't need to keep track of the actual
      index offset in an attribute.
      
      gcc/ChangeLog
      
      	* dwarf2out.c (count_index_strings): New function.
      	(output_indirect_strings): Call count_index_strings and generate
      	header for dwarf_version >= 5.
      
      From-SVN: r260298
      Mark Wielaard committed
    • DWARF: Emit DWARF5 forms for indirect addresses and string offsets. · c0134358
      We already emit DWARF5 attributes and tables for indirect addresses
      and string offsets, but still use GNU forms. Add a new helper function
      dwarf_FORM () for emitting the right form.
      
      Currently we only use the uleb128 forms. But DWARF5 also allows
      1, 2, 3 and 4 byte forms (DW_FORM_strx[1234] and DW_FORM_addrx[1234])
      which might be more space efficient.
      
      gcc/ChangeLog
      
      	* dwarf2out.c (dwarf_FORM): New function.
      	(set_indirect_string): Use dwarf_FORM.
      	(reset_indirect_string): Likewise.
      	(size_of_die): Likewise.
      	(value_format): Likewise.
      	(output_die): Likewise.
      	(add_skeleton_AT_string): Likewise.
      	(output_macinfo_op): Likewise.
      	(index_string): Likewise.
      	(output_index_string_offset): Likewise.
      	(output_index_string): Likewise.
      
      From-SVN: r260297
      Mark Wielaard committed
    • rs6000.md (prefetch): Generate ISA 2.06 instructions dcbt and dcbtstt with TH=16 if... · b958e1c1
      gcc/ChangeLog:
      
      2018-05-16  Carl Love  <cel@us.ibm.com>
      
      	* config/rs6000/rs6000.md (prefetch): Generate ISA 2.06 instructions
      	dcbt and dcbtstt with TH=16 if operands[2] is 0 and Power 8 or newer.
      
      From-SVN: r260296
      Carl Love committed
    • Remove unused function ipa_free_edge_args_substructures · 73264a8d
      2018-05-16  Martin Jambor  <mjambor@suse.cz>
      
      	* ipa-prop.c (ipa_free_all_edge_args): Remove.
      	* ipa-prop.h (ipa_free_all_edge_args): Likewise.
      
      From-SVN: r260295
      Martin Jambor committed
    • vsx-vector-6-be.c: Remove file. · 6747254b
      gcc/testsuite/ChangeLog:
      
      2018-05-16 Carl Love  <cel@us.ibm.com>
      	* gcc.target/powerpc/vsx-vector-6-be.c: Remove file.
      	* gcc.target/powerpc/vsx-vector-6-be.p7.c: New test file.
      	* gcc.target/powerpc/vsx-vector-6-be.p8.c: New test file.
      	* gcc.target/powerpc/vsx-vector-6-le.c (dg-final): Update counts for
      	xvcmpeqdp., xvcmpgtdp., xvcmpgedp., xxlxor, xvrdpi.
      
      From-SVN: r260294
      Carl Love committed
    • [AArch64] Improve register allocation of fma · d6e6e8b6
      This patch improves register allocation of fma by preferring to update the
      accumulator register.  This is done by adding fma insns with operand 1 as the
      accumulator.  The register allocator considers copy preferences only in operand
      order, so if the first operand is dead, it has the highest chance of being
      reused as the destination.  As a result code using fma often has a better
      register allocation.  Performance of SPECFP2017 improves by over 0.5% on some
      implementations, while it had no effect on other implementations.  Fma is more
      readable too, in a simple example we now generate:
      
      	fmadd	s16, s2, s1, s16
      	fmadd	s7, s17, s16, s7
      	fmadd	s6, s16, s7, s6
      	fmadd	s5, s7, s6, s5
      
      instead of:
      
      	fmadd	s16, s16, s2, s1
      	fmadd	s7, s7, s16, s6
      	fmadd	s6, s6, s7, s5
      	fmadd	s5, s5, s6, s4
      
          gcc/
      	* config/aarch64/aarch64.md (fma<mode>4): Change into expand pattern.
      	(fnma<mode>4): Likewise.
      	(fms<mode>4): Likewise.
      	(fnms<mode>4): Likewise.
      	(aarch64_fma<mode>4): Rename insn, reorder accumulator operand.
      	(aarch64_fnma<mode>4): Likewise.
      	(aarch64_fms<mode>4): Likewise.
      	(aarch64_fnms<mode>4): Likewise.
      	(aarch64_fnmadd<mode>4): Likewise.
      
      From-SVN: r260292
      Wilco Dijkstra committed
    • * tree.c (warn_deprecated_use): Return bool. Simplify logic. · df0fc585
      From-SVN: r260290
      Jason Merrill committed
    • tree-vectorizer.h (struct stmt_info_for_cost): Add where member. · 68435eb2
      2018-05-16  Richard Biener  <rguenther@suse.de>
      
      	* tree-vectorizer.h (struct stmt_info_for_cost): Add where member.
      	(dump_stmt_cost): Declare.
      	(add_stmt_cost): Dump cost we add.
      	(add_stmt_costs): New function.
      	(vect_model_simple_cost, vect_model_store_cost, vect_model_load_cost):
      	No longer exported.
      	(vect_analyze_stmt): Adjust prototype.
      	(vectorizable_condition): Likewise.
      	(vectorizable_live_operation): Likewise.
      	(vectorizable_reduction): Likewise.
      	(vectorizable_induction): Likewise.
      	* tree-vect-loop.c (vect_analyze_loop_operations): Create local
      	cost vector to pass to vectorizable_ and record afterwards.
      	(vect_model_reduction_cost): Take cost vector argument and adjust.
      	(vect_model_induction_cost): Likewise.
      	(vectorizable_reduction): Likewise.
      	(vectorizable_induction): Likewise.
      	(vectorizable_live_operation): Likewise.
      	* tree-vect-slp.c (vect_create_new_slp_node): Initialize
      	SLP_TREE_NUMBER_OF_VEC_STMTS.
      	(vect_analyze_slp_cost_1): Remove.
      	(vect_analyze_slp_cost): Likewise.
      	(vect_slp_analyze_node_operations): Take visited args and
      	a target cost vector.  Avoid processing already visited stmt sets.
      	(vect_slp_analyze_operations): Use a local cost vector to gather
      	costs and register those of non-discarded instances.
      	(vect_bb_vectorization_profitable_p): Use add_stmt_costs.
      	(vect_schedule_slp_instance): Remove copying of
      	SLP_TREE_NUMBER_OF_VEC_STMTS.  Instead assert that it is not
      	zero.
      	* tree-vect-stmts.c (record_stmt_cost): Remove path directly
      	adding cost.  Record cost entry location.
      	(vect_prologue_cost_for_slp_op): Function to compute cost of
      	a constant or invariant generated for SLP vect in the prologue,
      	split out from vect_analyze_slp_cost_1.
      	(vect_model_simple_cost): Make static.  Adjust for SLP costing.
      	(vect_model_promotion_demotion_cost): Likewise.
      	(vect_model_store_cost): Likewise, make static.
      	(vect_model_load_cost): Likewise.
      	(vectorizable_bswap): Add cost vector arg and adjust.
      	(vectorizable_call): Likewise.
      	(vectorizable_simd_clone_call): Likewise.
      	(vectorizable_conversion): Likewise.
      	(vectorizable_assignment): Likewise.
      	(vectorizable_shift): Likewise.
      	(vectorizable_operation): Likewise.
      	(vectorizable_store): Likewise.
      	(vectorizable_load): Likewise.
      	(vectorizable_condition): Likewise.
      	(vectorizable_comparison): Likewise.
      	(can_vectorize_live_stmts): Likewise.
      	(vect_analyze_stmt): Likewise.
      	(vect_transform_stmt): Adjust calls to vectorizable_*.
      	* tree-vectorizer.c: Include gimple-pretty-print.h.
      	(dump_stmt_cost): New function.
      
      From-SVN: r260289
      Richard Biener committed
    • params.def (PARAM_DSE_MAX_ALIAS_QUERIES_PER_STORE): New param. · 311eb816
      2018-05-16  Richard Biener  <rguenther@suse.de>
      
      	* params.def (PARAM_DSE_MAX_ALIAS_QUERIES_PER_STORE): New param.
      	* doc/invoke.texi (dse-max-alias-queries-per-store): Document.
      	* tree-ssa-dse.c: Include tree-ssa-loop.h.
      	(check_name): New callback.
      	(dse_classify_store): Track cycles via a visited bitmap of PHI
      	defs and simplify handling of in-loop and across loop dead stores
      	and properly fail for loop-variant refs.  Handle byte-tracking with
      	multiple defs.  Use PARAM_DSE_MAX_ALIAS_QUERIES_PER_STORE for
      	limiting the walk.
      
      	* gcc.dg/tree-ssa/ssa-dse-32.c: New testcase.
      	* gcc.dg/tree-ssa/ssa-dse-33.c: Likewise.
      	* gcc.dg/uninit-pr81897-2.c: Use -fno-tree-dse.
      
      From-SVN: r260288
      Richard Biener committed
    • Handle vector boolean types when calculating the SLP unroll factor · 1f3cb663
      The SLP unrolling factor is calculated by finding the smallest
      scalar type for each SLP statement and taking the number of required
      lanes from the vector versions of those scalar types.  E.g. for an
      int32->int64 conversion, it's the vector of int32s rather than the
      vector of int64s that determines the unroll factor.
      
      We rely on tree-vect-patterns.c to replace boolean operations like:
      
         bool a, b, c;
         a = b & c;
      
      with integer operations of whatever the best size is in context.
      E.g. if b and c are fed by comparisons of ints, a, b and c will become
      the appropriate size for an int comparison.  For most targets this means
      that a, b and c will end up as int-sized themselves, but on targets like
      SVE and AVX512 with packed vector booleans, they'll instead become a
      small bitfield like :1, padded to a byte for memory purposes.
      The SLP code would then take these scalar types and try to calculate
      the vector type for them, causing the unroll factor to be much higher
      than necessary.
      
      This patch tries to make the SLP code use the same approach as the
      loop vectorizer, by splitting out the code that calculates the
      statement vector type and the vector type that should be used for
      the number of units.
      
      2018-05-16  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* tree-vectorizer.h (vect_get_vector_types_for_stmt): Declare.
      	(vect_get_mask_type_for_stmt): Likewise.
      	* tree-vect-slp.c (vect_two_operations_perm_ok_p): New function,
      	split out from...
      	(vect_build_slp_tree_1): ...here.  Use vect_get_vector_types_for_stmt
      	to determine the statement's vector type and the vector type that
      	should be used for calculating nunits.  Deal with cases in which
      	the type has to be deferred.
      	(vect_slp_analyze_node_operations): Use vect_get_vector_types_for_stmt
      	and vect_get_mask_type_for_stmt to calculate STMT_VINFO_VECTYPE.
      	* tree-vect-loop.c (vect_determine_vf_for_stmt_1)
      	(vect_determine_vf_for_stmt): New functions, split out from...
      	(vect_determine_vectorization_factor): ...here.
      	* tree-vect-stmts.c (vect_get_vector_types_for_stmt)
      	(vect_get_mask_type_for_stmt): New functions, split out from
      	vect_determine_vectorization_factor.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/vcond_10.c: New test.
      	* gcc.target/aarch64/sve/vcond_10_run.c: Likewise.
      	* gcc.target/aarch64/sve/vcond_11.c: Likewise.
      	* gcc.target/aarch64/sve/vcond_11_run.c: Likewise.
      
      From-SVN: r260287
      Richard Sandiford committed
    • tree-cfg.c (verify_gimple_assign_ternary): Properly verify the [VEC_]COND_EXPR embedded comparison. · c448fede
      2018-05-16  Richard Biener  <rguenther@suse.de>
      
      	* tree-cfg.c (verify_gimple_assign_ternary): Properly
      	verify the [VEC_]COND_EXPR embedded comparison.
      
      From-SVN: r260283
      Richard Biener committed
    • PR tree-optimization/85753 - missing -Wrestrict on memcpy into a member array · 7ad491c6
      gcc/ChangeLog:
      
      	PR tree-optimization/85753
      	* gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref): Handle
      	RECORD_TYPE in addition to ARRAY_TYPE.
      
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/85753
      	* gcc.dg/Wrestrict-10.c: Adjust.
      	* gcc.dg/Wrestrict-16.c: New test.
      
      From-SVN: r260280
      Martin Sebor committed
    • cp-tree.h (cp_expr): Remove copy constructor. · e4a14896
      	* cp-tree.h (cp_expr): Remove copy constructor.
      
      	* mangle.c (struct releasing_vec): Declare copy constructor.
      
      From-SVN: r260279
      Jason Merrill committed
    • Daily bump. · 67ea8181
      From-SVN: r260277
      GCC Administrator committed
  3. 15 May, 2018 13 commits
    • PR c++/64372 - CWG 1560, gratuitous lvalue-rvalue conversion in ?: · 30a52a6d
      	* call.c (build_conditional_expr_1): Don't force_rvalue when one arm
      	is a throw-expression.
      
      From-SVN: r260272
      Jason Merrill committed
    • PR middle-end/85643 - attribute nonstring fails to squash -Wstringop-truncation warning · 27560569
      gcc/ChangeLog:
      
      	PR middle-end/85643
      	* calls.c (get_attr_nonstring_decl): Handle MEM_REF.
      
      gcc/testsuite/ChangeLog:
      
      	PR middle-end/85643
      	* c-c++-common/attr-nonstring-7.c: New test.
      
      From-SVN: r260271
      Martin Sebor committed
    • re PR lto/85583 (lto1: internal compiler error: in lto_balanced_map, at lto/lto-partition.c:833) · ab168044
      
      	PR lto/85583
      	* lto-partition.c (account_reference_p): Do not account
      	references from aliases; do not account refernces from
      	external initializers.
      
      From-SVN: r260266
      Jan Hubicka committed
    • cp-tree.h (DECL_MAYBE_IN_CHARGE_CDTOR_P): New. · 5f150326
      2018-05-15  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* cp-tree.h (DECL_MAYBE_IN_CHARGE_CDTOR_P): New.
      	(FOR_EACH_CLONE): Update.
      	* decl.c (grokdeclarator): Use it.
      	* decl2.c (vague_linkage_p): Likewise.
      	* mangle.c (mangle_decl): Likewise.
      	* method.c (lazily_declare_fn): Likewise.
      	* optimize.c (can_alias_cdtor, maybe_clone_body): Likewise.
      	* repo.c (repo_emit_p): Likewise.
      	* tree.c (decl_linkage): Likewise.
      
      From-SVN: r260264
      Paolo Carlini committed
    • PR libstdc++/85749 constrain seed sequences for random number engines · 5a7960da
      Constrain constructors and member functions of random number engines so
      that functions taking seed sequences can only be called with types that
      meet the seed sequence requirements.
      
      	PR libstdc++/85749
      	* include/bits/random.h (__detail::__is_seed_seq): New SFINAE helper.
      	(linear_congruential_engine, mersenne_twister_engine)
      	(subtract_with_carry_engine, discard_block_engine)
      	(independent_bits_engine, shuffle_order_engine): Use __is_seed_seq to
      	constrain function templates taking seed sequences.
      	* include/bits/random.tcc (linear_congruential_engine::seed(_Sseq&))
      	(mersenne_twister_engine::seed(_Sseq&))
      	(subtract_with_carry_engine::seed(_Sseq&)): Change return types to
      	match declarations.
      	* include/ext/random (simd_fast_mersenne_twister_engine): Use
      	__is_seed_seq to constrain function templates taking seed sequences.
      	* include/ext/random.tcc (simd_fast_mersenne_twister_engine::seed):
      	Change return type to match declaration.
      	* testsuite/26_numerics/random/discard_block_engine/cons/seed_seq2.cc:
      	New.
      	* testsuite/26_numerics/random/independent_bits_engine/cons/
      	seed_seq2.cc: New.
      	* testsuite/26_numerics/random/linear_congruential_engine/cons/
      	seed_seq2.cc: New.
      	* testsuite/26_numerics/random/mersenne_twister_engine/cons/
      	seed_seq2.cc: New.
      	* testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error lineno.
      	* testsuite/26_numerics/random/shuffle_order_engine/cons/seed_seq2.cc:
      	New.
      	* testsuite/26_numerics/random/subtract_with_carry_engine/cons/
      	seed_seq2.cc: New.
      	* testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/
      	seed_seq2.cc: New.
      
      From-SVN: r260263
      Jonathan Wakely committed
    • PR libstdc++/83891 fix path::is_absolute() for non-POSIX targets · c3b61fda
      The correct definition seems to be has_root_directory() for all systems
      we care about.
      
      	PR libstdc++/83891
      	* include/bits/fs_path.h (path::is_absolute()): Use same definition
      	for all operating systems.
      	* include/experimental/bits/fs_path.h (path::is_absolute()): Likewise.
      	* testsuite/27_io/filesystem/path/query/is_absolute.cc: New.
      	* testsuite/27_io/filesystem/path/query/is_relative.cc: Fix comment.
      	* testsuite/experimental/filesystem/path/query/is_absolute.cc: New.
      
      From-SVN: r260259
      Jonathan Wakely committed
    • Remove unused headers from tests · b0e01682
      	* testsuite/27_io/filesystem/path/decompose/extension.cc: Remove
      	unused <vector> header.
      	* testsuite/27_io/filesystem/path/query/empty.cc: Likewise.
      	* testsuite/27_io/filesystem/path/query/has_extension.cc: Likewise.
      	* testsuite/27_io/filesystem/path/query/has_filename.cc: Likewise.
      	* testsuite/27_io/filesystem/path/query/has_parent_path.cc: Likewise.
      	* testsuite/27_io/filesystem/path/query/has_relative_path.cc:
      	Likewise.
      	* testsuite/27_io/filesystem/path/query/has_root_directory.cc:
      	Likewise.
      	* testsuite/27_io/filesystem/path/query/has_root_name.cc: Likewise.
      	* testsuite/27_io/filesystem/path/query/has_root_path.cc: Likewise.
      	* testsuite/27_io/filesystem/path/query/has_stem.cc: Likewise.
      	* testsuite/27_io/filesystem/path/query/is_relative.cc: Likewise.
      	* testsuite/experimental/filesystem/path/decompose/extension.cc:
      	Likewise.
      	* testsuite/experimental/filesystem/path/query/empty.cc: Likewise.
      	* testsuite/experimental/filesystem/path/query/has_extension.cc:
      	Likewise.
      	* testsuite/experimental/filesystem/path/query/has_filename.cc:
      	Likewise.
      	* testsuite/experimental/filesystem/path/query/has_parent_path.cc:
      	Likewise.
      	* testsuite/experimental/filesystem/path/query/has_relative_path.cc:
      	Likewise.
      	* testsuite/experimental/filesystem/path/query/has_root_directory.cc:
      	Likewise.
      	* testsuite/experimental/filesystem/path/query/has_root_name.cc:
      	Likewise.
      	* testsuite/experimental/filesystem/path/query/has_root_path.cc:
      	Likewise.
      	* testsuite/experimental/filesystem/path/query/has_stem.cc: Likewise.
      	* testsuite/experimental/filesystem/path/query/is_relative.cc:
      	Likewise.
      
      From-SVN: r260256
      Jonathan Wakely committed
    • PR libstdc++/84159 fix appending strings to paths · 6cda876d
      The path::operator/=(const Source&) and path::append overloads were
      still following the semantics of the Filesystem TS not C++17. Only
      the path::operator/=(const path&) overload was correct.
      
      This change adds more tests for path::operator/=(const path&) and adds
      new tests to verify that the other append operations have equivalent
      behaviour.
      
      	PR libstdc++/84159
      	* include/bits/fs_path.h (path::operator/=, path::append): Construct
      	temporary path before calling _M_append.
      	(path::_M_append): Change parameter to path and implement C++17
      	semantics.
      	* testsuite/27_io/filesystem/path/append/path.cc: Add helper function
      	and more examples from the standard.
      	* testsuite/27_io/filesystem/path/append/source.cc: New.
      	* testsuite/27_io/filesystem/path/decompose/filename.cc: Add comment.
      	* testsuite/27_io/filesystem/path/nonmember/append.cc: New.
      
      From-SVN: r260255
      Jonathan Wakely committed
    • Qualify std::__invoke in <variant> to prevent ADL · e4a5135f
      	* include/std/variant (__gen_vtable_impl::__visit_invoke): Qualify
      	__invoke to prevent ADL.
      
      From-SVN: r260254
      Jonathan Wakely committed
    • tree-ssa-dse.c (dse_classify_store): Remove use_stmt parameter, add by_clobber_p one. · afe3cc73
      2018-05-15  Richard Biener  <rguenther@suse.de>
      
      	* tree-ssa-dse.c (dse_classify_store): Remove use_stmt parameter,
      	add by_clobber_p one.  Change algorithm to collect all defs
      	representing uses we need to walk and try reducing them to
      	a single one before failing.
      	(dse_dom_walker::dse_optimize_stmt): Adjust.
      
      	* gcc.dg/tree-ssa/ssa-dse-31.c: New testcase.
      
      From-SVN: r260253
      Richard Biener committed
    • DWARF: Use DW_OP_addrx and DW_OP_constx for DWARF5. · 35b361b1
      For older DWARF and -gsplit-dwarf we want to emit DW_OP_GNU_addr_index
      and DW_OP_GNU_const_index, but for DWARF5 we should use DW_OP_addrx
      and DW_OP_constx.
      
      gcc/ChangeLog:
      
      	* dwarf2out.c (dwarf_OP): Handle DW_OP_addrx and DW_OP_constx.
      	(size_of_loc_descr): Likewise.
      	(output_loc_operands): Likewise.
      	(output_loc_operands_raw): Likewise.
      	(dw_addr_op): Use dwarf_OP () for DW_OP_constx and DW_OP_addrx.
      	(resolve_addr_in_expr): Handle DW_OP_addrx and DW_OP_constx.
      	(hash_loc_operands): Likewise.
      	(compare_loc_operands): Likewise.
      
      From-SVN: r260252
      Mark Wielaard committed
    • DWARF calculate the number of indexed addresses. · 01ec978c
      The length in the .debug_addr unit header was calculated using the number
      of elements in the addr_index_table. This is wrong because the entries in
      the table are refcounted and only those with a refcount > 0 are actually
      put in the index. Add a helper function count_index_addrs to get the
      correct number of addresses in the index.
      
      gcc/ChangeLog:
      
      	* dwarf2out.c (count_index_addrs): New function.
      	(dwarf2out_finish): Use count_index_addrs to calculate addrs_length.
      
      From-SVN: r260251
      Mark Wielaard committed