Commit Graph

176729 Commits

Author SHA1 Message Date
Mark Wielaard 2221fb6f66 analyzer: Add exit, and _exit replacement, to sm-signal.
Warn about using exit in signal handler and suggest _exit as alternative.

gcc/analyzer/ChangeLog:

	* sm-signal.cc(signal_unsafe_call::emit): Possibly add
	gcc_rich_location note for replacement.
	(signal_unsafe_call::get_replacement_fn): New private function.
	(get_async_signal_unsafe_fns): Add "exit".

gcc/testsuite/ChangeLog:

	* gcc.dg/analyzer/signal-exit.c: New testcase.
2020-05-22 21:02:34 +02:00
Jan Hubicka dc50686d78 Silence warning introduced by my previous change.
* lto-streamer-out.c (DFS::DFS): Silence warning.
2020-05-22 18:17:14 +02:00
Uros Bizjak 1a03000385 i386: Fix <rounding_insn><mode>2 expander [PR95255]
2020-05-22  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:
	PR target/95255
	* config/i386/i386.md (<rounding_insn><mode>2): Do not try to
	expand non-sse4 ROUND_ROUNDEVEN rounding via SSE support routines.

gcc/testsuite/ChangeLog:
	PR target/95255
	* gcc.target/i386/pr95255.c: New test.
2020-05-22 18:02:49 +02:00
Jan Hubicka bcb63eb2cb Avoid streaming stray references.
this patch avoids stremaing completely useless stray references to gobal decl
stream.  I am re-testing the patch (rebased to current tree) on x86_64-linux
and intend to commit once testing finishes.

gcc/ChangeLog:

2020-05-22  Jan Hubicka  <hubicka@ucw.cz>

	* lto-streamer-out.c (lto_output_tree): Do not stream final ref if
	it is not needed.

gcc/lto/ChangeLog:

2020-05-22  Jan Hubicka  <hubicka@ucw.cz>

	* lto-common.c (lto_read_decls): Do not skip stray refs.
2020-05-22 16:37:06 +02:00
Jan Hubicka 098ba49c7c Add debug dump for integer_cst streaming.
* tree-streamer-out.c (streamer_write_integer_cst): Add debug dump.
2020-05-22 16:31:21 +02:00
Jan Hubicka 0896cc4276 Improve LTO streaming dumps
this patch cleans up dumping of streaming so it is clear how dump is organized
and how much space individual components needs.

Compiling:

int a=1;
main()
{
  return a;
}

The output is now:

Creating output block for function_body
    Streaming tree  <result_decl 0x7ffff7457a50 D.1931>
     Start of LTO_trees of size 1
      Encoding indexable  <integer_type 0x7ffff7463000 sizetype>  as 0
     10 bytes

^^^ I do not think we should need 10 bytes to stream single indexable reference
to 0 :)

     Start of LTO_trees of size 1
      Encoding indexable  <integer_type 0x7ffff74630a8 bitsizetype>  as 1
     10 bytes
      Streaming header of  <result_decl 0x7ffff7457a50 D.1931>  to function_body
      Streaming body of  <result_decl 0x7ffff7457a50 D.1931>  to function_body
      Encoding indexable  <integer_type 0x7ffff74635e8 int>  as 2
      Encoding indexable  <function_decl 0x7ffff757b500 main>  as 0
      Streaming ref to  <integer_cst 0x7ffff744af18 32>
      Streaming ref to  <integer_cst 0x7ffff744af30 4>
    52 bytes

^^^ Instead of having multiple LTO_trees sections followed by the final tree
it would make a lot of sense to have only one LTO_trees where the first tree
is one lto_input_tree should return.  This is easy to arrange in DFS walk -
one does not need to pop after every SCC component but pop once at the end of
walk.  However this breaks handling of integer_csts because they may now
become of LTO_trees block and streamed as header + body.
This bypasses the separate code for shared integer_cst streaming.  I think
I want to stream everything into header and materialize the tree since it is not
part of SCC anyway.

    Streaming tree  <block 0x7ffff757e420>
      Streaming header of  <block 0x7ffff757e420>  to function_body
      Streaming body of  <block 0x7ffff757e420>  to function_body
    8 bytes
  Streaming gimple stmt _2 = a;
    Streaming ref to  <block 0x7ffff757e420>
    4 bytes
    Streaming tree  <mem_ref 0x7ffff7576f78>
     Start of LTO_trees of size 1
      Encoding indexable  <pointer_type 0x7ffff746b9d8>  as 3
     10 bytes
     Start of LTO_trees of size 1
      Streaming header of  <addr_expr 0x7ffff75893c0>  to function_body
      Streaming body of  <addr_expr 0x7ffff75893c0>  to function_body
      Encoding indexable  <var_decl 0x7ffff7fcfb40 a>  as 0
     15 bytes
      Streaming header of  <mem_ref 0x7ffff7576f78>  to function_body
      Streaming body of  <mem_ref 0x7ffff7576f78>  to function_body
      Streaming ref to  <addr_expr 0x7ffff75893c0>
      Streaming ref to  <integer_cst 0x7ffff75a3240 0>
    42 bytes
  Streaming gimple stmt return _2;

