gcc.git
4 years agotree-optimization/92260 - improve fix
Richard Biener [Fri, 15 May 2020 09:14:53 +0000 (11:14 +0200)]
tree-optimization/92260 - improve fix

This improves the fix for PR92260 changing the number of vector
computation to the canonical one, not needing to look at the
using stmt.

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

PR tree-optimization/92260
* tree-vect-slp.c (vect_get_constant_vectors): Compute
the number of vector stmts in a canonical way.

4 years agoFix clang [-Wmisleading-indentation] in hsa-gen.c.
Martin Liska [Fri, 15 May 2020 10:34:12 +0000 (12:34 +0200)]
Fix clang [-Wmisleading-indentation] in hsa-gen.c.

* hsa-gen.c (get_symbol_for_decl): Fix misleading indentation
warning.

4 years agoWIP amdgcn: use unsigned extend for lshiftrt
Andrew Stubbs [Tue, 28 Apr 2020 19:48:51 +0000 (20:48 +0100)]
WIP amdgcn: use unsigned extend for lshiftrt

This fixes a wrong-code logic error in a previous patch.
Detected by gcc.c-torture/execute/pr53645-2.c.

2020-05-15  Andrew Stubbs  <ams@codesourcery.com>

gcc/
* config/gcn/gcn-valu.md (v<expander><mode>3): Fix unsignedp.

4 years agocontrib: Handle GDB specific test result types
Andrew Burgess [Mon, 11 May 2020 21:32:35 +0000 (22:32 +0100)]
contrib: Handle GDB specific test result types

This commit is for the benefit of GDB, but as the binutils-gdb
repository shares the contrib/ directory with gcc, this commit must
first be applied to gcc then copied back to binutils-gdb.

This commit extends the two scripts contrib/dg-extract-results.{py,sh}
to handle some new, GDB specific test result types.  These test
results types should never appear in GCC, or any other tool that
shares the contrib/ directly, so this change should be harmless.

In this patch series:
  https://sourceware.org/pipermail/gdb-patches/2020-April/167847.html
changes were made in GDB's use of Dejagnu so that two additional
conditions could be detected, these are:

  1. Test names that contain either the build or source paths.  Such
  test names make it difficult to compare the results of two test runs
  of GDB from two different directories, and

  2. Duplicate test names.  Duplicates make it difficult to track down
  exactly which test has failed.

When running Dejagnu on GDB we can now (sometimes) see two additional
test result types matching the above conditions, these are '# of paths
in test names' and '# of duplicate test names'.

If the test is run in parallel mode (make -j...) then these extra test
results will appear in the individual test summary files, but are not
merged into the final summary file.

Additionally, within the summary file there are now two new types of
test summary line, these are 'PATH: ...' and 'DUPLICATE: ...', these
allow users to quickly search the test summary to track down where the
offending test names are.  These lines are similarly not merged into
the unified gdb.sum file after a parallel test run.

This commit extends the dg-extract-results.* scripts to calculate the
totals for the two new result types, and to copy the new test summary
lines into the unified summary file.

contrib/ChangeLog:

* dg-extract-results.py: Handle GDB specific test types.
* dg-extract-results.sh: Likewise.

4 years agotree-optimization/95133 - avoid abnormal edges in path splitting
Richard Biener [Fri, 15 May 2020 07:38:54 +0000 (09:38 +0200)]
tree-optimization/95133 - avoid abnormal edges in path splitting

When path splitting tries to detect a CFG diamond make sure it
is composed of normal (non-EH, not abnormal) edges.  Otherwise
CFG manipulation later may fail.

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

PR tree-optimization/95133
* gimple-ssa-split-paths.c
(find_block_to_duplicate_for_splitting_paths): Check for
normal edges.

* gcc.dg/pr95133.c: New testcase.

4 years agoarm: Add support for interrupt routines to reg_needs_saving_p
Christophe Lyon [Mon, 4 May 2020 13:42:03 +0000 (13:42 +0000)]
arm: Add support for interrupt routines to reg_needs_saving_p

reg_needs_saving_p is only used when dealing with non-interrupt
routines, but it makes sense to extend it to support that context too,
and make arm_compute_save_reg0_reg12_mask use it.

Save only live registers for non-leaf functions, but assume a callee
could clobber any register.

2020-05-15  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/
* config/arm/arm.c (reg_needs_saving_p): Add support for interrupt
routines.
(arm_compute_save_reg0_reg12_mask): Use reg_needs_saving_p.

4 years ago[OpenMP] Fix 'omp exit data' for Fortran arrays (PR 94635)
Tobias Burnus [Fri, 15 May 2020 09:50:34 +0000 (11:50 +0200)]
[OpenMP] Fix 'omp exit data' for Fortran arrays (PR 94635)

gcc/
PR middle-end/94635
* gimplify.c (gimplify_scan_omp_clauses): For MAP_TO_PSET with
OMP_TARGET_EXIT_DATA, use 'release:' unless the associated
item is 'delete:'.

gcc/testsuite
PR middle-end/94635
* gfortran.dg/gomp/target-exit-data.f90: New.

4 years agolibiberty: Handle @live attribute in D demangler.
Iain Buclaw [Fri, 15 May 2020 07:34:36 +0000 (09:34 +0200)]
libiberty: Handle @live attribute in D demangler.

Adds support for demangling D functions annotated with the new
ownership/borrowing system attribute.

libiberty/ChangeLog:

* d-demangle.c (dlang_attributes): Add @live attribute.
* testsuite/d-demangle-expected: Add new tests.

4 years agoi386: Add V2SFmode hadd/hsub instructions [PR95046]
Uros Bizjak [Fri, 15 May 2020 08:02:00 +0000 (10:02 +0200)]
i386: Add V2SFmode hadd/hsub instructions [PR95046]

PFACC/PFNACC 3dNow! instructions got their corresponding SSE alternative
in SSE3, so these can't be implemented with TARGET_MMX_WITH_SSE, which
implies SSE2.  These instructions are only generated via builtins, and
since several 3dNow! insns have no corresponding SSE alternative,
we can't avoid MMX registers with 3dNow! builtins anyway.

Add SSE3/AVX alternatives to the insn pattern, so compiler will be able
to use XMM registers when available, but don't prevent MMX registers,
since they are needed when SSE3 is not active.

Add additional generic insn patterns, used by the combiner to
synthesize horizontal V2SFmode add/sub instructions.  These patterns
are active for TARGET_MMX_WITH_SSE only, and use only XMM registers.

gcc/ChangeLog:

PR target/95046
* config/i386/i386.md (isa): Add sse3_noavx.
(enabled): Handle sse3_noavx.

* config/i386/mmx.md (mmx_haddv2sf3): New expander.
(*mmx_haddv2sf3): Rename from mmx_haddv2sf3.  Add SSE/AVX
alternatives.  Match commutative vec_select selector operands.
(*mmx_haddv2sf3_low): New insn pattern.

(*mmx_hsubv2sf3): Add SSE/AVX alternatives.
(*mmx_hsubv2sf3_low): New insn pattern.

testsuite/ChangeLog:

PR target/95046
* gcc.target/i386/pr95046-8.c: New test.

4 years agoi386: Add V2SFmode hadd/hsub instructions [PR95046]
Uros Bizjak [Fri, 15 May 2020 07:24:38 +0000 (09:24 +0200)]
i386: Add V2SFmode hadd/hsub instructions [PR95046]

PFACC/PFNACC 3dNow! instructions got their corresponding SSE alternative
in SSE3, so these can't be implemented with TARGET_MMX_WITH_SSE, which
implies SSE2.  These instructions are only generated via builtins, and
since several 3dNow! insns have no corresponding SSE alternative,
we can't avoid MMX registers with 3dNow! builtins anyway.

Add SSE3/AVX alternatives to the insn pattern, so compiler will be able
to use XMM registers when available, but don't prevent MMX registers,
since they are needed when SSE3 is not active.

Add additional generic insn patterns, used by the combiner to
synthesize horizontal V2SFmode add/sub instructions.  These patterns
are active for TARGET_MMX_WITH_SSE only, and use only XMM registers.

gcc/ChangeLog:

PR target/95046
* config/i386/i386.md (isa): Add sse3_noavx.
(enabled): Handle sse3_noavx.

* config/i386/mmx.md (mmx_haddv2sf3): New expander.
(*mmx_haddv2sf3): Rename from mmx_haddv2sf3.  Add SSE/AVX
alternatives.  Match commutative vec_select selector operands.
(*mmx_haddv2sf3_low): New insn pattern.

(*mmx_hsubv2sf3): Add SSE/AVX alternatives.
(*mmx_hsubv2sf3_low): New insn pattern.

testsuite/ChangeLog:

PR target/95046
* gcc.target/i386/pr95046-8.c: New test.

4 years agotree-optimization/33315 - common stores during sinking
Richard Biener [Wed, 15 Apr 2020 10:09:01 +0000 (12:09 +0200)]
tree-optimization/33315 - common stores during sinking

This implements commoning of stores to a common successor in
a simple ad-hoc way.  I've decided to put it into the code sinking
pass since, well, it sinks stores.  It's still separate since
it does not really sink code into less executed places.

It's ad-hoc since it does not perform any dataflow or alias analysis
but simply only considers trailing stores in a block, iteratively
though.  If the stores are from different values a PHI node is
inserted to merge them.  gcc.dg/tree-ssa/split-path-7.c shows
that path splitting will eventually undo this very transform,
I've decided to not bother with it and simply disable sinking for
the particular testcase.

Doing this transform is good for code size when the stores are
from constants, once we have to insert PHIs the situation becomes
less clear but it's a transform we do elsewhere as well
(cselim for one), and reversing the transform should be easy.

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

PR tree-optimization/33315
* tree-ssa-sink.c: Include tree-eh.h.
(sink_stats): Add commoned member.
(sink_common_stores_to_bb): New function implementing store
commoning by sinking to the successor.
(sink_code_in_bb): Call it, pass down TODO_cleanup_cfg returned.
(pass_sink_code::execute): Likewise.  Record commoned stores
in statistics.

* gcc.dg/tree-ssa/ssa-sink-13.c: New testcase.
* gcc.dg/tree-ssa/ssa-sink-14.c: Likewise.
* gcc.dg/tree-ssa/split-path-7.c: Disable sinking.

