Richard Biener [Thu, 2 Jul 2020 09:12:51 +0000 (11:12 +0200)]
tree-optimization/96022 - fix ICE with vectorized shift
This fixes lane extraction for internal def vectorized shifts
with an effective scalar shift operand by always using lane zero
of the first vector stmt.
It also fixes a SLP build issue noticed on the testcase where
we end up building unary vector ops with the only operand built
form scalars which isn't profitable by itself. The exception
is for stores.
2020-07-02 Richard Biener <rguenther@suse.de>
PR tree-optimization/96022
* tree-vect-stmts.c (vectorizable_shift): Only use the
first vector stmt when extracting the scalar shift amount.
* tree-vect-slp.c (vect_build_slp_tree_2): Also build unary
nodes with all-scalar children from scalars but not stores.
(vect_analyze_slp_instance): Mark the node not failed.
* g++.dg/vect/pr96022.cc: New testcase.
Fei Yang [Thu, 2 Jul 2020 09:14:33 +0000 (10:14 +0100)]
vect: Fix an ICE in exact_div [PR95961]
In the test case for PR95961, vectorization factor computed
by vect_determine_vectorization_factor is [8,8]. But this is
updated to [1,1] later by vect_update_vf_for_slp. When we call
vect_get_num_vectors in vect_enhance_data_refs_alignment, the number
of scalars which is based on the vectorization factor is not a multiple
of the the number of elements in the vector type. This leads to
the ICE. This isn't a simple stream of contiguous vector accesses.
It's hard to predict from the available information how many vector
accesses we'll actually need per iteration. As discussed, here we
should use the number of scalars instead of the number of vectors as
an upper bound for the loop saving info about DR in the hash table.
2020-07-02 Felix Yang <felix.yang@huawei.com>
gcc/
PR tree-optimization/95961
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Use the
number of scalars instead of the number of vectors as an upper bound
for the loop saving info about DR in the hash table. Remove unused
local variables.
gcc/testsuite/
PR tree-optimization/95961
* gcc.target/aarch64/sve/pr95961.c: New test.
Jakub Jelinek [Thu, 2 Jul 2020 09:03:33 +0000 (11:03 +0200)]
openmp: Diagnose non-rectangular loops with invalid steps
THe OpenMP 5 standard requires that if some loop in OpenMP loop nest refers
to some outer loop's iterator variable, then the subtraction of the multiplication
factors for the outer iterator multiplied by the outer increment modulo the
inner increment is 0. For loops with non-constants in any of these we can't
diagnose it, it would be a task for something like -fsanitize=openmp,
but if all these are constant, we can diagnose it.
2020-07-02 Jakub Jelinek <jakub@redhat.com>
* omp-expand.c (expand_omp_for): Diagnose non-rectangular loops with
invalid steps - ((m2 - m1) * incr_outer) % incr must be 0 in valid
OpenMP non-rectangular loops. Use XALLOCAVEC.
* c-c++-common/gomp/loop-7.c: New test.
Eric Botcazou [Thu, 2 Jul 2020 08:26:49 +0000 (10:26 +0200)]
Reject components in extensions overlapping with the parent
Such problematic components can be specified by means of a component
clause but they cannot be fully supported by the type system. They
had initially been forbidden, then we decided to accept them by working
around the type system, but this is very fragile and, for example, any
static aggregate is guaranteed to trigger an ICE with the current
implementation.
We now reject them again, except if the -gnatd.K switch is passed.
gcc/ada/ChangeLog:
* debug.adb (d.K): Document new usage.
* fe.h (Debug_Flag_Dot_KK): Declare.
* gcc-interface/decl.c (gnat_to_gnu_field): Give an error when the
component overlaps with the parent subtype, except with -gnatd.K.
Martin Liska [Tue, 2 Jun 2020 08:11:07 +0000 (10:11 +0200)]
Do not stream all zeros for gcda files.
gcc/ChangeLog:
PR gcov-profile/95348
* coverage.c (read_counts_file): Read only COUNTERS that are
not all-zero.
* gcov-dump.c (tag_function): Change signature from unsigned to
signed integer.
(tag_blocks): Likewise.
(tag_arcs): Likewise.
(tag_lines): Likewise.
(tag_counters): Likewise.
(tag_summary): Likewise.
* gcov.c (read_count_file): Read all non-zero counters
sensitively.
libgcc/ChangeLog:
PR gcov-profile/95348
* libgcov-driver.c (merge_one_data): Merge only profiles
that are not of non-zero type.
(write_one_data): Write counters only if there's one non-zero
value.
* libgcov-util.c (tag_function): Change signature from unsigned
to int.
(tag_blocks): Likewise.
(tag_arcs): Likewise.
(tag_counters): Likewise.
(tag_summary): Likewise.
(tag_lines): Read only if COUNTERS is non-zero.
(read_gcda_file): Handle negative length for COUNTERS type.
Mark Eggleston [Thu, 25 Jun 2020 04:16:50 +0000 (05:16 +0100)]
Fortran : ICE in generic_correspondence PR95584
Output an error for ambiguous interfaces in generic interface
instead of ICE.
2020-07-02 Steven G. Kargl <kargl@gcc.gnu.org>
gcc/fortran/
PR fortran/95584
* interface.c (generic_correspondence): Only use the pointer
to a symbol if exists.
2020-07-02 Mark Eggleston <markeggleston@gcc.gnu.org>
gcc/testsuite/
PR fortran/95584
* gfortran.dg/pr95584.f90: New test.
Kewen Lin [Thu, 2 Jul 2020 05:55:53 +0000 (00:55 -0500)]
testsuite: Ignore line no. for BB vectorization message
The case g++.dg/vect/slp-pr56812.cc need to be fixed a bit with
line number neglection since the message for basic block vectorization
looks like:
slp-pr56812.cc:19:1: optimized: basic block part vectorized using
16 byte vectors
while for loop vectorization, it looks like:
slp-pr56812.cc:17:18: optimized: loop vectorized using 16 byte
vectors
gcc/testsuite/ChangeLog:
* g++.dg/vect/slp-pr56812.cc: Ignore line number for basic block
vectorization messages.
Kito Cheng [Thu, 18 Jun 2020 03:37:01 +0000 (11:37 +0800)]
RISC-V: Handle multi-letter extension for multilib-generator
- The order of multi-lib config could be wrong if multi-ltter are
used, e.g. `./multilib-generator rv32izfh-ilp32--c`, would expect
rv32ic_zfh/ilp32 reuse rv32i_zfh/ilp32, however the multi-ltter is not
handled correctly, it will generate reuse rule for rv32izfhc/ilp32
which is invalid arch configuration.
- Remove re-use rule gen for g/imafd, because we canonicalize the -march at
gcc driver too, so we don't need handle 'g' for multilib now.
gcc/ChangeLog:
* config/riscv/multilib-generator (arch_canonicalize): Handle
multi-letter extension.
Using underline as separator between different extensions.
GCC Administrator [Thu, 2 Jul 2020 00:16:26 +0000 (00:16 +0000)]
Daily bump.
Pip Cet [Wed, 1 Jul 2020 20:58:52 +0000 (14:58 -0600)]
The variant of editing distance we use doesn't satisfy the triangle inequality.
gcc
* spellcheck.c (test_data): Add problematic strings.
(test_metric_conditions): Don't test the triangle inequality
condition, which our distance function does not satisfy.
Omar Tahir [Wed, 1 Jul 2020 20:56:16 +0000 (21:56 +0100)]
aarch64: Fix missing BTI instruction in trampolines
If two functions require trampolines, and the first has BTI enabled
while the second doesn't, the generated template will be lacking
a BTI instruction. This patch fixes this by always adding a BTI
instruction, which is safe as BTI instructions are ignored on
unsupported architecture versions.
2020-07-01 Omar Tahir <omar.tahir@arm.com>
gcc/
* config/aarch64/aarch64.c (aarch64_asm_trampoline_template): Always
generate a BTI instruction.
gcc/testsuite/
* gcc.target/aarch64/bti-4.c: New test.
Jeff Law [Wed, 1 Jul 2020 20:44:07 +0000 (14:44 -0600)]
match.pd: (x & y) - (x | y) - 1 -> ~(x ^ y) simplification [PR94882]
gcc/
PR tree-optimization/94882
* match.pd (x & y) - (x | y) - 1 -> ~(x ^ y): New simplification.
gcc/testsuite/
PR tree-optimization/94882
* gcc.dg/tree-ssa/pr94882.c: New test.
* gcc.dg/tree-ssa/pr94882-1.c: New test.
* gcc.dg/tree-ssa/pr94882-2.c: New test.
* gcc.dg/tree-ssa/pr94882-3.c: New test.
Jonathan Wakely [Wed, 1 Jul 2020 20:01:15 +0000 (21:01 +0100)]
libstdc++: Remove noexcept from match_results comparisons (PR 94627)
These functions can't be noexcept because the iterators stored in the
sub_match objects can throw on any operation.
libstdc++-v3/ChangeLog:
PR libstdc++/94627
* include/bits/regex.h (operator==, operator!=): Remove noexcept
equality comparisons for match_results.
* testsuite/28_regex/match_results/94627.cc: New test.
Jonathan Wakely [Tue, 30 Jun 2020 16:40:08 +0000 (17:40 +0100)]
analyzer: Fix -Wanalyzer-possible-null-argument warning (PR 96014)
gcc/testsuite/ChangeLog:
PR testsuite/96014
* g++.dg/analyzer/pr94028.C: Make operator new non-throwing so
that the compiler doesn't implicitly mark it as returning
non-null.
David Edelsohn [Wed, 1 Jul 2020 19:11:54 +0000 (15:11 -0400)]
bootstrap: Don't translate assignment to hint[].
error array must be initialized with a brace-enclosed initializer
gcc/fortran/ChangeLog
2020-07-01 David Edelsohn <dje.gcc@gmail.com>
* check.c (gfc_invalid_boz): Fix bootstrap. Revert
Mark hint for translation using _().
David Edelsohn [Wed, 1 Jul 2020 18:05:26 +0000 (14:05 -0400)]
testsuite: Adjust gfortran.dg/pr95690.f90 line number.
gfortran produces associates a different line number for the same error
message depending on x86 versus other architectures. This patch adjusts
the dg-error line number depending on the target.
gcc/testsuite/ChangeLog
2020-07-01 David Edelsohn <dje.gcc@gmail.com>
* gfortran.dg/pr95690.f90: Adjust dg-error line number.
David Edelsohn [Wed, 1 Jul 2020 16:39:49 +0000 (12:39 -0400)]
testsuite: Restore lp64 for some gcc.target/powerpc testcases.
gcc/testsuite/ChangeLog
2020-07-01 David Edelsohn <dje.gcc@gmail.com>
* gcc.target/powerpc/direct-move-double1.c: Require lp64.
* gcc.target/powerpc/direct-move-float1.c: Same.
* gcc.target/powerpc/direct-move-float3.c: Same.
* gcc.target/powerpc/direct-move-vint1.c: Same.
* gcc.target/powerpc/vsx-vector-5.c: Same.
* gcc.target/powerpc/vsx-vector-6.p7.c: Same.
* gcc.target/powerpc/vsx-vector-6.p8.c: Same.
* gcc.target/powerpc/vsx-vector-6.p9.c: Same.
Jeff Law [Wed, 1 Jul 2020 16:09:48 +0000 (10:09 -0600)]
Fix bootstrap for m68k.
gcc/
* config/m68k/m68k.c (m68k_output_btst): Drop "register" keyword.
(emit_move_sequence, output_iorsi3, output_xorsi3): Likewise.
Mark Eggleston [Tue, 2 Jun 2020 07:38:01 +0000 (08:38 +0100)]
Fortran : Fortran translation issues PR52279
Mark strings for translation by enclosing in G_() and _().
2020-06-24 Mark Eggleston <markeggleston@gcc.gnu.org>
gcc/fortran/
PR fortran/52279
* arith.c (reduce_binary_aa): Mark for translation the string
parameter to gfc_check_conformance with G_().
* check.c (gfc_invalid_boz): Mark hint for translation using
_(). (gfc_check_achar): Mark for translation the message
parameter to gfc_invalid_boz using G_(). (gfc_check_char):
Mark for translation the message parameter to gfc_invalid_boz
using G_(). (gfc_check_complex): Mark for translation the
message parameter to gfc_invalid_boz using G_().
(gfc_check_float): Mark for translation the message
parameter to gfc_invalid_boz using G_(). (check_rest): Mark
for translation the string parameter to gfc_check_conformance
with _(). (gfc_check_minloc_maxloc): Mark for translation
the string parameter to gfc_check_conformance with _().
(gfc_check_findloc): Mark for translation the string parameter
to gfc_check_conformance with _(). (check_reduction): Mark
for translation the string parameter to gfc_check_conformance
with _(). (gfc_check_pack): Mark for translation the string
parameter to gfc_check_conformance with _().
* decl.c (match_old_style_init): Mark for translation the
message parameter to gfc_invalid_boz using G_().
* expr.c (gfc_check_assign): Mark for translation the string
parameter to gfc_check_conformance with _().
* intrinsic.c (check_specific): Mark for translation the string
parameter to gfc_check_conformance with _().
(gfc_check_intrinsic_standard): Mark symstd_msg strings for
translation using G_(). No need to mark symstd_msg for
translation in call to gfc_warning or when setting symstd.
* io.c (check_open_constraints): Mark strings for translation
using G_() in all calls to warn_or_error. (match_io_element):
Mark for translation the message parameter to gfc_invalid_boz
using G_().
* primary.c (match_boz_constant): Mark for translation the
message parameter to gfc_invalid_boz using G_().
* resolve.c (resolve_elemental_actual): Mark for translation
the string parameter to gfc_check_conformance with _().
(resolve_operator): Mark for translation the string parameter
to gfc_check_conformance with _(). Mark translation strings
assigned to msg using G_() for use in a call to cfg_warning.
Nathan Sidwell [Wed, 1 Jul 2020 15:56:32 +0000 (08:56 -0700)]
c++: Expose cloning form predicates
A further adjustment of the function cloning. Rather than have
copy_fndecl_with_name deduce whether a particular cdtor needs a
vtt_parm and/or has inherited parms to drop, pass that information in
from the caller. In particular build_cdtor_clones knows when its
building the particular cdtors that might need these. On the modules
branch I need to clone cdtors before the underlying class information
is necessarily complete. There build_cdtor_clones is externally
callable to facilitate that.
gcc/cp/
* class.c (copy_fndecl_with_name): Add additional predicate args, do
not deduce them locally.
(copy_operator_fn): Adjust copy_fndecl_with_name call.
(build_clone): Add vtt and inherited predicate args. Pass through
to copy_fndecl_with_name call.
(build_cdtor_clones): Likewise, pass through to build_clone as
needed.
(build_cdtor): Determine vtt and inherited here.
* cp-tree.h (DECL_NEEDS_CTT_PARM_P): Delete.
Andrea Corallo [Thu, 28 May 2020 07:49:42 +0000 (08:49 +0100)]
aarch64: Add 64 bit setter getter fpsr fpcr
gcc/ChangeLog
* config/aarch64/aarch64-builtins.c (aarch64_builtins): Add enums
for 64bits fpsr/fpcr getter setters builtin variants.
(aarch64_init_fpsr_fpcr_builtins): New function.
(aarch64_general_init_builtins): Modify to make use of the later.
(aarch64_expand_fpsr_fpcr_setter): New function.
(aarch64_general_expand_builtin): Modify to make use of the later.
* config/aarch64/aarch64.md (@aarch64_set_<fpscr_name><GPI:mode>)
(@aarch64_get_<fpscr_name><GPI:mode>): New patterns replacing and
generalizing 'get_fpcr', 'set_fpsr'.
* config/aarch64/iterators.md (GET_FPSCR, SET_FPSCR): New int
iterators.
(fpscr_name): New int attribute.
* doc/extend.texi (__builtin_aarch64_get_fpcr64)
(__builtin_aarch64_set_fpcr64, __builtin_aarch64_get_fpsr64)
(__builtin_aarch64_set_fpsr64): Add into AArch64 Built-in
Functions.
gcc/testsuite/ChangeLog
* gcc.target/aarch64/get_fpcr64_1.c: New test.
* gcc.target/aarch64/set_fpcr64_1.c: New test.
* gcc.target/aarch64/get_fpsr64_1.c: New test.
* gcc.target/aarch64/set_fpsr64_1.c: New test.
Mark Eggleston [Mon, 1 Jun 2020 13:56:00 +0000 (14:56 +0100)]
Fortran : False positive for optional arguments PR95446
Check that there is non-optional argument of the same rank in the
list of actual arguments. If there is the warning is not required.
2020-07-01 Steven G. Kargl <kargl@gcc.gnu.org>
gcc/fortran/
PR fortran/95446
* resolve.c (resolve_elemental_actual): Add code to check for
non-optional argument of the same rank. Revise warning message
to refer to the Fortran 2018 standard.
2020-07-01 Mark Eggleston <markeggleston@gcc.gnu.org>
gcc/testsuite/
PR fortran/95446
* gfortran.dg/elemental_optional_args_6.f90: Remove check
for warnings that were erroneously output.
* gfortran.dg/pr95446.f90: New test.
Martin Sebor [Wed, 1 Jul 2020 14:30:52 +0000 (08:30 -0600)]
Adjust text of expected warnings changed in PR c++/86568.
libstdc++-v3/ChangeLog:
* testsuite/21_strings/basic_string_view/cons/char/nonnull.cc: Adjust
text of expected warning.
* testsuite/21_strings/basic_string_view/cons/wchar_t/nonnull.cc: Same.
* testsuite/21_strings/basic_string_view/operations/compare/char/nonnull.cc: Same.
* testsuite/21_strings/basic_string_view/operations/find/char/nonnull.cc: Same.
* testsuite/21_strings/basic_string_view/operations/rfind/char/nonnull.cc: Same.
Christophe Lyon [Wed, 1 Jul 2020 12:23:51 +0000 (12:23 +0000)]
arm: Fix handler-align.c testcase [PR target/94743]
This testcase triggers the new warning, so compile it with
-mgeneral-regs-only.
2020-07-01 Christophe Lyon <christophe.lyon@linaro.org>
PR target/94743
gcc/testsuite/
* gcc.target/arm/handler-align.c: Add -mgeneral-regs-only.
Martin Liska [Wed, 1 Jul 2020 11:51:37 +0000 (13:51 +0200)]
gcov: avoid trailing space.
gcc/ChangeLog:
* gcov.c (print_usage): Avoid trailing space for -j option.
Richard Biener [Fri, 26 Jun 2020 09:18:19 +0000 (11:18 +0200)]
tree-optimization/95839 - teach SLP vectorization about vector inputs
This teaches SLP analysis about vector typed externals that are
fed into the SLP operations via lane extracting BIT_FIELD_REFs.
It shows that there's currently no good representation for
vector code on the SLP side so I went a half way and represent
such vector externals uses always using a SLP permutation node
with a single external SLP child which has a non-standard
representation of no scalar defs but only a vector def. That
works best for shielding the rest of the vectorizer from it.
2020-06-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/95839
* tree-vect-slp.c (vect_slp_tree_uniform_p): Pre-existing
vectors are not uniform.
(vect_build_slp_tree_1): Handle BIT_FIELD_REFs of
vector registers.
(vect_build_slp_tree_2): For groups of lane extracts
from a vector register generate a permute node
with a special child representing the pre-existing vector.
(vect_prologue_cost_for_slp): Pre-existing vectors cost nothing.
(vect_slp_analyze_node_operations): Use SLP_TREE_LANES.
(vectorizable_slp_permutation): Do not generate or cost identity
permutes.
(vect_schedule_slp_instance): Handle pre-existing vector
that are function arguments.
* gcc.dg/vect/bb-slp-pr95839-2.c: New testcase.
Richard Biener [Fri, 13 Mar 2020 07:15:06 +0000 (08:15 +0100)]
move ILS include to system.h
This moves ISL system header includes to system.h.
* system.h (INCLUDE_ISL): New guarded include.
* graphite-dependences.c: Use it.
* graphite-isl-ast-to-gimple.c: Likewise.
* graphite-optimize-isl.c: Likewise.
* graphite-poly.c: Likewise.
* graphite-scop-detection.c: Likewise.
* graphite-sese-to-poly.c: Likewise.
* graphite.c: Likewise.
* graphite.h: Drop the includes here.
Martin Liska [Wed, 1 Jul 2020 11:02:07 +0000 (13:02 +0200)]
gcov: shorted one option help message
gcc/ChangeLog:
* gcov.c (print_usage): Shorted option description for -j
option.
Martin Liska [Tue, 30 Jun 2020 13:48:03 +0000 (15:48 +0200)]
gcov: rename 2 options.
gcc/ChangeLog:
* doc/gcov.texi: Rename 2 options.
* gcov.c (print_usage): Rename -i,--json-format to
-j,--json-format and -j,--human-readable to -H,--human-readable.
(process_args): Fix up parsing. Document obsolete options and
how are they changed.
gcc/testsuite/ChangeLog:
* g++.dg/gcov/loop.C: Use -H option instead of -j option.
Mark Eggleston [Tue, 23 Jun 2020 10:01:28 +0000 (11:01 +0100)]
Fortran : Bogus error with additional blanks in type(*) PR95829
Checking for "* ) " instead of "*)" clears the bogus error.
2020-07-01 Steven G. Kargl <kargl@gcc.gnu.org>
gcc/fortran/
PR fortran/95829
* decl.c (gfc_match_decl_type_spec): Compare with "* ) " instead
of "*)".
2020-07-01 Mark Eggleston <markeggleston@gcc.gnu.org>
gcc/testsuite/
PR fortran/95829
* gfortran.dg/pr95829.f90: New test.
Christophe Lyon [Wed, 1 Jul 2020 06:48:17 +0000 (06:48 +0000)]
arm: Fix typos in testcases [PR target/94743]
In my commit r11-1732, I updated the warning message to include
quotes, but I forgot to update the testcases.
2020-01-07 Christophe Lyon <christophe.lyon@linaro.org>
PR target/94743
gcc/testsuite/
* gcc.target/arm/pr94743-1-hard.c: Add missing quotes in expected
warning.
* gcc.target/arm/pr94743-1-softfp.c: Likewise.
Jeff Law [Wed, 1 Jul 2020 05:03:33 +0000 (23:03 -0600)]
Fix bootstrap failure on PA
gcc/
* config/pa/pa.c (pa_emit_move_sequence): Drop register keyword.
(pa_output_ascii): Likewise.
Kito Cheng [Mon, 29 Jun 2020 09:52:42 +0000 (17:52 +0800)]
RISC-V: Preserve arch version info during normalizing arch string
- Arch version should preserved if user explicitly specified the version.
e.g.
After normalize, -march=rv32if3d should be -march=rv32i_f3p0d
instead of-march=rv32ifd.
gcc/ChangeLog:
* common/config/riscv/riscv-common.c (riscv_subset_t): New field
added.
(riscv_subset_list::parsing_subset_version): Add parameter for
indicate explicitly version, and handle explicitly version.
(riscv_subset_list::handle_implied_ext): Ditto.
(riscv_subset_list::add): Ditto.
(riscv_subset_t::riscv_subset_t): Init new field.
(riscv_subset_list::to_string): Always output version info if version
explicitly specified.
(riscv_subset_list::parsing_subset_version): Handle explicitly
arch version.
(riscv_subset_list::parse_std_ext): Ditto.
(riscv_subset_list::parse_multiletter_ext): Ditto.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/attribute-13.c: New.
David Edelsohn [Wed, 1 Jul 2020 02:04:07 +0000 (22:04 -0400)]
testsuite: enable gcc.target/powerpc direct move tests.
Remove unnecessary requirements for direct-move-* tests.
gcc/testsuite/ChangeLog
2020-06-30 David Edelsohn <dje.gcc@gmail.com>
* gcc.target/powerpc/direct-move-double1.c: Remove lp64 requirement.
* gcc.target/powerpc/direct-move-double2.c: Same.
* gcc.target/powerpc/direct-move-float1.c: Same.
* gcc.target/powerpc/direct-move-float2.c: Same.
* gcc.target/powerpc/direct-move-float3.c: Same.
* gcc.target/powerpc/direct-move-vint1.c: Same.
* gcc.target/powerpc/direct-move-vint2.c: Same.
* gcc.target/powerpc/direct-move-long1.c: Remove linux requirement..
* gcc.target/powerpc/direct-move-long2.c: Same.
David Edelsohn [Wed, 1 Jul 2020 01:49:57 +0000 (21:49 -0400)]
testsuite: Remove dg-skip SPE.
Remove testsuite directives to skip SPE and SPE specific tests.
gcc/testsuite/ChangeLog
2020-06-30 David Edelsohn <dje.gcc@gmail.com>
* gcc.target/powerpc/
20030218-1.c: Delete.
* gcc.target/powerpc/
20030505.c: Delete.
* gcc.target/powerpc/
20081204-1.c: Delete.
* gcc.target/powerpc/bcd-1.c: Remove dg-skip-if SPE.
* gcc.target/powerpc/bcd-2.c: Same.
* gcc.target/powerpc/bcd-3.c: Same.
* gcc.target/powerpc/direct-move-double1.c: Same.
* gcc.target/powerpc/direct-move-double2.c: Same.
* gcc.target/powerpc/direct-move-float1.c: Same.
* gcc.target/powerpc/direct-move-float2.c: Same.
* gcc.target/powerpc/direct-move-float3.c: Same.
* gcc.target/powerpc/direct-move-long1.c: Same.
* gcc.target/powerpc/direct-move-long2.c: Same.
* gcc.target/powerpc/direct-move-vint1.c: Same.
* gcc.target/powerpc/direct-move-vint2.c: Same.
* gcc.target/powerpc/extend-divide-1.c: Same.
* gcc.target/powerpc/extend-divide-2.c: Same.
* gcc.target/powerpc/pack01.c: Same.
* gcc.target/powerpc/pack02.c: Same.
* gcc.target/powerpc/pack03.c: Same.
* gcc.target/powerpc/pr52457.c: Same.
* gcc.target/powerpc/pr88845.c: Same.
* gcc.target/powerpc/quad-atomic.c: Same.
* gcc.target/powerpc/recip-6.c: Same.
* gcc.target/powerpc/recip-7.c: Same.
David Edelsohn [Wed, 1 Jul 2020 00:37:50 +0000 (20:37 -0400)]
testsuite: p8vector-int128 require int128 not lp64.
Change testsuite requirements from lp64 to int128 support.
gcc/testsuite/ChangeLog
2020-06-30 David Edelsohn <dje.gcc@gmail.com>
* gcc.target/powerpc/p8vector-int128-1.c: Require int128 not lp64.
* gcc.target/powerpc/p8vector-int128-2.c: Same.
David Edelsohn [Tue, 30 Jun 2020 23:57:53 +0000 (19:57 -0400)]
testsuite: Remove restrictions on VSX tests.
Some of the testcases in gcc.target/powerpc have unnecessarily strict
requirements and run correctly on more powerpc targets. This patch
removes the restrictions and adds appropriate HW requirements.
gcc/testsuite/ChangeLog
2020-06-30 David Edelsohn <dje.gcc@gmail.com>
* gcc.target/powerpc/pr90763.c: Adjust requirements.
* gcc.target/powerpc/vsx-vector-1.c: Same.
* gcc.target/powerpc/vsx-vector-2.c: Same.
* gcc.target/powerpc/vsx-vector-3.c: Same.
* gcc.target/powerpc/vsx-vector-4.c: Same.
* gcc.target/powerpc/vsx-vector-5.c: Same.
* gcc.target/powerpc/vsx-vector-6.p7.c: Same.
* gcc.target/powerpc/vsx-vector-6.p8.c: Same.
* gcc.target/powerpc/vsx-vector-6.p9.c: Same.
* gcc.target/powerpc/vsx-vector-abss.c: Same.
* gcc.target/powerpc/vsx-vectorize-1.c: Same.
* gcc.target/powerpc/vsx-vectorize-2.c: Same.
* gcc.target/powerpc/vsx-vectorize-3.c: Same.
* gcc.target/powerpc/vsx-vectorize-4.c: Same.
* gcc.target/powerpc/vsx-vectorize-5.c: Same.
* gcc.target/powerpc/vsx-vectorize-6.c: Same.
* gcc.target/powerpc/vsx-vectorize-7.c: Same.
* gcc.target/powerpc/vsx-vectorize-8.c: Same.
David Edelsohn [Wed, 1 Jul 2020 00:11:52 +0000 (20:11 -0400)]
testsuite: remove SPE tests.
SPE support was removed from the "rs6000" port. This patch removes some
left-over SPE-specific testcases from the gcc.target/powerpc directory.
gcc/testsuite/ChangeLog
2020-06-30 David Edelsohn <dje.gcc@gmail.com>
* gcc.target/powerpc/ppc-spe.c: Delete.
* gcc.target/powerpc/ppc-spe64-1.c: Delete.
* gcc.target/powerpc/pr60102.c: Delete.
* gcc.target/powerpc/pr60158.c: Delete.
* gcc.target/powerpc/pr60735.c: Delete.
* gcc.target/powerpc/pr78458.c: Delete.
* gcc.target/powerpc/pr80343.c: Delete.
* gcc.target/powerpc/spe-evmerge.c: Delete.
* gcc.target/powerpc/spe-small-data-1.c: Delete.
* gcc.target/powerpc/spe-small-data-2.c: Delete.
* gcc.target/powerpc/spe-unwind-1.c: Delete.
* gcc.target/powerpc/spe-vector-memcpy.c: Delete.
* gcc.target/powerpc/spe-vector-memset.c: Delete.
* gcc.target/powerpc/spe1.c: Delete.
GCC Administrator [Wed, 1 Jul 2020 00:16:26 +0000 (00:16 +0000)]
Daily bump.
David Edelsohn [Tue, 30 Jun 2020 21:45:52 +0000 (17:45 -0400)]
testsuite: change gcc.target/powerpc builtins lp64 to int128 requirement.
Some of the builtins* tests check for lp64 as a proxy for int128 support.
This patch changes the requirements to int128. It also removes
some redundant requirements from revb.
gcc/testsuite/ChangeLog
2020-06-30 David Edelsohn <dje.gcc@gmail.com>
* gcc.target/powerpc/builtins-2-p9-runnable.c: lp64 to int128.
* gcc.target/powerpc/builtins-6-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-6-runnable.c: Same.
* gcc.target/powerpc/builtins-revb-runnable.c: Same.
Harald Anlauf [Tue, 30 Jun 2020 21:36:56 +0000 (23:36 +0200)]
PR fortran/88379 - ICE with allocatable coarray, class and associate
Catch NULL pointer dereference for ASSOCIATE on allocatable coarray variable.
gcc/fortran/
PR fortran/88379
* resolve.c (resolve_assoc_var): Avoid NULL pointer dereference.
Richard Sandiford [Tue, 30 Jun 2020 20:40:30 +0000 (21:40 +0100)]
aarch64: Treat GNU and Advanced SIMD vectors as distinct [PR92789, PR95726]
PR95726 is about template look-up for things like:
foo<float vecf __attribute__((vector_size(16)))>
foo<float32x4_t>
The immediate cause of the problem is that the hash function usually
returns different hashes for these types, yet the equality function
thinks they are equal. This then raises the question of how the types
are supposed to be treated.
I think the answer is that the GNU vector type should be treated as
distinct from float32x4_t, not least because the two types mangle
differently. However, each type should implicitly convert to the other.
This would mean that, as far as the PR is concerned, the hashing
function is right to (sometimes) treat the types differently and
the equality function is wrong to treat them as the same.
The most obvious way to enforce the type difference is to use a
target-specific type attribute. That on its own is enough to fix
the PR. The difficulty is deciding whether the knock-on effects
are acceptable.
One obvious effect is that GCC then rejects:
typedef float vecf __attribute__((vector_size(16)));
vecf x;
float32x4_t &z = x;
on the basis that the types are no longer reference-compatible.
I think that's again the correct behaviour, and consistent with
current Clang.
A trickier question is whether:
vecf x;
float32x4_t y;
… c ? x : y …
should be valid, and if so, what its type should be [PR92789].
As explained in the comment in the testcase, GCC and Clang both
accepted this, but GCC chose the “then” type while Clang chose
the “else” type. This can lead to different mangling for (probably
artificial) corner cases, as seen for “sel1” and “sel2” in the
testcase.
Adding the attribute makes GCC reject the conditional expression
as ambiguous. I think that too is the correct behaviour, for the
reasons described in the testcase. However, it does seem to have
the potential to break existing code.
It looks like aarch64_comp_type_attributes is missing cases for
the SVE attributes, but I'll handle that in a separate patch.
2020-06-30 Richard Sandiford <richard.sandiford@arm.com>
gcc/
PR target/92789
PR target/95726
* config/aarch64/aarch64.c (aarch64_attribute_table): Add
"Advanced SIMD type".
(aarch64_comp_type_attributes): Check that the "Advanced SIMD type"
attributes are equal.
* config/aarch64/aarch64-builtins.c: Include stringpool.h and
attribs.h.
(aarch64_mangle_builtin_vector_type): Use the mangling recorded
in the "Advanced SIMD type" attribute.
(aarch64_init_simd_builtin_types): Add an "Advanced SIMD type"
attribute to each Advanced SIMD type, using the mangled type
as the attribute's single argument.
gcc/testsuite/
PR target/92789
PR target/95726
* g++.target/aarch64/pr95726.C: New test.
David Edelsohn [Sun, 28 Jun 2020 00:44:24 +0000 (20:44 -0400)]
rs6000: Fix gcc.target/powerpc testsuite target requirements.
gcc/testsuite/ChangeLog
2020-06-30 David Edelsohn <dje.gcc@gmail.com>
* gcc.target/powerpc/builtins-1-p9-runnable.c: Fix target requirements.
* gcc.target/powerpc/builtins-1.c: Same.
* gcc.target/powerpc/builtins-2-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-2.c: Same.
* gcc.target/powerpc/builtins-3-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-3-p9.c: Same.
* gcc.target/powerpc/builtins-3-runnable-p8.c: Same.
* gcc.target/powerpc/builtins-3.c: Same.
* gcc.target/powerpc/builtins-4-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-4.c: Same.
* gcc.target/powerpc/builtins-5-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-5.c: Same.
* gcc.target/powerpc/builtins-6-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-6-runnable.c: Same.
* gcc.target/powerpc/builtins-7-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-7-runnable.c: Same.
* gcc.target/powerpc/builtins-8-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-8-runnable.c: Same.
* gcc.target/powerpc/cpu-builtin-1.c: Same.
* gcc.target/powerpc/float128-fma1.c: Same.
* gcc.target/powerpc/float128-hw.c: Same.
* gcc.target/powerpc/float128-hw10.c: Same.
* gcc.target/powerpc/float128-hw11.c: Same.
* gcc.target/powerpc/float128-hw2.c: Same.
* gcc.target/powerpc/float128-hw3.c: Same.
* gcc.target/powerpc/float128-hw4.c: Same.
* gcc.target/powerpc/float128-hw5.c: Same.
* gcc.target/powerpc/float128-hw6.c: Same.
* gcc.target/powerpc/float128-hw7.c: Same.
* gcc.target/powerpc/float128-hw8.c: Same.
* gcc.target/powerpc/float128-hw9.c: Same.
* gcc.target/powerpc/float128-minmax.c: Same.
* gcc.target/powerpc/float128-odd.c: Same.
* gcc.target/powerpc/float128-sqrt1.c: Same.
Nathan Sidwell [Tue, 30 Jun 2020 17:43:08 +0000 (10:43 -0700)]
c++: Tweak function cloning names
On the modules branch I need to expose an intermediate step of the
function cloning, but before that it'd be nice to rationalize the
names somewhat, now that we also use that API for copying the equality
operator. Jason's recent patch caused me some pain by altering the
same code. I can only blame myself for not pushing some bits sooner.
Anyway, this patch makes the newly renamed copy_fndecl_with_name
static, and adds a wrapper copy_operator_fn, that takes an operator
code. The cdtor cloning functions are renamed to explicitly note they
expect cdtors. A followup patch will move some of the logic from
copy_fndecl_with_name to build_cdtor_clones.
gcc/cp/
* cp-tree.h (copy_fndecl_with_name): Rename to ...
(copy_operatorn_fn): ... this. Change arg type.
(clone_function_decl): Rename to ...
(clone_cdtor): ... this.
* class.c (copy_fndecl_with_name): Make static.
(copy_operator_fn): New wrapper.
(build_clones): Rename to ...
(build_cdtor_clones): ... this.
(clone_function_decl): Rename to ...
(clone_cdtor): ... this. Adjust build_clones calls.
(clone_constructors_and_destructors): Adjust clone_function_decl
calls.
* method.c (implicitly_declare_fn): Adjust copy_fndecl_with_name
call.
(lazily_declare_fn): Adjust clone_function_decl call.
* pt.c (tsubst_function_decl): Likewise.
(instantiate_template_1): Likewise.
libcc1/
* libcp1plugin.cc (plugin_build_decl): Adjust clone_function_decl
call.
David Edelsohn [Tue, 30 Jun 2020 17:42:53 +0000 (13:42 -0400)]
testsuite: expect additional warning in analyzer/pr93993.f90
The recent changes to warnings elicit an additional warning in
analyzer/pr93993.f90. This patch updates the testcase to expect the warning.
gcc/testsuite/ChangeLog
2020-06-30 David Edelsohn <dje.gcc@gmail.com>
* gfortran.dg/analyzer/pr93993.f90: Expect leak tm warning.
Thomas Schwinge [Tue, 30 Jun 2020 05:23:03 +0000 (07:23 +0200)]
[testsuite] Adjust 'scoff' for HSA offloading
Fix-up for commit
efc16503ca10bc0e934e0bace5777500e4dc757a "handle dumpbase in
offloading, adjust testsuite".
gcc/testsuite/
* lib/scanoffload.exp (scoff) <offload_targets>: Skip HSA.
Thomas Schwinge [Tue, 30 Jun 2020 03:24:17 +0000 (05:24 +0200)]
[testsuite] Replace fragile 'scan-assembler' with 'scan-offload-rtl' in 'libgomp.oacc-c-c++-common/pr85381*.c'
These test cases use directives similar to:
/* { dg-additional-options "-save-temps" } */
/* { dg-final { scan-assembler-times "bar.sync" 2 } } */
This expects to scan the PTX offloading compilation assembler code (not host
code!), expecting that nvptx offloading code assembly is produced after the
host code, and thus overwrites the latter file. (Yes, that's certainly
ugly/fragile...)
..., and this broke with recent commit
1dedc12d186a110854537e1279b4e6c29f2df35a
"revamp dump and aux output names" plus fix-up commit commit
efc16503ca10bc0e934e0bace5777500e4dc757a "handle dumpbase in offloading, adjust
testsuite" (short summary: file names changed), so let's finally make that
robust.
libgomp/
* testsuite/libgomp.oacc-c-c++-common/pr85381-2.c: Replace fragile
'scan-assembler' with 'scan-offload-rtl'.
* testsuite/libgomp.oacc-c-c++-common/pr85381-3.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/pr85381-4.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/pr85381-5.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/pr85381.c: Likewise.
Thomas Schwinge [Fri, 26 Jun 2020 08:19:14 +0000 (10:19 +0200)]
Mark up unreachable OpenACC 'attach' code path
... introduced in commit
8e7e71ff247fb116dc381c5ef0c09acc0d2b374f (r279625)
"OpenACC 2.6 deep copy: libgomp parts".
libgomp/
* target.c (gomp_map_vars_existing): Assert 'kind !=
GOMP_MAP_ATTACH'.
(gomp_map_vars_internal): Clean up.
Martin Liska [Tue, 30 Jun 2020 15:44:45 +0000 (17:44 +0200)]
gcc-changelog: support older GitPython releases.
contrib/ChangeLog:
* gcc-changelog/git_repository.py: Support older releases of
GitPython when renamed_file was named renamed.
Iain Sandoe [Tue, 30 Jun 2020 13:59:43 +0000 (14:59 +0100)]
coroutines: Fix a diagnostic trailing space warning.
A recently add diagnostic has a trailing space.
Fixed thus.
gcc/cp/ChangeLog:
* coroutines.cc (morph_fn_to_coro): Remove trailing
space in a diagnostic.
Christophe Lyon [Tue, 30 Jun 2020 13:51:20 +0000 (13:51 +0000)]
arm: Warn if IRQ handler is not compiled with -mgeneral-regs-only [PR target/94743]
The interrupt attribute does not guarantee that the FP registers are
saved, which can result in problems difficult to debug.
Saving the FP registers and status registers can be a large penalty,
so it's probably not desirable to do that all the time.
If the handler calls other functions, we'd likely need to save all of
them, for lack of knowledge of which registers they actually clobber.
This is even more obscure for the end-user when the compiler inserts
calls to helper functions such as memcpy (some multilibs do use FP
registers to speed it up).
In the PR, we discussed adding routines in libgcc to save the FP
context and saving only locally-clobbered FP registers, but this seems
to be too much work for the purpose, given that in general such
handlers try to avoid this kind of penalty.
I suspect we would also want new attributes to instruct the compiler
that saving the FP context is not needed.
In the mean time, emit a warning to suggest re-compiling with
-mgeneral-regs-only. Note that this can lead to errors if the code
uses floating-point and -mfloat-abi=hard, eg:
argument of type 'double' not permitted with -mgeneral-regs-only
This can be troublesome for the user, but at least this would make
him aware of the latent issue.
The patch adds several testcases:
- pr94734-1-hard.c checks that a warning is emitted when using
-mfloat-abi=hard. Function IRQ_HDLR_Test can make implicit calls to
runtime floating-point routines (or direct use of FP instructions),
IRQ_HDLR_Test2 doesn't. We emit a warning in both cases, though.
- pr94734-1-softfp.c: same as above wih -mfloat-abi=softfp.
- pr94734-1-soft.c checks that no warning is emitted when using
-mfloat-abi=soft when the same code as above.
- pr94734-2.c checks that no warning is emitted when using
-mgeneral-regs-only.
- pr94734-3.c checks that no warning is emitted when using
-mgeneral-regs-only even using float-point data.
2020-06-30 Christophe Lyon <christophe.lyon@linaro.org>
PR target/94743
gcc/
* config/arm/arm.c (arm_handle_isr_attribute): Warn if
-mgeneral-regs-only is not used.
gcc/testsuite/
* gcc.misc-tests/arm-isr.c: Add -mgeneral-regs-only.
* gcc.target/arm/empty_fiq_handler.c: Add -mgeneral-regs-only.
* gcc.target/arm/interrupt-1.c: Add -mgeneral-regs-only.
* gcc.target/arm/interrupt-2.c: Add -mgeneral-regs-only.
* gcc.target/arm/pr70830.c: Add -mgeneral-regs-only.
* gcc.target/arm/pr94743-1-hard.c: New test.
* gcc.target/arm/pr94743-1-soft.c: New test.
* gcc.target/arm/pr94743-1-softfp.c: New test.
* gcc.target/arm/pr94743-2.c: New test.
* gcc.target/arm/pr94743-3.c: New test.
Yang Yang [Tue, 30 Jun 2020 10:04:31 +0000 (18:04 +0800)]
tree-optimization/95855 - Add checks to avoid spoiling if-conversion if
Add some checks in pass_splits_paths, so that pass_split_paths can
recognize the missed if-conversion opportunity and do not duplicate the
corresponding block.
2020-06-30 Yang Yang <yangyang305@huawei.com>
gcc/ChangeLog:
PR tree-optimization/95855
* gimple-ssa-split-paths.c (is_feasible_trace): Add extra
checks to recognize a missed if-conversion opportunity when
judging whether to duplicate a block.
gcc/testsuite/ChangeLog
PR tree-optimization/95855
* gcc.dg/tree-ssa/split-path-12.c: New testcase.
David Edelsohn [Tue, 30 Jun 2020 00:41:55 +0000 (20:41 -0400)]
testsuite: fix constexpr-is_literal.C deprecated c++17 and above.
std::is_literal_type is deprecated in C++17 and above.
This was introduced in c++11, but the testsuite list of standards now only
includes c++98 and c++14. This patch limits the test to c++14_only to
prevent deprecation warnings.
gcc/testsuite/ChangeLog
2020-06-30 David Edelsohn <dje.gcc@gmail.com>
* g++.dg/cpp0x/constexpr-is_literal.C: Limit test to -std=c++14.
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.
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.
GCC Administrator [Tue, 30 Jun 2020 09:02:21 +0000 (09:02 +0000)]
Daily bump.
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.
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.
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.
Joseph Myers [Mon, 29 Jun 2020 23:57:16 +0000 (23:57 +0000)]
Update gcc sv.po.
* sv.po: Update.
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.
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
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.
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.
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).
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.
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".
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.
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.
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.
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.
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.
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.
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>.
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.
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.
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.
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.
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.
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.
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.
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>
GCC Administrator [Mon, 29 Jun 2020 00:16:29 +0000 (00:16 +0000)]
Daily bump.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
GCC Administrator [Sun, 28 Jun 2020 00:16:21 +0000 (00:16 +0000)]
Daily bump.
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.
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.
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.
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.
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.
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.