Outputting global stream
 0:  <function_decl 0x7ffff757b500 main>
    Streaming tree  <function_decl 0x7ffff757b500 main>
     Start of LTO_tree_scc of size 1
      Streaming header of  <optimization_node 0x7ffff744b000>  to decls
      Streaming body of  <optimization_node 0x7ffff744b000>  to decls
     576 bytes
     Start of LTO_tree_scc of size 1
      Streaming header of  <target_option_node 0x7ffff744a018>  to decls
      Streaming body of  <target_option_node 0x7ffff744a018>  to decls
     68 bytes
     Streaming single tree
      Streaming header of  <identifier_node 0x7ffff7577aa0 main>  to decls
      Streaming body of  <identifier_node 0x7ffff7577aa0 main>  to decls
     3 bytes
     Streaming single tree
      Streaming header of  <identifier_node 0x7ffff758a8c0 t.c>  to decls
      Streaming body of  <identifier_node 0x7ffff758a8c0 t.c>  to decls
     3 bytes
     Streaming single tree
      Streaming header of  <translation_unit_decl 0x7ffff7457ac8 t.c>  to decls
      Streaming body of  <translation_unit_decl 0x7ffff7457ac8 t.c>  to decls
      Streaming ref to  <identifier_node 0x7ffff758a8c0 t.c>
     22 bytes
     Start of LTO_tree_scc of size 1
      Streaming header of  <function_type 0x7ffff74717e0>  to decls
      Streaming body of  <function_type 0x7ffff74717e0>  to decls
      Streaming ref to  <integer_type 0x7ffff74635e8 int>
      Streaming ref to  <integer_cst 0x7ffff744adc8 8>
      Streaming ref to  <integer_cst 0x7ffff744ade0 1>
      Streaming ref to  <function_type 0x7ffff74717e0>
     38 bytes
     Start of LTO_tree_scc of size 1
      Streaming header of  <function_type 0x7ffff75832a0>  to decls
      Streaming body of  <function_type 0x7ffff75832a0>  to decls
      Streaming ref to  <integer_type 0x7ffff74635e8 int>
      Streaming ref to  <integer_cst 0x7ffff744adc8 8>
      Streaming ref to  <integer_cst 0x7ffff744ade0 1>
      Streaming ref to  <function_type 0x7ffff74717e0>
     38 bytes
     Start of LTO_tree_scc of size 1
      Streaming header of  <function_decl 0x7ffff757b500 main>  to decls
      Streaming body of  <function_decl 0x7ffff757b500 main>  to decls
      Streaming ref to  <function_type 0x7ffff75832a0>
      Streaming ref to  <identifier_node 0x7ffff7577aa0 main>
      Streaming ref to  <translation_unit_decl 0x7ffff7457ac8 t.c>
      Streaming ref to  <identifier_node 0x7ffff7577aa0 main>
      Streaming ref to  <target_option_node 0x7ffff744a018>
      Streaming ref to  <optimization_node 0x7ffff744b000>
     58 bytes
    806 bytes
 0:  <var_decl 0x7ffff7fcfb40 a>
    Streaming tree  <var_decl 0x7ffff7fcfb40 a>
     Streaming single tree
      Streaming header of  <identifier_node 0x7ffff758a870 a>  to decls
      Streaming body of  <identifier_node 0x7ffff758a870 a>  to decls
     3 bytes
     Streaming single tree
      Streaming ref to  <integer_type 0x7ffff7463000 sizetype>
     7 bytes
     Streaming single tree
      Streaming ref to  <integer_type 0x7ffff74630a8 bitsizetype>
     7 bytes
     Start of LTO_tree_scc of size 1
      Streaming header of  <var_decl 0x7ffff7fcfb40 a>  to decls
      Streaming body of  <var_decl 0x7ffff7fcfb40 a>  to decls
      Streaming ref to  <integer_type 0x7ffff74635e8 int>
      Streaming ref to  <identifier_node 0x7ffff758a870 a>
      Streaming ref to  <translation_unit_decl 0x7ffff7457ac8 t.c>
      Streaming ref to  <integer_cst 0x7ffff744af18 32>
      Streaming ref to  <integer_cst 0x7ffff744af30 4>
      Streaming ref to  <identifier_node 0x7ffff758a870 a>
      Streaming ref to  <integer_cst 0x7ffff7468090 1>
     49 bytes
    66 bytes

gcc/ChangeLog:

2020-05-22  Jan Hubicka  <hubicka@ucw.cz>

	* lto-section-out.c (lto_output_decl_index): Adjust dump indentation.
	* lto-streamer-out.c (create_output_block): Fix whitespace
	(lto_write_tree_1): Add (debug) dump.
	(DFS::DFS): Add dump.
	(DFS::DFS_write_tree_body): Do not dump here.
	(lto_output_tree): Improve dumping; do not stream ref when not needed.
	(produce_asm_for_decls): Fix whitespace.
	* tree-streamer-out.c (streamer_write_tree_header): Add dump.