4 years agoFold (add -1; zero_ext; add +1) operations to zero_ext when not overflow(PR37451...
Xionghu Luo [Fri, 15 May 2020 02:03:24 +0000 (21:03 -0500)]
Fold (add -1; zero_ext; add +1) operations to zero_ext when not overflow(PR37451, PR61837)

This "subtract/extend/add" existed for a long time and still annoying us
(PR37451, part of PR61837) when converting from 32bits to 64bits, as the ctr
register is used as 64bits on powerpc64, Andraw Pinski had a patch but
caused some issue and reverted by Joseph S. Myers(PR37451, PR37782).

Andraw:
http://gcc.gnu.org/ml/gcc-patches/2008-09/msg01070.html
http://gcc.gnu.org/ml/gcc-patches/2008-10/msg01321.html
Joseph:
https://gcc.gnu.org/legacy-ml/gcc-patches/2011-11/msg02405.html

We still can do the simplification from "subtract/zero_ext/add" to "zero_ext"
when loop iterations is known to be LT than MODE_MAX (only do simplify
when counter+0x1 NOT overflow).

Bootstrap and regression tested pass on Power8-LE.

gcc/ChangeLog

2020-05-15  Xiong Hu Luo  <luoxhu@linux.ibm.com>

PR rtl-optimization/37451, part of PR target/61837
* loop-doloop.c (doloop_simplify_count): New function.  Simplify
(add -1; zero_ext; add +1) to zero_ext when not wrapping.
(doloop_modify): Call doloop_simplify_count.

gcc/testsuite/ChangeLog

2020-05-15  Xiong Hu Luo  <luoxhu@linux.ibm.com>

PR rtl-optimization/37451, part of PR target/61837
* gcc.target/powerpc/doloop-2.c: New test.

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

4 years agoSkip jit tests for targets that don't support -lgccjit
H.J. Lu [Thu, 14 May 2020 23:34:52 +0000 (16:34 -0700)]
Skip jit tests for targets that don't support -lgccjit

Since libgccjit.so is linked into jit tests, skip jit tests for targets
that don't support -lgccjit.

gcc/

PR jit/94778
* doc/sourcebuild.texi: Document effective target lgccjit.

gcc/testsuite/

PR jit/94778
* jit.dg/jit.exp: Skip jit tests for targets that don't support
-lgccjit.
* lib/target-supports.exp (check_effective_target_lgccjit): New.

4 years agolibiberty: Update D symbol demangling for latest ABI spec.
Iain Buclaw [Thu, 14 May 2020 21:43:17 +0000 (23:43 +0200)]
libiberty: Update D symbol demangling for latest ABI spec.

Some small improvements and clarifications have been done in the D ABI
specification to remove all ambiguities found in the current grammar,
this implementation now more closely resembles the spec, whilst
maintaining compatibility with the old ABI.

Three new rules have been added to the ABI.

1. Back references using 'Q', analogous to C++ substitutions, compresses
   repeated identifiers, types, and template symbol and value parameters.

2. Template aliases to externally mangled symbols are prefixed with 'X'.
   This includes any symbol that isn't extern(D), or has its name
   overriden with pragma(mangle).  This fixes an ambiguity where it was
   not clear whether 'V' was an encoded calling convention, or the next
   template value parameter.

3. Alias parameters, templates, and tuple symbols no longer encode the
   symbol length of its subpart.  Tuples are now terminated with 'Z'.
   This fixes another ambiguity where the first character of the mangled
   name can be a digit as well, so the demangler had to figure out where
   to split the two adjacent numbers by trying out each combination.

libiberty/ChangeLog:

* d-demangle.c (enum dlang_symbol_kinds): Remove enum.
(struct dlang_info): New struct
(dlang_decode_backref): New function.
(dlang_backref): New function.
(dlang_symbol_backref): New function.
(dlang_type_backref): New function.
(dlang_symbol_name_p): New function.
(dlang_function_type_noreturn): New function.
(dlang_function_type): Add 'info' parameter.  Decode function type
with dlang_function_type_noreturn.
(dlang_function_args): Add 'info' parameter.
(dlang_type): Add 'info' parameter.  Handle back referenced types.
(dlang_identifier): Replace 'kind' parameter with 'info'.  Handle back
referenced symbols.  Split off decoding of plain identifiers to...
(dlang_lname): ...here.
(dlang_parse_mangle): Replace 'kind' parameter with 'info'.  Decode
function type and return with dlang_type.
(dlang_parse_qualified): Replace 'kind' parameter with 'info', add
'suffix_modifier' parameter.  Decode function type with
dlang_function_type_noreturn.
(dlang_parse_tuple): Add 'info' parameter.
(dlang_template_symbol_param): New function.
(dlang_template_args): Add 'info' parameter.  Decode symbol parameter
with dlang_template_symbol_param.  Handle back referenced values, and
externally mangled parameters.
(dlang_parse_template): Add 'info' parameter.
(dlang_demangle_init_info): New function.
(dlang_demangle): Initialize and pass 'info' parameter.
* testsuite/d-demangle-expected: Add new tests.

Co-Authored-By: Rainer Schuetze <r.sagitario@gmx.de>
4 years agoc++: Fix deferred noexcept on constructor [PR93901].
Jason Merrill [Thu, 14 May 2020 15:15:27 +0000 (11:15 -0400)]
c++: Fix deferred noexcept on constructor [PR93901].

My change in r10-4394 to only update clones when we actually instantiate a
deferred noexcept-spec broke this because deferred parsing updates the
primary function but not the clones.  For GCC 10 I just reverted that
change; this patch adjusts maybe_instantiate_noexcept to update only the
clone passed as the argument.

gcc/cp/ChangeLog
2020-05-14  Jason Merrill  <jason@redhat.com>

PR c++/93901
* pt.c (maybe_instantiate_noexcept): Change clone handling.

4 years agolibgo: only build syscall test with -static on GNU/Linux
Ian Lance Taylor [Thu, 14 May 2020 19:50:30 +0000 (12:50 -0700)]
libgo: only build syscall test with -static on GNU/Linux

For PR go/95061

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

4 years agoamdgcn: fix vcc clobber in vector load/store
Andrew Stubbs [Wed, 13 May 2020 15:05:54 +0000 (16:05 +0100)]
amdgcn: fix vcc clobber in vector load/store

This switches the code that expands scalar addresses to vectors of addresses
from using VCC to using CC_SAVE_REG, for the lo-part to hi-part carry values.
These were fine in code expanded in earlier passes, but addresses expanded
late, such as for stack spills or reloads, could clobber live VCC values,
causing execution failures.

This is the first target-specific testcase for GCN, so the new .exp file is
included.

2020-05-14  Andrew Stubbs  <ams@codesourcery.com>

gcc/
* config/gcn/gcn-valu.md (add<mode>3_zext_dup): Change to a
define_expand, and rename the original to ...
(add<mode>3_vcc_zext_dup): ... this, and add a custom VCC operand.
(add<mode>3_zext_dup_exec): Likewise, with ...
(add<mode>3_vcc_zext_dup_exec): ... this.
(add<mode>3_zext_dup2): Likewise, with ...
(add<mode>3_zext_dup_exec): ... this.
(add<mode>3_zext_dup2_exec): Likewise, with ...
(add<mode>3_zext_dup2): ... this.
* config/gcn/gcn.c (gcn_expand_scalar_to_vector_address): Switch
addv64di3_zext* calls to use addv64di3_vcc_zext*.

gcc/testsuite/
* testsuite/gcc.target/gcn/gcn.exp: New file.
* testsuite/gcc.target/gcn/vcc-clobber.c: New file.

4 years agoi386: Add V2DFmode float trunc/extend functions [PR95046]
Uros Bizjak [Thu, 14 May 2020 17:51:40 +0000 (19:51 +0200)]
i386: Add V2DFmode float trunc/extend functions [PR95046]

gcc/ChangeLog:

PR target/95046
* config/i386/sse.md (truncv2dfv2df2): New insn pattern.
(extendv2sfv2df2): Ditto.

testsuite/ChangeLog:

PR target/95046
* gcc.target/i386/pr95046-7.c: New test.

4 years agoc++: Missing SFINAE with lookup_fnfields [PR78446]
Patrick Palka [Thu, 14 May 2020 16:56:18 +0000 (12:56 -0400)]
c++: Missing SFINAE with lookup_fnfields [PR78446]

Here we're failing to do SFINAE in build_op_call when looking up the
class's operator() via lookup_fnfields, which calls lookup_member always
with complain=tf_warning_or_error; from there we would complain
about an ambiguous lookup for operator().

This patch fixes this by adding a tsubst_flags_t parameter to
lookup_fnfields and adjusting all its callers appropriately.

gcc/cp/ChangeLog:

PR c++/78446
* call.c (build_op_call): Pass complain to lookup_fnfields.
(build_special_member_call): Likewise.
* class.c (type_requires_array_cookie): Pass tf_warning_or_error
to lookup_fnfields.
* cp-tree.h (lookup_fnfields): Add tsubst_flags_t parameter.
* except.c (build_throw): Pass tf_warning_or_error to
lookup_fnfields.
* init.c (build_new_1): Pass complain to lookup_fnfields.
* method.c (locate_fn_flags): Likewise.
* name-lookup.c (lookup_name_real_1): Pass tf_warning_or_error
to lookup_fnfields.
* pt.c (tsubst_baselink): Pass complain to lookup_fnfields.
* search.c (lookup_fnfields): New 'complain' parameter.  Pass it
to lookup_member.

gcc/testsuite/ChangeLog:

PR c++/78446
* g++.dg/template/sfinae31.C: New test.

4 years agoRemoved double ChangeLog entries from previous commit.
Thomas Koenig [Thu, 14 May 2020 16:37:18 +0000 (18:37 +0200)]
Removed double ChangeLog entries from previous commit.

4 years agoAdd early return for invalid STATUS for close.
Thomas Koenig [Thu, 14 May 2020 16:30:27 +0000 (18:30 +0200)]
Add early return for invalid STATUS for close.

2020-05-14  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR libfortran/95119
* io/close.c (close_status): Add CLOSE_INVALID.
(st_close): Return early on invalid STATUS parameter.

2020-05-14  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR libfortran/95119
* testsuite/libgomp.fortran/close_errors_1.f90: New test.

4 years agox86: Default CET run-time support to auto
H.J. Lu [Thu, 14 May 2020 15:25:39 +0000 (08:25 -0700)]
x86: Default CET run-time support to auto

CET has been added since GCC 8.  This patch defaults CET run-time support
to auto.  It enables CET run-time support if asssembler supports CET
instructions and multi-byte NOPs are enabled via SSE2.

config/

* cet.m4 (GCC_CET_FLAGS): Change default to auto.

gcc/

* configure: Regenerated.

libatomic/

* configure: Regenerated.

libbacktrace/

* configure: Regenerated.

libcc1/

* configure: Regenerated.

libcpp/

* configure: Regenerated.

libdecnumber/

* configure: Regenerated.

libgcc/

* configure: Regenerated.

libgfortran/

* configure: Regenerated.

libgomp/

* configure: Regenerated.

libitm/

* configure: Regenerated.

libobjc/

* configure: Regenerated.

libquadmath/

* configure: Regenerated.

libsanitizer/

* configure: Regenerated.

libssp/

* configure: Regenerated.

libstdc++-v3/

* configure: Regenerated.

libvtv/

* configure: Regenerated.

zlib/

* configure: Regenerated.

4 years agoarm: Factorize several occurrences of the same code into reg_needs_saving_p
Christophe Lyon [Mon, 4 May 2020 13:41:34 +0000 (13:41 +0000)]
arm: Factorize several occurrences of the same code into reg_needs_saving_p

The same code pattern occurs in several functions, so it seems cleaner
to move it into a dedicated function.

2020-05-14  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/
* config/arm/arm.c (reg_needs_saving_p): New function.
(use_return_insn): Use reg_needs_saving_p.
(arm_get_vfp_saved_size): Likewise.
(arm_compute_frame_layout): Likewise.
(arm_save_coproc_regs): Likewise.
(thumb1_expand_epilogue): Likewise.
(arm_expand_epilogue_apcs_frame): Likewise.
(arm_expand_epilogue): Likewise.

4 years agoarm.c: Clarify error message in thumb1_expand_prologue
Christophe Lyon [Tue, 5 May 2020 14:18:13 +0000 (14:18 +0000)]
arm.c: Clarify error message in thumb1_expand_prologue

While running the tests with -march=armv5t -mthumb, I came across this
error message which I think could be clearer.

2020-05-14  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/
* config/arm/arm.c (thumb1_expand_prologue): Update error message.

4 years agoc++: Missed c++2a->20 change
Nathan Sidwell [Thu, 14 May 2020 15:04:59 +0000 (08:04 -0700)]
c++: Missed c++2a->20 change

Jason missed a c++2a mention.  I couldn't resist changing the loop
following to place the initializers inside the fors.

* parser.c (cp_parser_diagnose_invalid_typename): Mention
std=c++20 not 2a, reformat dependent binfo inform loops.

4 years agoc++: Simplify tsubst_template_decl
Nathan Sidwell [Thu, 14 May 2020 14:33:13 +0000 (07:33 -0700)]
c++: Simplify tsubst_template_decl

tsubst_template_decl's control flow was also confusing.  This reorders
and flattens some of the conditionals.

* pt.c (tsubst_template_decl): Reorder and commonize some control
paths.

4 years agoc++: Simplify tsubst_friend_function
Nathan Sidwell [Thu, 14 May 2020 14:22:54 +0000 (07:22 -0700)]
c++: Simplify tsubst_friend_function

tsubst_friend_function's control flow was a little complicated.  This
simplifies it, primarily by using more RAII.

* pt.c (tsubst_friend_function): Simplify control flow.

4 years agoc++: simplify lookup_template_class_1
Nathan Sidwell [Thu, 14 May 2020 14:20:35 +0000 (07:20 -0700)]
c++: simplify lookup_template_class_1

We were checking TYPE_NAME and then copying it if not null.  Just copy
it, and then see if we got null.

* pt.c (lookup_template_class_1): Remove unnecessary else by
simply grabbing TYPE_NAME earlier.

4 years agoc++: Adjust push_template_decl_real
Nathan Sidwell [Thu, 14 May 2020 14:13:54 +0000 (07:13 -0700)]
c++: Adjust push_template_decl_real

Push_template_decl_real's friend-pushing logic was confusing me.  This
is more understandable.  Fix a latent type bug I disovered.

* pt.c (push_template_decl_real): Adjust friend pushing logic.
Reinit template type.

4 years agoc++: Improve build_template_decl
Nathan Sidwell [Thu, 14 May 2020 13:39:29 +0000 (06:39 -0700)]
c++: Improve build_template_decl

I discovered all the users of build_template_decl were explicitly
setting the RESULT and TYPE fields of the built decl.  Let's just have
build_template_decl do that in the first place.

* pt.c (build_template_decl): Init DECL_TEMPLATE_RESULT &
TREE_TYPE here ...
(process_partial_specialization): ... not here ...
(push_template_decl_real, add_inherited_template_parms)
(build_deduction_guide): ... or here.

4 years agoAdd tests for gcc-changelog.
Martin Liska [Thu, 14 May 2020 11:59:36 +0000 (13:59 +0200)]
Add tests for gcc-changelog.

* gcc-changelog/test_email.py: New file.
* gcc-changelog/test_patches.txt: New file.

4 years agoi386: Add V2DFmode conversion functions [PR95046]
Uros Bizjak [Thu, 14 May 2020 11:47:33 +0000 (13:47 +0200)]
i386: Add V2DFmode conversion functions [PR95046]

gcc/ChangeLog:

PR target/95046
* config/i386/sse.md (sse2_cvtpi2pd): Add memory to alternative 1.

(floatv2siv2df2): New expander.
(floatunsv2siv2df2): New insn pattern.

(fix_truncv2dfv2si2): New expander.
(fixuns_truncv2dfv2si2): New insn pattern.

testsuite/ChangeLog:

PR target/95046
* gcc.target/i386/pr95046-6.c: New test.

4 years agoaarch64: Fix arm_sve_vector_bits on typedefs [PR95105]
Richard Sandiford [Thu, 14 May 2020 11:20:32 +0000 (12:20 +0100)]
aarch64: Fix arm_sve_vector_bits on typedefs [PR95105]

Compiling this testcase with -march=armv8.2-a+sve
-msve-vector-bits=512:

----------------------------------------------------------
typedef __SVFloat32_t foo;
typedef foo bar __attribute__((arm_sve_vector_bits(512)));
template<typename T> struct s { T x; };
extern s<bar> a;
bar &b = a.x;
----------------------------------------------------------

gave the bogus error:

  cannot bind non-const lvalue reference of type â€˜bar&’ to an rvalue
  of type â€˜bar’

The testcase works if the attribute is applied directly
to __SVFloat32_t instead of via foo.

This shows a more general problem with the way that we were handling
the arm_sve_vector_bits attribute: we started by building a distinct
copy of the type to which the attribute was applied, instead of starting
with its main variant.  This new type then became its own main variant,
meaning that the relationship between types that have the attribute
could be different from the relationship between types that don't have
the attribute.

This patch instead copies the main variant of the original type and then
reapplies all the differences.

2020-05-14  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
PR target/95105
* config/aarch64/aarch64-sve-builtins.cc
(handle_arm_sve_vector_bits_attribute): Create a copy of the
original type's TYPE_MAIN_VARIANT, then reapply all the differences
between the original type and its main variant.

gcc/testsuite/
PR target/95105
* gcc.target/aarch64/sve/acle/general/attributes_8.c: New test.
* g++.target/aarch64/sve/acle/general-c++/attributes_1.C: Likewise.

4 years agotestsuite/94703 - skip gcc.dg/tree-ssa/pr94703.c on strict-align targets
Richard Biener [Thu, 14 May 2020 09:50:20 +0000 (11:50 +0200)]
testsuite/94703 - skip gcc.dg/tree-ssa/pr94703.c on strict-align targets

The specific dump scanning doesn't work on strict-align targets,
the following simply skips the testcase for those.

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

PR testsuite/94703
* gcc.dg/tree-ssa/pr94703.c: Skip for strict-align targets.

4 years agomiddle-end/95118 - fix printing of denormal zero
Richard Biener [Thu, 14 May 2020 06:53:03 +0000 (08:53 +0200)]
middle-end/95118 - fix printing of denormal zero

This fixes printing a REAL_CST generated from value-numbering
punning some bits to a real which turns out as zero with big
negative exponent.  This causes the loop in real_to_decimal_for_mode to
never terminate.

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

PR middle-end/95118
* real.c (real_to_decimal_for_mode): Make sure we handle
a zero with nonzero exponent.

* gcc.dg/pr95118.c: New testcase.

4 years agoopenmp: cgraph support for late declare variant resolution
Jakub Jelinek [Thu, 14 May 2020 07:58:53 +0000 (09:58 +0200)]
openmp: cgraph support for late declare variant resolution

This is a new version of the
https://gcc.gnu.org/legacy-ml/gcc-patches/2019-11/msg01493.html
patch.  Unlike the previous version, this one actually works properly
except for LTO, bootstrapped/regtested on x86_64-linux and i686-linux
too.

In short, #pragma omp declare variant is a directive which allows
redirection of direct calls to certain function to other calls with a
scoring system and some of those decisions need to be deferred until after
IPA.  The patch represents them with calls to an artificial FUNCTION_DECL
with declare_variant_alt in the cgraph_node set.

For LTO, the patch only saves/restores the two cgraph_node bits added in the
patch, but doesn't yet stream out and back in the on the side info for the
declare_variant_alt.  For the LTO partitioning, I believe those artificial
FUNCTION_DECLs with declare_variant_alt need to go into partition together
with anything that calls them (possibly duplicated), any way how to achieve
that?  Say if declare variant artificial fn foobar is directly
called from all of foo, bar and baz and not from qux and we want 4
partitions, one for each of foo, bar, baz, qux, then foobar is needed in the
first 3 partitions, and the IPA_REF_ADDRs recorded for foobar that right
after IPA the foobar call will be replaced with calls to foobar1, foobar2,
foobar3 or foobar (non-artificial) can of course stay in different
partitions if needed.

2020-05-14  Jakub Jelinek  <jakub@redhat.com>

* Makefile.in (GTFILES): Add omp-general.c.
* cgraph.h (struct cgraph_node): Add declare_variant_alt and
calls_declare_variant_alt members and initialize them in the
ctor.
* ipa.c (symbol_table::remove_unreachable_nodes): Handle direct
calls to declare_variant_alt nodes.
* lto-cgraph.c (lto_output_node): Write declare_variant_alt
and calls_declare_variant_alt.
(input_overwrite_node): Read them back.
* omp-simd-clone.c (simd_clone_create): Copy calls_declare_variant_alt
bit.
* tree-inline.c (expand_call_inline): Or in calls_declare_variant_alt
bit.
(tree_function_versioning): Copy calls_declare_variant_alt bit.
* omp-offload.c (execute_omp_device_lower): Call
omp_resolve_declare_variant on direct function calls.
(pass_omp_device_lower::gate): Also enable for
calls_declare_variant_alt functions.
* omp-general.c (omp_maybe_offloaded): Return false after inlining.
(omp_context_selector_matches): Handle the case when
cfun->curr_properties has PROP_gimple_any bit set.
(struct omp_declare_variant_entry): New type.
(struct omp_declare_variant_base_entry): New type.
(struct omp_declare_variant_hasher): New type.
(omp_declare_variant_hasher::hash, omp_declare_variant_hasher::equal):
New methods.
(omp_declare_variants): New variable.
(struct omp_declare_variant_alt_hasher): New type.
(omp_declare_variant_alt_hasher::hash,
omp_declare_variant_alt_hasher::equal): New methods.
(omp_declare_variant_alt): New variables.
(omp_resolve_late_declare_variant): New function.
(omp_resolve_declare_variant): Call omp_resolve_late_declare_variant
when called late.  Create a magic declare_variant_alt fndecl and
cgraph node and return that if decision needs to be deferred until
after gimplification.
* cgraph.c (symbol_table::create_edge): Or in calls_declare_variant_alt
bit.

* c-c++-common/gomp/declare-variant-14.c: New test.

4 years agoopenmp: Fix placement of 2nd+ preparation statement for PHIs in simd clone lowering...
Jakub Jelinek [Thu, 14 May 2020 07:51:05 +0000 (09:51 +0200)]
openmp: Fix placement of 2nd+ preparation statement for PHIs in simd clone lowering [PR95108]

For normal stmts, preparation statements are inserted before the stmt, so if we need multiple,
they are in the correct order, but for PHIs we emit them after labels in the entry successor
bb, and we used to emit them in the reverse order that way.

2020-05-14  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/95108
* omp-simd-clone.c (struct modify_stmt_info): Add after_stmt member.
(ipa_simd_modify_stmt_ops): For PHIs, only add before first stmt in
entry block if info->after_stmt is NULL, otherwise add after that stmt
and update it after adding each stmt.
(ipa_simd_modify_function_body): Initialize info.after_stmt.

* gcc.dg/gomp/pr95108.c: New test.

4 years agoopenmp: Also implicitly mark as declare target to functions mentioned in target regions
Jakub Jelinek [Thu, 14 May 2020 07:48:32 +0000 (09:48 +0200)]
openmp: Also implicitly mark as declare target to functions mentioned in target regions

OpenMP 5.0 also specifies that functions referenced from target regions
(except for target regions with device(ancestor:)) are also implicitly declare target to.

This patch implements that.

2020-05-14  Jakub Jelinek  <jakub@redhat.com>

* function.h (struct function): Add has_omp_target bit.
* omp-offload.c (omp_discover_declare_target_fn_r): New function,
old renamed to ...
(omp_discover_declare_target_tgt_fn_r): ... this.
(omp_discover_declare_target_var_r): Call
omp_discover_declare_target_tgt_fn_r instead of
omp_discover_declare_target_fn_r.
(omp_discover_implicit_declare_target): Also queue functions with
has_omp_target bit set, for those walk with
omp_discover_declare_target_fn_r, for declare target to functions
walk with omp_discover_declare_target_tgt_fn_r.
gcc/c/
* c-parser.c (c_parser_omp_target): Set cfun->has_omp_target.
gcc/cp/
* cp-gimplify.c (cp_genericize_r): Set cfun->has_omp_target.
gcc/fortran/
* trans-openmp.c: Include function.h.
(gfc_trans_omp_target): Set cfun->has_omp_target.
libgomp/
* testsuite/libgomp.c-c++-common/target-40.c: New test.

4 years agoi386: Add V2SFmode conversion functions [PR95046]
Uros Bizjak [Thu, 14 May 2020 07:15:23 +0000 (09:15 +0200)]
i386: Add V2SFmode conversion functions [PR95046]

gcc/ChangeLog:

PR target/95046
* config/i386/mmx.md (mmx_fix_truncv2sfv2si2): rename from mmx_pf2id.
Add SSE/AVX alternative.  Change operand predicates from
nonimmediate_operand to register_mmxmem_operand.
Enable instruction pattern for TARGET_MMX_WITH_SSE.
(fix_truncv2sfv2si2): New expander.
(fixuns_truncv2sfv2si2): Ditto.

(mmx_floatv2siv2sf2): rename from mmx_floatv2si2.
Add SSE/AVX alternative.  Change operand predicates from
nonimmediate_operand to register_mmxmem_operand.
Enable instruction pattern for TARGET_MMX_WITH_SSE.
(floatv2siv2sf2): New expander.
(floatunsv2siv2sf2): Ditto.

* config/i386/i386-builtin.def (IX86_BUILTIN_PF2ID):
Update for rename.
(IX86_BUILTIN_PI2FD): Ditto.

testsuite/ChangeLog:

PR target/95046
* gcc.target/i386/pr95046-5.c: New test.

4 years agoIBM Z: Define probe_stack expander
Andreas Krebbel [Thu, 14 May 2020 06:16:27 +0000 (08:16 +0200)]
IBM Z: Define probe_stack expander

Probes emitted by the common code routines still use a store.  Define
the "probe_stack" pattern to use a compare instead.

gcc/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

* config/s390/s390.c (s390_emit_stack_probe): Call the probe_stack
expander.
* config/s390/s390.md ("@probe_stack2<mode>", "probe_stack"): New
expanders.

gcc/testsuite/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

* gcc.target/s390/stack-clash-2.c: New test.

4 years agoIBM Z: stack clash prot: add missing updates of last_probe_offset
Andreas Krebbel [Thu, 14 May 2020 06:16:27 +0000 (08:16 +0200)]
IBM Z: stack clash prot: add missing updates of last_probe_offset

After emitting probes in a loop last_probe_offset needs to be updated.
Not doing this usually assumes a too low distance to the last access
when emitting the remainder leading to stack probes being omitted.

gcc/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

* config/s390/s390.c (allocate_stack_space): Add missing updates
of last_probe_offset.

gcc/testsuite/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

* gcc.target/s390/stack-clash-1.c: New test.

4 years agoMake anti_adjust_stack_and_probe_stack_clash extern and use it for Z
Andreas Krebbel [Thu, 14 May 2020 06:16:27 +0000 (08:16 +0200)]
Make anti_adjust_stack_and_probe_stack_clash extern and use it for Z

When compiling with -mbackchain -fstack-clash-protection currently no
probes are emitted.  This patch adjusts the "allocate_stack" expander
to call anti_adjust_stack_and_probe_stack_clash when needed. In order
to do this I had to export that function from explow.c.

Ok for mainline?

gcc/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

* config/s390/s390.md ("allocate_stack"): Call
anti_adjust_stack_and_probe_stack_clash when stack clash
protection is enabled.
* explow.c (anti_adjust_stack_and_probe_stack_clash): Remove
prototype. Remove static.
* explow.h (anti_adjust_stack_and_probe_stack_clash): Add
prototype.

gcc/testsuite/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

* gcc.target/s390/stack-clash-3.c: New test.

4 years agoDaily bump.
GCC Administrator [Thu, 14 May 2020 00:16:22 +0000 (00:16 +0000)]
Daily bump.

4 years agors6000: Add vec_extracth and vec_extractl
Kelvin Nilsen [Wed, 13 May 2020 21:09:17 +0000 (16:09 -0500)]
rs6000: Add vec_extracth and vec_extractl

Add new insns vextdu[bhw]vlx, vextddvlx, vextdu[bhw]vhx, and
vextddvhx, along with built-in access and overloaded built-in
access to these insns.

[gcc]

2020-05-13  Kelvin Nilsen  <kelvin@gcc.gnu.org>

* config/rs6000/altivec.h (vec_extractl): New #define.
(vec_extracth): Likewise.
* config/rs6000/altivec.md (UNSPEC_EXTRACTL): New constant.
(UNSPEC_EXTRACTR): Likewise.
(vextractl<mode>): New expansion.
(vextractl<mode>_internal): New insn.
(vextractr<mode>): New expansion.
(vextractr<mode>_internal): New insn.
* config/rs6000/rs6000-builtin.def (__builtin_altivec_vextdubvlx):
New built-in function.
(__builtin_altivec_vextduhvlx): Likewise.
(__builtin_altivec_vextduwvlx): Likewise.
(__builtin_altivec_vextddvlx): Likewise.
(__builtin_altivec_vextdubvhx): Likewise.
(__builtin_altivec_vextduhvhx): Likewise.
(__builtin_altivec_vextduwvhx): Likewise.
(__builtin_altivec_vextddvhx): Likewise.
(__builtin_vec_extractl): New overloaded built-in function.
(__builtin_vec_extracth): Likewise.
* config/rs6000/rs6000-call.c (altivec_overloaded_builtins):
Define overloaded forms of __builtin_vec_extractl and
__builtin_vec_extracth.
(builtin_function_type): Add cases to mark arguments of new
built-in functions as unsigned.
(rs6000_common_init_builtins): Add
opaque_ftype_opaque_opaque_opaque_opaque.
* config/rs6000/rs6000.md (du_or_d): New mode attribute.
* doc/extend.texi (PowerPC AltiVec Built-in Functions Available
for a Future Architecture): Add description of vec_extractl and
vec_extractr built-in functions.

[gcc/testsuite]

2020-05-13  Kelvin Nilsen  <kelvin@gcc.gnu.org>

* gcc.target/powerpc/vec-extracth-0.c: New.
* gcc.target/powerpc/vec-extracth-1.c: New.
* gcc.target/powerpc/vec-extracth-2.c: New.
* gcc.target/powerpc/vec-extracth-3.c: New.
* gcc.target/powerpc/vec-extracth-4.c: New.
* gcc.target/powerpc/vec-extracth-5.c: New.
* gcc.target/powerpc/vec-extracth-6.c: New.
* gcc.target/powerpc/vec-extracth-7.c: New.
* gcc.target/powerpc/vec-extracth-be-0.c: New.
* gcc.target/powerpc/vec-extracth-be-1.c: New.
* gcc.target/powerpc/vec-extracth-be-2.c: New.
* gcc.target/powerpc/vec-extracth-be-3.c: New.
* gcc.target/powerpc/vec-extractl-0.c: New.
* gcc.target/powerpc/vec-extractl-1.c: New.
* gcc.target/powerpc/vec-extractl-2.c: New.
* gcc.target/powerpc/vec-extractl-3.c: New.
* gcc.target/powerpc/vec-extractl-4.c: New.
* gcc.target/powerpc/vec-extractl-5.c: New.
* gcc.target/powerpc/vec-extractl-6.c: New.
* gcc.target/powerpc/vec-extractl-7.c: New.
* gcc.target/powerpc/vec-extractl-be-0.c: New.
* gcc.target/powerpc/vec-extractl-be-1.c: New.
* gcc.target/powerpc/vec-extractl-be-2.c: New.
* gcc.target/powerpc/vec-extractl-be-3.c: New.

4 years agoc++: SFINAE for invalid delete-expression [PR79706]
Patrick Palka [Wed, 13 May 2020 20:27:45 +0000 (16:27 -0400)]
c++: SFINAE for invalid delete-expression [PR79706]

This fixes SFINAE when substitution yields an invalid delete-expression
due to the pertinent deallocation function being marked deleted or
otherwise inaccessible.

We need to check for an erroneous result from build_op_delete_call and
exit early in that case, so that we don't build a COND_EXPR around the
erroneous result which finish_decltype_type would then quietly accept.

gcc/cp/ChangeLog:

PR c++/79706
* init.c (build_vec_delete_1): Just return error_mark_node if
deallocate_expr is error_mark_node.
(build_delete): Just return error_mark_node if do_delete is
error_mark_node.

gcc/testsuite/ChangeLog:

PR c++/79706
* g++.dg/template/sfinae30.C: New test.

4 years agoc++: premature requires-expression folding [PR95020]
Patrick Palka [Wed, 13 May 2020 20:40:10 +0000 (16:40 -0400)]
c++: premature requires-expression folding [PR95020]

In the testcase below we're prematurely folding away the
requires-expression to 'true' after substituting in the function's
template arguments, but before substituting in the lambda's deduced
template arguments.

This patch removes the uses_template_parms check when deciding in
tsubst_requires_expr whether to keep around a new requires-expression.
Regardless of whether the template arguments are dependent, there still
might be more template parameters to later substitute in (as in the
below testcase) and even if not, tsubst_expr doesn't perform full
semantic processing unless !processing_template_decl, so we should still
wait until then to fold away the requires-expression.

gcc/cp/ChangeLog:

PR c++/95020
* constraint.c (tsubst_requires_expr): Produce a new
requires-expression when processing_template_decl, even if
template arguments are not dependent.

gcc/testsuite/ChangeLog:

PR c++/95020
* g++/cpp2a/concepts-lambda7.C: New test.

4 years agoc++: explicit(bool) malfunction with dependent expression [PR95066]
Marek Polacek [Mon, 11 May 2020 22:28:19 +0000 (18:28 -0400)]
c++: explicit(bool) malfunction with dependent expression [PR95066]

I forgot to set DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P when merging two
function declarations and as a sad consequence, we never tsubsted
the dependent explicit-specifier in tsubst_function_decl, leading to
disregarding the explicit-specifier altogether, and wrongly accepting
this test.

PR c++/95066
* decl.c (duplicate_decls): Set DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P.

* g++.dg/cpp2a/explicit16.C: New test.

4 years agoc++: Template arg comparison
Nathan Sidwell [Wed, 13 May 2020 20:22:02 +0000 (13:22 -0700)]
c++: Template arg comparison

When fixing up the template specialization hasher I was confused by
the control flow through template_args_equal.  This reorders the
category checking, so it is clearer as to what kind of node can reach
which point.

* pt.c (template_args_equal): Reorder category checking for
clarity.

4 years agoc++: Simplify typedef access checking
Nathan Sidwell [Wed, 13 May 2020 20:17:25 +0000 (13:17 -0700)]
c++: Simplify typedef access checking

I discovered that the template typedef access check was rather more
expensive than needed.  The call of get_types_needed_access_check in
the FOR_EACH_VEC_SAFE_ELT is the moral equivalent of 'for (size_t pos
= 0; pos != strlen (string); pos++)'.  Let's not do that.

