platform/upstream/gcc.git
4 years agoUse CHARACTER(kind) string for calculating the type hash.
Thomas Koenig [Tue, 30 Jun 2020 11:01:36 +0000 (13:01 +0200)]
Use CHARACTER(kind) string for calculating the type hash.

This regression came about because of a change in the way
types are displayed in error messages.  The character
representation is also used to calculate the hashes for
our types, so this patch restores the old behavior if
we are indeed calculating a hash.

The test case also checks for the specific hash value because
changing that would be an ABI change, which we should not
be doing unintentionally.

gcc/fortran/ChangeLog:

2020-06-30  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/95355
* gfortran.h (gfc_typename): Add optional argument for_hash.
* misc.c (gfc_typename): When for_hash is true, just retur
  CHARACTER(kind).
* class.c (gfc_intrinsic_hash_value): Call gfc_typename with
  for_hash = true.

4 years agoc-family: Avoid ICEs on calls to internal functions [PR95963]
Jakub Jelinek [Tue, 30 Jun 2020 09:42:54 +0000 (11:42 +0200)]
c-family: Avoid ICEs on calls to internal functions [PR95963]

The following testcase ICEs since recent Martin's -Wnonnull changes,
we see a CALL_EXPR and ICE because CALL_EXPR_FN is NULL, which is
valid for internal function calls.  Internal function calls don't have a
function type, and will never have format_arg attribute on them nor will
serve as the i18n routines -Wformat cares about.

2020-06-30  Jakub Jelinek  <jakub@redhat.com>

PR c++/95963
* c-common.c (check_function_arguments_recurse): Don't crash on
calls to internal functions.

* g++.dg/cpp1z/launder9.C: New test.

4 years agoDaily bump.
GCC Administrator [Tue, 30 Jun 2020 09:02:21 +0000 (09:02 +0000)]
Daily bump.

4 years agogcc-changelog: support 'This revert commit' prefix.
Martin Liska [Tue, 30 Jun 2020 08:32:34 +0000 (10:32 +0200)]
gcc-changelog: support 'This revert commit' prefix.

contrib/ChangeLog:

* gcc-changelog/git_check_commit.py: Print revision
of original_info.
* gcc-changelog/git_commit.py: Support Revert commits.

4 years agogcc-changelog: come up with GitInfo wrapper.
Martin Liska [Tue, 30 Jun 2020 08:12:45 +0000 (10:12 +0200)]
gcc-changelog: come up with GitInfo wrapper.

contrib/ChangeLog:

* gcc-changelog/git_check_commit.py: Use GitInfo
* gcc-changelog/git_commit.py: Add GitInfo class.
* gcc-changelog/git_email.py: Use GitInfo class.
* gcc-changelog/git_repository.py: Likewise.

4 years agocoroutines: Collect the function body rewrite code.
Iain Sandoe [Tue, 30 Jun 2020 06:26:51 +0000 (07:26 +0100)]
coroutines: Collect the function body rewrite code.

The standard describes a rewrite of the body of the user-authored
function (which wraps it in a try-catch block and provides the
initial and final suspend expressions).  The exact arrangement of
this was still in flux right up until the DIS and as a consequence
was a bit of a moving target.

The net result was a fragmented implementation of the parts of
the rewrite which is now impeding progress in fixing other issues.

This patch collates the rewrite action into a single function and
carries this out earlier.

gcc/cp/ChangeLog:

* coroutines.cc (expand_one_await_expression): Remove
code dealing with initial suspend.
(build_actor_fn): Remove code special-casing initial
and final suspend. Handle the final suspend and marking
of the coroutine as done.
(coro_rewrite_function_body): New.
(bind_expr_find_in_subtree): Remove.
(coro_body_contains_bind_expr_p): Remove.
(morph_fn_to_coro): Split the rewrite of the original
function into coro_rewrite_function_body and call it.

4 years agoUpdate gcc sv.po.
Joseph Myers [Mon, 29 Jun 2020 23:57:16 +0000 (23:57 +0000)]
Update gcc sv.po.

* sv.po: Update.

4 years agoRevert "Add a __nonnnull__ attribute to std::string's _CharT* constructor"
Ville Voutilainen [Mon, 29 Jun 2020 22:59:34 +0000 (01:59 +0300)]
Revert "Add a __nonnnull__ attribute to std::string's _CharT* constructor"

This reverts commit b26fd416fb0a734d3f3e56629b6dff2e3c25dd40.

4 years agocompiler: remove some erroneous code that was never run
Ian Lance Taylor [Mon, 29 Jun 2020 18:30:43 +0000 (11:30 -0700)]
compiler: remove some erroneous code that was never run

The code accidentally called Type::type_descriptor rather than the
do_type_descriptor method.  Calling Type::type_descriptor with a second
argument of NULL would always crash.  Since that never happened,
it revealed that this code was never actually executed.

Fixes PR go/95970

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/240477

4 years agoPR fortran/95978 - ICE in gfc_match_data, at fortran/decl.c:731
Harald Anlauf [Mon, 29 Jun 2020 21:20:16 +0000 (23:20 +0200)]
PR fortran/95978 - ICE in gfc_match_data, at fortran/decl.c:731

Catch NULL pointer dereference on invalid DATA statement.

gcc/fortran/
PR fortran/95978
* decl.c (gfc_match_data): Avoid NULL pointer dereference.

4 years agoDo not generate recursion check for compiler-generated procedures.
Thomas Koenig [Mon, 29 Jun 2020 21:11:06 +0000 (23:11 +0200)]
Do not generate recursion check for compiler-generated procedures.

This one-line fix removes a check for recursion for procedures
which are compiler-generated, such as finalizers or deallocation.
These need to be recursive, even if the user code should not be.

gcc/fortran/ChangeLog:

PR fortran/95743
* trans-decl.c (gfc_generate_function_code): Do not generate
recursion check for compiler-generated procedures.

4 years agors6000: Documentation updates for "future" rename
Segher Boessenkool [Mon, 29 Jun 2020 17:19:06 +0000 (17:19 +0000)]
rs6000: Documentation updates for "future" rename

2020-06-29  Segher Boessenkool  <segher@kernel.crashing.org>

* doc/extend.texi: Change references to "future architecture" to
"ISA 3.1", "-mcpu=future" to "-mcpu=power10", and remove vaguer
references to "future" (because the future is now).

4 years agotestsuite: Make char4-subscript.f90 regex endian neutral.
David Edelsohn [Mon, 29 Jun 2020 18:42:13 +0000 (14:42 -0400)]
testsuite: Make char4-subscript.f90 regex endian neutral.

The testcase tests for little endian results.  This patch updates the
regex to accept either endianness.

gcc/testsuite/ChangeLog

2020-06-29  David Edelsohn  <dje.gcc@gmail.com>

* gfortran.dg/char4-subscript.f90: Simplify regex.
Accept big endian or little endian output.

4 years agors6000: Rename isa attribute "fut" to "p10"
Segher Boessenkool [Mon, 29 Jun 2020 17:17:51 +0000 (17:17 +0000)]
rs6000: Rename isa attribute "fut" to "p10"

I missed this when grepping for "future".

2020-06-29  Segher Boessenkool  <segher@kernel.crashing.org>

* config/rs6000/rs6000.md (isa): Rename "fut" to "p10".

4 years agomiddle-end: Optimize (A&C)^(B&C) to (A^B)&C in simplify_rtx (take 3).
Roger Sayle [Mon, 29 Jun 2020 16:33:23 +0000 (17:33 +0100)]
middle-end: Optimize (A&C)^(B&C) to (A^B)&C in simplify_rtx (take 3).

2020-06-29  Roger Sayle  <roger@nextmovesoftware.com>
gcc/ChangeLog:
* simplify-rtx.c (simplify_distributive_operation): New function
to un-distribute a binary operation of two binary operations.
(X & C) ^ (Y & C) to (X ^ Y) & C, when C is simple (i.e. a constant).
(simplify_binary_operation_1) <IOR, XOR, AND>: Call it from here
when appropriate.
(test_scalar_int_ops): New function for unit self-testing
scalar integer transformations in simplify-rtx.c.
(test_scalar_ops): Call test_scalar_int_ops for each integer mode.
(simplify_rtx_c_tests): Call test_scalar_ops.

4 years agoc++: Check uniqueness of concepts/variable templates [PR94553]
Marek Polacek [Fri, 26 Jun 2020 16:40:59 +0000 (12:40 -0400)]
c++: Check uniqueness of concepts/variable templates [PR94553]

This patch wraps up PR94553.  Variable template names have no C
compatibility implications so they should be unique in their
declarative region.  It occurred to me that this applies to concepts
as well.  This is not specified in [basic.scope.declarative]/4.2
but that seems like a bug in the standard.