2020-05-22 15:44:10 +02:00
liuhongt e740f3d731 Add missing vector truncmn2 expanders [PR92658]
2020-05-22  Hongtao.liu  <hongtao.liu@intel.com>

gcc/ChangeLog:
	PR target/92658
	* config/i386/sse.md (trunc<pmov_src_lower><mode>2): New expander
	(truncv32hiv32qi2): Ditto.
	(trunc<ssedoublemodelower><mode>2): Ditto.
	(trunc<mode><pmov_dst_3>2): Ditto.
	(trunc<mode><pmov_dst_mode_4>2): Ditto.
	(truncv2div2si2): Ditto.
	(truncv8div8qi2): Ditto.
	(avx512f_<code>v8div16qi2): Renaming from *avx512f_<code>v8div16qi2.
	(avx512vl_<code>v2div2si): Renaming from *avx512vl_<code>v2div2si2.
	(avx512vl_<code><mode>v2<ssecakarnum>qi2): Renaming
	from *avx512vl_<code><mode>v<ssescalarnum>qi2.

gcc/testsuite/ChangeLog:
	* gcc.target/i386/pr92658-avx512f.c: New test.
	* gcc.target/i386/pr92658-avx512vl.c: Ditto.
	* gcc.target/i386/pr92658-avx512bw-trunc.c: Ditto.
2020-05-22 21:30:23 +08:00
H.J. Lu 808b611bfb x86: Handle -mavx512vpopcntdq for -march=native
Add -mavx512vpopcntdq for -march=native if AVX512VPOPCNTDQ is available.

	PR target/95258
	* config/i386/driver-i386.c (host_detect_local_cpu): Detect
	AVX512VPOPCNTDQ.
2020-05-22 04:18:52 -07:00
Jakub Jelinek 5daf69cfe9 Fix up go related ignored locations.
2020-05-22  Jakub Jelinek  <jakub@redhat.com>

	* gcc-changelog/git_commit.py: Add trailing / to
	gcc/testsuite/go.test/test and replace gcc/go/frontend/
	with gcc/go/gofrontend/ in ignored locations.
2020-05-22 13:09:34 +02:00
Richard Biener 7c592aad23 tree-optimization/95268 - fix commoning of clobbers
This fixes handling of clobbers when commoning stores.

2020-05-22  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95268
	* tree-ssa-sink.c (sink_common_stores_to_bb): Handle clobbers
	properly.

	* g++.dg/torture/pr95268.C: New testcase.
2020-05-22 13:08:44 +02:00
Jan Hubicka 1089a367c4 Fix hashing of prestreamed nodes
this patch seems to solve basically all collisions while building cc1.
From:

[WPA] read 3312246 unshared trees
[WPA] read 1144381 mergeable SCCs of average size 4.833785
[WPA] 8843938 tree bodies read in total
[WPA] tree SCC table: size 524287, 197767 elements, collision ratio: 0.506446
[WPA] tree SCC max chain length 43 (size 1)
[WPA] Compared 946614 SCCs, 775077 collisions (0.818789)

to

[WPA] read 3314520 unshared trees
[WPA] read 1144763 mergeable SCCs of average size 4.835021
[WPA] 8849473 tree bodies read in total
[WPA] tree SCC table: size 524287, 200574 elements, collision ratio: 0.486418
[WPA] tree SCC max chain length 2 (size 1)
[WPA] Compared 944189 SCCs, 179 collisions (0.000190)

The problem is that preloaded nodes all have hash code 0 because
cache->nodes.length is not updated while streaming out.

I also added an arbitrary constant to avoid clash with constant of 0 used to
hash NULL pointers and 1 used to hash pointers inside SCC.

	* tree-streamer.c (record_common_node): Fix hash value of pre-streamed
	nodes.
2020-05-22 12:31:34 +02:00
Jan Hubicka 47273df0bc Simplify streaming of SCC components
this patch saves few bytes from SCC streaming.  First we stream end markers
that are fully ignored at stream in.
Second I missed streaming of emtry_len in the previous change so it is
pointlessly streamed for LTO_trees. Moreover entry_len is almost always 1
(always during gcc bootstrap) and thus it makes sense to avoid stremaing it
in majority of cases.

gcc/ChangeLog:

2020-05-21  Jan Hubicka  <hubicka@ucw.cz>

	* lto-streamer-in.c (lto_read_tree): Do not stream end markers.
	(lto_input_scc): Optimize streaming of entry lengths.
	* lto-streamer-out.c (lto_write_tree): Do not stream end markers
	(DFS::DFS): Optimize stremaing of entry lengths
2020-05-22 12:30:14 +02:00
Richard Biener ab7eca9292 lto/95190 - amend -flto docs for diagnostic option handling
This documents new GCC 10 behavior on diagnostic options and -flto.

2020-05-22  Richard Biener  <rguenther@suse.de>

	PR lto/95190
	* doc/invoke.texi (flto): Document behavior of diagnostic
	options.