* pt.c (perform_typedefs_access_check): Cache expensively
calculated object references.
(check_auto_in_tmpl_args): Just assert we do not get unexpected
nodes, rather than silently do nothing.
(append_type_to_template_for_access): Likewise, cache expensie
object reference.

4 years agoc++: Simplify canonical_type_parameter
Nathan Sidwell [Wed, 13 May 2020 20:11:36 +0000 (13:11 -0700)]
c++: Simplify canonical_type_parameter

Use a single vec_safe_grow_cleared, rather than that or a vec_alloc.
Use a for loop that returns early.

* pt.c (canonical_type_parameter): Simplify.

4 years agoc++: Formatting fixups & some simplifications.
Nathan Sidwell [Wed, 13 May 2020 20:03:12 +0000 (13:03 -0700)]
c++: Formatting fixups & some simplifications.

A bunch of minor reformatting, simplifications or change to checking_asserts.

* pt.c (spec_hash_table): New typedef.
(decl_specializations, type_specializations): Use it.
(retrieve_specialization): Likewise.
(register_specialization): Remove unnecessary casts.
(push_template_decl_real): Reformat.
(instantiate_class_template_1): Use more RAII.
(make_argument_pack): Simplify.
(instantiate_template_1): Use gcc_checking_assert for expensive
asserts.
(instantiate_decl): Likewise.
(resolve_typename_type): Reformat comment.
* semantics.c (struct deferred_access): Remove unnecessary GTY on
member.
(begin_class_definition): Fix formatting.