I couldn't use variable_template_p because that uses PRIMARY_TEMPLATE_P
which uses DECL_PRIMARY_TEMPLATE and that might not have been set up yet
(push_template_decl hasn't yet been called).  PRIMARY_TEMPLATE_P is
important to distinguish between a variable template and a variable in a
function template.  But I think we don't have to worry about that in
duplicate_decls: a template declaration cannot appear at block scope,
and additional checks in duplicate_decls suggest that it won't ever
see a TEMPLATE_DECL for a variable in a function template.  So
checking that the DECL_TEMPLATE_RESULT is a VAR_DECL seems to be fine.
I could have added a default argument to variable_template_p too to
avoid checking PRIMARY_TEMPLATE_P but it didn't seem worth the effort.

gcc/cp/ChangeLog:

PR c++/94553
* decl.c (duplicate_decls): Make sure a concept or a variable
template is unique in its declarative region.

gcc/testsuite/ChangeLog:

PR c++/94553
* g++.dg/cpp1y/pr68578.C: Adjust dg-error.
* g++.dg/cpp1y/var-templ66.C: New test.
* g++.dg/cpp2a/concepts-redecl1.C: New test.

4 years agoc++: Fix CTAD for aggregates in template [PR95568]
Marek Polacek [Tue, 23 Jun 2020 22:07:34 +0000 (18:07 -0400)]
c++: Fix CTAD for aggregates in template [PR95568]

95568 complains that CTAD for aggregates doesn't work within
requires-clause and it turned out that it doesn't work when we try
the deduction in a template.  The reason is that maybe_aggr_guide
creates a guide that can look like this

  template<class T> X(decltype (X<T>::x))-> X<T>

where the parameter is a decltype, which is a non-deduced context.  So
the subsequent build_new_function_call fails because unify_one_argument
can't deduce anything from it ([temp.deduct.type]: "If a template
parameter is used only in non-deduced contexts and is not explicitly
specified, template argument deduction fails.")

Those decltypes come from finish_decltype_type.  We can just use
TREE_TYPE instead.  I pondered using unlowered_expr_type, but that
didn't make any difference for the FIELD_DECLs I saw in
class-deduction-aggr6.C.

gcc/cp/ChangeLog:

PR c++/95568
* pt.c (collect_ctor_idx_types): Use TREE_TYPE.

gcc/testsuite/ChangeLog:

PR c++/95568
* g++.dg/cpp2a/class-deduction-aggr5.C: New test.
* g++.dg/cpp2a/class-deduction-aggr6.C: New test.

4 years agoPR fortran/71706 - ICE on using sync images with -fcheck=bounds
Harald Anlauf [Mon, 29 Jun 2020 13:15:49 +0000 (15:15 +0200)]
PR fortran/71706 - ICE on using sync images with -fcheck=bounds

The run-time checking code did not properly convert the kind of the
argument to SYNC IMAGES, leading to an error in verify_gimple.  Fix that.

gcc/fortran/
PR fortran/71706
* trans-stmt.c (gfc_trans_sync): Do proper kind conversion in
bounds-checking code.

4 years agotestsuite: Fix coding style.
Martin Liska [Mon, 29 Jun 2020 12:24:33 +0000 (14:24 +0200)]
testsuite: Fix coding style.

2020-06-29  Martin Liska  <mliska@suse.cz>

PR c++/86568
* c-c++-common/builtin-arith-overflow-1.c (generic_3, typed_3_null):
Fix coding style.

4 years agotree-optimization/95916 - treat scalar ops explicitely
Richard Biener [Mon, 29 Jun 2020 11:53:51 +0000 (13:53 +0200)]
tree-optimization/95916 - treat scalar ops explicitely

This explicitely treats the case of scalar operands for SLP
when computing insert locations.

2020-06-29  Richard Biener  <rguenther@suse.de>

PR tree-optimization/95916
* tree-vect-slp.c (vect_schedule_slp_instance): Explicitely handle
the case of not vectorized externals.

* gcc.dg/vect/pr95916.c: New testcase.

4 years agodo not include <utility> from tree-vectorizer.h
Richard Biener [Mon, 29 Jun 2020 11:38:19 +0000 (13:38 +0200)]
do not include <utility> from tree-vectorizer.h

This removes the duplicate <utility> include from tree-vectorizer.h.

2020-06-29  Richard Biener  <rguenther@suse.de>

* tree-vectorizer.h: Do not include <utility>.

4 years agotestsuite: Adjust testcase for recent -Wnonnull changes
Jakub Jelinek [Mon, 29 Jun 2020 12:25:00 +0000 (14:25 +0200)]
testsuite: Adjust testcase for recent -Wnonnull changes

2020-06-29  Jakub Jelinek  <jakub@redhat.com>

PR c++/86568
* c-c++-common/builtin-arith-overflow-1.c (generic_3, typed_3_null):
Adjust dg-warning.

4 years agotestsuite: Adjust testcase for recent -Wnonnull changes
Jakub Jelinek [Mon, 29 Jun 2020 11:47:44 +0000 (13:47 +0200)]
testsuite: Adjust testcase for recent -Wnonnull changes

2020-06-29  Jakub Jelinek  <jakub@redhat.com>

PR c++/86568
gcc/testsuite/
* c-c++-common/builtin-arith-overflow-1.c (generic_3, typed_3_null):
Adjust dg-warning.

4 years agoUse gsi_bb instead of iterator->bb.
Martin Liska [Mon, 29 Jun 2020 11:26:45 +0000 (13:26 +0200)]
Use gsi_bb instead of iterator->bb.

gcc/ChangeLog:

* tree-ssa-ccp.c (gsi_prev_dom_bb_nondebug): Use gsi_bb
instead of gimple_stmt_iterator::bb.
* tree-ssa-math-opts.c (insert_reciprocals): Likewise.
* tree-vectorizer.h: Likewise.

4 years agoamdgcn: Support basic DWARF
Andrew Stubbs [Fri, 26 Jun 2020 16:10:55 +0000 (17:10 +0100)]
amdgcn: Support basic DWARF

This is enough DWARF support for "-O0 -g" to work OK, within a single frame,
using the new rocgdb debugger from AMD.  Debugging with optimization enabled
also works when the values are located in SGPRs or memory.

Scalars in VGPRs are problematic, EXEC_HI and VCC_HI are unmappable, and
CFI remains unimplemented.

gcc/ChangeLog:

* config/gcn/gcn-hsa.h (DBX_REGISTER_NUMBER): New macro.
* config/gcn/gcn-protos.h (gcn_dwarf_register_number): New prototype.
* config/gcn/gcn.c (gcn_expand_prologue): Add RTX_FRAME_RELATED_P
and REG_FRAME_RELATED_EXPR to stack and frame pointer adjustments.
(gcn_dwarf_register_number): New function.
(gcn_dwarf_register_span): New function.
(TARGET_DWARF_REGISTER_SPAN): New hook macro.

4 years agostore-merging: ICE in find_bswap_or_nop_1 PR95854.
Kaipeng Zhou [Wed, 24 Jun 2020 14:48:45 +0000 (22:48 +0800)]
store-merging: ICE in find_bswap_or_nop_1 PR95854.

The patch add a judgement in find_bswap_or_nop_1 to make sure both
operand1 and operand2 cannot be converted to unsigned HOST_WIDE_INT.
If not, return NULL.

gcc/ChangeLog:

2020-06-24  Kaipeng Zhou  <zhoukaipeng3@huawei.com>

PR tree-optimization/95854
* gimple-ssa-store-merging.c (find_bswap_or_nop_1): Return NULL
if operand 1 or 2 of a BIT_FIELD_REF cannot be converted to
unsigned HOST_WIDE_INT.

gcc/testsuite/ChangeLog:

2020-06-24  Kaipeng Zhou  <zhoukaipeng3@huawei.com>

PR tree-optimization/95854
* gcc.dg/pr95854.c: New test.

4 years agosparc: Remove register storage class in sparc.c
Rainer Orth [Mon, 29 Jun 2020 09:51:07 +0000 (11:51 +0200)]
sparc: Remove register storage class in sparc.c

The switch to C++17 broke SPARC bootstrap:

/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:8887:34: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register]
 8887 | epilogue_renumber (register rtx *where, int test)
      |                                  ^~~~~
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c: In function 'int epilogue_renumber(rtx_def**, int)':
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:8889:24: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register]
 8889 |   register const char *fmt;
      |                        ^~~
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:8890:16: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register]
 8890 |   register int i;
      |                ^
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:8891:26: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register]
 8891 |   register enum rtx_code code;
      |                          ^~~~
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:8948:17: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register]
 8948 |    register int j;
      |                 ^
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c: In function 'void sparc_print_operand_address(std::FILE*, machine_mode, rtx)':
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:9671:16: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register]
 9671 |   register rtx base, index = 0;
      |                ^~~~
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:9671:22: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register]
 9671 |   register rtx base, index = 0;
      |                      ^~~~~
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:9673:16: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register]
 9673 |   register rtx addr = x;
      |                ^~~~
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c: At global scope:
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:9807:32: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register]
 9807 | sparc_type_code (register tree type)
      |                                ^~~~
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c: In function 'long unsigned int sparc_type_code(tree)':
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:9809:26: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register]
 9809 |   register unsigned long qualifiers = 0;
      |                          ^~~~~~~~~~
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:9810:21: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register]
 9810 |   register unsigned shift;
      |                     ^~~~~
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c: In function 'int set_extends(rtx_insn*)':
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:10306:16: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register]
10306 |   register rtx pat = PATTERN (insn);
      |                ^~~

Fixed by removing the register keyword.  Bootstrapped on
sparc-sun-solaris2.11.

* config/sparc/sparc.c (epilogue_renumber): Remove register.
(sparc_print_operand_address): Likewise.
(sparc_type_code): Likewise.
(set_extends): Likewise.

4 years agoarc: add exceptions for PR92860.
Martin Liska [Wed, 24 Jun 2020 07:42:00 +0000 (09:42 +0200)]
arc: add exceptions for PR92860.

gcc/ChangeLog:

PR tree-optimization/92860
* optc-save-gen.awk: Add exceptions for arc target.

4 years agotestsuite: clarify scan-dump file globbing behavior
Frederik Harwath [Mon, 29 Jun 2020 06:42:56 +0000 (08:42 +0200)]
testsuite: clarify scan-dump file globbing behavior

The test commands for scanning optimization dump files
perform globbing on the argument that specifies the suffix
of the dump files to be scanned.  This behavior is currently
undocumented.  Furthermore, the current implementation of
"scan-dump" and similar procedures yields an error whenever
the file name globbing matches more than one file (due to an
attempt to call "open" on multiple files) while a failure to
match any file results in an unresolved test.

This commit documents the globbing behavior.  The dump
scanning procedures are changed to make the test unresolved
if globbing matches more than one file.

gcc/ChangeLog:

2020-06-29  Frederik Harwath  <frederik@codesourcery.com>

* doc/sourcebuild.texi: Describe globbing of the
dump file scanning commands "suffix" argument.

gcc/testsuite/ChangeLog:

2020-06-29  Frederik Harwath  <frederik@codesourcery.com>

* lib/scandump.exp (glob-dump-file): New proc.
(scan-dump): Use glob-dump-file for file name expansion.
(scan-dump-times): Likewise.
(scan-dump-dem): Likewise.
(scan-dump-dem-not): Likewise.

Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>
4 years agoDaily bump.
GCC Administrator [Mon, 29 Jun 2020 00:16:29 +0000 (00:16 +0000)]
Daily bump.