2020-05-22 12:28:21 +02:00
Richard Biener 79f0451c67 enfoce SLP_TREE_VECTYPE for invariants
This tries to enforce a set SLP_TREE_VECTYPE in vect_get_constant_vectors
and provides some infrastructure for setting it in the vectorizable_*
functions, amending those.

2020-05-22  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.h (vect_is_simple_use): New overload.
	(vect_maybe_update_slp_op_vectype): New.
	* tree-vect-stmts.c (vect_is_simple_use): New overload
	accessing operands of SLP vs. non-SLP operation transparently.
	(vect_maybe_update_slp_op_vectype): New function updating
	the possibly shared SLP operands vector type.
	(vectorizable_operation): Be a bit more SLP vs non-SLP agnostic
	using the new vect_is_simple_use overload;  update SLP invariant
	operand nodes vector type.
	(vectorizable_comparison): Likewise.
	(vectorizable_call): Likewise.
	(vectorizable_conversion): Likewise.
	(vectorizable_shift): Likewise.
	(vectorizable_store): Likewise.
	(vectorizable_condition): Likewise.
	(vectorizable_assignment): Likewise.
	* tree-vect-loop.c (vectorizable_reduction): Likewise.
	* tree-vect-slp.c (vect_get_constant_vectors): Enforce
	present SLP_TREE_VECTYPE and check it matches previous
	behavior.
2020-05-22 12:26:27 +02:00
Richard Biener b6ed2e2bca tree-optimization/95248 - fix oversight in SM rewrite
This fixes a leftover early out in determining the sequence of stores
to materialize.

2020-05-22  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95248
	* tree-ssa-loop-im.c (sm_seq_valid_bb): Remove bogus early out.

	* gcc.dg/torture/pr95248.c: New testcase.
2020-05-22 11:46:40 +02:00
Martin Liska 59b282bca3
Add missing ChangeLog entry. 2020-05-22 09:01:16 +02:00
Richard Biener f8fb2ea2b1 add ctor/dtor to slp_tree
This adds constructor and destructor to slp_tree factoring common
code.  I've not changed the wrappers to overloaded CTORs since
I hope to use object_allocator<> and am not sure whether that can
be done in any fancy way yet.

2020-05-22  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.h (_slp_tree::_slp_tree): New.
	(_slp_tree::~_slp_tree): Likewise.
	* tree-vect-slp.c (_slp_tree::_slp_tree): Factor out code
	from allocators.
	(_slp_tree::~_slp_tree): Implement.
	(vect_free_slp_tree): Simplify.
	(vect_create_new_slp_node): Likewise.  Add nops parameter.
	(vect_build_slp_tree_2): Adjust.
	(vect_analyze_slp_instance): Likewise.
2020-05-22 08:51:24 +02:00
Martin Liska dc7aee01cd
Add gcc/testsuite/go.test/test to ignored locations for gcc_commit.py.
contrib/ChangeLog:

2020-05-22  Martin Liska  <mliska@suse.cz>

	* gcc-changelog/git_commit.py: Add gcc/testsuite/go.test/test
	to ignored locations.
2020-05-22 08:03:03 +02:00
GCC Administrator af288c7501 Daily bump. 2020-05-22 00:16:16 +00:00
Jason Merrill c37b1442fd c++: Check constant array bounds later.
We give a better diagnostic for non-constant array bounds in
compute_array_index_type_loc, we don't need to diagnose it in the parser.
But to avoid a regression on parse/varmod1.C we need to actually check
non-dependent expressions in a template.

gcc/cp/ChangeLog:

	* decl.c (compute_array_index_type_loc): Diagnose expressions
	in a template that can't be constant.
	* parser.c (cp_parser_direct_declarator): Don't check
	non-constant array bounds here.

gcc/testsuite/ChangeLog:

	* c-c++-common/gomp/depend-iterator-2.c: Adjust.
	* g++.dg/ext/vla1.C: Adjust.
	* g++.dg/template/array9.C: Adjust.
	* g++.dg/template/error41.C: Adjust.
2020-05-21 18:04:22 -04:00
Jason Merrill beb019d346 c++: Constant expression parsing and parameters.
The difference between a "potential" constant-expression and a regular
constant-expression is the treatment of parameters; in a constexpr function,
a parameter is potentially constant when evaluating a call to that function,
but it is not constant during parsing of the function.
cp_parser_constant_expression should check the latter rather than the
former.

gcc/cp/ChangeLog:

	* cp-tree.h (is_rvalue_constant_expression): Declare.
	* constexpr.c (is_rvalue_constant_expression): New.
	* parser.c (cp_parser_constant_expression): Use it.
	* decl.c (cp_finish_decl): Try to treat a constexpr initializer in a
	template as constant.
2020-05-21 18:04:22 -04:00
Jason Merrill 4f602147b6 c++: Improve error recovery for =.
In a template we were happily embedding error_mark_node in a MODOP_EXPR,
leading to confusion later.