4 years agoc++: Replace "C++2a" with "C++20".
Jason Merrill [Wed, 13 May 2020 19:15:13 +0000 (15:15 -0400)]
c++: Replace "C++2a" with "C++20".

C++20 isn't final quite yet, but all that remains is formalities, so let's
go ahead and change all the references.

I think for the next C++ standard we can just call it C++23 rather than
C++2b, since the committee has been consistent about time-based releases
rather than feature-based.

gcc/c-family/ChangeLog
2020-05-13  Jason Merrill  <jason@redhat.com>

* c.opt (std=c++20): Make c++2a the alias.
(std=gnu++20): Likewise.
* c-common.h (cxx_dialect): Change cxx2a to cxx20.
* c-opts.c: Adjust.
* c-cppbuiltin.c: Adjust.
* c-ubsan.c: Adjust.
* c-warn.c: Adjust.

gcc/cp/ChangeLog
2020-05-13  Jason Merrill  <jason@redhat.com>

* call.c, class.c, constexpr.c, constraint.cc, decl.c, init.c,
lambda.c, lex.c, method.c, name-lookup.c, parser.c, pt.c, tree.c,
typeck2.c: Change cxx2a to cxx20.

libcpp/ChangeLog
2020-05-13  Jason Merrill  <jason@redhat.com>