4 years agoAdd a __nonnnull__ attribute to std::string's _CharT* constructor
Ville Voutilainen [Sun, 28 Jun 2020 21:47:05 +0000 (00:47 +0300)]
Add a __nonnnull__ attribute to std::string's _CharT* constructor

Add a __nonnnull__ attribute to std::string's _CharT* constructor
* include/bits/basic_string.h (string(_CharT*, const _Alloc&)):
Add a __nonnull__ attribute.
* testsuite/21_strings/basic_string/cons/char/nonnull.cc: New.
* testsuite/21_strings/basic_string/cons/wchar_t/nonnull.cc: Likewise.

4 years agoPR libstdc++/95915
Ville Voutilainen [Sun, 28 Jun 2020 21:36:38 +0000 (00:36 +0300)]
PR libstdc++/95915

PR libstdc++/95915
* include/std/type_traits (is_literal_type, is_literal_type_v):
Deprecate in C++17.
* include/std/variant (_Uninitialized):
Adjust the condition and the comment.
* testsuite/20_util/is_literal_type/deprecated-1z.cc: New.
* testsuite/20_util/is_literal_type/requirements/explicit_instantiation.cc:
Adjust.
* testsuite/20_util/is_literal_type/requirements/typedefs.cc: Likewise.
* testsuite/20_util/is_literal_type/value.cc: Likewise.
* testsuite/20_util/optional/constexpr/nullopt.cc:
Use __is_literal_type directly.
* testsuite/20_util/optional/nullopt.cc: Likewise.
* testsuite/20_util/variable_templates_for_traits.cc: Adjust.
* testsuite/20_util/variant/95915.cc: New.
* testsuite/20_util/variant/compile.cc: Add new test.
* testsuite/experimental/optional/constexpr/nullopt.cc:
Use __is_literal_type directly.
* testsuite/experimental/optional/nullopt.cc: Likewise.
* testsuite/experimental/type_traits/value.cc: Adjust.
* testsuite/util/testsuite_common_types.h:
Use __is_literal_type directly.