gcc/cp/ChangeLog:

	* typeck.c (build_x_modify_expr): Handle error_mark_node arguments.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/lambda/lambda-ice30.C: Adjust.
	* g++.dg/cpp0x/lambda/lambda-ice31.C: Adjust.
	* g++.dg/ext/fixed1.C: Adjust.
	* g++.dg/template/crash107.C: Adjust.
	* g++.dg/template/error35.C: Adjust.
	* g++.dg/template/sizeof-template-argument.C: Adjust.
2020-05-21 18:04:22 -04:00
Jason Merrill f7272c8a03 c++: Improve error-recovery for parms.
If a parameter is erroneous, we currently drop it, leading to "too many
arguments" errors later.  Treating the function as (...) avoids those
errors.

gcc/cp/ChangeLog:

	* decl.c (grokparms): Return NULL_TREE if any parms were erroneous.

gcc/testsuite/ChangeLog:

	* g++.dg/parse/error33.C: Adjust.
2020-05-21 18:04:21 -04:00
Iain Sandoe f898793b45 coroutines: Partial reversion of r11-437-g5ef067eb14d4.
co_returns are statements, not expressions; they do not need
to be wrapped in an EXPR_STMT.

gcc/cp/ChangeLog:

	* coroutines.cc (finish_co_return_stmt): Revert change to use
	finish_expr_stmt.
2020-05-21 19:55:26 +01:00
Rainer Orth 149c8c7c27 Include memmodel.h in adjust-alignment.c
Commit dfa4fcdba3 broke SPARC bootstrap:

In file included from ./tm_p.h:4,
                 from /vol/gcc/src/hg/master/local/gcc/adjust-alignment.c:28:
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc-protos.h:45:47: error: use of enum 'memmodel' without previous declaration
 extern void sparc_emit_membar_for_model (enum memmodel, int, int);
                                               ^~~~~~~~

Fixed by including memmodel.h.  Bootstrapped on sparc-sun-solaris2.11
and i386-pc-solaris2.11.

2020-05-21  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	gcc/
	* adjust-alignment.c: Include memmodel.h.
2020-05-21 17:02:18 +02:00
H.J. Lu a74630f320 config/i386/cpuid.h: Use hexadecimal in comments
Since Intel SDM uses hexadecimal, use hexadecimal in comments.

	PR target/95260
	* config/i386/cpuid.h: Use hexadecimal in comments.
2020-05-21 07:19:27 -07:00
Matthias Kretz bc7a4f2f9e libstdc++: Enable simple invocation of runtest in testsuite
2020-05-21  Matthias Kretz  <kretz@kde.org>

	* testsuite/Makefile.am: Remove dup target_triplet and set tool,
	allowing runtest to work without arguments.
	* testsuite/Makefile.in: Regenerate.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
2020-05-21 14:16:19 +01:00
Patrick Palka f65a3299a5 c++: template instantiation during fold_for_warn [PR94038]
Unfortunately, the previous fix to PR94038 is fragile.  When the
argument to fold_for_warn is a bare CALL_EXPR, then all is well: the
result of maybe_constant_value from fold_for_warn (with
uid_sensitive=true) is reused via the cv_cache in the subsequent call to
maybe_constant_value from cp_fold (with uid_sensitive=false), so we
avoid instantiating bar<int>.

But when the argument to fold_for_warn is more complex, e.g. an
INDIRECT_REF of a CALL_EXPR, as in the testcase below (due to bar<int>()
returning const int& which we need to decay to int) then from
fold_for_warn we call maybe_constant_value on the INDIRECT_REF, and from
cp_fold we call it on the CALL_EXPR, so there is no reuse via the
cv_cache and we therefore end up instantiating bar<int>.

So for a more robust solution to this general issue of warning flags
affecting code generation, it seems that we need a way to globally avoid
template instantiation during constexpr evaluation whenever we're
performing warning-dependent folding.

To that end, this patch replaces the flag constexpr_ctx::uid_sensitive
with a global flag uid_sensitive_constexpr_evaluation_p, and enables it
during fold_for_warn using an RAII helper.

The patch also adds a counter that keeps track of the number of times
uid_sensitive_constexpr_evaluation_p is called and returned true, and we
use this to determine whether the result of constexpr evaluation
was restricted by the flag.  This lets us safely update the cv_cache and
fold_cache from fold_for_warn in the most common case where the flag
did not restrict constexpr evaluation.