* include/cpplib.h (enum c_lang): Change CXX2A to CXX20.
* init.c, lex.c: Adjust.

4 years agotestsuite: Support { target c++20 } in tests.
Jason Merrill [Wed, 13 May 2020 19:15:13 +0000 (15:15 -0400)]
testsuite: Support { target c++20 } in tests.

I'm not sure why I didn't check this in along with adding -std=c++20, since
I wrote this patch at the same time.  The testsuite should support both
{ target c++2a } and { target c++20 }.

gcc/testsuite/ChangeLog
2020-05-13  Jason Merrill  <jason@redhat.com>

* lib/target-supports.exp (check_effective_target_c++20_only)
(check_effective_target_c++20): New.

4 years agolibgo: build syscall test with -static
Ian Lance Taylor [Wed, 13 May 2020 18:12:01 +0000 (11:12 -0700)]
libgo: build syscall test with -static

This avoids problems finding libgo.so when running the test as root,
which invokes the test as a child process in various limited environments.

Fixes PR go/95061

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

4 years agolibbacktrace: mark test_large parameter unused in ztest.c
Ian Lance Taylor [Wed, 13 May 2020 18:09:53 +0000 (11:09 -0700)]
libbacktrace: mark test_large parameter unused in ztest.c

libbacktrace/
* ztest.c (test_large): Mark state ATTRIBUTE_UNUSED.

4 years agolibbacktrace: treat EACCESS like ENOENT
Ian Lance Taylor [Wed, 13 May 2020 17:18:45 +0000 (10:18 -0700)]
libbacktrace: treat EACCESS like ENOENT

libbacktrace/
PR go/95061
* posix.c (backtrace_open): Treat EACCESS like ENOENT.

4 years agotestsuite: Fix up tree-ssa/pr94969.c testcase [PR95110]
Jakub Jelinek [Wed, 13 May 2020 17:16:06 +0000 (19:16 +0200)]
testsuite: Fix up tree-ssa/pr94969.c testcase [PR95110]

2020-05-13  Jakub Jelinek  <jakub@redhat.com>

PR testsuite/95110
* gcc.dg/tree-ssa/pr94969.c: Swap scan-tree-dump-not arguments.

4 years agoc++: Fix g++.dg/parse/attr4.C test.
Marek Polacek [Wed, 13 May 2020 16:06:04 +0000 (12:06 -0400)]
c++: Fix g++.dg/parse/attr4.C test.

I noticed this test failing in C++11 mode.

* g++.dg/parse/attr4.C: Use c++11 in a target selector.

4 years agoadd vectype parameter to add_stmt_cost hook
Richard Biener [Wed, 13 May 2020 12:09:40 +0000 (14:09 +0200)]
add vectype parameter to add_stmt_cost hook

This adds a vectype parameter to add_stmt_cost which avoids the need
to pass down a (wrong) stmt_info just to carry this information.
Useful for invariants which do not have a stmt_info associated.

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

* target.def (add_stmt_cost): Add new vectype parameter.
* targhooks.c (default_add_stmt_cost): Adjust.
* targhooks.h (default_add_stmt_cost): Likewise.
* config/aarch64/aarch64.c (aarch64_add_stmt_cost): Take new
vectype parameter.
* config/arm/arm.c (arm_add_stmt_cost): Likewise.
* config/i386/i386.c (ix86_add_stmt_cost): Likewise.
* config/rs6000/rs6000.c (rs6000_add_stmt_cost): Likewise.

* tree-vectorizer.h (stmt_info_for_cost::vectype): Add.
(dump_stmt_cost): Add new vectype parameter.
(add_stmt_cost): Likewise.
(record_stmt_cost): Likewise.
(record_stmt_cost): Add overload with old signature.
* tree-vect-loop.c (vect_compute_single_scalar_iteration_cost):
Adjust.
(vect_get_known_peeling_cost): Likewise.
(vect_estimate_min_profitable_iters): Likewise.
* tree-vectorizer.c (dump_stmt_cost): Add new vectype parameter.
* tree-vect-stmts.c (record_stmt_cost): Likewise.
(vect_prologue_cost_for_slp_op): Remove stmt_vec_info parameter
and pass down correct vectype and NULL stmt_info.
(vect_model_simple_cost): Adjust.
(vect_model_store_cost): Likewise.

4 years agoFortran : ICE in gfc_conv_array_constructor_expr PR93497
Mark Eggleston [Thu, 7 May 2020 07:29:14 +0000 (08:29 +0100)]
Fortran  : ICE in gfc_conv_array_constructor_expr PR93497

Invalid expressions, such as those involving array constructors,
used for the length of character types will cause an ICE.

2020-05-13  Steven G. Kargl  <kargl@gcc.gnu.org>

gcc/fortran/

PR fortran/93497
* decl.c (char_len_param_value): Check whether character
length expression is of type EXPR_OP and if so simplify it.
* resolve.c (resolve_charlen): Reject length if it has a
rank.

2020-05-13  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

PR fortran/93497
* gfortran.dg/pr88025.f90: Change in wording of error.
* gfortran.dg/pr93497.f90: New test.
* gfortran.dg/pr93714_1.f90: Change in wording of errors.
* gfortran.dg/pr93714_2.f90: Change in wording of errors.

4 years agoc++: Add testcase for already-fixed PR [PR70642]
Patrick Palka [Wed, 13 May 2020 13:20:44 +0000 (09:20 -0400)]
c++: Add testcase for already-fixed PR [PR70642]

We correctly reject the testcase in this PR ever since commit r9-7046.

gcc/testsuite/ChangeLog:

PR c++/70642
* g++.dg/cpp0x/alias-decl-70.C: New test.

4 years agoRemove SLP_INSTANCE_GROUP_SIZE
Richard Biener [Fri, 21 Feb 2020 09:40:25 +0000 (10:40 +0100)]
Remove SLP_INSTANCE_GROUP_SIZE

This removes the SLP_INSTANCE_GROUP_SIZE member since the number of
lanes throughout a SLP subgraph is not necessarily constant.

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

* tree-vectorizer.h (SLP_INSTANCE_GROUP_SIZE): Remove.
(_slp_instance::group_size): Likewise.
* tree-vect-loop.c (vectorizable_reduction): The group size
is the number of lanes in the node.
* tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Likewise.
(vect_analyze_slp_instance): Do not set SLP_INSTANCE_GROUP_SIZE,
verify it matches the instance trees number of lanes.
(vect_slp_analyze_node_operations_1): Use the numer of lanes
in the node as group size.
(vect_bb_vectorization_profitable_p): Use the instance root
number of lanes for the size of life.
(vect_schedule_slp_instance): Use the number of lanes as
group_size.
* tree-vect-stmts.c (vectorizable_load): Remove SLP instance
parameter.  Use the number of lanes of the load for the group
size in the gap adjustment code.
(vect_analyze_stmt): Adjust.
(vect_transform_stmt): Likewise.

4 years agocontrib/vimrc: Reduce textwidth for commit messages
Patrick Palka [Wed, 13 May 2020 12:58:26 +0000 (14:58 +0200)]
contrib/vimrc: Reduce textwidth for commit messages

* vimrc: Reduce textwidth to 72 for Git commit messages.

4 years agoAdd default revisions argument for git_check_commit.py.
Martin Liska [Wed, 13 May 2020 12:44:22 +0000 (14:44 +0200)]
Add default revisions argument for git_check_commit.py.

* gcc-changelog/git_check_commit.py: Add default argument HEAD
for revisions and improve error message output.

4 years agoRestore print_output syntax in git_commit.py.
Martin Liska [Wed, 13 May 2020 12:31:55 +0000 (14:31 +0200)]
Restore print_output syntax in git_commit.py.

* gcc-changelog/git_commit.py: Restore print_output syntax
in git_commit.py.

4 years agoAdd gcc-changelog related scripts.
Martin Liska [Wed, 13 May 2020 12:27:30 +0000 (14:27 +0200)]
Add gcc-changelog related scripts.

* gcc-changelog/git_check_commit.py: New file.
* gcc-changelog/git_commit.py: New file.
* gcc-changelog/git_email.py: New file.
* gcc-changelog/git_repository.py: New file.
* gcc-changelog/git_update_version.py: New file.

4 years agoFix -fcompare-debug issue in purge_dead_edges [PR95080]
Jakub Jelinek [Wed, 13 May 2020 09:22:37 +0000 (11:22 +0200)]
Fix -fcompare-debug issue in purge_dead_edges [PR95080]

The following testcase fails with -fcompare-debug, the bug used to be latent
since introduction of -fcompare-debug.
The loop at the start of purge_dead_edges behaves differently between -g0
and -g - if the last insn is a DEBUG_INSN, then it skips not just
DEBUG_INSNs but also NOTEs until it finds some other real insn (or bb head),
while with -g0 it will not skip any NOTEs, so if we have
real_insn
note
debug_insn // not present with -g0
then with -g it might remove useless REG_EH_REGION from real_insn, while
with -g0 it will not.

Yet another option would be not skipping NOTE_P in the loop; I couldn't find
in history rationale for why it is done.

2020-05-13  Jakub Jelinek  <jakub@redhat.com>

PR debug/95080
* cfgrtl.c (purge_dead_edges): Skip over debug and note insns even
if the last insn is a note.

* g++.dg/opt/pr95080.C: New test.

4 years agoFold single imm use of a FMA if it is a negation [PR95060]
Jakub Jelinek [Wed, 13 May 2020 09:21:02 +0000 (11:21 +0200)]
Fold single imm use of a FMA if it is a negation [PR95060]

match.pd already has simplifications for negation of a FMA (FMS, FNMA, FNMS)
call if it is single use, but when the widening_mul pass discovers FMAs,
nothing folds the statements anymore.

So, the following patch adjusts the widening_mul pass to handle that.

I had to adjust quite a lot of tests, because they have in them nested FMAs
(one FMA feeding another one) and the patch results in some (equivalent) changes
in the chosen instructions, previously the negation of one FMA's result
would result in the dependent FMA being adjusted for the negation, but now
instead the first FMA is adjusted.

