Commit Graph

168893 Commits

Author SHA1 Message Date
Jonathan Wakely
bf5824f928 Corrections for C++2a library status table
* doc/xml/manual/status_cxx2020.xml: Add missing row for P0920R2.
	Fix bgcolor for P0340R3.
	* doc/html/*: Regenerate.

From-SVN: r271868
2019-06-03 14:32:17 +01:00
Jonathan Wakely
512a80ec49 PR libstdc++/90686 update C++2a library status docs
PR libstdc++/90686
	* doc/xml/manual/status_cxx2014.xml: Document what's missing from
	<experimental/memory_resource>.
	* doc/xml/manual/status_cxx2020.xml: Document status of P1285R0,
	P0339R6, P0340R3, P1164R1 and P1357R1.
	* doc/html/*: Regenerate.

From-SVN: r271867
2019-06-03 14:23:03 +01:00
Jonathan Wakely
ebaf365963 Enforce allocator::value_type consistency for containers in C++2a
In previous standards it is undefined for a container and its allocator
to have a different value_type. Libstdc++ has traditionally allowed it
as an extension, automatically rebinding the allocator to the
container's value_type. Since GCC 8.1 that extension has been disabled
for C++11 and later when __STRICT_ANSI__ is defined (i.e. for
-std=c++11, -std=c++14, -std=c++17 and -std=c++2a).

Since the acceptance of P1463R1 into the C++2a draft an incorrect
allocator::value_type now requires a diagnostic. This patch implements
that by enabling the static_assert for -std=gnu++2a as well.

	* doc/xml/manual/status_cxx2020.xml: Document P1463R1 status.
	* include/bits/forward_list.h [__cplusplus > 201703]: Enable
	allocator::value_type assertion for C++2a.
	* include/bits/hashtable.h: Likewise.
	* include/bits/stl_deque.h: Likewise.
	* include/bits/stl_list.h: Likewise.
	* include/bits/stl_map.h: Likewise.
	* include/bits/stl_multimap.h: Likewise.
	* include/bits/stl_multiset.h: Likewise.
	* include/bits/stl_set.h: Likewise.
	* include/bits/stl_vector.h: Likewise.
	* testsuite/23_containers/deque/48101-3_neg.cc: New test.
	* testsuite/23_containers/forward_list/48101-3_neg.cc: New test.
	* testsuite/23_containers/list/48101-3_neg.cc: New test.
	* testsuite/23_containers/map/48101-3_neg.cc: New test.
	* testsuite/23_containers/multimap/48101-3_neg.cc: New test.
	* testsuite/23_containers/multiset/48101-3_neg.cc: New test.
	* testsuite/23_containers/set/48101-3_neg.cc: New test.
	* testsuite/23_containers/unordered_map/48101-3_neg.cc: New test.
	* testsuite/23_containers/unordered_multimap/48101-3_neg.cc: New test.
	* testsuite/23_containers/unordered_multiset/48101-3_neg.cc: New test.
	* testsuite/23_containers/unordered_set/48101-3_neg.cc: New test.
	* testsuite/23_containers/vector/48101-3_neg.cc: New test.

From-SVN: r271866
2019-06-03 14:22:59 +01:00
Aldy Hernandez
f2b00d2ba4 tree-vrp.h (value_range_base::nonzero_p): New.
* tree-vrp.h (value_range_base::nonzero_p): New.
	(value_range_base::set_nonnull): Rename to...
	(value_range_base::set_nonzero): ...this.
	(value_range_base::set_null): Rename to...
	(value_range_base::set_zero): ...this.
	(value_range::set_nonnull): Remove.
	(value_range::set_null): Remove.
	* tree-vrp.c (range_is_null): Remove.
	(range_is_nonnull): Remove.
	(extract_range_from_binary_expr): Use value_range_base::*zero_p
	instead of range_is_*null.
	(extract_range_from_unary_expr): Same.
	(value_range_base::set_nonnull): Rename to...
	(value_range_base::set_nonzero): ...this.
	(value_range::set_nonnull): Remove.
	(value_range_base::set_null): Rename to...
	(value_range_base::set_zero): ...this.
	(value_range::set_null): Remove.
	(extract_range_from_binary_expr): Rename set_*null uses to
	set_*zero.
	(extract_range_from_unary_expr): Same.
	(union_helper): Same.
	* vr-values.c (get_value_range): Use set_*zero instead of
	set_*null.
	(vr_values::extract_range_from_binary_expr): Same.
	(vr_values::extract_range_basic): Same.

From-SVN: r271865
2019-06-03 11:28:28 +00:00
Wilco Dijkstra
49f3f45004 Fix alignment option parser (PR90684)
Fix the alignment option parser to always allow up to 4 alignments.
Now -falign-functions=16:8:8:8 no longer reports an error.

    gcc/
	PR driver/90684
	* opts.c (parse_and_check_align_values): Allow 4 alignment values.
M    gcc/ChangeLog
M    gcc/opts.c

From-SVN: r271864
2019-06-03 11:27:50 +00:00
Kyrylo Tkachov
72215009a9 [AArch64] Emit TARGET_DOTPROD-specific sequence for <us>sadv16qi
Wilco pointed out that when the Dot Product instructions are available we can use them
to generate an even more efficient expansion for the [us]sadv16qi optab.
Instead of the current:
        uabdl2  v0.8h, v1.16b, v2.16b
        uabal   v0.8h, v1.8b, v2.8b
        uadalp  v3.4s, v0.8h

we can generate:
      (1)  mov    v4.16b, 1
      (2)  uabd    v0.16b, v1.16b, v2.16b
      (3)  udot    v3.4s, v0.16b, v4.16b

Instruction (1) can be CSEd across multiple such expansions and even hoisted outside of loops,
so when this sequence appears frequently back-to-back (like in x264_r) we essentially only have 2 instructions
per sum. Also, the UDOT instruction does the byte-to-word accumulation in one step, which allows us to use
the much simpler UABD instruction before it.

This makes it a shorter and lower-latency sequence overall for targets that support it.

	* config/aarch64/iterators.md (MAX_OPP): New code attr.
	* config/aarch64/aarch64-simd.md (*aarch64_<su>abd<mode>_3): Rename to...
	(aarch64_<su>abd<mode>_3): ... This.
	(<sur>sadv16qi): Add TARGET_DOTPROD expansion.

	* gcc.target/aarch64/ssadv16qi.c: Add +nodotprod to pragma.
	* gcc.target/aarch64/usadv16qi.c: Likewise.
	* gcc.target/aarch64/ssadv16qi-dotprod.c: New test.
	* gcc.target/aarch64/usadv16qi-dotprod.c: Likewise.

From-SVN: r271863
2019-06-03 11:20:58 +00:00
Prathamesh Kulkarni
c89503d957 target-supports.exp (add_options_for_aarch64_sve): New procedure.
2019-06-03  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	* lib/target-supports.exp (add_options_for_aarch64_sve): New procedure.
	(aarch64_sve_hw_bits): Call add_options_for_aarch64_sve.
	(check_effective_target_aarch64_sve_hw): Likewise.

From-SVN: r271862
2019-06-03 11:09:41 +00:00
Martin Liska
3fa97a0b3e Remove Java Trees from GENERIC manual.
2019-06-03  Martin Liska  <mliska@suse.cz>

	* doc/generic.texi: Remove Java Trees.

From-SVN: r271861
2019-06-03 11:09:05 +00:00
Richard Biener
1be54209b3 tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Get original full reference tree and record in ref->ref.
2019-06-03  Richard Biener  <rguenther@suse.de>

	* tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Get original
	full reference tree and record in ref->ref.
	(vn_reference_lookup_3): Pass in original ref to
	ao_ref_init_from_vn_reference.
	(vn_reference_lookup): Likewise.
	* tree-ssa-sccvn.h (ao_ref_init_from_vn_reference): Adjust prototype.
	* tree-ssa-alias.c (nonoverlapping_component_refs_of_decl_p):
	Handle non-decl bases in the original reference.

	* gcc.dg/tree-ssa/alias-access-path-1.c: Scan fre1.

From-SVN: r271860
2019-06-03 10:45:38 +00:00
Martin Liska
4c76ebd05b Fix typo in index comparison of CONSTRUCTOR.
2019-06-03  Martin Liska  <mliska@suse.cz>

	* fold-const.c (operand_equal_p): Fix typo as compare_tree_int
	returns 0 when operands are equal.

From-SVN: r271859
2019-06-03 10:42:14 +00:00
Richard Biener
efb34006e9 re PR tree-optimization/90716 (gcc generates wrong debug information at -O2)
2019-06-03  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/90716
	* tree-loop-distribution.c (destroy_loop): Process blocks in
	correct order.

	* gcc.dg/guality/pr90716.c: New testcase.

From-SVN: r271858
2019-06-03 10:17:16 +00:00
Prathamesh Kulkarni
3a0afad0d2 re PR target/88837 ([SVE] Poor vector construction code in VL-specific mode)
2019-06-03  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	PR target/88837
	* vector-builder.h (vector_builder::count_dups): New method.
	* config/aarch64/aarch64-protos.h (aarch64_expand_sve_vector_init):
	Declare prototype.
	* config/aarch64/aarch64/sve.md (aarch64_sve_rev64<mode>): Use @.
	(vec_init<mode><Vel>): New pattern.
	* config/aarch64/aarch64.c (emit_insr): New function.
	(aarch64_sve_expand_vector_init_handle_trailing_constants): Likewise.
	(aarch64_sve_expand_vector_init_insert_elems): Likewise.
	(aarch64_sve_expand_vector_init_handle_trailing_same_elem): Likewise.
	(aarch64_sve_expand_vector_init): Define two overloaded functions.

testsuite/
	* gcc.target/aarch64/sve/init_1.c: New test.
	* gcc.target/aarch64/sve/init_1_run.c: Likewise.
	* gcc.target/aarch64/sve/init_2.c: Likewise.
	* gcc.target/aarch64/sve/init_2_run.c: Likewise.
	* gcc.target/aarch64/sve/init_3.c: Likewise.
	* gcc.target/aarch64/sve/init_3_run.c: Likewise.
	* gcc.target/aarch64/sve/init_4.c: Likewise.
	* gcc.target/aarch64/sve/init_4_run.c: Likewise.
	* gcc.target/aarch64/sve/init_5.c: Likewise.
	* gcc.target/aarch64/sve/init_5_run.c: Likewise.
	* gcc.target/aarch64/sve/init_6.c: Likewise.
	* gcc.target/aarch64/sve/init_6_run.c: Likewise.
	* gcc.target/aarch64/sve/init_7.c: Likewise.
	* gcc.target/aarch64/sve/init_7_run.c: Likewise.
	* gcc.target/aarch64/sve/init_8.c: Likewise.
	* gcc.target/aarch64/sve/init_8_run.c: Likewise.
	* gcc.target/aarch64/sve/init_9.c: Likewise.
	* gcc.target/aarch64/sve/init_9_run.c: Likewise.
	* gcc.target/aarch64/sve/init_10.c: Likewise.
	* gcc.target/aarch64/sve/init_10_run.c: Likewise.
	* gcc.target/aarch64/sve/init_11.c: Likewise.
	* gcc.target/aarch64/sve/init_11_run.c: Likewise.
	* gcc.target/aarch64/sve/init_12.c: Likewise.
	* gcc.target/aarch64/sve/init_12_run.c: Likewise.

From-SVN: r271857
2019-06-03 09:35:37 +00:00
Alejandro Martinez
bcde3345ea Fix ICE in vect_slp_analyze_node_operations_1
This patch fixes bug 90681.  It was caused by trying to SLP vectorize a non
groupped load.  We've fixed it by tweaking a bit the implementation: mark
masked loads as not vectorizable, but support them as an special case.  Then
the detect them in the test for normal non-groupped loads that was already
there.

From-SVN: r271856
2019-06-03 09:13:32 +00:00
Richard Biener
961dce6b9d re PR testsuite/90713 (FAIL: gcc.dg/gimplefe-40.c (internal compiler error))
2019-06-03  Richard Biener  <rguenther@suse.de>

	PR testsuite/90713
	* gcc.dg/gimplefe-40.c: Add -maltivec for powerpc.

From-SVN: r271855
2019-06-03 09:03:48 +00:00
Martin Liska
6eb3cadb63 Make debug(edge) more verbose.
2019-06-03  Martin Liska  <mliska@suse.cz>

	* cfg.c (debug): Use TDF_DETAILS for debug and
	print edge info only once.

From-SVN: r271854
2019-06-03 07:00:33 +00:00
H.J. Lu
467e9f383c re PR target/89750 (Wrong code for _mm_comi_round_ss)
2019-05-06  H.J. Lu  <hongjiu.lu@intel.com>
	    Hongtao Liu  <hongtao.liu@intel.com>

	PR target/89750
	PR target/86444
	* config/i386/i386-expand.c (ix86_expand_sse_comi_round):
	Modified, original implementation isn't correct.

2019-05-06  H.J. Lu  <hongjiu.lu@intel.com>
	    Hongtao Liu  <hongtao.liu@intel.com>

	PR target/89750
	PR target/86444
	* gcc.target/i386/avx512f-vcomisd-2.c: New.
	* gcc.target/i386/avx512f-vcomisd-2.c: Likewise.

Co-Authored-By: Hongtao Liu <hongtao.liu@intel.com>

From-SVN: r271853
2019-06-03 02:20:33 +00:00
GCC Administrator
4bd0426702 Daily bump.
From-SVN: r271852
2019-06-03 00:16:18 +00:00
Thomas Koenig
5d9c602d83 re PR fortran/90539 (481.wrf slowdown by 25% on Intel Kaby with -Ofast -march=native starting with r271377)
2019-06-02  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/90539
	* trans-expr.c (gfc_conv_subref_array_arg): If the size of the
	expression can be determined to be one, treat it as contiguous.
	Set likelyhood of presence of an actual argument according to
	PRED_FORTRAN_ABSENT_DUMMY and likelyhood of being contiguous
	according to PRED_FORTRAN_CONTIGUOUS.

2019-06-02  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/90539
	* predict.def (PRED_FORTRAN_CONTIGUOUS): New predictor.

2019-06-02  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/90539
	* gfortran.dg/internal_pack_24.f90: New test.

From-SVN: r271844
2019-06-02 15:18:22 +00:00
GCC Administrator
5efdd6eeb6 Daily bump.
From-SVN: r271843
2019-06-02 00:16:22 +00:00
Iain Sandoe
b86e91d9b2 Darwin, x86, testsuite - adjust tests for Darwin PR90698.
We don't have support for -mcmodel={medium, large, kernel} so don't
expect tests for those things to work.

For now mark them as xfail where possible and skip where that isn't.
These changes will be logged onto the PR and therefore can be backed
out when the facility is implemented.

gcc/testsuite/ChangeLog:

2019-06-01  Iain Sandoe  <iain@sandoe.co.uk>

	PR target/90698
	* gcc.target/i386/pr49866.c: XFAIL for Darwin.
	* gcc.target/i386/pr63538.c: Likewise.
	* gcc.target/i386/pr61599-1.c: Skip for Darwin.

From-SVN: r271839
2019-06-01 19:59:30 +00:00
Martin Sebor
f325e75226 PR middle-end/90694 - incorrect representation of ADDR_EXPR involving a pointer to array
gcc/ChangeLog:

	PR middle-end/90694
	* tree-pretty-print.c (dump_generic_node): Add parentheses.

gcc/testsuite/ChangeLog:

	PR middle-end/90694
	* gcc.dg/tree-ssa/dump-5.c: New test.

From-SVN: r271838
2019-06-01 11:27:20 -06:00
Jan Hubicka
e4b44fd741 alias.c: Include ipa-utils.h.
* alias.c: Include ipa-utils.h.
	(get_alias_set): Try to complete ODR type via ODR type hash lookup.
	* ipa-devirt.c (prevailing_odr_type): New.
	* ipa-utils.h (previaling_odr_type): Declare.

	* g++.dg/lto/alias-1_0.C: New testcase.
	* g++.dg/lto/alias-1_1.C: New testcase.

From-SVN: r271837
2019-06-01 16:36:49 +00:00
Ville Voutilainen
5a2a2fb315 Fix changelog
From-SVN: r271836
2019-06-01 14:52:33 +03:00
Ville Voutilainen
8a20d031ea re PR c++/85254 (boost::is_final does not work for template types)
PR c++/85254

gcc/cp

PR c++/85254
* class.c (fixup_type_variants): Handle CLASSTYPE_FINAL.

testsuite/

PR c++/85254
* g++.dg/ext/is_final.C: Amend.

From-SVN: r271835
2019-06-01 13:57:12 +03:00
GCC Administrator
ceedc63594 Daily bump.
From-SVN: r271832
2019-06-01 00:16:17 +00:00
H.J. Lu
02ed904927 i386: Don't insert ENDBR after NOTE_INSN_DELETED_LABEL
NOTE_INSN_DELETED_LABEL is used to mark what used to be a 'code_label',
but was not used for other purposes than taking its address which cannot
be used as target for indirect jumps.

Tested on Linux/x86-64 with -fcf-protection.

For x86-64 libc.so on glibc master branch (commit f43b8dd55588c3),

Before: 2961 endbr64
After:  2943 endbr64

gcc/

	PR target/89355
	* config/i386/i386-features.c (rest_of_insert_endbranch): Remove
	NOTE_INSN_DELETED_LABEL check.

gcc/testsuite/

	PR target/89355
	* gcc.target/i386/cet-label-3.c: New test.
	* gcc.target/i386/cet-label-4.c: Likewise.
	* gcc.target/i386/cet-label-5.c: Likewise.

Co-Authored-By: Hongtao Liu <hongtao.liu@intel.com>

From-SVN: r271828
2019-05-31 16:59:16 -07:00
Gerald Pfeifer
d030d4c5a4 * doc/xml/manual/allocator.xml: Move hoard.org back to http.
From-SVN: r271827
2019-05-31 22:26:55 +00:00
Jeff Law
29c1593246 mips.c (mips_expand_builtin_insn): Swap the 1st and 3rd operands of the fmadd/fmsub/maddv builtin.
* config/mips/mips.c (mips_expand_builtin_insn): Swap the 1st
	and 3rd operands of the fmadd/fmsub/maddv builtin.

	* gcc.target/mips/msa-fmadd.c: New.

From-SVN: r271826
2019-05-31 15:40:25 -06:00
Jakub Jelinek
e7393c8936 tree.h (OMP_CLAUSE__CONDTEMP__ITER): Define.
* tree.h (OMP_CLAUSE__CONDTEMP__ITER): Define.
	* gimplify.c (gimplify_scan_omp_clauses): Allow lastprivate conditional
	on OMP_SIMD if not nested inside of worksharing loop that also has
	lastprivate conditional clause for the same decl.
	(gimplify_omp_for): Add _condtemp_ clauses to OMP_SIMD if needed.
	* omp-low.c (scan_sharing_clauses): Handle OMP_CLAUSE__CONDTEMP_ also
	on simd.
	(lower_rec_input_clauses): Likewise.  Handle lastprivate conditional
	on simd construct.
	(lower_lastprivate_conditional_clauses): Handle lastprivate conditional
	on simd construct.
	(lower_lastprivate_clauses): Likewise.
	(lower_omp_sections): Call lower_lastprivate_conditional_clauses before
	calling lower_rec_input_clauses.
	(lower_omp_for): Likewise.
	(lower_omp_1): Use first rather than second OMP_CLAUSE__CONDTEMP_
	clause on simd construct.
	* omp-expand.c (expand_omp_simd): Initialize cond_var if
	OMP_CLAUSE__CONDTEMP_ clause is present.

	* c-c++-common/gomp/lastprivate-conditional-2.c (foo): Don't expect
	a sorry on lastprivate conditional on simd construct.
	* gcc.dg/vect/vect-simd-6.c: New test.
	* gcc.dg/vect/vect-simd-7.c: New test.

From-SVN: r271825
2019-05-31 23:38:35 +02:00
Jakub Jelinek
1ce8fc63a4 omp-low.c (lower_rec_simd_input_clauses): Set TREE_THIS_NOTRAP on ivar and lvar.
* omp-low.c (lower_rec_simd_input_clauses): Set TREE_THIS_NOTRAP on
	ivar and lvar.

	* gcc.dg/vect/vect-simd-5.c: New test.

From-SVN: r271824
2019-05-31 23:37:10 +02:00
Ian Lance Taylor
2099d44658 runtime: drop unused C type reflection code
In particular, drop __go_type_descriptors_equal, which is no longer
    used, and will be made obsolete by CL 179598.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/179858

From-SVN: r271823
2019-05-31 21:32:47 +00:00
Ian Lance Taylor
6303331c33 compiler: optimize append of make
The gc compiler recognizes append(s, make([]T, n)...), and
    generates code to directly zero the tail instead of allocating a
    new slice and copying. This CL lets the Go frontend do basically
    the same.
    
    The difficulty is that at the point we handle append, there may
    already be temporaries introduced (e.g. in order_evaluations),
    which makes it hard to find the append-of-make pattern. The
    compiler could "see through" the value of a temporary, but it is
    only safe to do if the temporary is not assigned multiple times.
    For this, we add tracking of assignments and uses for temporaries.
    
    This also helps in optimizing non-escape slice make. We already
    optimize non-escape slice make with constant len/cap to stack
    allocation. But it failed to handle things like f(make([]T, n))
    (where the slice doesn't escape and n is constant), because of
    the temporary. With tracking of temporary assignments and uses,
    it can handle this now as well.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/179597

From-SVN: r271822
2019-05-31 21:18:39 +00:00
Ian Lance Taylor
2b5360d747 compiler: handle int-to-string conversion with large integer constant
Currently, Type_conversion_expression::do_is_constant thinks the
    int-to-string conversion is constant if the integer operand is
    constant, but Type_conversion_expression::do_get_backend actually
    generates a call to runtime.intstring if the integer does not fit
    in a "ushort", which makes it not suitable in constant context,
    such as static initializer.
    
    This CL makes it handle all constant integer input as constant,
    generating constant string.
    
    Fixes golang/go#32347.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/179777

From-SVN: r271821
2019-05-31 19:45:37 +00:00
Xiong Hu Luo
f2c2c4e302 re PR c/43673 (Incorrect warning: use of 'D' length modifier with 'a' type character)
PR c/43673
	* c-format.c (print_char_table, scanf_char_table): Replace BADLEN with
	TEX_D32, TEX_D64 or TEX_D128.

	PR c/43673
	* gcc.dg/format-dfp-printf-1.c: New test.
	* gcc.dg/format-dfp-scanf-1.c: Likewise.

From-SVN: r271820
2019-05-31 12:46:02 -06:00
Michael Forney
2a1c064a94 cp-demangle.c: Don't define CP_DYNAMIC_ARRAYS if __STDC_NO_VLA__ is non-zero.
* cp-demangle.c: Don't define CP_DYNAMIC_ARRAYS if __STDC_NO_VLA__
	is non-zero.

From-SVN: r271819
2019-05-31 12:25:48 -06:00
Ian Lance Taylor
4d12cf3cc3 runtime: implement cheaper context switch on Linux/AMD64
Currently, goroutine switches are implemented with libc
    getcontext/setcontext functions, which saves/restores the machine
    register states and also the signal context. This does more than
    what we need, and performs an expensive syscall.
    
    This CL implements a simplified version of getcontext/setcontext,
    in assembly, that only saves/restores the necessary part, i.e.
    the callee-save registers, and the PC, SP. A simplified version
    of makecontext, written in C, is also added. Currently this is
    only implemented on Linux/AMD64.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/178298

From-SVN: r271818
2019-05-31 17:56:36 +00:00
Marc Glisse
34a13a521e apply unary op to both sides of (vec_cond x cst1 cst2)
2019-05-31  Marc Glisse  <marc.glisse@inria.fr>

gcc/
	* match.pd (~(vec?cst1:cst2)): New transformation.

gcc/testsuite/
	* g++.dg/tree-ssa/cprop-vcond.C: New file.

From-SVN: r271817
2019-05-31 17:04:20 +00:00
Marc Glisse
9cf60d3b0d Simplify more EXACT_DIV_EXPR comparisons
2019-05-31  Marc Glisse  <marc.glisse@inria.fr>

gcc/
	* match.pd (X/[ex]D<Y/[ex]D): Handle negative denominator.
	((size_t)(A /[ex] B) CMP C): New transformation.

gcc/testsuite/
	* gcc.dg/tree-ssa/cmpexactdiv-3.c: New file.
	* gcc.dg/tree-ssa/cmpexactdiv-4.c: New file.
	* gcc.dg/Walloca-13.c: Xfail.

From-SVN: r271816
2019-05-31 16:54:30 +00:00
Richard Sandiford
f4fde1b378 New .md construct: define_insn_and_rewrite
Several SVE patterns need define_insn_and_splits that generate the
same insn_code, but with different operands.  That's probably a
niche requirement, but it's cropping up often enough on the ACLE
branch that I think it would be good to have a syntactic sugar for it.

This patch therefore adds a new construct called define_insn_and_rewrite.
It's basically a define_insn_and_split with an implicit split pattern,
obtained by copying the insn pattern and replacing match_operands with
match_dups and match_operators with match_op_dups.

2019-05-31  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* doc/md.texi: Document define_insn_and_rewrite.
	* rtl.def (DEFINE_INSN_AND_REWRITE): New rtx code.
	* gensupport.c (queue_elem): Update comment.
	(replace_operands_with_dups): New function.
	(gen_rewrite_sequence): Likewise.
	(process_rtx): Handle DEFINE_INSN_AND_REWRITE.
	* read-rtl.c (apply_subst_iterator): Likewise.
	(add_condition_to_rtx, named_rtx_p): Likewise.
	(rtx_reader::read_rtx_operand): Likewise.
	* config/aarch64/aarch64-sve.md
	(while_ult<GPI:mode><PRED_ALL:mode>_cc): Rename to...
	(*while_ult<GPI:mode><PRED_ALL:mode>_cc): ...this and use
	define_insn_and_rewrite.
	(*cond_<optab><mode>_any): Turn into define_insn_and_rewrites.
	Remove separate define_split.

From-SVN: r271815
2019-05-31 16:27:49 +00:00
Jonathan Wakely
b1bb4869e2 Add noexcept to tuple<> and simplify tuple<T1,T2> noexcept-specifiers
* include/std/tuple (tuple<>): Add noexcept to allocator-extended
	constructors.
	(tuple<T1, T2>::__nothrow_default_constructible()): New helper
	function.
	(tuple<T1, T2>::tuple(), explicit tuple<T1, T2>::tuple()): Use helper.

From-SVN: r271814
2019-05-31 15:58:05 +01:00
Jan Hubicka
1facd6278b tree-ssa-alias.c (type_has_components_p): New function.
* tree-ssa-alias.c (type_has_components_p): New function.
	(aliasing_component_refs_p): Use it.

From-SVN: r271813
2019-05-31 14:16:27 +00:00
Jonathan Wakely
ff0b7e883d Fix breakage due to removing __gnu_cxx::size_t declaration
Restore the using-declaration but locally in the source file, not in the
header.

	* src/c++98/bitmap_allocator.cc: Add using-declaration for size_t.

From-SVN: r271812
2019-05-31 14:59:19 +01:00
Nathan Sidwell
ca3edeaed6 [C++PATCH] Lambda names are anonymous
https://gcc.gnu.org/ml/gcc-patches/2019-05/msg02126.html
	* cp-tree.h (IDENTIFIER_LAMBDA_P): New.
	(TYPE_ANON_P): New.
	(LAMBDA_TYPE_P, TYPE_UNNAMED_P):  Likewise.
	(LAMBDANAME_PREFIX, LAMBDANAME_FORMAT): Delete.
	(make_lambda_name): Don't declare.
	* error.c (dump_aggr_type): Check for lambdas before other
	anonymous names.
	* lambda.c (begin_lambda_type): Use make_anon_name.
	* cp-lang.c (cxx_dwarf_name): Lambda names smell anonymous.
	* mangle.c (write_local_name): Likewise.
	* name-lookup.c (lambda_cnt, make_lambda_name): Delete.

From-SVN: r271811
2019-05-31 13:25:46 +00:00
Bill Schmidt
929c046d57 cpu-future.c: Require powerpc_future_ok.
2019-05-31  Bill Schmidt  <wschmidt@linux.ibm.com>
	    Michael Meissner  <meissner@linux.ibm.com>

	* gcc.target/powerpc/cpu-future.c: Require powerpc_future_ok.
	* gcc.target/powerpc/localentry-1.c: Likewise.
	* gcc.target/powerpc/localentry-direct-1.c: Likewise.
	* gcc.target/powerpc/notoc-direct-1.c: Likewise.
	* gcc.target/powerpc/pcrel-sibcall-1.c: Likewise.
	* lib/target-supports.exp (check_powerpc_future_hw_available): New.
	(check_effective_target_powerpc_future_ok): New.


Co-Authored-By: Michael Meissner <meissner@linux.ibm.com>

From-SVN: r271810
2019-05-31 12:22:52 +00:00
Jonathan Wakely
3228289e1e PR libstdc++/90682 allow set_terminate(0) and set_unexpected(0)
Make these functions restore the default handlers when passed a null
pointer. This is consistent with std::pmr::set_default_resource(0), and
also matches the current behaviour of libc++.

In order to avoid duplicating the preprocessor condition from
eh_term_handler.cc more that into a new eh_term_handler.h header and
define a macro that can be used in both eh_term_handler.cc and
eh_terminate.cc.

	PR libstdc++/90682
	* libsupc++/eh_term_handler.cc: Include eh_term_handler.h to get
	definition of _GLIBCXX_DEFAULT_TERM_HANDLER.
	* libsupc++/eh_term_handler.h: New header defining
	_GLIBCXX_DEFAULT_TERM_HANDLER.
	* libsupc++/eh_terminate.cc: Include eh_term_handler.h.
	(set_terminate): Restore default handler when argument is null.
	(set_unexpected): Likewise.
	* testsuite/18_support/set_terminate.cc: New test.
	* testsuite/18_support/set_unexpected.cc: New test.

From-SVN: r271808
2019-05-31 11:35:11 +01:00
Jonathan Wakely
3263fb9c6b Remove using-declarations that add std names to __gnu_cxx
These using-declarations appear to have been added for simplicity when
moving the non-standard extensions from namespace std to namespace
__gnu_cxx. Dumping all these names into namespace __gnu_cxx allows
unportable uses like __gnu_cxx::size_t and __gnu_cxx::pair, which serve
no useful purpose.

This patch removes most of the using-declarations from namespace scope,
then either qualifies names as needed or adds using-declarations at
block scope or typedefs at class scope.

	* include/backward/hashtable.h (size_t, ptrdiff_t)
	(forward_iterator_tag, input_iterator_tag, _Construct, _Destroy)
	(distance, vector, pair, __iterator_category): Remove
	using-declarations that add these names to namespace __gnu_cxx.
	* include/ext/bitmap_allocator.h (size_t, ptrdiff_t): Likewise.
	* include/ext/debug_allocator.h (size_t): Likewise.
	* include/ext/functional (size_t, unary_function, binary_function)
	(mem_fun1_t, const_mem_fun1_t, mem_fun1_ref_t, const_mem_fun1_ref_t):
	Likewise.
	* include/ext/malloc_allocator.h (size_t, ptrdiff_t): Likewise.
	* include/ext/memory (ptrdiff_t, pair, __iterator_category): Likewise.
	* include/ext/mt_allocator.h (size_t, ptrdiff_t): Likewise.
	* include/ext/new_allocator.h (size_t, ptrdiff_t): Likewise.
	* include/ext/numeric (iota): Fix outdated comment.
	* include/ext/pool_allocator.h (size_t, ptrdiff_t): Likewise.
	* include/ext/rb_tree (_Rb_tree, allocator): Likewise.
	* include/ext/rope (size_t, ptrdiff_t, allocator, _Destroy): Likewise.
	* include/ext/ropeimpl.h (size_t, printf, basic_ostream)
	(__throw_length_error, _Destroy, std::__uninitialized_fill_n_a):
	Likewise.
	* include/ext/slist (size_t, ptrdiff_t, _Construct, _Destroy)
	(allocator, __true_type, __false_type): Likewise.

From-SVN: r271807
2019-05-31 11:35:07 +01:00
Antony Polukhin
608a080c3f PR libstdc++/71579 assert that type traits are not misused with incomplete types
This patch adds static asserts for type traits misuse with incomplete
classes and unions. This gives a nice readable error message instead
of an UB and odr-violations.

Some features of the patch:
* each type trait has it's own static_assert inside. This gives better
diagnostics than the approach with putting the assert into a helper
structure and using it in each trait.
* the result of completeness check is not memorized by the compiler.
This gives no false positive after the first failed check.
* some of the compiler builtins already implement the check. But not
all of them! So the asserts are in all the type_traits that may
benefit from the check. This also makes the behavior of libstdc++ more
consistent across different (non GCC) compilers.
* std::is_base_of does not have the assert as it works well in many
cases with incomplete types

2019-05-31  Antony Polukhin  <antoshkka@gmail.com>

	PR libstdc++/71579
	* include/std/type_traits __type_identity, __is_complete_or_unbounded):
	New helpers for checking preconditions in traits.
	(is_trivial, is_trivially_copyable, is_standard_layout, is_pod)
	(is_literal_type, is_empty, is_polymorphic, is_final, is_abstract)
	(is_destructible, is_nothrow_destructible, is_constructible)
	(is_default_constructible, is_copy_constructible)
	(is_move_constructible, is_nothrow_default_constructible)
	(is_nothrow_constructible, is_nothrow_copy_constructible)
	(is_nothrow_move_constructible, is_copy_assignable, is_move_assignable)
	(is_nothrow_assignable, is_nothrow_copy_assignable)
	(is_nothrow_move_assignable, is_trivially_constructible)
	(is_trivially_copy_constructible, is_trivially_move_constructible)
	is_trivially_assignable, is_trivially_copy_assignable)
	(is_trivially_move_assignable, is_trivially_destructible)
	(alignment_of, is_swappable, is_nothrow_swappable, is_invocable)
	(is_invocable_r, is_nothrow_invocable)
	(has_unique_object_representations, is_aggregate): Add static_asserts
	to make sure that type traits are not misused with incomplete types.
	(__is_constructible_impl, __is_nothrow_default_constructible_impl)
	(__is_nothrow_constructible_impl, __is_nothrow_assignable_impl): New
	base characteristics without assertions that can be reused in other
	traits.
	* testsuite/20_util/is_complete_or_unbounded/memoization.cc: New test.
	* testsuite/20_util/is_complete_or_unbounded/memoization_neg.cc: New
	test.
	* testsuite/20_util/is_complete_or_unbounded/value.cc: New test.
	* testsuite/20_util/is_abstract/incomplete_neg.cc: New test.
	* testsuite/20_util/is_aggregate/incomplete_neg.cc: New test.
	* testsuite/20_util/is_class/value.cc: Check incomplete type.
	* testsuite/20_util/is_function/value.cc: Likewise.
	* testsuite/20_util/is_move_constructible/incomplete_neg.cc: New test.
	* testsuite/20_util/is_nothrow_move_assignable/incomplete_neg.cc: New
	test.
	* testsuite/20_util/is_polymorphic/incomplete_neg.cc: New test.
	* testsuite/20_util/is_reference/value.cc: Check incomplete types.
	* testsuite/20_util/is_unbounded_array/value.cc: Likewise.
	* testsuite/20_util/is_union/value.cc: Likewise.
	* testsuite/20_util/is_void/value.cc: Likewise.
	* testsuite/util/testsuite_tr1.h: Add incomplete union type.

From-SVN: r271806
2019-05-31 11:35:03 +01:00
Jonathan Wakely
aeedf07705 Fix random_device to work with COW strings again
Instead of duplicating the initialization functions that take string,
add a new member taking a raw pointer that can be used to convert the
constructor token from the old string to the new.

Also fix "mt19337" typos in a testcase.

	* include/bits/random.h (random_device::_M_init(const char*, size_t)):
	Add new private member function.
	* src/c++11/cow-string-inst.cc (random_device::_M_init(const string&))
	(random_device::_M_init_pretr1(const string&)): Call new private
	member with string data.
	* src/c++11/random.cc (random_device::_M_init(const char*, size_t)):
	Define.
	* testsuite/26_numerics/random/random_device/cons/default-cow.cc: New
	test using COW strings.
	* testsuite/26_numerics/random/random_device/cons/default.cc: Generate
	a value from the device.
	* testsuite/26_numerics/random/random_device/cons/token.cc: Likewise.
	Fix typo in token string.

From-SVN: r271805
2019-05-31 11:34:53 +01:00
Martin Liska
decc53df4e Add pretty print for const_tree.
2019-05-31  Martin Liska  <mliska@suse.cz>

	* gdbhooks.py: Add const_tree to TreePrinter.

From-SVN: r271804
2019-05-31 10:33:14 +00:00
Thomas De Schampheleire
d1137c020a re PR debug/86964 (Too many debug symbols included, especially for extern globals)
2019-05-31  Thomas De Schampheleire  <thomas.de_schampheleire@nokia.com>

	PR debug/86964
	* common.opt (feliminate-unused-debug-symbols): Enable by default.
	* doc/invoke.texi (Debugging Options): Document new default of
	-feliminate-unused-debug-symbols and remove restriction to 'stabs'.

	* g++.dg/debug/dwarf2/fesd-any.C: Use
	-fno-eliminate-unused-debug-symbols.
	* g++.dg/debug/dwarf2/fesd-baseonly.C: Likewise.
	* g++.dg/debug/dwarf2/fesd-none.C: Likewise.
	* g++.dg/debug/dwarf2/fesd-reduced.C: Likewise.
	* g++.dg/debug/dwarf2/fesd-sys.C: Likewise.
	* g++.dg/debug/dwarf2/inline-var-1.C: Likewise.
	* g++.dg/debug/enum-2.C: Likewise.
	* gcc.dg/debug/dwarf2/fesd-any.c: Likewise.
	* gcc.dg/debug/dwarf2/fesd-baseonly.c: Likewise.
	* gcc.dg/debug/dwarf2/fesd-none.c: Likewise.
	* gcc.dg/debug/dwarf2/fesd-reduced.c: Likewise.
	* gcc.dg/debug/dwarf2/fesd-sys.c: Likewise.

From-SVN: r271803
2019-05-31 08:22:14 +00:00