gcc/cp/ChangeLog:

	PR c++/94038
	* constexpr.c (constexpr_ctx::uid_sensitive): Remove field.
	(uid_sensitive_constexpr_evaluation_value): Define.
	(uid_sensitive_constexpr_evaluation_true_counter): Define.
	(uid_sensitive_constexpr_evaluation_p): Define.
	(uid_sensitive_constexpr_evaluation_sentinel): Define its
	constructor.
	(uid_sensitive_constexpr_evaluation_checker): Define its
	constructor and its evaluation_restricted_p method.
	(get_fundef_copy): Remove 'ctx' parameter.  Use u_s_c_e_p
	instead of constexpr_ctx::uid_sensitive.
	(cxx_eval_call_expression): Use u_s_c_e_p instead, and test it
	last.  Adjust call to get_fundef_copy.
	(instantiate_cx_fn_r): Test u_s_c_e_p so that we increment the
	counter if necessary.
	(cxx_eval_outermost_constant_expr): Remove 'uid_sensitive'
	parameter.  Adjust function body accordingly.
	(maybe_constant_value): Remove 'uid_sensitive' parameter and
	adjust function body accordingly.  Set up a
	uid_sensitive_constexpr_evaluation_checker, and use it to
	conditionally update the cv_cache.
	* cp-gimplify.c (cp_fold): Set up a
	uid_sensitive_constexpr_evaluation_checker, and use it to
	conditionally update the fold_cache.
	* cp-tree.h (maybe_constant_value): Update declaration.
	(struct uid_sensitive_constexpr_evaluation_sentinel): Define.
	(struct sensitive_constexpr_evaluation_checker): Define.
	* expr.c (fold_for_warn): Set up a
	uid_sensitive_constexpr_evaluation_sentinel before calling
	the folding subroutines.  Drop all but the first argument to
	maybe_constant_value.

gcc/testsuite/ChangeLog:

	PR c++/94038
	* g++.dg/warn/pr94038-2.C: New test.
2020-05-21 09:03:43 -04:00
H.J. Lu 5855bdfa06 libgcc: Move FEATURE_AVX512VP2INTERSECT after FEATURE_AVX512BF16
Move FEATURE_AVX512VP2INTERSECT after FEATURE_AVX512BF16 to avoid
changing libgcc ABI.

gcc/

	PR target/95212
	* config/i386/i386-builtins.c (processor_features): Move
	F_AVX512VP2INTERSECT after F_AVX512BF16.
	(isa_names_table): Likewise.

libgcc/

	PR target/95212
	* config/i386/cpuinfo.h (processor_features): Move
	FEATURE_AVX512VP2INTERSECT after FEATURE_AVX512BF16.
2020-05-21 05:33:11 -07:00
Martin Liska 2f20c7040f
Fix a test-case warning.
PR target/95229
	* g++.target/i386/pr95229.C: Fix
	error: unnamed type with no linkage used
	to declare variable ‘<unnamed class> e’ with linkage
	with -std=gnu++98.
2020-05-21 14:21:31 +02:00
Nathan Sidwell ea097d141e Remove accidental testcase commit
* c-c++-common/cpp/cmd-1.c: Delete.
	* c-c++-common/cpp/cmd-1.h: Delete.
2020-05-21 05:10:52 -07:00
H.J. Lu 8ebc2f5e05 libgfortran: Use __builtin_cpu_is/__builtin_cpu_supports
* m4/matmul.m4: Don't include <config/i386/cpuinfo.h>.  Use
	__builtin_cpu_is/__builtin_cpu_supports
	* generated/matmul_c10.c: Regenerated.
	* generated/matmul_c16.c: Likewise.
	* generated/matmul_c4.c: Likewise.
	* generated/matmul_c8.c: Likewise.
	* generated/matmul_i1.c: Likewise.
	* generated/matmul_i16.c: Likewise.
	* generated/matmul_i2.c: Likewise.
	* generated/matmul_i4.c: Likewise.
	* generated/matmul_i8.c: Likewise.
	* generated/matmul_r10.c: Likewise.
	* generated/matmul_r16.c: Likewise.
	* generated/matmul_r4.c: Likewise.
	* generated/matmul_r8.c: Likewise.
2020-05-21 03:54:47 -07:00
Martin Liska 9e02b45ffc
Add outline-atomics to target attribute.
* common/config/aarch64/aarch64-common.c (aarch64_handle_option):
	Handle OPT_moutline_atomics.
	* config/aarch64/aarch64.c: Add outline-atomics to
	aarch64_attributes.

	* doc/extend.texi: Document the newly added target attribute.

	* gcc.target/aarch64/target_attr_20.c: New test.
	* gcc.target/aarch64/target_attr_21.c: New test.
2020-05-21 12:46:23 +02:00
Martin Liska 62b5b53e94
Prepare git_update_version.py for real usage.
* gcc-changelog/git_update_version.py: Prepare the script, the
	only missing piece is pushing of the updated branches.
2020-05-21 11:51:32 +02:00
Martin Liska 9722b1399a
Support DR entries for gcc-changelog.
* gcc-changelog/git_commit.py: Support DR entries/
	* gcc-changelog/test_email.py: New test for it.
	* gcc-changelog/test_patches.txt: New patch for it.
2020-05-21 10:23:50 +02:00
Martin Liska e7c7cdc5f4
mklog: support parsing of DR.
* mklog.py: Support DR parsing.
	* test_mklog.py: New test for DR parsing.