2020-05-13  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/95060
* tree-ssa-math-opts.c (convert_mult_to_fma_1): Fold a NEGATE_EXPR
if it is the single use of the FMA internal builtin.

* gcc.target/i386/avx512f-pr95060.c: New test.
* gcc.target/i386/fma_double_1.c: Adjust expected insn counts.
* gcc.target/i386/fma_double_2.c: Likewise.
* gcc.target/i386/fma_double_3.c: Likewise.
* gcc.target/i386/fma_double_4.c: Likewise.
* gcc.target/i386/fma_double_5.c: Likewise.
* gcc.target/i386/fma_double_6.c: Likewise.
* gcc.target/i386/fma_float_1.c: Likewise.
* gcc.target/i386/fma_float_2.c: Likewise.
* gcc.target/i386/fma_float_3.c: Likewise.
* gcc.target/i386/fma_float_4.c: Likewise.
* gcc.target/i386/fma_float_5.c: Likewise.
* gcc.target/i386/fma_float_6.c: Likewise.
* gcc.target/i386/l_fma_double_1.c: Likewise.
* gcc.target/i386/l_fma_double_2.c: Likewise.
* gcc.target/i386/l_fma_double_3.c: Likewise.
* gcc.target/i386/l_fma_double_4.c: Likewise.
* gcc.target/i386/l_fma_double_5.c: Likewise.
* gcc.target/i386/l_fma_double_6.c: Likewise.
* gcc.target/i386/l_fma_float_1.c: Likewise.
* gcc.target/i386/l_fma_float_2.c: Likewise.
* gcc.target/i386/l_fma_float_3.c: Likewise.
* gcc.target/i386/l_fma_float_4.c: Likewise.
* gcc.target/i386/l_fma_float_5.c: Likewise.
* gcc.target/i386/l_fma_float_6.c: Likewise.

4 years ago[Fortran] OpenMP - permit lastprivate in distribute + SIMD fixes (PR94690)
Tobias Burnus [Wed, 13 May 2020 08:06:45 +0000 (10:06 +0200)]
[Fortran] OpenMP - permit lastprivate in distribute + SIMD fixes (PR94690)

gcc/fortran/
2020-05-13  Tobias Burnus  <tobias@codesourcery.com>

PR fortran/94690
        * openmp.c (OMP_DISTRIBUTE_CLAUSES): Add OMP_CLAUSE_LASTPRIVATE.
        (gfc_resolve_do_iterator): Skip the private handling for SIMD as
        that is handled by ME code.
* trans-openmp.c (gfc_trans_omp_do): Don't add private/lastprivate
for dovar_found == 0, unless !simple.

libgomp/
2020-05-13  Tobias Burnus  <tobias@codesourcery.com>

PR fortran/94690
* testsuite/libgomp.fortran/pr66199-3.f90: New.
* testsuite/libgomp.fortran/pr66199-4.f90: New.
* testsuite/libgomp.fortran/pr66199-5.f90: New.
* testsuite/libgomp.fortran/pr66199-6.f90: New.
* testsuite/libgomp.fortran/pr66199-7.f90: New.
* testsuite/libgomp.fortran/pr66199-8.f90: New.
* testsuite/libgomp.fortran/pr66199-9.f90: New.

4 years agoSimplify test-case options.
Martin Liska [Wed, 13 May 2020 07:52:21 +0000 (09:52 +0200)]
Simplify test-case options.

PR sanitizer/95051
* gcc.dg/asan/pr95051.c: Simplify options as -fsanitize=address
and -O2 were enough to trigger the original ICE.

4 years agox86-vxworks malloc aligns to 8 bytes like solaris
Alexandre Oliva [Wed, 13 May 2020 07:49:00 +0000 (04:49 -0300)]
x86-vxworks malloc aligns to 8 bytes like solaris

Vxworks 7's malloc, like Solaris', only ensures 8-byte alignment of
returned pointers on 32-bit x86, though GCC's stddef.h defines
max_align_t with 16-byte alignment for __float128.  This patch enables
on x86-vxworks the same memory_resource workaround used for x86-solaris.

The testsuite also had a workaround, defining BAD_MAX_ALIGN_T and
xfailing the test; extend those to x86-vxworks as well, and remove the
check for char-aligned requested allocation to be aligned like
max_align_t.  With that change, the test passes on x86-vxworks; I'm
guessing that's the same reason for the test not to pass on
x86-solaris (and on x86_64-solaris -m32), so with the fix, I'm
tentatively removing the xfail.

for libstdc++-v3/ChangeLog

PR libstdc++/77691
* include/experimental/memory_resource
(__resource_adaptor_imp::do_allocate): Handle max_align_t on
x86-vxworks as on x86-solaris.
(__resource_adaptor_imp::do_deallocate): Likewise.
* testsuite/experimental/memory_resource/new_delete_resource.cc:
Drop xfail.
(BAD_MAX_ALIGN_T): Define on x86-vxworks as on x86-solaris.
(test03): Drop max-align test for char-aligned alloc.

4 years ago[PR 95013] Fix gcc.dg/unclosed-init.c
Christophe Lyon [Wed, 13 May 2020 06:41:19 +0000 (06:41 +0000)]
[PR 95013] Fix gcc.dg/unclosed-init.c

2020-05-13  Christophe Lyon  <christophe.lyon@linaro.org>

PR preprocessor/95013
* gcc.dg/unclosed-init.c: Add missing comment in dg-error.

4 years agoAdd missing unit dependence vector in data dependence analysis
Bin Cheng [Wed, 13 May 2020 03:37:47 +0000 (11:37 +0800)]
Add missing unit dependence vector in data dependence analysis

Current data dependence analysis misses unit distant vector if DRs in
DDR have the same invariant access functions.  This adds the vector as
the constant access function case.

2020-05-13  Bin Cheng  <bin.cheng@linux.alibaba.com>
PR tree-optimization/94969

gcc/
    * tree-data-dependence.c (constant_access_functions): Rename to...
    (invariant_access_functions): ...this.  Add parameter.  Check for
    invariant access function, rather than constant.
    (build_classic_dist_vector): Call above function.
    * tree-loop-distribution.c (pg_add_dependence_edges): Add comment.

gcc/testsuite/
    * gcc.dg/tree-ssa/pr94969.c: New test.

4 years agoDocument more x86 operand modifier.
liuhongt [Fri, 8 May 2020 09:47:33 +0000 (17:47 +0800)]
Document more x86 operand modifier.

Documents operand modifiers which are available in asm stmt but missing in document.

 | Modifier | Description | Available in asm stmt | Existed in documentation |
 | --- | --- | ------- | ----- |
 | L,W,B,Q,S,T | print the opcode suffix for specified size of operand. | Available | Not |
 | C | print opcode suffix for set/cmov insn. | Not | - |
 | c | like C, but print reversed condition | Not | - |
 | F,f | likewise, but for floating-point. | Not | - |
 | O | if HAVE_AS_IX86_CMOV_SUN_SYNTAX, expand to "w.", "l." or "q.", otherwise nothing | Not | - |
 | R | print embedded rounding and sae. | Available | Not |
 | r | print only sae. | Available | Not |
 | z | print the opcode suffix for the size of the current operand. | Available | Existed |
 | Z | likewise, with special suffixes for x87 instructions. | Availble | Not |
 | * | print a star (in certain assembler syntax) | Not | - |
 | A | print an absolute memory reference. | Available | Existed |
 | E | print address with DImode register names if TARGET_64BIT. | Available | Existed |
 | w | print the operand as if it's a "word" (HImode) even if it isn't. | Available | Existed |
 | s | print a shift double count, followed by the assemblers argument delimiter. | Available | Not |
 | b | print the QImode name of the register for the indicated operand %b0 would print %al if operands[0] is reg 0. | Available | Existed |
 | w | likewise, print the HImode name of the register. | Available | Existed |
 | k | likewise, print the SImode name of the register. | Available | Existed |
 | q | likewise, print the DImode name of the register. | Available | Existed |
 | x | likewise, print the V4SFmode name of the register. | Available | Not |
 | t | likewise, print the V8SFmode name of the register. | Available | Not |
 | g | likewise, print the V16SFmode name of the register. | Avaliable | Not |
 | h | print the QImode name for a "high" register, either ah, bh, ch or dh. | Available | Existed |
 | y | print "st(0)" instead of "st" as a register. | Available | Not |
 | d | print duplicated register operand for AVX instruction. | Available | Not |
 | D | print condition for SSE cmp instruction. | Not | - |
 | P | if PIC, print an @PLT suffix. | Available | Existed |
 | p | print raw symbol name. | Available | Existed |
 | X | don't print any sort of PIC '@' suffix for a symbol. | Not | - |
 | & | print some in-use local-dynamic symbol name. | Not | - |
 | H | print a memory address offset by 8; used for sse high-parts | Available | Existed |
 | Y | print condition for XOP pcom* instruction. | Not | - |
 | V | print naked full integer register name without %. | Available | Existed |
 | + | print a branch hint as 'cs' or 'ds' prefix | Not | - |
 | ; | print a semicolon (after prefixes due to bug in older gas). | Not | - |
 | ~ | print "i" if TARGET_AVX2, "f" otherwise. | Not | - |
 | ^ | print addr32 prefix if TARGET_64BIT and Pmode != word_mode | Not | - |
 | M | print addr32 prefix for TARGET_X32 with VSIB address. | Not | - |
 | ! | print NOTRACK prefix for jxx/call/ret instructions if required. | Not | - |
 | N | print maskz if it's constant 0 operand. | Available | Not |
 | I | print comparision predicate operand for sse cmp condition. | Not | - |

gcc/ChangeLog

PR target/94118
 * doc/extend.texi (x86Operandmodifiers): Document more x86
 operand modifier.
 * gcc/config/i386/i386.c: Add comment for operand modifier N
 and I.

Modified-by: liuhongt <hongtao.liu@intel.com>
4 years agoRefactor tree-vrp.c
Giuliano Belinassi [Wed, 13 May 2020 00:37:01 +0000 (21:37 -0300)]
Refactor tree-vrp.c

Refactor tree-vrp.c to eliminate all global variables except
'x_vrp_values', which will require that 'thread_outgoing_edges'
to accept an extra argument and pass it to the 'simplify' callback.

It also removes every access to 'cfun', retrieving the function being
compiled from the pass engine.

gcc/ChangeLog
2020-05-12  Giuliano Belinassi  <giuliano.belinassi@usp.br>

* tree-vrp.c (class vrp_insert): New.
(insert_range_assertions): Move to class vrp_insert.
(dump_all_asserts): Same as above.
(dump_asserts_for): Same as above.
(live): Same as above.
(need_assert_for): Same as above.
(live_on_edge): Same as above.
(finish_register_edge_assert_for): Same as above.
(find_switch_asserts): Same as above.
(find_assert_locations): Same as above.
(find_assert_locations_1): Same as above.
(find_conditional_asserts): Same as above.
(process_assert_insertions): Same as above.
(register_new_assert_for): Same as above.
(vrp_prop): New variable fun.
(vrp_initialize): New parameter.
(identify_jump_threads): Same as above.
(execute_vrp): Same as above.

4 years agoDaily bump.
GCC Administrator [Wed, 13 May 2020 00:16:23 +0000 (00:16 +0000)]
Daily bump.

4 years agoRISC-V: Make unique SECCAT_SRODATA names start with .srodata (not .sdata2)
Keith Packard [Wed, 29 Apr 2020 16:49:56 +0000 (09:49 -0700)]
RISC-V: Make unique SECCAT_SRODATA names start with .srodata (not .sdata2)