4 years agoUnderline argument in -Wnonnull and in C++ extend warning to the this pointer [PR...
Martin Sebor [Sun, 28 Jun 2020 20:22:14 +0000 (14:22 -0600)]
Underline argument in -Wnonnull and in C++ extend warning to the this pointer [PR c++/86568].

Resolves:
PR c++/86568 - -Wnonnull warnings should highlight the relevant argument not the closing parenthesis

gcc/c-family/ChangeLog:

PR c++/86568
* c-common.c (struct nonnull_arg_ctx): Add members.
(check_function_nonnull): Use nonnull_arg_ctx as argument.  Handle
C++ member functions specially.  Consider the this pointer implicitly
nonnull.
(check_nonnull_arg): Use location of argument when available.
(check_function_arguments): Use nonnull_arg_ctx as argument.

gcc/ChangeLog:

PR c++/86568
* calls.c (maybe_warn_rdwr_sizes): Use location of argument if
available.
* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Same.  Adjust
indentation.
* tree.c (get_nonnull_args): Consider the this pointer implicitly
nonnull.
* var-tracking.c (deps_vec): New type.
(var_loc_dep_vec): New function.
(VAR_LOC_DEP_VEC): Use it.

gcc/testsuite/ChangeLog:

PR c++/86568
* g++.dg/warn/Wnonnull5.C: New test.
* c-c++-common/pr28656.c: Adjust text of expected warning.
* c-c++-common/pr66208.c: Same.
* g++.dg/cpp0x/nullptr22.C: Same.
* g++.dg/ext/attr-nonnull.C: Same.
* g++.dg/ext/attrib49.C: Same.
* g++.dg/pr71973-2.C: Same.
* g++.dg/warn/Wnonnull3.C: Same.
* g++.dg/warn/Wnonnull4.C: Same.
* obj-c++.dg/attributes/method-nonnull-1.mm: Same.
* objc.dg/attributes/method-nonnull-1.m: Same.

4 years agod: Merge upstream dmd 8508c4e68.
Iain Buclaw [Sun, 28 Jun 2020 15:46:18 +0000 (17:46 +0200)]
d: Merge upstream dmd 8508c4e68.

Fixes a performance bug where 'static foreach' would take an
exponentially long time to expand during CTFE.

In the following example:

    static foreach (i; 0..30000) {}

Compilation time had been reduced from around 40 to 0.08 seconds.
Memory consumption is also reduced from 3.5GB to 55MB.

Reviewed-on: https://github.com/dlang/dmd/pull/11335

gcc/d/ChangeLog:

* dmd/MERGE: Merge upstream dmd 8508c4e68.

4 years agoPR fortran/95340 - ICE in gfc_match_select_rank, at fortran/match.c:6690
Harald Anlauf [Sun, 28 Jun 2020 14:24:15 +0000 (16:24 +0200)]
PR fortran/95340 - ICE in gfc_match_select_rank, at fortran/match.c:6690

Do not dereference NULL pointer when querying array shape of possibly
improperly delared variable.

gcc/fortran/
PR fortran/95340
* match.c (gfc_match_select_rank): Do not dereference NULL pointer.

4 years agocoroutines: Handle namespaces while scanning local vars [PR95711].
Iain Sandoe [Sun, 28 Jun 2020 11:29:11 +0000 (12:29 +0100)]
coroutines: Handle namespaces while scanning local vars [PR95711].

We need to skip past namespace decls when scanning the bind
expression var lists checking for local vars.

gcc/cp/ChangeLog:

PR c++/95711
* coroutines.cc (register_local_var_uses): Skip past
namespace decls.

gcc/testsuite/ChangeLog:

PR c++/95711
* g++.dg/coroutines/pr95711.C: New test.

4 years agoPR fortran/95880 - ICE in gfc_add_type, at fortran/symbol.c:2030
Harald Anlauf [Sun, 28 Jun 2020 11:52:09 +0000 (13:52 +0200)]
PR fortran/95880 - ICE in gfc_add_type, at fortran/symbol.c:2030

The fix for PR39695 did not properly distinguish between procedure names
and other symbols names in errors emitted for invalid code.  Fix that.

gcc/fortran/
PR fortran/95880
* symbol.c (gfc_add_type): If sym->ns->proc_name is set, use it,
otherwise fall back to sym->name.

4 years agocoroutines, testsuite: Update log messages. [NFC, PR95519]
Iain Sandoe [Sun, 28 Jun 2020 09:10:06 +0000 (10:10 +0100)]
coroutines, testsuite: Update log messages. [NFC, PR95519]

This does not affect the test functionality, but only user-
facing debug messages when the tests are run outside the
test-suite.

gcc/testsuite/ChangeLog:

PR c++/95519
* g++.dg/coroutines/torture/pr95519-02-final_suspend.C:
Amend log messages.
* g++.dg/coroutines/torture/pr95519-03-return-value.C:
Likewise.
* g++.dg/coroutines/torture/pr95519-04-yield-value.C:
Likewise.
* g++.dg/coroutines/torture/pr95519-05-gro.C: Likewise.

4 years agoIFN: Fix mask_{load,store} optab support macros
Kewen Lin [Sun, 28 Jun 2020 02:17:04 +0000 (21:17 -0500)]
IFN: Fix mask_{load,store} optab support macros

When I am working on IFNs for vector with length, I noticed that the
current optab support query for mask_load/mask_store looks unexpected.
The mask_load/mask_store requires two modes for convert_optab query,
but the macros direct_mask_{load,store}_optab_supported_p uses
direct_optab_supported_p which asserts type pair should have the same mode.

I'm not sure whether we have some special reason here or just a typo,
since everything goes well now, mask_{load,store} optab check is mainly
handled by can_vec_mask_load_store_p.

But if we have some codes as below (eg: one checking for all IFNs finally)

  tree_pair types = direct_internal_fn_types (ifn, call);
  if(direct_internal_fn_supported_p (ifn, types, OPTIMIZE_FOR_SPEED) ...

It will cause ICE.

gcc/ChangeLog:

* internal-fn.c (direct_mask_load_optab_supported_p): Use
convert_optab_supported_p instead of direct_optab_supported_p.
(direct_mask_store_optab_supported_p): Likewise.

4 years agors6000: Correct prefix testsuite failures on AIX.
David Edelsohn [Sun, 28 Jun 2020 00:04:30 +0000 (20:04 -0400)]
rs6000: Correct prefix testsuite failures on AIX.

gcc/testsuite/ChangeLog

2020-06-27  David Edelsohn  <dje.gcc@gmail.com>

* gcc.target/powerpc/prefix-large-dd.c: Require DFP.
* gcc.target/powerpc/prefix-large-sd.c: Require DFP.
* gcc.target/powerpc/prefix-large-kf.c: Require float128.
* gcc.target/powerpc/prefix-pcrel-dd.c: Require DFP.
* gcc.target/powerpc/prefix-pcrel-sd.c: Require DFP.
* gcc.target/powerpc/prefix-pcrel-kf.c: Require float128.

4 years agoDaily bump.
GCC Administrator [Sun, 28 Jun 2020 00:16:21 +0000 (00:16 +0000)]
Daily bump.

4 years agoPR fortran/95881 - ICE in resolve_symbol, at fortran/resolve.c:15175
Harald Anlauf [Sat, 27 Jun 2020 12:56:33 +0000 (14:56 +0200)]
PR fortran/95881 - ICE in resolve_symbol, at fortran/resolve.c:15175

Avoid NULL pointer dereference.

gcc/fortran/
PR fortran/95881
* resolve.c (resolve_symbol): Avoid NULL pointer dereference.

4 years agoMove simplification of statements using ranges into its own class.
Aldy Hernandez [Thu, 18 Jun 2020 08:37:14 +0000 (10:37 +0200)]
Move simplification of statements using ranges into its own class.

This moves all the simplification code from vr_values into a separate
class (simplify_using_ranges).  In doing so, we get rid of a bunch of
dependencies on the internals of vr_values.  The goal is to (a) remove
unnecessary interdependendcies (b) be able to use this engine with any
range infrastructure, as all it needs is a method to get the range for
an SSA name (get_value_range).

I also removed as many dependencies on value_range_equiv as possible,
preferring value_range.  A few value_range_equiv uses remain, but for
cases where equivalences are actually used (folding conditionals, etc).

gcc/ChangeLog:

* gimple-ssa-evrp-analyze.h (vrp_visit_cond_stmt): Use
simplify_using_ranges class.
* gimple-ssa-evrp.c (class evrp_folder): New simplify_using_ranges
field.  Adjust all methods to use new field.
* tree-ssa-dom.c (simplify_stmt_for_jump_threading): Use
simplify_using_ranges class.
* tree-vrp.c (class vrp_folder): New simplify_using_ranges
field.  Adjust all methods to use new field.
(simplify_stmt_for_jump_threading): Use simplify_using_ranges class.
(vrp_prop::vrp_finalize): New vrp_folder argument.
(execute_vrp): Pass folder to vrp_finalize.  Use
simplify_using_ranges class.
Remove cleanup_edges_and_switches call.
* vr-values.c (vr_values::op_with_boolean_value_range_p): Change
value_range_equiv uses to value_range.
(simplify_using_ranges::op_with_boolean_value_range_p): Use
simplify_using_ranges class.
(check_for_binary_op_overflow): Make static.
(vr_values::extract_range_basic): Pass this to
check_for_binary_op_overflow.
(compare_range_with_value): Change value_range_equiv uses to
value_range.
(vr_values::vr_values): Initialize simplifier field.
Remove uses of to_remove_edges and to_update_switch_stmts.
(vr_values::~vr_values): Remove uses of to_remove_edges and
to_update_switch_stmts.
(vr_values::get_vr_for_comparison): Move to simplify_using_ranges
class.
(vr_values::compare_name_with_value): Same.
(vr_values::compare_names): Same.
(vr_values::vrp_evaluate_conditional_warnv_with_ops): Same.
(vr_values::vrp_evaluate_conditional): Same.
(vr_values::vrp_visit_cond_stmt): Same.
(find_case_label_ranges): Change value_range_equiv uses to
value_range.
(vr_values::extract_range_from_stmt): Use simplify_using_ranges class.
(vr_values::simplify_truth_ops_using_ranges): Move to
simplify_using_ranges class.
(vr_values::simplify_div_or_mod_using_ranges): Same.
(vr_values::simplify_min_or_max_using_ranges): Same.
(vr_values::simplify_abs_using_ranges): Same.
(vr_values::simplify_bit_ops_using_ranges): Same.
(test_for_singularity): Change value_range_equiv uses to
value_range.
(range_fits_type_p): Same.
(vr_values::simplify_cond_using_ranges_1): Same.
(vr_values::simplify_cond_using_ranges_2): Make extern.
(vr_values::fold_cond): Move to simplify_using_ranges class.
(vr_values::simplify_switch_using_ranges): Same.
(vr_values::cleanup_edges_and_switches): Same.
(vr_values::simplify_float_conversion_using_ranges): Same.
(vr_values::simplify_internal_call_using_ranges): Same.
(vr_values::two_valued_val_range_p): Same.
(vr_values::simplify_stmt_using_ranges): Move to...
(simplify_using_ranges::simplify): ...here.
* vr-values.h (class vr_values): Move all the simplification of
statements using ranges methods and code from here...
(class simplify_using_ranges): ...to here.
(simplify_cond_using_ranges_2): New extern prototype.

4 years agoopenmp: Non-rectangular loop support for non-composite worksharing loops and distribute
Jakub Jelinek [Sat, 27 Jun 2020 10:43:36 +0000 (12:43 +0200)]
openmp: Non-rectangular loop support for non-composite worksharing loops and distribute

This implements the fallback mentioned in
https://gcc.gnu.org/pipermail/gcc/2020-June/232874.html
Special cases for triangular loops etc. to follow later, also composite
constructs not supported yet (need to check the passing of temporaries around)
and lastprivate might not give the same answers as serial loop if the last
innermost body iteration isn't the last one for some of the outer loops
(that will need to be solved separately together with rectangular loops that have no
innermost body iterations, but some of the outer loops actually iterate).
Also, simd needs work.

2020-06-27  Jakub Jelinek  <jakub@redhat.com>

* omp-general.h (struct omp_for_data_loop): Add non_rect_referenced
member, move outer member.
(struct omp_for_data): Add first_nonrect and last_nonrect members.
* omp-general.c (omp_extract_for_data): Initialize first_nonrect,
last_nonrect and non_rect_referenced members.
* omp-expand.c (expand_omp_for_init_counts): Handle non-rectangular
loops.
(expand_omp_for_init_vars): Add nonrect_bounds parameter.  Handle
non-rectangular loops.
(extract_omp_for_update_vars): Likewise.
(expand_omp_for_generic, expand_omp_for_static_nochunk,
expand_omp_for_static_chunk, expand_omp_simd,
expand_omp_taskloop_for_outer, expand_omp_taskloop_for_inner): Adjust
expand_omp_for_init_vars and extract_omp_for_update_vars callers.
(expand_omp_for): Don't sorry on non-composite worksharing-loop or
distribute.

* testsuite/libgomp.c/loop-17.c: New test.
* testsuite/libgomp.c/loop-18.c: New test.

4 years agoc-family: Use TYPE_OVERFLOW_UNDEFINED instead of !TYPE_UNSIGNED in pointer_sum [PR95903]
Jakub Jelinek [Sat, 27 Jun 2020 10:38:23 +0000 (12:38 +0200)]
c-family: Use TYPE_OVERFLOW_UNDEFINED instead of !TYPE_UNSIGNED in pointer_sum [PR95903]

For lp64 targets and int off ... ptr[off + 1]
is lowered in pointer_sum to *(ptr + ((sizetype) off + (sizetype) 1)).
That is fine when signed integer wrapping is undefined (and is not done
already if off has unsigned type), but changes behavior for -fwrapv, where
overflow is well defined.  Runtime test could be:
int
main ()
{
  char *p = __builtin_malloc (0x100000000UL);
  if (!p) return 0;
  char *q = p + 0x80000000UL;
  int o = __INT_MAX__;
  q[o + 1] = 1;
  if (q[-__INT_MAX__ - 1] != 1) __builtin_abort ();
  return 0;
}
with -fwrapv or so, not included in the testsuite because it requires 4GB
allocation (with some other test it would be enough to have something
slightly above 2GB, but still...).

2020-06-27  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/95903
gcc/c-family/
* c-common.c (pointer_int_sum): Use TYPE_OVERFLOW_UNDEFINED instead of
!TYPE_UNSIGNED check to see if we can apply distributive law and handle
smaller precision intop operands separately.
gcc/testsuite/
* c-c++-common/pr95903.c: New test.

4 years agocoroutines: Handle awaiters that are sub-objects [PR95736]
Iain Sandoe [Sat, 27 Jun 2020 07:18:34 +0000 (08:18 +0100)]
coroutines: Handle awaiters that are sub-objects [PR95736]

Move deciding on initializers for awaitables to the build of the
co_await, this allows us to analyse cases that do not need
a temporary at that point.

As the PR shows, the late analysis meant that we  were not
checking properly for the case that an awaiter is a sub-object
of an existing variable outside the current function scope (and
therefore does not need to be duplicated in the frame).

gcc/cp/ChangeLog:

PR c++/95736
* coroutines.cc (get_awaitable_var): New helper.
(build_co_await): Check more carefully before
copying an awaitable.
(expand_one_await_expression): No initializer
is required when the awaitable is not a temp.
(register_awaits): Remove handling that is now
completed when the await expression is built.

gcc/testsuite/ChangeLog:

PR c++/95736
* g++.dg/coroutines/pr95736.C: New test.

4 years agocoroutines: Improve diagnostics for one allocator case.
Iain Sandoe [Sat, 27 Jun 2020 07:54:39 +0000 (08:54 +0100)]
coroutines: Improve diagnostics for one allocator case.

If the user provides operator new and that is noexcept, this
implies that it can fail with a null return.  At that point, we expect
to be able to call get_return_object_on_allocation_failure().

This diagnoses the case where such an operator new has been
provided, but the g-r-o-o-a-f is either missing or unusable.

gcc/cp/ChangeLog:

* coroutines.cc (morph_fn_to_coro): Diagnose unavailable
get_return_object_on_allocation_failure.

gcc/testsuite/ChangeLog:

* g++.dg/coroutines/coro-bad-grooaf-01-grooaf-expected.C: New test.

4 years agoAdd PowerPC tests for power10.
Michael Meissner [Sat, 27 Jun 2020 05:40:48 +0000 (00:40 -0500)]
Add PowerPC tests for power10.

2020-06-27  Michael Meissner  <meissner@linux.ibm.com>

* gcc.target/powerpc/prefix-add.c: New test.
* gcc.target/powerpc/prefix-si-constant.c: New test.
* gcc.target/powerpc/prefix-di-constant.c: New test.
* gcc.target/powerpc/prefix-ds-dq.c: New test.
* gcc.target/powerpc/prefix-no-update.c: New test.
* gcc.target/powerpc/prefix-large-dd.c: New test.
* gcc.target/powerpc/prefix-large-df.c: New test.
* gcc.target/powerpc/prefix-large-di.c: New test.
* gcc.target/powerpc/prefix-large-hi.c: New test.
* gcc.target/powerpc/prefix-large-kf.c: New test.
* gcc.target/powerpc/prefix-large-qi.c: New test.
* gcc.target/powerpc/prefix-large-sd.c: New test.
* gcc.target/powerpc/prefix-large-sf.c: New test.
* gcc.target/powerpc/prefix-large-si.c: New test.
* gcc.target/powerpc/prefix-large-udi.c: New test.
* gcc.target/powerpc/prefix-large-uhi.c: New test.
* gcc.target/powerpc/prefix-large-uqi.c: New test.
* gcc.target/powerpc/prefix-large-usi.c: New test.
* gcc.target/powerpc/prefix-large-v2df.c: New test.
* gcc.target/powerpc/prefix-large.h: Include file for new tests.
* gcc.target/powerpc/prefix-pcrel-dd.c: New test.
* gcc.target/powerpc/prefix-pcrel-df.c: New test.
* gcc.target/powerpc/prefix-pcrel-di.c: New test.
* gcc.target/powerpc/prefix-pcrel-hi.c: New test.
* gcc.target/powerpc/prefix-pcrel-kf.c: New test.
* gcc.target/powerpc/prefix-pcrel-qi.c: New test.
* gcc.target/powerpc/prefix-pcrel-sd.c: New test.
* gcc.target/powerpc/prefix-pcrel-sf.c: New test.
* gcc.target/powerpc/prefix-pcrel-si.c: New test.
* gcc.target/powerpc/prefix-pcrel-udi.c: New test.
* gcc.target/powerpc/prefix-pcrel-uhi.c: New test.
* gcc.target/powerpc/prefix-pcrel-uqi.c: New test.
* gcc.target/powerpc/prefix-pcrel-usi.c: New test.
* gcc.target/powerpc/prefix-pcrel-v2df.c: New test.
* gcc.target/powerpc/prefix-pcrel.h: Include file for new tests.
* gcc.target/powerpc/prefix-stack-protect.c: New test.

4 years agoDaily bump.
GCC Administrator [Sat, 27 Jun 2020 00:16:24 +0000 (00:16 +0000)]
Daily bump.

4 years agoLinux/i386: Remove SUBTARGET_FRAME_POINTER_REQUIRED
H.J. Lu [Fri, 12 Jun 2020 12:44:59 +0000 (05:44 -0700)]
Linux/i386: Remove SUBTARGET_FRAME_POINTER_REQUIRED

config/i386/gnu-user.h has

 #define SUBTARGET_FRAME_POINTER_REQUIRED crtl->profile

ix86_frame_pointer_required() has

  /* Several x86 os'es need a frame pointer for other reasons,
     usually pertaining to setjmp.  */
  if (SUBTARGET_FRAME_POINTER_REQUIRED)
    return true;
...

  if (crtl->profile && !flag_fentry)
    return true;

A frame pointer is needed only for -pg, not for -mfentry -pg.  Remove
SUBTARGET_FRAME_POINTER_REQUIRED from gnu-user.h to make i386 GCC behave
the same as x86-64 GCC.  This fixes

FAIL: gcc.target/i386/pr93492-3.c scan-assembler \t.cfi_startproc\n\tendbr(32|64)\n.*.LPFE1:\n\tnop\n1:\tcall\t__fentry__\n\tret\n
FAIL: gcc.target/i386/pr93492-5.c scan-assembler \t.cfi_startproc\n.*.LPFE1:\n\tnop\n1:\tcall\t__fentry__\n\tret\n

on Linux/i386.

PR target/95655
* config/i386/gnu-user.h (SUBTARGET_FRAME_POINTER_REQUIRED):
Removed.
* config/i386/i386.c (ix86_frame_pointer_required): Update
comments.

4 years agoFix target clone indirection elimination
Yichao Yu [Fri, 26 Jun 2020 21:46:15 +0000 (15:46 -0600)]
Fix target clone indirection elimination

The current logic seems to be comparing the whole attribute tree between
the callee and caller (or at least the tree starting from the target attribute).
This is unnecessary and causes strange dependency of the indirection
elimination on unrelated properties like `noinline`(PR95780) and
`visibility`(PR95778).

This changes the comparison to be only on the `target` attribute which should
be the intent of the code.

gcc

* multiple_target.c (redirect_to_specific_clone): Fix tests
to check individual attribute rather than an attribute list.

gcc/testsuite

* gcc.target/i386/pr95778-1.c: New test.
* gcc.target/i386/pr95778-2.c: New test.

4 years agors6000: Add support for __builtin_cpu_is ("power10")
Peter Bergner [Fri, 26 Jun 2020 00:06:37 +0000 (19:06 -0500)]
rs6000: Add support for __builtin_cpu_is ("power10")

Add support for __builtin_cpu_is ("power10").  Also add documentation for
the recently added "arch_3_1" and "mma" __builtin_cpu_supports arguments.

2020-06-25  Peter Bergner  <bergner@linux.ibm.com>

gcc/
* config/rs6000/rs6000-call.c (cpu_is_info) <power10>: New.
* doc/extend.texi (PowerPC Built-in Functions): Document power10,
arch_3_1 and mma.

gcc/testsuite/
* gcc.target/powerpc/cpu-builtin-1.c: Add tests for power10, arch_3_1
and mma.

4 years agoc++: Change the default dialect to C++17.
Marek Polacek [Fri, 15 May 2020 04:05:33 +0000 (00:05 -0400)]
c++: Change the default dialect to C++17.

Since GCC 9, C++17 support is no longer experimental.  It was too late
to change the default C++ dialect to C++17 in GCC 10, but I think now
it's time to pull the trigger (C++14 was made the default in GCC 6.1).
We're still missing two C++17 library features, but that shouldn't stop
us.  See
<https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017>
and
<https://gcc.gnu.org/projects/cxx-status.html#cxx17>
for the C++17 status.

I won't list all C++17 features here, but just a few heads-up:

- trigraphs were removed (hardly anyone cares, unless your keyboard is
  missing the # key),
- operator++(bool) was removed (so some tests now run in C++14 and down
  only),
- the keyword register was removed (some legacy code might trip on
  this),
- noexcept specification is now part of the type system and C++17 does
  not allow dynamic exception specifications anymore (the empty throw
  specification is still available, but it is deprecated),
- the evaluation order rules are different in C++17,
- static constexpr data members are now implicitly inline (which makes
  them definitions),
- C++17 requires guaranteed copy elision, meaning that a copy/move
  constructor call might be elided completely.  That means that if
  something relied on a constructor being instantiated via e.g. copying
  a function parameter, it might now fail.

I'll post an update for cxx-status.html and add a new caveat to changes.html
once this is in.

gcc/ChangeLog:
* doc/invoke.texi (C Dialect Options): Adjust -std default for C++.
* doc/standards.texi (C Language): Correct the default dialect.
(C++ Language): Update the default for C++ to gnu++17.

gcc/c-family/ChangeLog:
* c-opts.c (c_common_init_options): Default to gnu++17.

gcc/testsuite/ChangeLog:
* c-c++-common/torture/vector-subscript-3.c: In C++17, define away
the keyword register.
* g++.dg/cpp1z/attributes-enum-1a.C: Only run pre-C++17.
* g++.dg/cpp1z/fold7a.C: Likewise.
* g++.dg/cpp1z/nontype3a.C: Likewise.
* g++.dg/cpp1z/utf8-2a.C: Likewise.
* g++.dg/parse/error11.C: Update expected diagnostics for C++17.
* g++.dg/torture/pr34850.C: Add -Wno-attribute-warning.
* g++.dg/torture/pr49394.C: In C++17, use noexcept(false).
* g++.dg/torture/pr82154.C: Use -std=c++14.
* lib/target-supports.exp: Set to C++17.
* obj-c++.dg/try-catch-9.mm: Use -Wno-register.

libgomp/ChangeLog:
* testsuite/libgomp.c++/atomic-3.C: Use -std=gnu++14.

4 years agoFix failure in gfortran.dg/gomp/combined-if.f90 test
Kwok Cheung Yeung [Fri, 26 Jun 2020 17:35:36 +0000 (10:35 -0700)]
Fix failure in gfortran.dg/gomp/combined-if.f90 test

Enabling nvptx offloading results in extra '#pragma omp simd' statements
in the tree dump with an extra '_simt_'.

2020-06-26  Kwok Cheung Yeung  <kcy@codesourcery.com>

gcc/testsuite/
* gfortran.dg/gomp/combined-if.f90: Adjust expected number
of matches depending on whether nvptx offloading is supported.
* lib/target-supports.exp
(check_effective_target_offload_nvptx): New.

4 years agoTake into account range info to optimize range tests into bit tests
Eric Botcazou [Fri, 26 Jun 2020 13:23:05 +0000 (15:23 +0200)]
Take into account range info to optimize range tests into bit tests

The patch is aimed at addressing the following two issues:

  1. In order to protect the shift operation from undefinedness, the
new bit test is guarded with a new test, but this new test uses the
range of the bit test values, not that of the shift operation so,
if the input is in the range of the shift operation but not of the
bit test values, then the subsequent VRP pass cannot eliminate the
new test.  Moreover changing the new test to use the range of the
shift operation, instead of that of the bit test values, in the
general case would pessimize the cases which are in between.

  2. If the new test can be eliminated, then it becomes profitable
to do the optimization into a bit test for one fewer comparison in
the source code.

Therefore the patch changes optimize_range_tests_to_bit_test to use
the range info of the input in order to eliminate the new test.

gcc/ChangeLog:
* tree-ssa-reassoc.c (dump_range_entry): New function.
(debug_range_entry): New debug function.
(update_range_test): Invoke dump_range_entry for dumping.
(optimize_range_tests_to_bit_test): Merge the entry test in the
bit test when possible and lower the profitability threshold.

gcc/ada/ChangeLog:
* exp_ch4.adb (Expand_Set_Membership): Expand the membership test
using left associativity instead of right associativity.

gcc/testsuite/ChangeLog:
* gnat.dg/opt86_pkg.ads: New helper.
* gnat.dg/opt86a.adb: New test.
* gnat.dg/opt86b.adb: Likewise.
* gnat.dg/opt86c.adb: Likewise.

4 years agod/testsuite: Amend test to actually trigger the ICE being fixed
Iain Buclaw [Fri, 26 Jun 2020 07:24:29 +0000 (09:24 +0200)]
d/testsuite: Amend test to actually trigger the ICE being fixed

gcc/testsuite/ChangeLog:

* gdc.dg/pr95250.d: Updated.

4 years agocoroutines: Handle non-method promise expressions [PR95519]
Iain Sandoe [Fri, 26 Jun 2020 09:48:35 +0000 (10:48 +0100)]
coroutines: Handle non-method promise expressions [PR95519]

The PR  points out that the standard does not restrict promise
expressions to methods, but the current implementation does.

The patch factors out the building of a general promise expression,
and then uses it in a fairly mechanical replacement of each case
that we need such an expressions.

This extends the handling for p.xxxxxx() expressions to cover the
cases where the promise member is some form callable.

Tests are added for each of the promise expressions.

It's somewhat tortuous to find good uses for this for the
get-return-object and get-return-object-on-allocation-failure
cases, but they are included anyway.

gcc/cp/ChangeLog:

PR c++/95519
* coroutines.cc (struct coroutine_info):Add a field
to hold computed p.return_void expressions.
(coro_build_promise_expression): New.
(get_coroutine_return_void_expr): New.
(finish_co_yield_expr): Build the promise expression
using coro_build_promise_expression.
(finish_co_return_stmt): Likewise.
(build_init_or_final_await): Likewise.
(morph_fn_to_coro): Likewise, for several cases.

gcc/testsuite/ChangeLog:

PR c++/95519
* g++.dg/coroutines/torture/pr95519-00-return_void.C: New test.
* g++.dg/coroutines/torture/pr95519-01-initial-suspend.C: New test.
* g++.dg/coroutines/torture/pr95519-02-final_suspend.C: New test.
* g++.dg/coroutines/torture/pr95519-03-return-value.C: New test.
* g++.dg/coroutines/torture/pr95519-04-yield-value.C: New test.
* g++.dg/coroutines/torture/pr95519-05-gro.C: New test.
* g++.dg/coroutines/torture/pr95519-06-grooaf.C: New test.
* g++.dg/coroutines/torture/pr95519-07-unhandled-exception.C: New test.

4 years agocoroutines: Handle bad g-r-o-o-a-f cases.
Iain Sandoe [Fri, 26 Jun 2020 09:52:07 +0000 (10:52 +0100)]
coroutines: Handle bad g-r-o-o-a-f cases.

If we see a get_return_object_on_allocation_failure in the
promise, we expect to be able to use it.  If this isn't
possible (because of some error in the declaration) then we
need to handle the erroneous return to allow following code
to complete.

gcc/cp/ChangeLog:

* coroutines.cc (morph_fn_to_coro): Handle error
returns in building g-r-o-o-a-f expressions.

gcc/testsuite/ChangeLog:

* g++.dg/coroutines/coro1-allocators.h (BAD_GROOAF_STATIC):
New.
* g++.dg/coroutines/coro-bad-grooaf-00-static.C: New test.

4 years agotree-optimization/95897 - fix fold-left SLP reduction insert place
Richard Biener [Fri, 26 Jun 2020 08:08:58 +0000 (10:08 +0200)]
tree-optimization/95897 - fix fold-left SLP reduction insert place

This fixes computation of the insertion place for fold-left SLP
reductions where the PHIs do not have vectorized stmts.  The
SLP representation isn't perfect here thus the following.

2020-06-26  Richard Biener  <rguenther@suse.de>

PR tree-optimization/95897
* tree-vectorizer.h (vectorizable_induction): Remove
unused gimple_stmt_iterator * parameter.
* tree-vect-loop.c (vectorizable_induction): Likewise.
(vect_analyze_loop_operations): Adjust.
* tree-vect-stmts.c (vect_analyze_stmt): Likewise.
(vect_transform_stmt): Likewise.
* tree-vect-slp.c (vect_schedule_slp_instance): Adjust
for fold-left reductions, clarify existing reduction case.

* gcc.dg/vect/pr95897.c: New testcase.

4 years agoThis patch removes the use of the "register" keyword from the bsearch() and bsearch_r...
Nick Clifton [Fri, 26 Jun 2020 09:04:41 +0000 (10:04 +0100)]
This patch removes the use of the "register" keyword from the bsearch() and bsearch_r() functions supplied by libiberty.  The register keyword is deprecated in C++17.

2020-06-25  Nick Clifton  <nickc@redhat.com>

include/
* libiberty.h (bsearch_r): Remove use of the register keyword from
the prototype.

libiberty/
* bsearch.c (bsearch): Remove use of register keyword.
* bsearch_r.c (bsearch_r): Likewise.

4 years agoDaily bump.
GCC Administrator [Fri, 26 Jun 2020 00:16:23 +0000 (00:16 +0000)]
Daily bump.

4 years agoc++: Add test for c++/91104
Marek Polacek [Thu, 25 Jun 2020 23:04:06 +0000 (19:04 -0400)]
c++: Add test for c++/91104

Fixed by r271705.

gcc/testsuite/ChangeLog:

PR c++/91104
* g++.dg/cpp1y/lambda-generic-variadic21.C: New test.

4 years agoPR fortran/95828 - Buffer overflows with SELECT RANK
Harald Anlauf [Thu, 25 Jun 2020 18:34:48 +0000 (20:34 +0200)]
PR fortran/95828 - Buffer overflows with SELECT RANK

With SELECT RANK, name mangling results in long internal symbols that
overflows internal buffers.  Fix that.

gcc/fortran/
PR fortran/95828
* match.c (select_rank_set_tmp): Enlarge internal buffer used in
generating a mangled name.
* resolve.c (resolve_select_rank): Likewise.

4 years agoPR fortran/95826 - Buffer overflows with PDTs and long symbols
Harald Anlauf [Thu, 25 Jun 2020 18:32:13 +0000 (20:32 +0200)]
PR fortran/95826 - Buffer overflows with PDTs and long symbols

With PDTs (parameterized derived types), name mangling results in variably
long internal symbols.  Use a dynamic buffer instead of a fixed-size one.

gcc/fortran/
PR fortran/95826
* decl.c (gfc_match_decl_type_spec): Replace a fixed size
buffer by a pointer and reallocate if necessary.

4 years agoThis patch disables the movsicc pattern in the M32R backend, which is repsonsible...
Nick Clifton [Thu, 25 Jun 2020 15:48:34 +0000 (16:48 +0100)]
This patch disables the movsicc pattern in the M32R backend, which is repsonsible for the failure of several gcc testsuite entries.

2020-06-05  Nick Clifton  <nickc@redhat.com>

gcc/
* config/m32r/m32r.md (movsicc): Disable pattern.

4 years agod: Do not implicitly set DECL_DECLARED_INLINE_P on member functions.
Iain Buclaw [Thu, 25 Jun 2020 07:33:26 +0000 (09:33 +0200)]
d: Do not implicitly set DECL_DECLARED_INLINE_P on member functions.

This has been questionable behaviour since it was added, and though it
has no effect on wider discussions around what should be the correct
semantics of pragma(inline) within D modules, doing this tree-level
optimization has mostly zero benefit as cross-module inlining doesn't
happen anyway.

gcc/d/ChangeLog:

* decl.cc (get_symbol_decl): Do not implicitly set
DECL_DECLARED_INLINE_P on member functions.

4 years agod: Move d_signed_type and d_unsigned_type to types.cc
Iain Buclaw [Fri, 19 Jun 2020 14:51:13 +0000 (16:51 +0200)]
d: Move d_signed_type and d_unsigned_type to types.cc

These two functions are not tied to the language-specific part of the
front-end in any way.

gcc/d/ChangeLog:

* d-lang.cc (d_gimplify_expr_p): Make static.
(d_parse_file): Likewise.
(d_signed_or_unsigned_type): Move to types.cc.
(d_unsigned_type): Likewise.
(d_signed_type): Likewise.
* d-tree.h (d_unsigned_type): Change the location in file.
(d_signed_type): Likewise.
* types.cc (d_signed_or_unsigned_type): Moved from d-lang.cc.
(d_unsigned_type): Likewise.
(d_signed_type): Likewise.

4 years agod: Merge upstream dmd 4be011355.
Iain Buclaw [Wed, 24 Jun 2020 06:35:58 +0000 (08:35 +0200)]
d: Merge upstream dmd 4be011355.

Fixes self-assignment warnings seen when compiling with clang.

Reviewed-on: https://github.com/dlang/dmd/pull/11315

gcc/d/ChangeLog:

PR d/95075
* dmd/MERGE: Merge upstream dmd 4be011355.

4 years agod: Merge upstream dmd 90450f3ef.
Iain Buclaw [Tue, 23 Jun 2020 20:43:27 +0000 (22:43 +0200)]
d: Merge upstream dmd 90450f3ef.

Fixes a regression caused by an incomplete backport of converting the
Expression semantic pass to a Visitor.

Reviewed-on: https://github.com/dlang/dmd/pull/11314

gcc/d/ChangeLog:

PR d/95250
* dmd/MERGE: Merge upstream dmd 90450f3ef.

gcc/testsuite/ChangeLog:

PR d/95250
* gdc.dg/pr95250.d: New test.

4 years agod: Remove another dependency on the front-end OutBuffer type.
Iain Buclaw [Tue, 23 Jun 2020 16:08:54 +0000 (18:08 +0200)]
d: Remove another dependency on the front-end OutBuffer type.

As the DMD front-end never frees allocated memory, the glue layer
between the DMD front-end and GCC should generally avoid using DMD types
and interfaces if the purpose is internal only.

gcc/d/ChangeLog:

* d-lang.cc (d_parse_file): Replace OutBuffer with obstack.

4 years agod: Merge upstream dmd 5fc1806cd.
Iain Buclaw [Tue, 23 Jun 2020 14:42:54 +0000 (16:42 +0200)]
d: Merge upstream dmd 5fc1806cd.

Backports the OutBuffer interface from upstream dmd master, removing
another difference this and the self-hosted D branch that is purely
refactoring, and doesn't introduce any mechanical changes.

Reviewed-on: https://github.com/dlang/dmd/pull/11302

gcc/d/ChangeLog:

* dmd/MERGE: Merge upstream dmd 5fc1806cd.
* d-lang.cc (d_parse_file): Use peekChars to get string representation
of OutBuffer data.

4 years agod: Fix ICE in uda_attribute_p when looking up unknown attribute
Iain Buclaw [Tue, 23 Jun 2020 14:25:29 +0000 (16:25 +0200)]
d: Fix ICE in uda_attribute_p when looking up unknown attribute

The target attribute table is not guaranteed to be set in all backends.

gcc/d/ChangeLog:

PR d/95173
* d-attribs.cc (uda_attribute_p): Don't search target attribute table
if NULL.

gcc/testsuite/ChangeLog:

PR d/95173
* gdc.dg/pr95173.d: New test.

4 years agod: Don't set DECL_INITIAL if initializer is 'void'.
Iain Buclaw [Tue, 23 Jun 2020 12:45:50 +0000 (14:45 +0200)]
d: Don't set DECL_INITIAL if initializer is 'void'.

Declarations initialized with `= void` were being default initialized.
That is not really the intent, and misses the small optimization that
should have been gained from using void initializations.

gcc/d/ChangeLog:

* decl.cc (DeclVisitor::visit (VarDeclaration *)): Don't set
DECL_INITIAL if initializer is 'void'.

gcc/testsuite/ChangeLog:

* gdc.dg/init1.d: New test.

4 years agod: Turn on deprecation warnings by default.
Iain Buclaw [Tue, 23 Jun 2020 08:40:37 +0000 (10:40 +0200)]
d: Turn on deprecation warnings by default.

This is the default in the upstream reference compiler, and can reduce
some confusion when comparing warning/error messages of gdc and dmd side
by side.

Merges libphobos with upstream druntime d05ebaad and phobos 021ae0df7.

Reviewed-on: https://github.com/dlang/druntime/pull/3127
     https://github.com/dlang/phobos/pull/7521

gcc/d/ChangeLog:

* d-lang.cc (d_init_options): Turn on deprecation warnings by default.

libphobos/ChangeLog:

* libdruntime/MERGE: Merge upstream druntime d05ebaad.
* src/MERGE: Merge upstream phobos 021ae0df7.
* testsuite/libphobos.typeinfo/struct-align.d: Remove empty statement.

gcc/testsuite/ChangeLog:

* gdc.dg/asm1.d: Don't use deprecated asm syntax.
* gdc.dg/compilable.d: Add public to selective import.
* gdc.dg/lto/ltotests_0.d: Explicitly catch Throwable.
* gdc.dg/runnable.d: Remove empty statement.

4 years agod: Merge upstream dmd 4f1046222.
Iain Buclaw [Mon, 22 Jun 2020 19:29:16 +0000 (21:29 +0200)]
d: Merge upstream dmd 4f1046222.

Renames OnScopeStatement to ScopeGuardStatement.

Reviewed-on: https://github.com/dlang/dmd/pull/11285

gcc/d/ChangeLog:

* dmd/MERGE: Merge upstream dmd 4f1046222.
* toir.cc (IRVisitor::visit (OnScopeGuardStatement *)): Rename to ...
(IRVisitor::visit (ScopeGuardStatement *)): ... this.

4 years agoFortran: Fix character-kind=4 substring resolution (PR95837)
Tobias Burnus [Thu, 25 Jun 2020 14:57:08 +0000 (16:57 +0200)]
Fortran: Fix character-kind=4 substring resolution (PR95837)

Testing showed that it is always set and its value matches
always ts->kind (if available) or otherwise, if it is a variable,
the sym->ts.kind.

gcc/fortran/ChangeLog:

PR fortran/95837
* resolve.c (gfc_resolve_substring_charlen): Remove
bogus ts.kind setting for the expression.

gcc/testsuite/ChangeLog:

PR fortran/95837
* gfortran.dg/char4-subscript.f90: New test.

4 years agotree-optimization/95839 - allow CTOR vectorization without loads
Richard Biener [Thu, 25 Jun 2020 10:47:20 +0000 (12:47 +0200)]
tree-optimization/95839 - allow CTOR vectorization without loads

This removes a premature check for enough datarefs in a basic-block
before we consider vectorizing it which leaves basic-blocks with
just vectorizable vector constructors unvectorized.  The check
is effectively done by the following check for store groups
which then also include constructors.

2020-06-25  Richard Biener  <rguenther@suse.de>

PR tree-optimization/95839
* tree-vect-slp.c (vect_slp_analyze_bb_1): Remove premature
check on the number of datarefs.

* gcc.dg/vect/bb-slp-pr95839.c: New testcase.

4 years agopowerpc: Restore bootstrap for Darwin.
Iain Sandoe [Thu, 25 Jun 2020 07:56:23 +0000 (08:56 +0100)]
powerpc: Restore bootstrap for Darwin.

Darwin has signed chars and the fields in the insn_data
struct are const char, which leads to the fail.

gcc/ChangeLog:

* config/rs6000/rs6000-call.c (mma_init_builtins): Cast
the insn_data n_operands value to unsigned.

4 years agofortran: Fix ICE when 'if' clause used with 'target parallel' (PR95869)
Kwok Cheung Yeung [Thu, 25 Jun 2020 11:40:53 +0000 (04:40 -0700)]
fortran: Fix ICE when 'if' clause used with 'target parallel' (PR95869)

2020-06-25  Tobias Burnus  <tobias@codesourcery.com>
    Kwok Cheung Yeung  <kcy@codesourery.com>

gcc/fortran/

PR fortran/95869
* trans-openmp.c (gfc_trans_omp_target): Use correct scoping block.

gcc/testsuite/

PR fortran/95869
* gfortran.dg/gomp/combined-if.f90 (test_target_parallel): Re-enable.
* gfortran.dg/gomp/pr95869.f90: New.

4 years agofortran: Apply if clause to all sub-constructs in combined OpenMP constructs
Kwok Cheung Yeung [Thu, 25 Jun 2020 11:40:16 +0000 (04:40 -0700)]
fortran: Apply if clause to all sub-constructs in combined OpenMP constructs

The unmodified 'if' clause should be applied to all the sub-constructs that
accept an 'if' clause in a combined OpenMP construct, and not just to the
'parallel' sub-construct.

2020-06-25  Kwok Cheung Yeung  <kcy@codesourcery.com>

gcc/fortran/

* trans-openmp.c (gfc_split_omp_clauses): Add if clause
to target and simd sub-constructs.

gcc/testsuite/

* gfortran.dg/gomp/combined-if.f90: New.

Reviewed-by: Jakub Jelinek <jakub@redhat.com>
4 years agoAlways use SLP vector defs to determine insertion place
Richard Biener [Thu, 25 Jun 2020 11:41:47 +0000 (13:41 +0200)]
Always use SLP vector defs to determine insertion place

With the last vectorizable_shift patch we can now always use the
SLP vector defs to determine the vectorized stmt insertion place,
paving the way for a "verifier" for pending restructuring and
BB vectorization of reductions and other live stmts.

2020-06-25  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_schedule_slp_instance): Always use
vector defs to determine insertion place.

4 years agox96: Remove PTA_CLWB from PTA_ICELAKE_CLIENT
H.J. Lu [Wed, 24 Jun 2020 16:12:47 +0000 (09:12 -0700)]
x96: Remove PTA_CLWB from PTA_ICELAKE_CLIENT

CLWB isn't supported on Ice Lake client.  But Ice Lake server and Tiger
Lake support it.  Move PTA_CLWB to PTA_ICELAKE_SERVER and PTA_TIGERLAKE.

PR target/95874
* config/i386/i386.h (PTA_ICELAKE_CLIENT): Remove PTA_CLWB.
(PTA_ICELAKE_SERVER): Add PTA_CLWB.
(PTA_TIGERLAKE): Add PTA_CLWB.

4 years agotree-optimization/95866 - avoid using scalar ops for vectorized shift
Richard Biener [Thu, 25 Jun 2020 09:21:20 +0000 (11:21 +0200)]
tree-optimization/95866 - avoid using scalar ops for vectorized shift

This avoids using the original scalar SSA operand when vectorizing
a shift with a vectorized shift operand where we know all vector
components have the same value and thus we can use a vector by
scalar shift.  Using the scalar SSA operand causes a possibly
long chain of scalar computation to be retained so it's better
to simply extract lane zero from the available vectorized shift
operand.

2020-06-25  Richard Biener  <rguenther@suse.de>

PR tree-optimization/95866
* tree-vect-stmts.c (vectorizable_shift): Reject incompatible
vectorized shift operands.  For scalar shifts use lane zero
of a vectorized shift operand.

* gcc.dg/vect/bb-slp-pr95866.c: New testcase.

4 years agogcov-tool: fix merge operation for summary
Martin Liska [Thu, 25 Jun 2020 09:20:52 +0000 (11:20 +0200)]
gcov-tool: fix merge operation for summary

libgcc/ChangeLog:

* libgcov-driver.c (merge_summary): Remove function as its name
is misleading and doing something different.
(dump_one_gcov): Add ATTRIBUTE_UNUSED for 2 args. Take read summary
in gcov-tool.
* libgcov-util.c (curr_object_summary): Remove.
(read_gcda_file): Remove unused curr_object_summary.
(gcov_merge): Merge summaries.
* libgcov.h: Add summary argument for gcov_info struct.

4 years agoVEC_COND_EXPR: clean up first argument
Martin Liska [Wed, 24 Jun 2020 06:08:00 +0000 (08:08 +0200)]
VEC_COND_EXPR: clean up first argument

gcc/ChangeLog:

PR tree-optimization/95745
PR middle-end/95830
* gimple-isel.cc (gimple_expand_vec_cond_exprs): Delete dead
SSA_NAMEs used as the first argument of a VEC_COND_EXPR.  Always
return 0.
* tree-vect-generic.c (expand_vector_condition): Remove dead
SSA_NAMEs used as the first argument of a VEC_COND_EXPR.

4 years agoDaily bump.
GCC Administrator [Thu, 25 Jun 2020 00:16:30 +0000 (00:16 +0000)]
Daily bump.

4 years ago[PATCH, PR target/94954] Fix wrong codegen for vec_pack_to_short_fp32() builtin
Will Schmidt [Wed, 24 Jun 2020 20:28:24 +0000 (15:28 -0500)]
[PATCH, PR target/94954] Fix wrong codegen for vec_pack_to_short_fp32() builtin

Hi,
  Fix codegen for builtin vec_pack_to_short_fp32.  This includes adding
a define_insn for xvcvsphp, and adding a new define_expand for
convert_4f32_8f16.

2020-06-24  Will Schmidt  <will_schmidt@vnet.ibm.com>

PR target/94954

gcc
* config/rs6000/altivec.h (vec_pack_to_short_fp32): Update.
* config/rs6000/altivec.md (UNSPEC_CONVERT_4F32_8F16): New unspec.
(convert_4f32_8f16): New define_expand
* config/rs6000/rs6000-builtin.def (convert_4f32_8f16): New builtin define
and overload.
* config/rs6000/rs6000-call.c (P9V_BUILTIN_VEC_CONVERT_4F32_8F16): New
overloaded builtin entry.
* config/rs6000/vsx.md (UNSPEC_VSX_XVCVSPHP): New unspec.
(vsx_xvcvsphp): New define_insn.

gcc/testsuite
* gcc.target/powerpc/builtins-1-p9-runnable.c: Update.

4 years agooutputs.exp: conditionals for split-dwarf and lto plugin
Alexandre Oliva [Wed, 24 Jun 2020 20:20:49 +0000 (17:20 -0300)]
outputs.exp: conditionals for split-dwarf and lto plugin

This patch introduces support for conditionals (and expr) expansions
to file lists in proc outest in outputs.exp.

The conditionals machinery is now used to guard files that are only
created by the LTO plugin, or when not using the LTO plugin.

It is also used to avoid special-casing .dwo files: the condition of
when they're expected is now encoded in the list.

Furthermore, the -g flag, that used to be specified along with
$gsplit_dwarf, is now moved into $gsplit_dwarf, so that we don't
compile with -g if -gsplit-dwarf is not needed.  This avoids having to
deal with .dSYM directories.

Further removing special cases, $aout is now dealt with in a more
general way, using expr to perform variable/string expansion.

for  gcc/testsuite/ChangeLog

PR testsuite/95416
PR testsuite/95577
* gcc.misc-tests/outputs.exp (gsplit_dwarf): Move -g into it.
(outest): Introduce conditionals and string/variable/expr
expansion.  Drop special-casing of $aout and .dwo.
(gspd): New conditional.  Guard all .dwo files with it.
(ltop): New conditional.  Guard files created by the LTO
plugin with it.  Guard files created by fat LTO compilation
with its negation.  Add a few -fno-use-linker-plugin tests
guarded by it.

4 years agoc++: Handle bad pack expansion in base list. [PR96752]
Nicholas Krause [Tue, 23 Jun 2020 19:47:37 +0000 (15:47 -0400)]
c++: Handle bad pack expansion in base list. [PR96752]

This fixes PR95672 by adding the missing TYPE_PACK_EXPANSION case in
cxx_incomplete_type_diagnostic in order to avoid ICEs on diagnosing
incomplete template pack expansion cases.

Tested on powerpc64le-unknown-linux-gnu.

gcc/cp/ChangeLog:

PR c++/95672
* typeck2.c (cxx_incomplete_type_diagnostic): Add missing
TYPE_EXPANSION_PACK check for diagnosing incomplete types in
cxx_incomplete_type_diagnostic.

gcc/testsuite/ChangeLog:

PR c++/95672
* g++.dg/template/pr95672.C: New test.

Signed-off-by: Nicholas Krause <xerofoify@gmail.com>
4 years agocoroutines: Copy attributes to the outlined functions [PR95518,PR95813]
Iain Sandoe [Wed, 24 Jun 2020 17:48:33 +0000 (18:48 +0100)]
coroutines: Copy attributes to the outlined functions [PR95518,PR95813]

We had omitted the copying of function attributes, we now copy
the used, alignment, section values from the original decal and
the complete set of function attributes.  It is likely that
some function attributes don't really make sense for coroutines,
but that can be disgnosed separately. Also mark the outlined
functions as artificial, since they are; some diagnostic
processing tests this.

gcc/cp/ChangeLog:

PR c++/95518
PR c++/95813
* coroutines.cc (act_des_fn): Copy function
attributes onto the outlined coroutine helpers.

gcc/testsuite/ChangeLog:

PR c++/95518
PR c++/95813
* g++.dg/coroutines/pr95518.C: New test.
* g++.dg/coroutines/pr95813.C: New test.

4 years agocoroutines: Update tests for get-return-object errors.
Iain Sandoe [Wed, 24 Jun 2020 15:10:12 +0000 (16:10 +0100)]
coroutines: Update tests for get-return-object errors.

We updated the handling of the errors for cases when the
ramp return cannot be constructed from the user's provided
get-return-object method.  This updates the testcases to
cover this.

gcc/testsuite/ChangeLog:

* g++.dg/coroutines/void-gro-non-class-coro.C: Moved to...
* g++.dg/coroutines/coro-bad-gro-01-void-gro-non-class-coro.C: ...here.
* g++.dg/coroutines/coro-bad-gro-00-class-gro-scalar-return.C: New test.

4 years agoc++: Simplify build_over_call a bit.
Jason Merrill [Wed, 24 Jun 2020 05:49:06 +0000 (01:49 -0400)]
c++: Simplify build_over_call a bit.

It occurred to me that if we're looking up the defining base within the
conversion_path binfo, we could use the result for the conversion as well
instead of doing two separate conversions.

gcc/cp/ChangeLog:

* call.c (build_over_call): Only call build_base_path once.

4 years agoc++: Fix ICE with using and virtual function. [PR95719]
Jason Merrill [Wed, 24 Jun 2020 01:25:21 +0000 (21:25 -0400)]
c++: Fix ICE with using and virtual function. [PR95719]

conversion_path points to the base where we found the using-declaration, not
where the function is actually a member; look up the actual base.  And then
maybe look back to the derived class if the base is primary.

gcc/cp/ChangeLog:

PR c++/95719
* call.c (build_over_call): Look up the overrider in base_binfo.
* class.c (lookup_vfn_in_binfo): Look through BINFO_PRIMARY_P.

gcc/testsuite/ChangeLog:

PR c++/95719
* g++.dg/tree-ssa/final4.C: New test.

4 years agosimplify-rtx: Simplify rotates by zero
Roger Sayle [Wed, 24 Jun 2020 19:18:03 +0000 (19:18 +0000)]
simplify-rtx: Simplify rotates by zero

2020-06-24  Roger Sayle  <roger@nextmovesoftware.com>
    Segher Boessenkool  <segher@kernel.crashing.org>

* simplify-rtx.c (simplify_unary_operation_1): Simplify rotates by 0.

4 years agosimplify-rtx: Parity of parity is parity
Roger Sayle [Wed, 24 Jun 2020 18:48:43 +0000 (18:48 +0000)]
simplify-rtx: Parity of parity is parity

2020-06-24  Roger Sayle  <roger@nextmovesoftware.com>

* simplify-rtx.c (simplify_unary_operation_1): Simplify
(parity (parity x)) as (parity x), i.e. PARITY is idempotent.

4 years agoPR fortran/95827 - Buffer overflows with submodules and coarrays
Harald Anlauf [Wed, 24 Jun 2020 19:03:47 +0000 (21:03 +0200)]
PR fortran/95827 - Buffer overflows with submodules and coarrays

With submodules and coarrays, name mangling results in long internal
symbols.  Enlarge internal buffer.

gcc/fortran/
PR fortran/95827
* iresolve.c (gfc_get_string): Enlarge internal buffer used in
generating the mangled name.

4 years agotree-optimization/95866 - avoid vectorizing uniform SLP subgraphs
Richard Biener [Wed, 24 Jun 2020 13:49:00 +0000 (15:49 +0200)]
tree-optimization/95866 - avoid vectorizing uniform SLP subgraphs

This avoids vectorizing SLP subgraphs that just compute uniform
operations on all-same operands.  That fixes the less interesting
(but most embarrasing) part of the testcase in the PR.  On the
way it also fixed a missing matches[0] reset in the last
refactoring touching that place.

2020-06-24  Richard Biener  <rguenther@suse.de>

PR tree-optimization/95866
* tree-vect-slp.c (vect_slp_tree_uniform_p): New.
(vect_build_slp_tree_2): Properly reset matches[0],
ignore uniform constants.

* gcc.target/i386/pr95866-1.c: New testcase.

4 years agoMake contrib/download_prerequisites work on AIX and OpenBSD
Ilya Leoshkevich [Thu, 11 Jun 2020 13:58:44 +0000 (15:58 +0200)]
Make contrib/download_prerequisites work on AIX and OpenBSD

contrib/ChangeLog:

2020-06-11  Ilya Leoshkevich  <iii@linux.ibm.com>

* download_prerequisites: Support AIX and OpenBSD unames.
Pipe `{gzip,bzip2} -d` to `tar -xf -`.

4 years agox86: Remove brand ID check for Intel processors
H.J. Lu [Fri, 12 Jun 2020 23:33:23 +0000 (16:33 -0700)]
x86: Remove brand ID check for Intel processors

Brand ID was a feature that briefly existed in some Pentium III and
Pentium 4 CPUs.  The CPUs that had non-zero brand ID still have had
valid family/model.  Brand ID just gives a marketing name for the CPU.
Remove the extra code for brand ID check.

gcc/

PR target/95660
* common/config/i386/cpuinfo.h (get_intel_cpu): Remove brand_id.
(cpu_indicator_init): Likewise.
* config/i386/driver-i386.c (host_detect_local_cpu): Updated.

gcc/testsuite/

PR target/95660
* gcc.target/i386/builtin_target.c (check_detailed): Updated.

4 years agox86: Add Cooper Lake detection with AVX512BF16
H.J. Lu [Sat, 20 Jun 2020 04:17:26 +0000 (21:17 -0700)]
x86: Add Cooper Lake detection with AVX512BF16

All Sky Lake family processors have the same CPUID model number, 0x55.
The differences are Cascade Lake has AVX512VNNI and Cooper Lake has
AVX512VNNI + AVX512BF16.  Check AVX512BF16 for Cooper Lake.

PR target/95774
* common/config/i386/cpuinfo.h (get_intel_cpu): Add Cooper Lake
detection with AVX512BF16.