2020-05-21 10:14:56 +02:00
Jonathan Wakely f094665d46 libstdc++: Avoid constraint recursion with iterator_traits (PR 93983)
Checking whether a filesystem::path constructor argument is an iterator
requires instantiating std::iterator_traits. In C++20 that checks for
satisfaction of std::iterator_traits constraints, which checks if the
type is copyable, which can end up recursing back to the path
constructor. The fix in LWG 3420 is to reorder the cpp17-iterator
concept's constraints to check if the type looks vaguely like an
iterator before checking copyable. That avoids the recursion for types
which definitely aren't iterators, but isn't foolproof.

	PR libstdc++/93983
	* include/bits/iterator_concepts.h (__detail::__cpp17_iterator):
	Reorder constraints to avoid recursion when constructors use
	iterator_traits (LWG 3420).
	* testsuite/24_iterators/customization_points/lwg3420.cc: New test.
2020-05-21 07:32:15 +01:00
GCC Administrator 48c28b17a9 Daily bump. 2020-05-21 00:16:29 +00:00
Jonathan Wakely 0a1baad8eb libstdc++: Use macro for nodiscard attribute
* include/experimental/socket (basic_socket::is_open()
	(basic_socket_acceptor::is_open()): Use _GLIBCXX_NODISCARD macro.
2020-05-21 01:03:27 +01:00
Jonathan Wakely b780db2ea3 libstdc++: Better requirements checking in Networking TS
Define concepts and traits for checking type requirements.

	* include/experimental/bits/net.h (__endpoint, __protocol)
	(__acceptable_protocol, __inet_protocol): New concepts.
	(__detail::__is_endpoint): Move trait from <experimental/socket>.
	(__is_protocol, __is_acceptable_protocol, __is_inet_protocol): New
	traits.
	(__endpoint, __protocol, __acceptable_protocol): New variable
	templates.
	* include/experimental/socket (__is_endpoint): Move to net.h header.
	(basic_socket, basic_socket_acceptor): Check requirements.
2020-05-21 00:59:55 +01:00
Jonathan Wakely d9d34449bb libstdc++: Fix net::basic_socket::close(error_code&)
Also add some missing member functions, nodiscard attributes, and
noexcept-specifiers.

	* include/experimental/executor (use_future_t::use_future_t()): Fix
	incorrect noexcept-specifier.
	* include/experimental/internet (basic_resolver_results): Adjust
	whitespace.
	* include/experimental/socket (__basic_socket_impl::release): Add
	member function.
	(basic_socket(io_context&, const endpoint_type&)): Fix argument to
	target constructor.
	(basic_socket::release(), basic_socket::release(error_code&)): Add
	missing member functions.
	(basic_socket::is_open()): Add nodiscard attribute.
	(basic_socket::close(error_code&)): Pass argument to base function.
	(basic_socket_acceptor::release())
	(basic_socket_acceptor::release(error_code&)): Add missing member
	functions.
	(basic_socket_acceptor::is_open()): Add nodiscard attribute.
	(basic_socket_streambuf::error()): Add noexcept.
	(basic_socket_iostream::error()): Likewise.
	* testsuite/experimental/net/socket/basic_socket.cc: New test.
2020-05-21 00:59:55 +01:00
Jonathan Wakely f26e72d831 libstdc++: Use 'using' for types in Networking TS headers
* include/experimental/buffer: Replace typedefs with
	alias-declarations.
	* include/experimental/executor: Likewise.
	* include/experimental/internet: Likewise.
	* include/experimental/socket: Likewise.
	* include/experimental/timer: Likewise.
2020-05-21 00:59:55 +01:00
Uros Bizjak 7797f5ec58 i386: Do not use commutative operands with (use) RTX [PR95238]
2020-05-21  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:
	PR target/95218

	* config/i386/mmx.md (*mmx_<code>v2sf): Do not mark
	operands 1 and 2 commutative.  Manually swap operands.
	(*mmx_nabsv2sf2): Ditto.

	Partially revert:

	* config/i386/i386.md (*<code>tf2_1):
	Mark operands 1 and 2 commutative.
	(*nabstf2_1): Ditto.
	* config/i386/sse.md (*<code><mode>2): Mark operands 1 and 2
	commutative.  Do not swap operands.
	(*nabs<mode>2): Ditto.
2020-05-21 01:53:09 +02:00
Jozef Lawrynowicz 14984ea164 Fix premature omission of ChangeLog entry in ChangeLog file..
* g++.dg/warn/Wconversion-null-2.C: Add explicit declarations for l()
	and g() with int, long, long long and __int20 arguments.
	* g++.dg/warn/Wconversion-null.C: Likewise.
2020-05-20 22:41:42 +01:00
Jozef Lawrynowicz edd482f310 TESTSUITE: Fix Wconversion-null*.C tests for aarch64 -mabi=ilp32
This fixes regressions for aarch64 with -mabi=ilp32 of the
Wconversion-null*.C tests, introduced by 92ea8e1bcc.

The "g (int)" declaration is required for that target where
sizeof(int) == sizeof(long) == sizeof(void *).

To handle the msp430/-mlarge case, an explicit declaration of
"g (__int20)" is required.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Wconversion-null-2.C: Add explicit declarations for l()
	and g() with int, long, long long and __int20 arguments.
	* g++.dg/warn/Wconversion-null.C: Likewise.
2020-05-20 22:29:01 +01:00
Marek Polacek 4b38d56dba c++: C++20 DR 2237, disallow simple-template-id in cdtor.
This patch implements DR 2237 which says that a simple-template-id is
no longer valid as the declarator-id of a constructor or destructor;
see [diff.cpp17.class]#2.  It is not explicitly stated but out-of-line
destructors with a simple-template-id are also meant to be ill-formed
now.  (Out-of-line constructors like that are invalid since DR1435 I
think.)  This change only applies to C++20; it is not a DR against C++17.

I'm not crazy about the diagnostic in constructors but ISTM that
cp_parser_constructor_declarator_p shouldn't print errors.

	DR 2237
	* parser.c (cp_parser_unqualified_id): Reject simple-template-id as
	the declarator-id of a destructor.
	(cp_parser_constructor_declarator_p): Reject simple-template-id as
	the declarator-id of a constructor.

	* g++.dg/DRs/dr2237.C: New test.
	* g++.dg/parse/constructor2.C: Add dg-error for C++20.
	* g++.dg/parse/dtor12.C: Likewise.
	* g++.dg/parse/dtor4.C: Likewise.
	* g++.dg/template/dtor4.C: Adjust dg-error.
	* g++.dg/template/error34.C: Likewise.
	* g++.old-deja/g++.other/inline15.C: Only run for C++17 and lesses.
	* g++.old-deja/g++.pt/ctor2.C: Add dg-error for C++20.
2020-05-20 17:00:06 -04:00
Nathan Sidwell 38a4db21e1 preprocessor: Revert premature change
This part of the cleanup patch turns out to require more pieces to
function correctly.  I must have got confused over which tree I was
testing.  The very first map has a different pointer to the file name,
so doesn't match with a pointer compare. We were relying on that.

	* c-common.c (try_to_locate_new_include_insertion_point): Revert change.
2020-05-20 13:43:11 -07:00
Nathan Sidwell c22027a00e preprocessor: cleanups in c-common handling
* c-common.c (try_to_locate_new_include_insertion_point): Use
	strcmp to compare filenames.
	* c-lex.c (init_c_lex): Move declaration to initialization.
	* c-opts.c (handle_deferred_opts): Move cpp_get_deps call into
	deferred count loop.
2020-05-20 11:17:52 -07:00
Marek Polacek 2a8565fa11 c++: Implement DR 2289, Uniqueness of structured binding names [PR94553]
DR 2289 clarified that since structured bindings have no C compatibility
implications, they should be unique in their declarative region, see
[basic.scope.declarative]/4.2.

The duplicate_decls hunk is the gist of the patch, but that alone would
not be enough to detect the 'A' case: cp_parser_decomposition_declaration
uses

13968       tree decl2 = start_decl (declarator, &decl_specs, SD_INITIALIZED,
13969                                NULL_TREE, NULL_TREE, &elt_pushed_scope);

to create the 'A' VAR_DECL but in this start_decl's grokdeclarator we
don't do fit_decomposition_lang_decl because the declarator kind is not
cdk_decomp, so then when start_decl calls maybe_push_decl, the decl 'A'
isn't DECL_DECOMPOSITION_P and we don't detect this case.  So I needed a
way to signal to start_decl that it should fit_decomposition_lang_decl.
In this patch, I'm adding SD_DECOMPOSITION flag to say that the variable
is initialized and it should also be marked as DECL_DECOMPOSITION_P.

	DR 2289
	PR c++/94553
	* cp-tree.h (SD_DECOMPOSITION): New flag.
	* decl.c (duplicate_decls): Make sure a structured binding is unique
	in its declarative region.
	(start_decl): If INITIALIZED is SD_DECOMPOSITION, call
	fit_decomposition_lang_decl.
	(grokdeclarator): Compare INITIALIZED directly to SD_* flags.
	* parser.c (cp_parser_decomposition_declaration): Pass SD_DECOMPOSITION
	to start_decl.

	* g++.dg/cpp1z/decomp52.C: New test.
2020-05-20 13:35:09 -04:00
Uros Bizjak 3872a519c8 i386: Fix zero/sign extend expanders [PR95229]
2020-05-20  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:
	PR target/95229
	* config/i386/sse.md (<code>v8qiv8hi2): Use
	simplify_gen_subreg instead of simplify_subreg.
	(<code>v8qiv8si2): Ditto.
	(<code>v4qiv4si2): Ditto.
	(<code>v4hiv4si2): Ditto.
	(<code>v8qiv8di2): Ditto.
	(<code>v4qiv4di2): Ditto.
	(<code>v2qiv2di2): Ditto.
	(<code>v4hiv4di2): Ditto.
	(<code>v2hiv2di2): Ditto.
	(<code>v2siv2di2): Ditto.

gcc/testsuite/ChangeLog:
	PR target/95229
	* g++.target/i386/pr95229.C: New test.
2020-05-20 19:00:39 +02:00