default_unique_section uses ".sdata2" as a prefix for SECCAT_SRODATA
unique sections, but RISC-V uses ".srodata" instead. Override the
TARGET_ASM_UNIQUE_SECTION function to catch this case, allowing the
default to be used for all other sections.

Signed-off-by: Keith Packard <keithp@keithp.com>
gcc/
* config/riscv/riscv.c (riscv_unique_section): New.
(TARGET_ASM_UNIQUE_SECTION): New.

4 years agoRISC-V: Add shorten_memrefs pass.
Craig Blackmore [Tue, 12 May 2020 21:41:08 +0000 (14:41 -0700)]
RISC-V: Add shorten_memrefs pass.

gcc/
* config.gcc:  Add riscv-shorten-memrefs.o to extra_objs for riscv.
* config/riscv/riscv-passes.def: New file.
* config/riscv/riscv-protos.h (make_pass_shorten_memrefs): Declare.
* config/riscv/riscv-shorten-memrefs.c: New file.
* config/riscv/riscv.c (tree-pass.h): New include.
(riscv_compressed_reg_p): New Function
(riscv_compressed_lw_offset_p): Likewise.
(riscv_compressed_lw_address_p): Likewise.
(riscv_shorten_lw_offset): Likewise.
(riscv_legitimize_address): Attempt to convert base + large_offset
to compressible new_base + small_offset.
(riscv_address_cost): Make anticipated compressed load/stores
cheaper for code size than uncompressed load/stores.
(riscv_register_priority): Move compressed register check to
riscv_compressed_reg_p.
* config/riscv/riscv.h (C_S_BITS): Define.
(CSW_MAX_OFFSET): Define.
* config/riscv/riscv.opt (mshorten-memefs): New option.
* config/riscv/t-riscv (riscv-shorten-memrefs.o): New rule.
(PASSES_EXTRA): Add riscv-passes.def.
* doc/invoke.texi: Document -mshorten-memrefs.

* config/riscv/riscv.c (riscv_new_address_profitable_p): New function.
(TARGET_NEW_ADDRESS_PROFITABLE_P): Define.
* doc/tm.texi: Regenerate.
* doc/tm.texi.in (TARGET_NEW_ADDRESS_PROFITABLE_P):  New hook.
* sched-deps.c (attempt_change): Use old address if it is cheaper than
new address.
* target.def (new_address_profitable_p): New hook.
* targhooks.c (default_new_address_profitable_p): New function.
* targhooks.h (default_new_address_profitable_p): Declare.

gcc/testsuite/
* gcc.target/riscv/shorten-memrefs-1.c: New test.
* gcc.target/riscv/shorten-memrefs-2.c: New test.
* gcc.target/riscv/shorten-memrefs-3.c: New test.
* gcc.target/riscv/shorten-memrefs-4.c: New test.
* gcc.target/riscv/shorten-memrefs-5.c: New test.
* gcc.target/riscv/shorten-memrefs-6.c: New test.
* gcc.target/riscv/shorten-memrefs-7.c: New test.

4 years agoSuppress warning for Interfaces.C with -fdump-ada-spec
Eric Botcazou [Tue, 12 May 2020 20:41:09 +0000 (22:41 +0200)]
Suppress warning for Interfaces.C with -fdump-ada-spec

The C/C++ bindings generated by means of -fdump-ada-spec always contain
with and use clauses for Interfaces.C, but they can be unused in some
cases so make sure to avoid warning about that.

* c-ada-spec.c (dump_ads): Output pragma Warnings ("U"); on entry.

4 years agopreprocessor: EOF location is at end of file [PR95013]
Nathan Sidwell [Tue, 12 May 2020 20:33:11 +0000 (13:33 -0700)]
preprocessor: EOF location is at end of file [PR95013]

My recent C++ parser change to pay attention to EOF location uncovered
a separate bug.  The preprocesor's EOF logic would set the EOF
location to be the beginning of the last line of text in the file --
not the 'line' after that, which contains no characters.  Mostly.
This fixes things so that when we attempt to read the last line of the
main file, we don't pop the buffer until the tokenizer has a chance to
create an EOF token with the correct location information.  It is then
responsible for popping the buffer.  As it happens, raw string literal
tokenizing contained a bug -- it would increment the line number
prematurely, because it cached buffer->cur in a local variable, but
checked buffer->cur before updating it to figure out if it was at end
of file.   We fix up that too.

The EOF token intentionally doesn't have a column number -- it's not a
position on a line, it's a non-existant line.

The testsuite churn is just correcting the EOF location diagnostics.

libcpp/
PR preprocessor/95013
* lex.c (lex_raw_string): Process line notes before incrementing.
Correct incrementing condition.  Adjust for new
_cpp_get_fresh_line EOF behaviour.
(_cpp_get_fresh_line): Do not pop buffer at EOF, increment line
instead.
(_cpp_lex_direct): Adjust for new _cpp_get_fresh_line behaviour.
(cpp_directive_only_process): Assert we got a fresh line.
* traditional.c (_cpp_read_logical_line_trad): Adjust for new
_cpp_get_fresh_line behaviour.

gcc/testsuite/
* c-c++-common/goacc/pr79428-1.c: Adjust EOF diagnostic location.
* c-c++-common/gomp/pr79428-2.c: Likewise.
* g++.dg/cpp0x/decltype63.C: Likewise.
* g++.dg/cpp0x/gen-attrs-64.C: Likewise.
* g++.dg/cpp0x/pr68726.C: Likewise.
* g++.dg/cpp0x/pr78341.C: Likewise.
* g++.dg/cpp1y/pr65202.C: Likewise.
* g++.dg/cpp1y/pr65340.C: Likewise.
* g++.dg/cpp1y/pr68578.C: Likewise.
* g++.dg/cpp1z/class-deduction44.C: Likewise.
* g++.dg/diagnostic/unclosed-extern-c.C: Likewise.
* g++.dg/diagnostic/unclosed-function.C: Likewise.
* g++.dg/diagnostic/unclosed-namespace.C: Likewise.
* g++.dg/diagnostic/unclosed-struct.C: Likewise.
* g++.dg/ext/pr84598.C: Likewise.
* g++.dg/other/switch4.C: Likewise.
* g++.dg/parse/attr4.C: Likewise.
* g++.dg/parse/cond4.C: Likewise.
* g++.dg/parse/crash10.C: Likewise.
* g++.dg/parse/crash18.C: Likewise.
* g++.dg/parse/crash27.C: Likewise.
* g++.dg/parse/crash34.C: Likewise.
* g++.dg/parse/crash35.C: Likewise.
* g++.dg/parse/crash52.C: Likewise.
* g++.dg/parse/crash59.C: Likewise.
* g++.dg/parse/crash61.C: Likewise.
* g++.dg/parse/crash67.C: Likewise.
* g++.dg/parse/error14.C: Likewise.
* g++.dg/parse/error56.C: Likewise.
* g++.dg/parse/invalid1.C: Likewise.
* g++.dg/parse/parameter-declaration-1.C: Likewise.
* g++.dg/parse/parser-pr28152-2.C: Likewise.
* g++.dg/parse/parser-pr28152.C: Likewise.
* g++.dg/parse/pr68722.C: Likewise.
* g++.dg/pr46852.C: Likewise.
* g++.dg/pr46868.C: Likewise.
* g++.dg/template/crash115.C: Likewise.
* g++.dg/template/crash43.C: Likewise.
* g++.dg/template/crash90.C: Likewise.
* g++.dg/template/error-recovery1.C: Likewise.
* g++.dg/template/error57.C: Likewise.
* g++.old-deja/g++.other/crash31.C: Likewise.
* gcc.dg/empty-source-2.c: Likewise.
* gcc.dg/empty-source-3.c: Likewise.
* gcc.dg/noncompile/pr30552-3.c: Likewise.
* gcc.dg/noncompile/pr35447-1.c: Likewise.
* gcc.dg/pr20245-1.c: Likewise.
* gcc.dg/pr28419.c: Likewise.
* gcc.dg/rtl/truncated-rtl-file.c: Likewise.
* gcc.dg/unclosed-init.c: Likewise.
* obj-c++.dg/property/property-neg-6.mm: Likewise.
* obj-c++.dg/syntax-error-10.mm: Likewise.
* obj-c++.dg/syntax-error-8.mm: Likewise.
* obj-c++.dg/syntax-error-9.mm: Likewise.

4 years agoBe prepared for more aggregates in gigi
Eric Botcazou [Tue, 12 May 2020 20:34:50 +0000 (22:34 +0200)]
Be prepared for more aggregates in gigi

This makes sure that gigi is prepared to handle more aggregates in the
special memset code path.

* sem_aggr.ads (Is_Single_Aggregate): New function.
* sem_aggr.adb (Is_Others_Aggregate): Use local variable.
(Is_Single_Aggregate): New function to recognize an aggregate with
a single association containing a single choice.
* fe.h (Is_Others_Aggregate): Delete.
(Is_Single_Aggregate): New declaration.
* gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Call
Is_Single_Aggregate instead of Is_Others_Aggregate.

4 years agoc++: Function found via ADL when it should not [PR95074]
Marek Polacek [Tue, 12 May 2020 18:56:13 +0000 (14:56 -0400)]
c++: Function found via ADL when it should not [PR95074]

I noticed that we don't implement [basic.lookup.argdep]/3: quite correctly;
it says "If X (the lookup set produced by unqualified lookup) contains
-- a block-scope function declaration that is not a using-declaration
[...]
then Y (the lookup set produced by ADL) is empty."
but we were still performing ADL in fn1 in the attached test.  The
problem was that we were only looking at the first function in the
overload set which in this case happened to be a using-declaration, and
those don't suppress ADL.  We have to look through the whole set to find
out if unqualified lookup found a block-scope function declaration, or
a member function declaration.

PR c++/95074
* parser.c (cp_parser_postfix_expression) <case CPP_OPEN_PAREN>: When
looking for a block-scope function declaration, look through the whole
set, not just the first function in the overload set.

* g++.dg/lookup/koenig15.C: New test.

4 years agotestsuite: Fix up gcc.dg/asan/pr95051.c testcase [PR95051]
Jakub Jelinek [Tue, 12 May 2020 19:21:30 +0000 (21:21 +0200)]
testsuite: Fix up gcc.dg/asan/pr95051.c testcase [PR95051]

asan.exp adds -fsanitize=address which is incompatible with -fsanitize=kernel-address,
so we need to disable it first.

2020-05-12  Jakub Jelinek  <jakub@redhat.com>

PR sanitizer/95051
* gcc.dg/asan/pr95051.c: Add -fno-sanitize=all to dg-options.

4 years agoFix throw specifiers on interface.
Nathan Sidwell [Tue, 12 May 2020 17:54:53 +0000 (10:54 -0700)]
Fix throw specifiers on interface.

I discovered that libitm:
(a) declares __cxa_allocate_exception and friends directly,
(b) doesn't mark them as 'throw()'
(c) doesn't mark the replacment fns _ITM_$foo as nothrow either

We happen to get away with it because of code in the compiler that,
although it checks the parameter types, doesn't check the exception
specification.  (One reason being they used to not be part of the
language's type system, but now they are.)  I suspect this can lead us
to generate pessimal code later, if we've seen one of these decls
earlier.  Anyway, with modules it becomes trickier[*], so I'm trying
to clean it up and not be a problem.  I see Jakub fixed part of the
problem
(https://gcc.gnu.org/pipermail/gcc-patches/2018-December/513302.html)
AFAICT, he did fix libitm's decls, but left the lax parm-type checking
in the compiler.

libitm.h is not very informative about specification:
  in version 1 of http://www.intel.com/some/path/here.pdf.  */

Anyway, it was too fiddly to have libitm pick up the declarations from
libsupc++.  Besides it makes them weak declarations, and then provides
definitions for non-elf systems.  So this patch adds the expected
'throw()'

* libitm/libitm.h (_ITM_NOTHROW): Define.
(_ITM_cxa_allocate_exception, _ITM_cxa_free_exception)
(_ITM_cxa_begin_catch): Use it.
* eh_cpp.cc: Add throw() to __cxa_allocate_exception,
__cxa_free_exception, __cxa_begin_catch, __cxa_tm_cleanup,
__cxa_get_globals.
(_ITM_cxa_allocate_exception, _ITM_cxa_free_exception)
(_ITM_cxa_begin_catch): Likewise.

4 years agoEnable CET in cross compiler if possible
H.J. Lu [Tue, 12 May 2020 17:39:42 +0000 (10:39 -0700)]
Enable CET in cross compiler if possible

Don't perform CET run-time check for host when cross compiling.  Instead,
enable CET in cross compiler if possible so that it will run on both CET
and non-CET hosts.

config/

PR bootstrap/94998
* cet.m4 (GCC_CET_HOST_FLAGS): Enable CET in cross compiler if
possible.

libiberty/

PR bootstrap/94998
* configure: Regenerated.

lto-plugin/

PR bootstrap/94998
* configure: Regenerated.

4 years agoi386: Add V2SFmode copysign, xorsign and signbit expanders [PR95046]
Uros Bizjak [Tue, 12 May 2020 17:24:53 +0000 (19:24 +0200)]
i386: Add V2SFmode copysign, xorsign and signbit expanders [PR95046]

gcc/ChangeLog:

PR target/95046
* config/i386/mmx.md (copysignv2sf3): New expander.
(xorsignv2sf3): Ditto.
(signbitv2sf3): Ditto.

testsuite/ChangeLog:

PR target/95046
* gcc.target/i386/pr95046-4.c: New test.

4 years agoi386: Add V2SFmode FMA insn patterns [PR95046]
Uros Bizjak [Tue, 12 May 2020 16:36:27 +0000 (18:36 +0200)]
i386: Add V2SFmode FMA insn patterns [PR95046]

gcc/ChangeLog:

PR target/95046
* config/i386/mmx.md (fmav2sf4): New insn pattern.
(fmsv2sf4): Ditto.
(fnmav2sf4): Ditto.
(fnmsv2sf4): Ditto.

testsuite/ChangeLog:

PR target/95046
* gcc.target/i386/pr95046-3.c: New test.

4 years agoc++: Add abbreviated fn template test for [PR78752]
Patrick Palka [Tue, 12 May 2020 16:20:55 +0000 (12:20 -0400)]
c++: Add abbreviated fn template test for [PR78752]

This adds an abbreviated function template version of the testcase in
PR78752, which seems to already be fixed.

gcc/testsuite/ChangeLog:

PR c++/78752
* g++.dg/cpp2a/concepts-pr78752-2.C: New test.

4 years agozlib: Add --enable-cet to configure
H.J. Lu [Tue, 12 May 2020 16:27:24 +0000 (09:27 -0700)]
zlib: Add --enable-cet to configure

When --enable-cet is used to configure GCC, enable Intel CET in target
zlib.

* Makefile.am (AM_CFLAGS): New.
* configure.ac (CET_FLAGS): Add GCC_CET_FLAGS and AC_SUBST.
* Makefile.in: Regenerated.
* aclocal.m4: Likewise.
* configure.ac: Likewise.

4 years agolibbacktrace: Enable Intel CET on Intel CET enabled host for jit
H.J. Lu [Tue, 12 May 2020 16:23:56 +0000 (09:23 -0700)]
libbacktrace: Enable Intel CET on Intel CET enabled host for jit

Since on Intel CET enabled host, dlopen in Intel CET enabled applications
fails on shared libraries which aren't Intel CET enabled, compile with
-fcf-protection on Intel CET enabled host when jit is enabled to enable
Intel CET on libgccjit.

* Makefile.am (AM_CFLAGS): Add $(CET_HOST_FLAGS).
* configure.ac: Add GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) and
AC_SUBST(CET_HOST_FLAGS).  Clear CET_HOST_FLAGS if jit isn't
enabled.
* Makefile.in: Regenerated.
* configure: Likewise.

4 years agolibdecnumber: Enable Intel CET on Intel CET enabled host for jit
H.J. Lu [Tue, 12 May 2020 16:19:14 +0000 (09:19 -0700)]
libdecnumber: Enable Intel CET on Intel CET enabled host for jit

Since on Intel CET enabled host, dlopen in Intel CET enabled applications
fails on shared libraries which aren't Intel CET enabled, compile with
-fcf-protection on Intel CET enabled host when jit is enabled to enable
Intel CET on libgccjit.

* Makefile.in (CET_HOST_FLAGS): New.
(COMPILER): Add $(CET_HOST_FLAGS).
* configure.ac: Add GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) and
AC_SUBST(CET_HOST_FLAGS).  Clear CET_HOST_FLAGS if jit isn't
enabled.
* aclocal.m4: Regenerated.
* configure: Likewise.

4 years agolibcpp: Enable Intel CET on Intel CET enabled host for jit
H.J. Lu [Tue, 12 May 2020 16:17:34 +0000 (09:17 -0700)]
libcpp: Enable Intel CET on Intel CET enabled host for jit

Since on Intel CET enabled host, dlopen in Intel CET enabled applications
fails on shared libraries which aren't Intel CET enabled, compile with
-fcf-protection on Intel CET enabled host when jit is enabled to enable
Intel CET on libgccjit.

* Makefile.in (CET_HOST_FLAGS): New.
(COMPILER): Add $(CET_HOST_FLAGS).
* configure.ac: Add GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) and
AC_SUBST(CET_HOST_FLAGS).  Clear CET_HOST_FLAGS if jit isn't
enabled.
* aclocal.m4: Regenerated.
* configure: Likewise.

4 years agogcc: Enable Intel CET on Intel CET enabled host for jit
H.J. Lu [Tue, 12 May 2020 16:14:52 +0000 (09:14 -0700)]
gcc: Enable Intel CET on Intel CET enabled host for jit

Since on Intel CET enabled host, dlopen in Intel CET enabled applications
fails on shared libraries which aren't Intel CET enabled, compile with
-fcf-protection on Intel CET enabled host when jit is enabled to enable
Intel CET on libgccjit.

* Makefile.in (CET_HOST_FLAGS): New.
(COMPILER): Add $(CET_HOST_FLAGS).
* configure.ac: Add GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) and
AC_SUBST(CET_HOST_FLAGS).  Clear CET_HOST_FLAGS if jit isn't
enabled.
* aclocal.m4: Regenerated.
* configure: Likewise.

4 years agolibcc1: Enable Intel CET on Intel CET enabled host
H.J. Lu [Tue, 12 May 2020 16:12:26 +0000 (09:12 -0700)]
libcc1: Enable Intel CET on Intel CET enabled host

Since on Intel CET enabled host, dlopen in Intel CET enabled applications
fails on shared libraries which aren't Intel CET enabled, enable Intel
CET in libcc1 on Intel CET enabled host.

* Makefile.am (AM_CXXFLAGS): Add $(CET_HOST_FLAGS).
* configure.ac: Add GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) and
AC_SUBST(CET_HOST_FLAGS).
* Makefile.in: Regenerated.
* aclocal.m4: Likewise.
* configure: Likewise.

4 years agoi386: Add V2SFmode NEG, ABS and logic insn patterns [PR95046]
Uros Bizjak [Tue, 12 May 2020 15:08:03 +0000 (17:08 +0200)]
i386: Add V2SFmode NEG, ABS and logic insn patterns [PR95046]

gcc/ChangeLog:

PR target/95046
* config/i386/mmx.md (<code>v2sf2): New insn pattern.
(*mmx_<code>v2sf2): New insn_and_split pattern.
(*mmx_nabsv2sf2): Ditto.
(*mmx_andnotv2sf3): New insn pattern.
(*mmx_<code>v2sf3): Ditto.
* config/i386/i386.md (absneg_op): New code attribute.
* config/i386/i386.c (ix86_build_const_vector): Handle V2SFmode.
(ix86_build_signbit_mask): Ditto.

testsuite/ChangeLog:

PR target/95046
* gcc.target/i386/pr95046-2.c: New test.

4 years agoi386: Add V2SFmode NEG, ABS and logic insn patterns [PR95046]
Uros Bizjak [Tue, 12 May 2020 15:06:13 +0000 (17:06 +0200)]
i386: Add V2SFmode NEG, ABS and logic insn patterns [PR95046]

gcc/ChangeLog:

PR target/95046
* config/i386/mmx.md (<code>v2sf2): New insn pattern.
(*mmx_<code>v2sf2): New insn_and_split pattern.
(*mmx_nabsv2sf2): Ditto.
(*mmx_andnotv2sf3): New insn pattern.
(*mmx_<code>v2sf3): Ditto.
* config/i386/i386.md (absneg_op): New code attribute.
* config/i386/i386.c (ix86_build_const_vector): Handle V2SFmode.
(ix86_build_signbit_mask): Ditto.

testsuite/ChangeLog:

PR target/95046
* gcc.target/i386/pr95046-2.c: New test.

4 years agoremove dead debug-bind resets
Richard Biener [Tue, 14 Jan 2020 14:31:18 +0000 (15:31 +0100)]
remove dead debug-bind resets

This removes debug-bind resets aka

 # DEBUG b = NULL

when the reset variable is otherwise unused.  I've gathered statistics
for a single TU, fold-const.ii which at -O2 -g shows

28 ssa "dead debug bind reset" 1
34 einline "dead debug bind reset" 340
54 release_ssa "dead debug bind reset" 176
54 release_ssa "live debug bind reset of dead var" 4
86 inline "dead debug bind reset" 5131
86 inline "live debug bind reset of dead var" 61
241 optimized "dead debug bind reset" 970
241 optimized "live debug bind reset of dead var" 287

where "live debug bind reset of dead var" means the variable is unused
but there were debug binds with a value for them and
"dead debug bind reset" means the variable is unused and there were
only debug bind resets (each reset of the same variable is counted
for both counters).  This shows A considerable amount of dead stmts
removed esp. after IPA inlining.

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

* tree-ssa-live.c (remove_unused_locals): Remove dead debug
bind resets.

4 years agomiddle-end/94988 fix testcase for big-endian
Richard Biener [Tue, 12 May 2020 12:13:32 +0000 (14:13 +0200)]
middle-end/94988 fix testcase for big-endian

The testcase only works for little-endian, mark it so.

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

PR middle-end/94988
* gcc.dg/torture/pr94988.c: Disable runtime test for
* non-little-endian.

4 years agoMSP430: Define ASM_OUTPUT_ALIGNED_DECL_LOCAL
Jozef Lawrynowicz [Fri, 8 May 2020 13:45:20 +0000 (14:45 +0100)]
MSP430: Define ASM_OUTPUT_ALIGNED_DECL_LOCAL

gcc/ChangeLog:

2020-05-12  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

* config/msp430/msp430-protos.h (msp430_output_aligned_decl_common):
Update prototype to include "local" argument.
* config/msp430/msp430.c (msp430_output_aligned_decl_common): Add
"local" argument.  Handle local common decls.
* config/msp430/msp430.h (ASM_OUTPUT_ALIGNED_DECL_COMMON): Adjust
msp430_output_aligned_decl_common call with 0 for "local" argument.
(ASM_OUTPUT_ALIGNED_DECL_LOCAL): Define.

gcc/testsuite/ChangeLog:

2020-05-12  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

* gcc.c-torture/execute/noinit-attribute.c: Skip for msp430
in the large memory model.