platform/upstream/gcc.git
3 years agoc++: Hard error with tentative parse and CTAD [PR87709]
Patrick Palka [Sat, 24 Apr 2021 04:01:42 +0000 (00:01 -0400)]
c++: Hard error with tentative parse and CTAD [PR87709]

When parsing e.g. the operand of sizeof, where both types and
expressions are accepted, if during the tentative type parse we
encounter an unexpected template placeholder, we must simulate
an error rather than issue a real error because the expression
parse can still succeed.

gcc/cp/ChangeLog:

PR c++/87709
* parser.c (cp_parser_type_id_1): If we see a template
placeholder, first try simulating an error before issuing
a real error.

gcc/testsuite/ChangeLog:

PR c++/87709
* g++.dg/cpp1z/class-deduction86.C: New test.

3 years agoDaily bump.
GCC Administrator [Sat, 24 Apr 2021 00:16:37 +0000 (00:16 +0000)]
Daily bump.

3 years agoFix logic error in 32-bit trampolines.
Michael Meissner [Fri, 23 Apr 2021 22:16:03 +0000 (18:16 -0400)]
Fix logic error in 32-bit trampolines.

The test in the PowerPC 32-bit trampoline support is backwards.  It aborts
if the trampoline size is greater than the expected size.  It should abort
when the trampoline size is less than the expected size.  I fixed the test
so the operands are reversed.  I then folded the load immediate into the
compare instruction.

I verified this by creating a 32-bit trampoline program and manually
changing the size of the trampoline to be 48 instead of 40.  The program
aborted with the larger size.  I updated this code and ran the test again
and it passed.

I added a test case that runs on PowerPC 32-bit Linux systems and it calls
the __trampoline_setup function with a larger buffer size than the
compiler uses.  The test is not run on 64-bit systems, since the function
__trampoline_setup is not called.  I also limited the test to just Linux
systems, in case trampolines are handled differently in other systems.

libgcc/
2021-04-23  Michael Meissner  <meissner@linux.ibm.com>

PR target/98952
* config/rs6000/tramp.S (__trampoline_setup, elfv1 #ifdef): Fix
trampoline size comparison in 32-bit by reversing test and
combining load immediate with compare.
(__trampoline_setup, elfv2 #ifdef): Fix trampoline size comparison
in 32-bit by reversing test and combining load immediate with
compare.

gcc/testsuite/
2021-04-23  Michael Meissner  <meissner@linux.ibm.com>

PR target/98952
* gcc.target/powerpc/pr98952.c: New test.

3 years agobpf: allow BSS symbols to be global symbols
YiFei Zhu [Thu, 22 Apr 2021 10:05:57 +0000 (05:05 -0500)]
bpf: allow BSS symbols to be global symbols

Prior to this, a BSS declaration such as:

  int foo;
  static int bar;

Generates:

  .global foo
  .local  foo
  .comm   foo,4,4
  .local  bar
  .comm   bar,4,4

Creating symbols:

  0000000000000000 b foo
  0000000000000004 b bar

Both symbols are local. However, libbpf bpf_object__variable_offset
rquires symbols to be STB_GLOBAL & STT_OBJECT for data section lookup.
This patch makes the same declaration generate:

  .global foo
  .type   foo, @object
  .lcomm  foo,4,4
  .local  bar
  .comm   bar,4,4

Creating symbols:

  0000000000000000 B foo
  0000000000000004 b bar

And libbpf will be okay with looking up the global symbol "foo".

2021-04-22  YiFei Zhu  <zhuyifei1999@gmail.com>

gcc/

* config/bpf/bpf.h (ASM_OUTPUT_ALIGNED_BSS): Use .type and .lcomm.

3 years agobpf: align function entry point to 64 bits
YiFei Zhu [Thu, 22 Apr 2021 10:05:56 +0000 (05:05 -0500)]
bpf: align function entry point to 64 bits

Libbpf does not treat paddings after functions well. If function
symbols does not cover a whole text section, it will emit error
similar to:

  libbpf: sec '.text': failed to find program symbol at offset 56

Each instruction in BPF is a multiple of 8 bytes, so align the
functions to 8 bytes, similar to how clang does it.

2021-04-22  YiFei Zhu  <zhuyifei1999@gmail.com>

gcc/

* config/bpf/bpf.h (FUNCTION_BOUNDARY): Set to 64.

3 years agoi386: Reject -m96bit-long-double for 64bit targets [PR100041]
Uros Bizjak [Fri, 23 Apr 2021 16:45:14 +0000 (18:45 +0200)]
i386: Reject -m96bit-long-double for 64bit targets [PR100041]

64bit targets default to 128bit long double, so -m96bit-long-double should
not be used.  Together with -m128bit-long-double, this option was intended
to be an optimization for 32bit targets only.

Error out when -m96bit-long-double is used with 64bit targets.

2021-04-23  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/100041
* config/i386/i386-options.c (ix86_option_override_internal):
Error out when -m96bit-long-double is used with 64bit targets.
* config/i386/i386.md (*pushxf_rounded): Remove pattern.

gcc/testsuite/

PR target/100041
* gcc.target/i386/pr79514.c (dg-error):
Expect error for 64bit targets.

3 years agoRemove not feasible FIXME
Martin Liska [Thu, 22 Apr 2021 07:14:28 +0000 (09:14 +0200)]
Remove not feasible FIXME

gcc/ChangeLog:

* lto-wrapper.c: Remove FIXME about usage of
hardware_concurrency. The function is not on par with
what we have now.

3 years agoMAINTAINERS: Add myself for write after approval
David Faust [Fri, 23 Apr 2021 16:12:43 +0000 (09:12 -0700)]
MAINTAINERS: Add myself for write after approval

ChangeLog:

2021-04-23  David Faust  <david.faust@oracle.com>

* MAINTAINERS (Write After Approval): Add myself.

3 years agoi386: Fix atomic FP peepholes [PR100182]
Uros Bizjak [Fri, 23 Apr 2021 15:29:29 +0000 (17:29 +0200)]
i386: Fix atomic FP peepholes [PR100182]

64bit loads to/stores from x87 and SSE registers are atomic also on 32-bit
targets, so there is no need for additional atomic moves to a temporary
register.

Introduced load peephole2 patterns assume that there won't be any additional
loads from the load location outside the peepholed sequence and wrongly
removed the source location initialization.

OTOH, introduced store peephole2 patterns assume there won't be any additional
loads from the stored location outside the peepholed sequence and wrongly
removed the destination location initialization.  Note that we can't use plain
x87 FST instruction to initialize destination location because FST converts
the value to the double-precision format, changing bits during move.

The patch restores removed initializations in load and store patterns.
Additionally, plain x87 FST in store peephole2 patterns is prevented by
limiting the store operand source to SSE registers.

2021-04-23  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/100182
* config/i386/sync.md (FILD_ATOMIC/FIST_ATOMIC FP load peephole2):
Copy operand 3 to operand 4.  Use sse_reg_operand
as operand 3 predicate.
(FILD_ATOMIC/FIST_ATOMIC FP load peephole2 with mem blockage): Ditto.
(LDX_ATOMIC/STX_ATOMIC FP load peephole2): Ditto.
(LDX_ATOMIC/LDX_ATOMIC FP load peephole2 with mem blockage): Ditto.
(FILD_ATOMIC/FIST_ATOMIC FP store peephole2):
Copy operand 1 to operand 0.
(FILD_ATOMIC/FIST_ATOMIC FP store peephole2 with mem blockage): Ditto.
(LDX_ATOMIC/STX_ATOMIC FP store peephole2): Ditto.
(LDX_ATOMIC/LDX_ATOMIC FP store peephole2 with mem blockage): Ditto.

gcc/testsuite/

PR target/100182
* gcc.target/i386/pr100182.c: New test.
* gcc.target/i386/pr71245-1.c (dg-final): Xfail scan-assembler-not.
* gcc.target/i386/pr71245-2.c (dg-final): Ditto.

3 years agoearly-remat.c: Fix new/delete mismatch [PR100230]
Alex Coplan [Fri, 23 Apr 2021 13:09:15 +0000 (14:09 +0100)]
early-remat.c: Fix new/delete mismatch [PR100230]

This simple patch fixes a mistmatched operator new/delete in
early-remat.c which triggers ASan errors on (at least) AArch64 when
compiling SVE code.

gcc/ChangeLog:

PR rtl-optimization/100230
* early-remat.c (early_remat::sort_candidates): Use delete[]
instead of delete for array allocated with new[].

3 years agolibstdc++: Allow net::io_context to compile without <poll.h> [PR 100180]
Jonathan Wakely [Fri, 23 Apr 2021 12:38:05 +0000 (13:38 +0100)]
libstdc++: Allow net::io_context to compile without <poll.h> [PR 100180]

This adds dummy placeholders to net::io_context so that it can still be
compiled on targets without <poll.h>.

libstdc++-v3/ChangeLog:

PR libstdc++/100180
* include/experimental/io_context (io_context): Define
dummy_pollfd type so that most member functions still compile
without <poll.h> and struct pollfd.

3 years agolibstdc++: Clarify argument to net::io_context::async_wait
Jonathan Wakely [Fri, 23 Apr 2021 12:31:33 +0000 (13:31 +0100)]
libstdc++: Clarify argument to net::io_context::async_wait

Add a comment documenting the __w parameter of the private
ios_context::async_wait function. Add casts to callers, making the
conversions explicit.

libstdc++-v3/ChangeLog:

* include/experimental/io_context (io_context::async_wait): Add
comment.
* include/experimental/socket (basic_socket::async_connect):
Cast wait_type constant to int.
(basic_datagram_socket::async_receive): Likewise.
(basic_datagram_socket::async_receive_from): Likewise.
(basic_datagram_socket::async_send): Likewise.
(basic_datagram_socket::async_send_to): Likewise.
(basic_stream_socket::async_receive): Likewise.
(basic_stream_socket::async_send): Likewise. Use io_context
parameter directly, instead of via an executor.
(basic_socket_acceptor::async_accept): Likewise.

3 years agolibstdc++ Simplify definition of net::socket_base constants
Jonathan Wakely [Fri, 23 Apr 2021 12:25:56 +0000 (13:25 +0100)]
libstdc++ Simplify definition of net::socket_base constants

libstdc++-v3/ChangeLog:

* include/experimental/socket (socket_base::shutdown_type):
(socket_base::wait_type, socket_base::message_flags):
Remove enumerators. Initialize constants directly with desired
values.
(socket_base::message_flags): Make all operators constexpr and
noexcept.
* testsuite/util/testsuite_common_types.h (test_bitmask_values):
New test utility.
* testsuite/experimental/net/socket/socket_base.cc: New test.

3 years agoc++: Fix pretty printing pointer to function type [PR98767]
Patrick Palka [Fri, 23 Apr 2021 12:47:02 +0000 (08:47 -0400)]
c++: Fix pretty printing pointer to function type [PR98767]

When pretty printing a pointer to function type,
pp_cxx_parameter_declaration_clause ends up always outputting an empty
function parameter list because the loop that outputs the list iterates
over 'args' instead of 'types', and 'args' is empty when a FUNCTION_TYPE
is passed to this routine (as opposed to a FUNCTION_DECL).

This patch fixes this by making the loop iterate over 'types' instead.
This patch also moves the retrofitted chain-of-PARM_DECLs printing from
here to pp_cxx_requires_expr, the only caller that uses it.  Doing so
lets us easily output the trailing '...' in the parameter list of a
variadic function, which this patch also implements.

gcc/cp/ChangeLog:

PR c++/98767
* cxx-pretty-print.c (pp_cxx_parameter_declaration_clause):
Adjust parameter list loop to iterate over 'types' instead of
'args'.  Output the trailing '...' for a variadic function.
Remove PARM_DECL support.
(pp_cxx_requires_expr): Pretty print the parameter list directly
instead of going through pp_cxx_parameter_declaration_clause.

gcc/testsuite/ChangeLog:

PR c++/98767
* g++.dg/concepts/diagnostic17.C: New test.

3 years agoc++: Refine enum direct-list-initialization [CWG2374]
Patrick Palka [Fri, 23 Apr 2021 12:28:58 +0000 (08:28 -0400)]
c++: Refine enum direct-list-initialization [CWG2374]

This implements the wording changes of CWG2374, which clarifies the
wording of P0138 to forbid e.g. direct-list-initialization of a scoped
enumeration from a different scoped enumeration.

gcc/cp/ChangeLog:

DR 2374
* decl.c (is_direct_enum_init): Check the implicit
convertibility requirement added by CWG 2374.

gcc/testsuite/ChangeLog:

DR 2374
* g++.dg/cpp1z/direct-enum-init2.C: New test.

3 years agoVEC_COND_EXPR code cleanup
Richard Biener [Wed, 14 Apr 2021 08:53:30 +0000 (10:53 +0200)]
VEC_COND_EXPR code cleanup

This removes now unnecessary special-casings of VEC_COND_EXPRs after
making its first operand a gimple value.

2021-04-14  Richard Biener  <rguenther@suse.de>

* genmatch.c (lower_cond): Remove VEC_COND_EXPR special-casing.
(capture_info::capture_info): Likewise.
(capture_info::walk_match): Likewise.
(expr::gen_transform): Likewise.
(dt_simplify::gen_1): Likewise.
* gimple-match-head.c (maybe_resimplify_conditional_op):
Remove VEC_COND_EXPR special-casing.
(gimple_simplify): Likewise.
* gimple.c (gimple_could_trap_p_1): Adjust.
* tree-ssa-pre.c (compute_avail): Allow VEC_COND_EXPR
to participate in PRE.

3 years agoFirst do add_noreturn_fake_exit_edges in connect_infinite_loops_to_exit
Richard Biener [Thu, 25 Feb 2021 10:31:37 +0000 (11:31 +0100)]
First do add_noreturn_fake_exit_edges in connect_infinite_loops_to_exit

Most callers of connect_infinite_loops_to_exit already do this but
the few that do not end up with extra exit edges.  The following
makes that consistent, also matching the post-dominance DFS walk code.

2021-02-25  Richard Biener  <rguenther@suse.de>

* cfganal.c (connect_infinite_loops_to_exit): First call
add_noreturn_fake_exit_edges.
* ipa-sra.c (process_scan_results): Do not call the now redundant
add_noreturn_fake_exit_edges.
* predict.c (tree_estimate_probability): Likewise.
(rebuild_frequencies): Likewise.
* store-motion.c (one_store_motion_pass): Likewise.

3 years agotree-optimization/100222 - remove redundant mark_irreducible_loops calls
Richard Biener [Fri, 23 Apr 2021 09:16:52 +0000 (11:16 +0200)]
tree-optimization/100222 - remove redundant mark_irreducible_loops calls

loop_optimizer_init (LOOPS_NORMAL) already performs this (quite
expensive) marking.

2021-04-23  Richard Biener  <rguenther@suse.de>

PR tree-optimization/100222
* predict.c (pass_profile::execute): Remove redundant call to
mark_irreducible_loops.
(report_predictor_hitrates): Likewise.

3 years agoAvoid more temporaries in IVOPTs
Richard Biener [Wed, 14 Apr 2021 10:48:37 +0000 (12:48 +0200)]
Avoid more temporaries in IVOPTs

This avoids use of valid_gimple_rhs_p and instead gimplifies to
such a RHS, avoiding more SSA copies being generated by IVOPTs.

2021-04-14  Richard Biener  <rguenther@suse.de>

* tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr): Avoid
valid_gimple_rhs_p by instead gimplifying to one.

3 years agoc++: Use STATIC_ASSERT for OVL_OP_MAX.
Martin Liska [Fri, 12 Mar 2021 13:32:07 +0000 (14:32 +0100)]
c++: Use STATIC_ASSERT for OVL_OP_MAX.

gcc/cp/ChangeLog:

* cp-tree.h (STATIC_ASSERT): Prefer static assert.
* lex.c (init_operators): Remove run-time check.

3 years agotree-optimization/99971 - improve BB vect dependence analysis
Richard Biener [Fri, 9 Apr 2021 07:35:51 +0000 (09:35 +0200)]
tree-optimization/99971 - improve BB vect dependence analysis

We can use TBAA even when we have a DR, do so.  For the testcase
that means fully vectorizing it instead of only vectorizing
the first store group resulting in suboptimal code.

2021-04-09  Richard Biener  <rguenther@suse.de>

PR tree-optimization/99971
* tree-vect-data-refs.c (vect_slp_analyze_node_dependences):
Always use TBAA for loads.

* g++.dg/vect/slp-pr99971.cc: New testcase.

3 years agoMASK_AVX256_SPLIT_UNALIGNED_STORE/LOAD should be cleared in opts->x_target_flags...
liuhongt [Fri, 16 Apr 2021 03:29:10 +0000 (11:29 +0800)]
MASK_AVX256_SPLIT_UNALIGNED_STORE/LOAD should be cleared in opts->x_target_flags when X86_TUNE_AVX256_UNALIGNED_LOAD/STORE_OPTIMAL is enabled by target attribute.

gcc/ChangeLog:

PR target/100093
* config/i386/i386-options.c (ix86_option_override_internal):
Clear MASK_AVX256_SPLIT_UNALIGNED_LOAD/STORE in x_target_flags
when X86_TUNE_AVX256_UNALIGNED_LOAD/STORE_OPTIMAL is enabled
by target attribute.

gcc/testsuite/ChangeLog:

PR target/100093
* gcc.target/i386/pr100093.c: New test.

3 years agoDaily bump.
GCC Administrator [Fri, 23 Apr 2021 00:16:25 +0000 (00:16 +0000)]
Daily bump.

3 years agoaix: Switch AIX configurtion to DWARF2 debugging
David Edelsohn [Tue, 14 Jan 2020 18:12:59 +0000 (13:12 -0500)]
aix: Switch AIX configurtion to DWARF2 debugging

This patch is in preparation for removing stabs debugging support from GCC.

The rs6000 configuration files remain somewhat intertwined with the
stabs debugging support, but the configuration no longer generates
stabs debugging information.

This patch means that earlier releases (Technology Levels) of AIX 7.1
and 7.2, prior to DWARF support and fixes, cannot build GCC or support
GCC.

gcc/ChangeLog:

* config/rs6000/aix71.h (PREFERRED_DEBUGGING_TYPE): Change to
DWARF2_DEBUG.
* config/rs6000/aix72.h (PREFERRED_DEBUGGING_TYPE): Same.

3 years agoaix: Remove AIX 6.1 support.
David Edelsohn [Thu, 22 Apr 2021 21:41:10 +0000 (17:41 -0400)]
aix: Remove AIX 6.1 support.

AIX 6.1 is past end of life and extended support.  This patch removes
the configuration option and references to AIX 6.1.

contrib/ChangeLog:

* config-list.mk: Remove rs6000-ibm-aix6.1.
Rename rs6000-ibm-aix7.1 to powerpc-ibm-aix7.1.
Add powerpc-ibm-aix7.2.

gcc/ChangeLog:

* config.gcc (powerpc-ibm-aix6.*): Remove.
* config/rs6000/aix61.h: Delete.

3 years agoaix: delete AIX pre-PowerPC version of atomicity.h
David Edelsohn [Thu, 22 Apr 2021 18:52:22 +0000 (14:52 -0400)]
aix: delete AIX pre-PowerPC version of atomicity.h

The AIX-specific version of atomicity.h that provides compatibility
for the origina POWER architecture without atomic instructions no longer
is referenced.  This patch deletes the file.

libstdc++-v3/ChangeLog:

* config/os/aix/atomicity.h: Delete.

3 years agoc++: Add testcase for already fixed PR [PR94508]
Patrick Palka [Thu, 22 Apr 2021 21:47:02 +0000 (17:47 -0400)]
c++: Add testcase for already fixed PR [PR94508]

We correctly accept this testcase since r11-8144.

gcc/testsuite/ChangeLog:

PR c++/94508
* g++.dg/cpp2a/concepts-uneval3.C: New test.

3 years agoc++: Add testcase for already fixed PR [PR77435]
Patrick Palka [Thu, 22 Apr 2021 21:47:00 +0000 (17:47 -0400)]
c++: Add testcase for already fixed PR [PR77435]

We correctly accept this testcase since r8-1437.

gcc/testsuite/ChangeLog:

PR c++/77435
* g++.dg/template/partial-specialization9.C: New test.

3 years agoc++: Prevent bogus -Wtype-limits warning with NTTP [PR100161]
Marek Polacek [Wed, 21 Apr 2021 00:24:09 +0000 (20:24 -0400)]
c++: Prevent bogus -Wtype-limits warning with NTTP [PR100161]

Recently, we made sure that we never call value_dependent_expression_p
on an expression that isn't potential_constant_expression.  That caused
this bogus warning with a non-type template parameter, something that
users don't want to see.

The problem is that in tsubst_copy_and_build/LE_EXPR 't' is "i < n",
which, due to 'i', is not p_c_e, therefore we call t_d_e_p.  But the
type of 'n' isn't dependent, so we think the whole 't' expression is
not dependent.  It seems we need to test both op0 and op1 separately
to suppress this warning.

gcc/cp/ChangeLog:

PR c++/100161
* pt.c (tsubst_copy_and_build) <case PLUS_EXPR>: Test op0 and
op1 separately for value- or type-dependence.

gcc/testsuite/ChangeLog:

PR c++/100161
* g++.dg/warn/Wtype-limits6.C: New test.

3 years agoc++: Add testcase for already fixed PR [PR84689]
Patrick Palka [Thu, 22 Apr 2021 17:32:44 +0000 (13:32 -0400)]
c++: Add testcase for already fixed PR [PR84689]

We correctly accept this testcase since r11-1638.

gcc/testsuite/ChangeLog:

PR c++/84689
* g++.dg/cpp0x/sfinae67.C: New test.

3 years agoc++: Add testcase for already fixed PR [PR16617]
Patrick Palka [Thu, 22 Apr 2021 17:32:40 +0000 (13:32 -0400)]
c++: Add testcase for already fixed PR [PR16617]

We correctly diagnose the invalid access since r11-1350.

gcc/testsuite/ChangeLog:

PR c++/16617
* g++.dg/template/access36.C: New test.

3 years agotestsuite/substr_{9,10}.f90: Move to gfortran.dg/
Tobias Burnus [Thu, 22 Apr 2021 17:14:58 +0000 (19:14 +0200)]
testsuite/substr_{9,10}.f90: Move to gfortran.dg/

gcc/testsuite/
* substr_9.f90: Move to ...
* gfortran.dg/substr_9.f90: ... here.
* substr_10.f90: Move to ...
* gfortran.dg/substr_10.f90: ... here.

3 years agolibstdc++: Fix semaphore to work with system_clock timeouts
Jonathan Wakely [Thu, 22 Apr 2021 16:26:50 +0000 (17:26 +0100)]
libstdc++: Fix semaphore to work with system_clock timeouts

The __cond_wait_until_impl function takes a steady_clock timeout, but
then sometimes tries to compare it to a time from the system_clock,
which won't compile.  Additionally, that function gets called with
system_clock timeouts, which also won't compile. This makes the function
accept timeouts for either clock, and compare to the time from the right
clock.

This fixes the compilation error that was causing two tests to fail on
non-futex targets, so we can revert the r12-11 change to disable them.

libstdc++-v3/ChangeLog:

* include/bits/atomic_timed_wait.h (__cond_wait_until_impl):
Handle system_clock as well as steady_clock.
* testsuite/30_threads/semaphore/try_acquire_for.cc: Re-enable.
* testsuite/30_threads/semaphore/try_acquire_until.cc:
Re-enable.

3 years agolibstdc++: Add options for libatomic to test
Jonathan Wakely [Thu, 22 Apr 2021 14:51:08 +0000 (15:51 +0100)]
libstdc++: Add options for libatomic to test

This fixes a linker error on AIX:

FAIL: 30_threads/semaphore/try_acquire_posix.cc (test for excess errors)
Excess errors:
ld: 0711-317 ERROR: Undefined symbol: .__atomic_fetch_add_8
ld: 0711-317 ERROR: Undefined symbol: .__atomic_load_8
ld: 0711-317 ERROR: Undefined symbol: .__atomic_fetch_sub_8
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
collect2: error: ld returned 8 exit status

libstdc++-v3/ChangeLog:

* testsuite/30_threads/semaphore/try_acquire_posix.cc: Add
options for libatomic.

3 years agolibstdc++: Fix typo in comment
Jonathan Wakely [Thu, 22 Apr 2021 14:48:29 +0000 (15:48 +0100)]
libstdc++: Fix typo in comment

libstdc++-v3/ChangeLog:

* config/os/gnu-linux/os_defines.h: Fix type in comment.

3 years agolibstdc++: Reject std::make_shared<T[]> [PR 99006]
Jonathan Wakely [Thu, 22 Apr 2021 14:46:51 +0000 (15:46 +0100)]
libstdc++: Reject std::make_shared<T[]> [PR 99006]

Prior to C++20 it should be ill-formed to use std::make_shared with an
array type (and we don't support the C++20 feature to make it valid yet
anyway).

libstdc++-v3/ChangeLog:

PR libstdc++/99006
* include/bits/shared_ptr.h (allocate_shared): Assert that _Tp
is not an array type.
* include/bits/shared_ptr_base.h (__allocate_shared): Likewise.
* testsuite/20_util/shared_ptr/creation/99006.cc: New test.

3 years agoFix various typos.
Martin Liska [Thu, 22 Apr 2021 09:32:29 +0000 (11:32 +0200)]
Fix various typos.

PR testsuite/100159
PR testsuite/100192

gcc/ChangeLog:

* builtins.c (expand_builtin): Fix typos and missing comments.
* dwarf2out.c (gen_subprogram_die): Likewise.
(gen_struct_or_union_type_die): Likewise.

gcc/fortran/ChangeLog:

* frontend-passes.c (optimize_expr): Fix typos and missing comments.

gcc/testsuite/ChangeLog:

* g++.dg/template/nontype29.C: Fix typos and missing comments.
* gcc.dg/Warray-bounds-64.c: Likewise.
* gcc.dg/Warray-parameter.c: Likewise.
* gcc.dg/Wstring-compare.c: Likewise.
* gcc.dg/format/gcc_diag-11.c: Likewise.
* gfortran.dg/array_constructor_3.f90: Likewise.
* gfortran.dg/matmul_bounds_9.f90: Likewise.
* gfortran.dg/pr78033.f90: Likewise.
* gfortran.dg/pr96325.f90: Likewise.

3 years agolibstdc++: Fix "bare" notifications dropped by waiters check
Thomas Rodgers [Thu, 22 Apr 2021 01:12:03 +0000 (18:12 -0700)]
libstdc++: Fix "bare" notifications dropped by waiters check

For types that track whether or not there extant waiters (e.g.
semaphore) internally, the __atomic_notify_address_bare() call was
introduced to avoid the overhead of loading the atomic count of
waiters. For platforms that don't have Futex, however, there was
still a check for waiters, and seeing that there are none (because
in the bare case, the count is not incremented), the notification
is dropped. This commit addresses that case.

libstdc++-v3/ChangeLog:
* include/bits/atomic_wait.h: Always notify waiters in the
case of 'bare' address notification.

3 years agoi386: Fix unsigned int -> double conversion on i386 w/ -mfpmath=sse [PR100119]
Uros Bizjak [Thu, 22 Apr 2021 14:30:38 +0000 (16:30 +0200)]
i386: Fix unsigned int -> double conversion on i386 w/ -mfpmath=sse [PR100119]

2021-04-22  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/100119
* config/i386/i386-expand.c (ix86_expand_convert_uns_sidf_sse):
Remove the sign with FE_DOWNWARD, where x - x = -0.0.

gcc/testsuite/

PR target/100119
* gcc.target/i386/pr100119.c: New test.

3 years agolibstdc++: Add workaround for ia32 floating atomics miscompilations [PR100184]
Jakub Jelinek [Thu, 22 Apr 2021 13:08:21 +0000 (15:08 +0200)]
libstdc++: Add workaround for ia32 floating atomics miscompilations [PR100184]

gcc on ia32 miscompiles various atomics involving floating point,
unfortunately I'm afraid it is too late to fix that for 11.1 and
as I'm quite lost on it, it might take a while for 12 too
(disabling all the 8 peephole2s would be easiest, but then we'd
run into optimization regressions).

While 1.cc just FAILs, with dejagnu 1.6.1 wait_notify.cc hangs the
make check even after the timeout fires.  The following patch therefore
xfails the former and skips the latter.

Tested on x86_64-linux where
make check RUNTESTFLAGS='conformance.exp=atomic_float/*.cc'
is still
                === libstdc++ Summary ===

 # of expected passes            8
and on i686-linux, where it is now
                === libstdc++ Summary ===

 # of expected passes            5
 # of expected failures          1
 # of unsupported tests          1

2021-04-22  Jakub Jelinek  <jakub@redhat.com>

PR target/100182
* testsuite/29_atomics/atomic_float/1.cc: Add dg-xfail-run-if for
ia32.
* testsuite/29_atomics/atomic_float/wait_notify.cc: Add dg-skip-if for
ia32.

3 years agolibstdc++: Remove #error from <semaphore> implementation [PR 100179]
Jonathan Wakely [Thu, 22 Apr 2021 10:10:06 +0000 (11:10 +0100)]
libstdc++: Remove #error from <semaphore> implementation [PR 100179]

This removes the #error from <bits/semaphore_base.h> for the case where
neither __atomic_semaphore nor __platform_semaphore is defined.

Also rename the _GLIBCXX_REQUIRE_POSIX_SEMAPHORE macro to
_GLIBCXX_USE_POSIX_SEMAPHORE for consistency with the similar
_GLIBCXX_USE_CXX11_ABI macro that can be used to request an alternative
(ABI-changing) implementation.

libstdc++-v3/ChangeLog:

PR libstdc++/100179
* include/bits/semaphore_base.h: Remove #error.
* include/std/semaphore: Do not define anything unless one of
the implementations is available.

3 years agotestsuite/aarch64: Run pr99988.c test under lp64 only
Christophe Lyon [Thu, 22 Apr 2021 12:43:25 +0000 (12:43 +0000)]
testsuite/aarch64: Run pr99988.c test under lp64 only

The new test fails with -mabi=ilp32:
sorry, unimplemented: return address signing is only supported for '-mabi=lp64'

2021-04-22  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/testsuite/
PR target/99988
* gcc.target/aarch64/pr99988.c: Skip if not lp64 target.

3 years agogfortran.dg/pr68078.f90: Avoid increasing RLIMIT_AS
Tobias Burnus [Thu, 22 Apr 2021 09:05:17 +0000 (11:05 +0200)]
gfortran.dg/pr68078.f90: Avoid increasing RLIMIT_AS

pr68078.f90 tests out-of-memory handling and calls set_vm_limit to set the
soft limit.  However, setrlimit was then called with hard limit RLIM_INFINITY,
which failed when the current hard limit was lower.

gcc/testsuite/
* gfortran.dg/set_vm_limit.c (set_vm_limit): Call getrlimit, use
obtained hard limit, and only call setrlimit if new softlimit is lower.

3 years agotestsuite/100176 - fix struct-layout-1_generate.c compile
Richard Biener [Thu, 22 Apr 2021 07:50:26 +0000 (09:50 +0200)]
testsuite/100176 - fix struct-layout-1_generate.c compile

With -Werror=return-type we run into compile fails complaining about
missing return stmts.

2021-04-21  Richard Biener  <rguenther@suse.de>

PR testsuite/100176
* objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c: Add
missing return.

3 years agoAvoid -latomic for amdgcn offloading
Richard Biener [Wed, 21 Apr 2021 12:54:05 +0000 (14:54 +0200)]
Avoid -latomic for amdgcn offloading

libatomic isn't built for amdgcn but reduction-16.c adds it
via -foffload=-latomic when offloading for nvptx is enabled.
The following avoids linker errors when offloading to amdgcn is enabled
as well.

2021-04-21  Richard Biener  <rguenther@suse.de>

libgomp/
* testsuite/libgomp.c-c++-common/reduction-16.c: Use -latomic
only on nvptx-none.

3 years agoFix Fortran rounding issues, PR fortran/96983.
Michael Meissner [Thu, 22 Apr 2021 03:02:07 +0000 (23:02 -0400)]
Fix Fortran rounding issues, PR fortran/96983.

I was looking at Fortran PR 96983, which fails on the PowerPC when trying to
run the test PR96711.F90.  The compiler ICEs because the PowerPC does not have
a floating point type with a type precision of 128.  The reason is that the
PowerPC has 3 different 128 bit floating point types (__float128/_Float128,
__ibm128, and long double).  Currently long double uses the IBM extended double
type, but we would like to switch to using IEEE 128-bit long doubles in the
future.

In order to prevent the compiler from converting explicit __ibm128 types to
long double when long double uses the IEEE 128-bit representation, we have set
up the precision for __ibm128 to be 128, long double to be 127, and
__float128/_Float128 to be 126.

Originally, I was trying to see if for Fortran, I could change the precision of
long double to be 128 (Fortran doesn't access __ibm128), but it quickly became
hard to get the changes to work.

I looked at the Fortran code in build_round_expr, and I came to the conclusion
that there is no reason to promote the floating point type.  If you just do a
normal round of the value using the current floating point format and then
convert it to the integer type.  We don't have an appropriate built-in function
that provides the equivalent of llround for 128-bit integer types.

This patch fixes the compiler crash.

However, while with this patch, the PowerPC compiler will not crash when
building the test case, it will not run on the current default installation.
The failure is because the test is explicitly expecting 128-bit floating point
to handle 10384593717069655257060992658440192_16 (i.e. 2**113).

By default, the PowerPC uses IBM extended double used for 128-bit floating
point.  The IBM extended double format is a pair of doubles that provides more
mantissa bits but does not grow the expoenent range.  The value in the test is
fine for IEEE 128-bit floating point, but it is too large for the PowerPC
extended double setup.

I have built the following tests with this patch:

   * I have built a bootstrap compiler on a little endian power9 Linux system
     with the default long double format (IBM extended double).  The
     pr96711.f90 test builds, but it does not run due to the range of the
     real*16 exponent.  There were no other regressions in the C/C++/Fortran
     tests.

   * I have built a bootstrap compiler on a little endian power9 Linux system
     with the default long double format set to IEEE 128-bit. I used the
     Advance Toolchain 14.0-2 to provide the IEEE 128-bits.  The compiler was
     configured to build power9 code by default, so the test generated native
     power9 IEEE 128-bit instructions.  The pr96711.f90 test builds and runs
     correctly in this setup.

   * I have built a bootstrap compiler on a big endian power8 Linux system with
     the default long double format (IBM extended double).  Like the first
     case, the pr96711.f90 test does not crash the compiler, but the test fails
     due to the range of the real*16 exponent.    There were no other
     regressions in the C/C++/Fortran tests.

   * I built a bootstrap compiler on my x86_64 laptop.  There were no
     regressions in the tests.

gcc/fortran/
2021-04-21  Michael Meissner  <meissner@linux.ibm.com>

PR fortran/96983
* trans-intrinsic.c (build_round_expr): If int type is larger than
long long, do the round and convert to the integer type.  Do not
try to find a floating point type the exact size of the integer
type.

3 years agoDaily bump.
GCC Administrator [Thu, 22 Apr 2021 00:16:32 +0000 (00:16 +0000)]
Daily bump.

3 years agolibgomp.fortran/depobj-1.f90: Fix omp_depend_kind
Tobias Burnus [Wed, 21 Apr 2021 20:47:18 +0000 (22:47 +0200)]
libgomp.fortran/depobj-1.f90: Fix omp_depend_kind

libgomp/
* testsuite/libgomp.fortran/depobj-1.f90: Use omp_lib's
omp_depend_kind instead of defining it as 16.

3 years ago[libstdc++] Fix test timeout in stop_calback/destroy.cc
Thomas Rodgers [Wed, 21 Apr 2021 17:01:06 +0000 (10:01 -0700)]
[libstdc++] Fix test timeout in stop_calback/destroy.cc

A change was made to __atomic_semaphore::_S_do_try_acquire() to
(ideally) let the compare_exchange reload the value of __old rather than
always reloading it twice. This causes _M_acquire to spin indefinitely
if the value of __old is already 0.

libstdc++-v3/ChangeLog:
* include/bits/semaphore_base.h: Always reload __old in
__atomic_semaphore::_S_do_try_acquire().
* testsuite/30_threads/stop_token/stop_callback/destroy.cc:
re-enable testcase.

3 years agoDarwin, X86 : Fix bootstrap break from flags changes.
Iain Sandoe [Wed, 21 Apr 2021 19:40:48 +0000 (20:40 +0100)]
Darwin, X86 : Fix bootstrap break from flags changes.

The changes from r12-36-g1751bec027f030515889fcf4baa9c91501aafc85
did not remove the uses of TARGET_ISA_* from i386/darwin.h.

Fixed thus.

gcc/ChangeLog:

* config/i386/darwin.h (TARGET_64BIT): Remove definition
based on TARGET_ISA_64BIT.
(TARGET_64BIT_P): Remove definition based on
TARGET_ISA_64BIT_P().

3 years agoRevert "Use std::thread::hardware_concurrency in lto-wrapper.c."
Martin Liska [Wed, 21 Apr 2021 19:33:41 +0000 (21:33 +0200)]
Revert "Use std::thread::hardware_concurrency in lto-wrapper.c."

This reverts commit 0a18305ee11e139838771f96c5a037a29606236e.

3 years agoCall toplev::finalize in CHECKING_P mode.
Martin Liska [Mon, 11 Jan 2021 17:12:54 +0000 (18:12 +0100)]
Call toplev::finalize in CHECKING_P mode.

gcc/ChangeLog:

PR jit/98615
* main.c (main): Call toplev::finalize in CHECKING_P mode.
* ipa-modref.c (ipa_modref_c_finalize): summaries are NULL
when incremental LTO linking happens.

3 years agolibgomp/testsuite: Fix checks for dg-excess-errors
Tobias Burnus [Wed, 21 Apr 2021 18:07:19 +0000 (20:07 +0200)]
libgomp/testsuite: Fix checks for dg-excess-errors

For the tests modified below, the effective target line has to be effective
when compiling for an offload target, except that variable-not-offloaded.c
would compile with unified-share memory and pr86416-*.c if long double/float128
is supported.
The previous check used a run-time device ability check. This new variant
now enables those dg- lines when _compiling_ for nvptx or gcn.

libgomp/ChangeLog:

* testsuite/lib/libgomp.exp (offload_target_to_openacc_device_type):
New, based on check_effective_target_offload_target_nvptx.
(check_effective_target_offload_target_nvptx): Call it.
(check_effective_target_offload_target_amdgcn): New.
* testsuite/libgomp.c-c++-common/function-not-offloaded.c:
Require target offload_target_nvptx || offload_target_amdgcn.
* testsuite/libgomp.c-c++-common/variable-not-offloaded.c: Likewise.
* testsuite/libgomp.c/pr86416-1.c: Likewise.
* testsuite/libgomp.c/pr86416-2.c: Likewise.

3 years agolibstdc++: Install libstdc++*-gdb.py more robustly [PR 99453]
Philippe Blain [Sat, 13 Mar 2021 00:26:46 +0000 (19:26 -0500)]
libstdc++: Install libstdc++*-gdb.py more robustly [PR 99453]

In order for GDB to auto-load the pretty printers, they must be installed
as "libstdc++.$ext-gdb.py", where 'libstdc++.$ext' is the name of the
object file that is loaded by GDB [1], i.e. the libstdc++ shared library.

The approach taken in libstdc++-v3/python/Makefile.am is to loop over
files matching 'libstdc++*' in $(DESTDIR)$(toolexeclibdir) and choose
the last file matching that glob that is not a symlink, the Libtool
'*.la' file or a Python file.

That works fine for ELF targets where the matching names are:

  libstdc++.a
  libstdc++.so
  libstdc++.so.6
  libstdc++.so.6.0.29

But not for macOS with:

  libstdc++.6.dylib
  libstdc++.a

Or MinGW with:

  libstdc++-6.dll
  libstdc++.dll.a

Try to make a better job at installing the pretty printers with the
correct name by copying the approach taken by isl [2], that is, using
a sed invocation on the Libtool-generated 'libstdc++.la' to read the
correct name for the current platform.

[1] https://sourceware.org/gdb/onlinedocs/gdb/objfile_002dgdbdotext-file.html
[2] https://repo.or.cz/isl.git/blob/HEAD:/Makefile.am#l611

libstdc++-v3/ChangeLog:

PR libstdc++/99453
* python/Makefile.am: Install libstdc++*-gdb.py more robustly.
* python/Makefile.in: Regenerate.

Co-authored-by: Jonathan Wakely <jwakely@redhat.com>
3 years agotestsuite: Fix bind_c_array_params_2.f90 on AIX
David Edelsohn [Wed, 21 Apr 2021 12:27:31 +0000 (08:27 -0400)]
testsuite: Fix bind_c_array_params_2.f90 on AIX

gcc/testsuite/ChangeLog:

* gfortran.dg/bind_c_array_params_2.f90: Look for AIX-specific call
pattern.

3 years ago[libstdc++] Add missing _M_try_acquire() to __platform_semaphore
Thomas Rodgers [Wed, 21 Apr 2021 15:15:16 +0000 (08:15 -0700)]
[libstdc++] Add missing _M_try_acquire() to __platform_semaphore

libstdc++-v3/ChangeLog:
* include/bits/semaphore_base.h: Add missing _M_try_acquire()
member to __platform_wait.

3 years agoLTO: fallback to -flto=N if -flto=jobserver does not work.
Martin Liska [Fri, 12 Mar 2021 12:37:06 +0000 (13:37 +0100)]
LTO: fallback to -flto=N if -flto=jobserver does not work.

gcc/ChangeLog:

* lto-wrapper.c (run_gcc): When -flto=jobserver is used, but the
makeserver cannot be detected, then use -flto=N fallback.

3 years agoc++: Don't allow defining types in enum-base [PR96380]
Marek Polacek [Tue, 20 Apr 2021 16:16:04 +0000 (12:16 -0400)]
c++: Don't allow defining types in enum-base [PR96380]

In r11-2064 I made cp_parser_enum_specifier commit to tentative parse
when seeing a '{'.  That still looks like the correct thing to do, but
it caused an ICE-on-invalid as well as accepts-invalid.

When we have something sneaky like this, which is broken in multiple
ways:

  template <class>
  enum struct c : union enum struct c { e = b, f = a };

we parse the "enum struct c" part (that's OK) and then we see that
we have an enum-base, so we consume ':' and then parse the type-specifier
that follows the :.  "union enum" is clearly invalid, but we're still
parsing tentatively and we parse everything up to the ;, and then
throw away the underlying type.  We parsed everything because we were
tricked into parsing an enum-specifier in an enum-base of another
enum-specifier!  Not good.

Since the grammar for enum-base doesn't allow a defining-type-specifier,
only a type-specifier, we should set type_definition_forbidden_message
which fixes all the problems in this PR.

gcc/cp/ChangeLog:

PR c++/96380
* parser.c (cp_parser_enum_specifier): Don't allow defining
types in enum-base.

gcc/testsuite/ChangeLog:

PR c++/96380
* g++.dg/cpp0x/enum_base4.C: New test.
* g++.dg/cpp0x/enum_base5.C: New test.

3 years agoFix clang warning (-Wstring-plus-int)
Martin Liska [Wed, 21 Apr 2021 14:52:17 +0000 (16:52 +0200)]
Fix clang warning (-Wstring-plus-int)

This fixes:

lto-plugin.c:642:7: warning: adding 'int' to a string does not append to the string [-Wstring-plus-int]

lto-plugin/ChangeLog:

* lto-plugin.c (exec_lto_wrapper): Make a temp variable.

3 years agoaarch64: Always use .init/.fini_array for GNU/Linux
Richard Sandiford [Wed, 21 Apr 2021 14:36:51 +0000 (15:36 +0100)]
aarch64: Always use .init/.fini_array for GNU/Linux

I was wondering why the (now fixed) c-c++-common/attr-retain-[78].c
failures were showing up in the native results for aarch64-linux-gnu
but not in the posted cross results.  It turns out that .init/
.fini_array support is disabled by default for cross builds,
which in turn stops those tests from running.

The test for .init/fini_array support has two parts: one that builds
something with the assembler and linker, and another that compiles
C code and uses preprocessor macros to test the glibc version.
The first test would work with build=host but the second is only
safe for build=target.

However, AArch64 postdates glibc and binutils support for
.init/fini_array by some distance, so it's safe to hard-code the
result to "yes" for cross compilers.

This fixes the only material difference in auto-host.h between
a native and a cross build.

gcc/
* acinclude.m4 (gcc_AC_INITFINI_ARRAY): When cross-compiling,
default to yes for aarch64-linux-gnu.
* configure: Regenerate.

3 years agoUse std::thread::hardware_concurrency in lto-wrapper.c.
Martin Liska [Thu, 11 Mar 2021 10:37:50 +0000 (11:37 +0100)]
Use std::thread::hardware_concurrency in lto-wrapper.c.

gcc/ChangeLog:

* lto-wrapper.c (cpuset_popcount): Remove.
(init_num_threads): Remove and use hardware_concurrency.

3 years agoFix clang warnings.
Martin Liska [Mon, 15 Mar 2021 08:45:41 +0000 (09:45 +0100)]
Fix clang warnings.

gcc/ChangeLog:

* config/i386/i386.c: Remove superfluous || TARGET_MACHO
which remains to be '(... || 0)' and clang complains about it.
* dwarf2out.c (AT_vms_delta): Declare conditionally.
(add_AT_vms_delta): Likewise.
* tree.c (fld_simplified_type): Use rather more common pattern
for disabling of something (#if 0).
(get_tree_code_name): Likewise.
(verify_type_variant): Likewise.

3 years agoRemove TARGET_foo (ix86_tune == PROCESSOR_foo) macros.
Martin Liska [Tue, 9 Mar 2021 13:56:54 +0000 (14:56 +0100)]
Remove TARGET_foo (ix86_tune == PROCESSOR_foo) macros.

gcc/ChangeLog:

* config/i386/i386-expand.c (decide_alignment): Use newly named
macro TARGET_CPU_P.
* config/i386/i386.c (ix86_decompose_address): Likewise.
(ix86_address_cost): Likewise.
(ix86_lea_outperforms): Likewise.
(ix86_avoid_lea_for_addr): Likewise.
(ix86_add_stmt_cost): Likewise.
* config/i386/i386.h (TARGET_*): Remove.
(TARGET_CPU_P): New macro.
* config/i386/i386.md: Use newly named macro TARGET_CPU_P.
* config/i386/x86-tune-sched-atom.c (do_reorder_for_imul): Likewise.
(swap_top_of_ready_list): Likewise.
(ix86_atom_sched_reorder): Likewise.
* config/i386/x86-tune-sched-bd.c (ix86_bd_has_dispatch): Likewise.
* config/i386/x86-tune-sched.c (ix86_adjust_cost): Likewise.

3 years agoOverhaul in isa_flags and handling it.
Martin Liska [Mon, 8 Mar 2021 13:54:18 +0000 (14:54 +0100)]
Overhaul in isa_flags and handling it.

gcc/ChangeLog:

* config/i386/i386-options.c (TARGET_EXPLICIT_NO_SAHF_P):
Define.
(SET_TARGET_NO_SAHF): Likewise.
(TARGET_EXPLICIT_PREFETCH_SSE_P): Likewise.
(SET_TARGET_PREFETCH_SSE): Likewise.
(TARGET_EXPLICIT_NO_TUNE_P): Likewise.
(SET_TARGET_NO_TUNE): Likewise.
(TARGET_EXPLICIT_NO_80387_P): Likewise.
(SET_TARGET_NO_80387): Likewise.
(DEF_PTA): New.
* config/i386/i386.h (TARGET_*): Remove.
* opth-gen.awk: Generate new used macros.

3 years agoGenerate PTA features from a def file.
Martin Liska [Mon, 8 Mar 2021 12:53:09 +0000 (13:53 +0100)]
Generate PTA features from a def file.

gcc/ChangeLog:

* config/i386/i386.h (PTA_*): Remove.
(enum pta_flag): New.
(DEF_PTA): Generate PTA_* values from i386-isa.def.
* config/i386/i386-isa.def: New file.

3 years agoaarch64: Avoid duplicating bti j insns for jump tables [PR99988]
Alex Coplan [Wed, 21 Apr 2021 13:42:04 +0000 (14:42 +0100)]
aarch64: Avoid duplicating bti j insns for jump tables [PR99988]

This patch fixes PR99988 which shows us generating large (> 250)
sequences of back-to-back bti j instructions.

The fix is simply to avoid inserting bti j instructions at the target of
a jump table if we've already inserted one for a given label.

gcc/ChangeLog:

PR target/99988
* config/aarch64/aarch64-bti-insert.c (aarch64_bti_j_insn_p): New.
(rest_of_insert_bti): Avoid inserting duplicate bti j insns for
jump table targets.

gcc/testsuite/ChangeLog:

PR target/99988
* gcc.target/aarch64/pr99988.c: New test.

3 years agotestsuite: Add -fchecking to dg-ice tests
Jakub Jelinek [Wed, 21 Apr 2021 13:17:10 +0000 (15:17 +0200)]
testsuite: Add -fchecking to dg-ice tests

In --enable-checking=release builds (which is the default on release
branches), I'm getting various extra FAILs that don't appear in
--enable-checking=yes builds.

XPASS: g++.dg/cpp0x/constexpr-52830.C  -std=c++14 (internal compiler error)
FAIL: g++.dg/cpp0x/constexpr-52830.C  -std=c++14 (test for excess errors)
XPASS: g++.dg/cpp0x/constexpr-52830.C  -std=c++17 (internal compiler error)
FAIL: g++.dg/cpp0x/constexpr-52830.C  -std=c++17 (test for excess errors)
XPASS: g++.dg/cpp0x/constexpr-52830.C  -std=c++2a (internal compiler error)
FAIL: g++.dg/cpp0x/constexpr-52830.C  -std=c++2a (test for excess errors)
FAIL: g++.dg/cpp0x/vt-88982.C  -std=c++14 (test for excess errors)
FAIL: g++.dg/cpp0x/vt-88982.C  -std=c++17 (test for excess errors)
FAIL: g++.dg/cpp0x/vt-88982.C  -std=c++2a (test for excess errors)
FAIL: g++.dg/cpp1y/auto-fn61.C  -std=c++14 (test for excess errors)
FAIL: g++.dg/cpp1y/auto-fn61.C  -std=c++17 (test for excess errors)
FAIL: g++.dg/cpp1y/auto-fn61.C  -std=c++2a (test for excess errors)
FAIL: g++.dg/cpp1z/constexpr-lambda26.C  -std=c++17 (test for excess errors)
FAIL: g++.dg/cpp1z/constexpr-lambda26.C  -std=c++2a (test for excess errors)
FAIL: g++.dg/cpp2a/nontype-class39.C  -std=c++2a (test for excess errors)
FAIL: c-c++-common/goacc/kernels-decompose-ice-1.c  -std=c++14 (test for excess errors)
FAIL: c-c++-common/goacc/kernels-decompose-ice-1.c  -std=c++17 (test for excess errors)
FAIL: c-c++-common/goacc/kernels-decompose-ice-1.c  -std=c++2a (test for excess errors)
FAIL: c-c++-common/goacc/kernels-decompose-ice-1.c  -std=c++98 (test for excess errors)
FAIL: c-c++-common/goacc/kernels-decompose-ice-2.c  -std=c++14 (test for excess errors)
FAIL: c-c++-common/goacc/kernels-decompose-ice-2.c  -std=c++17 (test for excess errors)
FAIL: c-c++-common/goacc/kernels-decompose-ice-2.c  -std=c++2a (test for excess errors)
FAIL: c-c++-common/goacc/kernels-decompose-ice-2.c  -std=c++98 (test for excess errors)

These are tests that have dg-ice and most of those ICEs are checking ICEs
which go away in release checking when -fno-checking is the default.

The following patch adds -fchecking option to those.

2021-04-21  Jakub Jelinek  <jakub@redhat.com>

* g++.dg/cpp1z/constexpr-lambda26.C: Add dg-additional-options
-fchecking.
* g++.dg/cpp1y/auto-fn61.C: Likewise.
* g++.dg/cpp2a/nontype-class39.C: Likewise.
* g++.dg/cpp0x/constexpr-52830.C: Likewise.
* g++.dg/cpp0x/vt-88982.C: Likewise.
* c-c++-common/goacc/kernels-decompose-ice-1.c: Add -fchecking to
dg-additional-options.
* c-c++-common/goacc/kernels-decompose-ice-2.c: Likewise.

3 years agox86: Add -mmwait for -mgeneral-regs-only
H.J. Lu [Thu, 15 Apr 2021 18:19:32 +0000 (11:19 -0700)]
x86: Add -mmwait for -mgeneral-regs-only

Add -mmwait so that the MWAIT and MONITOR intrinsics can be used with
-mgeneral-regs-only and make -msse3 to imply -mmwait.

gcc/

* config.gcc: Install mwaitintrin.h for i[34567]86-*-* and
x86_64-*-* targets.
* common/config/i386/i386-common.c (OPTION_MASK_ISA2_MWAIT_SET):
New.
(OPTION_MASK_ISA2_MWAIT_UNSET): Likewise.
(ix86_handle_option): Handle -mmwait.
* config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
Replace OPTION_MASK_ISA_SSE3 with OPTION_MASK_ISA2_MWAIT on
__builtin_ia32_monitor and __builtin_ia32_mwait.
* config/i386/i386-options.c (isa2_opts): Add -mmwait.
(ix86_valid_target_attribute_inner_p): Likewise.
(ix86_option_override_internal): Enable mwait/monitor
instructions for -msse3.
* config/i386/i386.h (TARGET_MWAIT): New.
(TARGET_MWAIT_P): Likewise.
* config/i386/i386.opt: Add -mmwait.
* config/i386/mwaitintrin.h: New file.
* config/i386/pmmintrin.h: Include <mwaitintrin.h>.
* config/i386/sse.md (sse3_mwait): Replace TARGET_SSE3 with
TARGET_MWAIT.
(@sse3_monitor_<mode>): Likewise.
* config/i386/x86gprintrin.h: Include <mwaitintrin.h>.
* doc/extend.texi: Document mwait target attribute.
* doc/invoke.texi: Document -mmwait.

gcc/testsuite/

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

3 years agolibstdc++: Fix whitespace in license boilerplate
Jonathan Wakely [Wed, 21 Apr 2021 11:59:04 +0000 (12:59 +0100)]
libstdc++: Fix whitespace in license boilerplate

libstdc++-v3/ChangeLog:

* include/std/latch: Replace tab characters in license text.
* include/std/semaphore: Likewise.

3 years agoRemove DEF_ENUM from stringop.def.
Martin Liska [Mon, 8 Mar 2021 12:01:37 +0000 (13:01 +0100)]
Remove DEF_ENUM from stringop.def.

gcc/ChangeLog:

* config/i386/i386-options.c (DEF_ENUM): Remove it.
* config/i386/i386-opts.h (DEF_ENUM): Likewise.
* config/i386/stringop.def (DEF_ENUM): Likewise.

3 years agoRevert "Use flags in dump_decl."
Martin Liska [Wed, 21 Apr 2021 11:30:03 +0000 (13:30 +0200)]
Revert "Use flags in dump_decl."

This reverts commit 9b6360b83cf5c684422c42301faee3a79ac42dc1.

3 years agoFix endian bug in rust demangler
Andreas Schwab [Tue, 20 Apr 2021 15:30:46 +0000 (17:30 +0200)]
Fix endian bug in rust demangler

libiberty/
PR demangler/100177
* rust-demangle.c (demangle_const_char): Properly print the
character value.

3 years agoUse flags in dump_decl.
Martin Liska [Wed, 21 Apr 2021 11:27:08 +0000 (13:27 +0200)]
Use flags in dump_decl.

gcc/cp/ChangeLog:

* error.c (dump_decl): Use flags in dump_generic_node call.

3 years agoSupport LABEL_DECL in %qD directive.
Martin Liska [Thu, 18 Feb 2021 11:58:39 +0000 (12:58 +0100)]
Support LABEL_DECL in %qD directive.

gcc/cp/ChangeLog:

* error.c (dump_decl): Support anonymous labels.

gcc/ChangeLog:

* tree-cfg.c (gimple_verify_flow_info): Use qD instead
of print_generic_expr.

3 years agotestsuite/100176 - fix struct-layout-1_generate.c compile
Richard Biener [Wed, 21 Apr 2021 10:46:51 +0000 (12:46 +0200)]
testsuite/100176 - fix struct-layout-1_generate.c compile

With -Werror=return-type we run into compile fails complaining about
missing return stmts.

2021-04-21  Richard Biener  <rguenther@suse.de>

PR testsuite/100176
* g++.dg/compat/struct-layout-1_generate.c: Add missing return.
* gcc.dg/compat/struct-layout-1_generate.c: Likewise.

3 years agocprop: Fix -fcompare-debug bug in constprop_register [PR100148]
Jakub Jelinek [Wed, 21 Apr 2021 10:31:45 +0000 (12:31 +0200)]
cprop: Fix -fcompare-debug bug in constprop_register [PR100148]

The following testcase shows different behavior between -g and -g0
in constprop_register, if a flags register setter is separated
from a conditional jump using those flags with -g by a DEBUG_INSN.
As it uses just NEXT_INSN, for -g it will look at the DEBUG_INSN which is
not a conditional jump, while otherwise it would look at the conditional
jump and call cprop_jump.

2021-04-21  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/100148
* cprop.c (constprop_register): Use next_nondebug_insn instead of
NEXT_INSN.

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

3 years agoTest simlified call in cgraph_node::analyze().
Martin Liska [Tue, 26 Jan 2021 11:55:52 +0000 (12:55 +0100)]
Test simlified call in cgraph_node::analyze().

gcc/ChangeLog:

PR ipa/98815
* cgraphunit.c (cgraph_node::analyze): Remove duplicate
free_dominance_info calls.

3 years agoFix AIX libstdc++ semaphore support [PR100164]
Jakub Jelinek [Wed, 21 Apr 2021 09:09:25 +0000 (11:09 +0200)]
Fix AIX libstdc++ semaphore support [PR100164]

> > The #error would not be hit if _GLIBCXX_HAVE_POSIX_SEMAPHORE were defined,
> > but it shows up in your error report.

> You now have pinpointed the problem.

> It's not that AIX doesn't have semaphore, but that the code previously
> had a fallback that hid a bug in the macros:

  // Use futex if available and didn't force use of POSIX
  using __fast_semaphore = __atomic_semaphore<__detail::__platform_wait_t>;
  using __fast_semaphore = __platform_semaphore;
  using __fast_semaphore = __atomic_semaphore<ptrdiff_t>;

> The problem is that libstdc++ configure defines
> _GLIBCXX_HAVE_POSIX_SEMAPHORE in config.h.  libstdc++ uses sed to
> rewrite config.h to c++config.h and prepends _GLIBCXX_, so c++config.h
> contains

> And bits/semaphore_base.h is not testing that corrupted macro.  Either
> semaphore_base.h needs to test for the corrupted macro, or libtsdc++
> configure needs to define HAVE_POSIX_SEMAPHORE without itself
> prepending _GLIBCXX_  so that the c++config.h rewriting works
> correctly and defines the correct macro for semaphore_base.h.

The include/Makefile.am sed is:
        sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \
            -e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \
            -e 's/VERSION/_GLIBCXX_VERSION/g' \
            -e 's/WORDS_/_GLIBCXX_WORDS_/g' \
            -e 's/_DARWIN_USE_64_BIT_INODE/_GLIBCXX_DARWIN_USE_64_BIT_INODE/g' \
            -e 's/_FILE_OFFSET_BITS/_GLIBCXX_FILE_OFFSET_BITS/g' \
            -e 's/_LARGE_FILES/_GLIBCXX_LARGE_FILES/g' \
            -e 's/ICONV_CONST/_GLIBCXX_ICONV_CONST/g' \
            -e '/[       ]_GLIBCXX_LONG_DOUBLE_COMPAT[   ]/d' \
            -e '/[       ]_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT[    ]/d' \
            < ${CONFIG_HEADER} >> $@ ;\
so for many macros one needs _GLIBCXX_ prefixes already in configure,
as can be seen in grep AC_DEFINE.*_GLIBCXX configure.ac acinclude.m4
But _GLIBCXX_HAVE_POSIX_SEMAPHORE is the only one that shouldn't have
that prefix because the sed is adding that.
E.g. on i686-linux, I see
grep _GLIBCXX__GLIBCXX c++config.h
that proves it is the only broken one.

So this change fixes the acinclude.m4 side.

2021-04-21  Jakub Jelinek  <jakub@redhat.com>

PR libstdc++/100164
* acinclude.m4: For POSIX semaphores AC_DEFINE HAVE_POSIX_SEMAPHORE
rather than _GLIBCXX_HAVE_POSIX_SEMAPHORE.
* configure: Regenerated.
* config.h.in: Regenerated.

3 years agoSimplify maybe_fold_reference API
Richard Biener [Fri, 16 Apr 2021 09:56:00 +0000 (11:56 +0200)]
Simplify maybe_fold_reference API

This simplifies the maybe_fold_reference API reflecting that it
no longer canonicalizes refs (that's done with another function)
but only performs constant folding and thus does nothing for is_lhs.

This in turn allows to rip out quite some dead code and one user
of valid_gimple_rhs_p.

2021-04-16  Richard Biener  <rguenther@suse.de>

* gimple-fold.c (maybe_fold_reference): Remove is_lhs
parameter (and assume it to be false).
(fold_gimple_assign): Adjust, remove all callers of
maybe_fold_reference calling it with is_lhs true.
(gimple_fold_call): Likewise.
(fold_stmt_1): Likewise.

3 years agoFortran/OpenMP: Add 'omp depobj' and 'depend(mutexinoutset:'
Tobias Burnus [Wed, 21 Apr 2021 08:58:29 +0000 (10:58 +0200)]
Fortran/OpenMP: Add 'omp depobj' and 'depend(mutexinoutset:'

gcc/fortran/ChangeLog:

* dump-parse-tree.c (show_omp_namelist): Handle depobj + mutexinoutset
in the depend clause.
(show_omp_clauses, show_omp_node, show_code_node): Handle depobj.
* gfortran.h (enum gfc_statement): Add ST_OMP_DEPOBJ.
(enum gfc_omp_depend_op): Add OMP_DEPEND_UNSET,
OMP_DEPEND_MUTEXINOUTSET and OMP_DEPEND_DEPOBJ.
(gfc_omp_clauses): Add destroy, depobj_update and depobj.
(enum gfc_exec_op): Add EXEC_OMP_DEPOBJ
* match.h (gfc_match_omp_depobj): Match 'omp depobj'.
* openmp.c (gfc_match_omp_clauses): Add depobj + mutexinoutset
to depend clause.
(gfc_match_omp_depobj, resolve_omp_clauses, gfc_resolve_omp_directive):
Handle 'omp depobj'.
* parse.c (decode_omp_directive, next_statement, gfc_ascii_statement):
Likewise.
* resolve.c (gfc_resolve_code): Likewise.
* st.c (gfc_free_statement): Likewise.
* trans-openmp.c (gfc_trans_omp_clauses): Handle depobj + mutexinoutset
in the depend clause.
(gfc_trans_omp_depobj, gfc_trans_omp_directive): Handle EXEC_OMP_DEPOBJ.
* trans.c (trans_code): Likewise.

libgomp/ChangeLog:

* testsuite/libgomp.fortran/depobj-1.f90: New test.

gcc/testsuite/ChangeLog:

* gfortran.dg/gomp/depobj-1.f90: New test.
* gfortran.dg/gomp/depobj-2.f90: New test.

3 years agotestsuite: Xfail gcc.dg/vect/pr71264.c on IBM Z
Stefan Schulze Frielinghaus [Wed, 21 Apr 2021 08:44:54 +0000 (10:44 +0200)]
testsuite: Xfail gcc.dg/vect/pr71264.c on IBM Z

The test fails for targets with V4QImode support which is the case for
IBM Z.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/pr71264.c: Xfail on IBM Z due to V4QImode support.

3 years agoRemove pedantic_non_lvalue_loc
Richard Biener [Mon, 19 Apr 2021 12:38:03 +0000 (14:38 +0200)]
Remove pedantic_non_lvalue_loc

This removes pedantic_non_lvalue_loc which doesn't do what it says
since quite some time in favor of what it actually does and where
that's not a duplicate (protected_set_expr_location_unshare).

2021-04-19  Richard Biener  <rguenther@suse.de>

* fold-const.c (pedantic_non_lvalue_loc): Remove.
(fold_binary_loc): Adjust.
(fold_ternary_loc): Likewise.

3 years agovarasm: Two SECTION_RETAIN fixes [PR100130]
Richard Sandiford [Wed, 21 Apr 2021 08:08:44 +0000 (09:08 +0100)]
varasm: Two SECTION_RETAIN fixes [PR100130]

switch_to_section warns if we try to output a retain decl in a
section without a retain flag, or if we try to output a non-retain
decl in a section with a retain flag.  However, the warning only
applied if we were trying to “switch” to the current section.
This works if all decls that use a section are generated consecutively,
but not if there is an unrelated decl in between.

This patch makes the check unconditional, but suppresses the warning
if we're writing the section's named.decl (i.e. the decl from which
the section name and original flags were derived).

Also, the warning didn't fire for -fsection-anchors, for two reasons:
we allowed retain and non-retain decls to be put into the same block,
and we didn't pass a decl to switch_to_section.

Although these are arguably separate bugs, it isn't easy to fix them
independently without temporarily regressing -fsection-anchor targets.

gcc/
PR middle-end/100130
* varasm.c (get_block_for_decl): Make sure that any use of the
retain attribute matches the section's retain flag.
(switch_to_section): Check for retain mismatches even when
changing sections, but do not warn if the given decl is the
section's named.decl.
(output_object_block): Pass the first decl in the block (if any)
to switch_to_section.

gcc/testsuite/
PR middle-end/100130
* c-c++-common/attr-retain-10.c: New test.
* c-c++-common/attr-retain-11.c: Likewise.

3 years agotestsuite: Fix gcc.dg/vect/bb-slp-39.c on IBM Z
Stefan Schulze Frielinghaus [Wed, 21 Apr 2021 06:27:29 +0000 (08:27 +0200)]
testsuite: Fix gcc.dg/vect/bb-slp-39.c on IBM Z

On IBM Z the aliasing stores are realized through one element vector
instructions, if no cost model for vectorization is used which is the
default according to vect.exp.  Fixed by changing the number of times
the pattern must be found in the dump.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/bb-slp-39.c: Change number of times the pattern
must match for target IBM Z only.

3 years agolibphobos: Fix build fails for powerpc-linux
Iain Buclaw [Tue, 20 Apr 2021 23:15:33 +0000 (01:15 +0200)]
libphobos: Fix build fails for powerpc-linux

As register names are required for darwin, but not accepted by gas
unless you use `-mregnames', they have been conditionally removed on
non-darwin targets.

To avoid duplicating large blocks of almost identical code, the inline
assembly is now statically generated.

libphobos/ChangeLog:

* libdruntime/core/thread/osthread.d (callWithStackShell): Statically
generate PPC and PPC64 asm implementations, and conditionally remove
PPC register names on non-Darwin targets.

3 years agoDaily bump.
GCC Administrator [Wed, 21 Apr 2021 00:16:23 +0000 (00:16 +0000)]
Daily bump.

3 years agoRegenerate gcc.pot.
Joseph Myers [Tue, 20 Apr 2021 18:18:03 +0000 (18:18 +0000)]
Regenerate gcc.pot.

* gcc.pot: Regenerate.

3 years agox86: Use crc32 target option for CRC32 intrinsics
H.J. Lu [Thu, 15 Apr 2021 12:59:48 +0000 (05:59 -0700)]
x86: Use crc32 target option for CRC32 intrinsics

Use crc32 target option for CRC32 intrinsics to support CRC32 intrinsics
without enabling SSE vector instructions.

* config/i386/i386-c.c (ix86_target_macros_internal): Define
__CRC32__ for -mcrc32.
* config/i386/i386-options.c (ix86_option_override_internal):
Enable crc32 instruction for -msse4.2.
* config/i386/i386.md (sse4_2_crc32<mode>): Remove TARGET_SSE4_2
check.
(sse4_2_crc32di): Likewise.
* config/i386/ia32intrin.h: Use crc32 target option for CRC32
intrinsics.

3 years agolibstdc++: Disable tests that fail after atomic wait/notify rewrite
Jonathan Wakely [Tue, 20 Apr 2021 14:11:29 +0000 (15:11 +0100)]
libstdc++: Disable tests that fail after atomic wait/notify rewrite

These tests are currently failing, but should be analyzed and
re-enabled.

libstdc++-v3/ChangeLog:

* testsuite/30_threads/semaphore/try_acquire_for.cc: Disable
test for targets not using futexes for semaphores.
* testsuite/30_threads/semaphore/try_acquire_until.cc: Likewise.
* testsuite/30_threads/stop_token/stop_callback/destroy.cc:
Disable for all targets.

3 years agolibstdc++: Refactor/cleanup of C++20 atomic wait implementation
Thomas Rodgers [Tue, 20 Apr 2021 10:54:27 +0000 (11:54 +0100)]
libstdc++: Refactor/cleanup of C++20 atomic wait implementation

This is a substantial rewrite of the atomic wait/notify (and timed wait
counterparts) implementation.

The previous __platform_wait looped on EINTR however this behavior is
not required by the standard. A new _GLIBCXX_HAVE_PLATFORM_WAIT macro
now controls whether wait/notify are implemented using a platform
specific primitive or with a platform agnostic mutex/condvar. This
patch only supplies a definition for linux futexes. A future update
could add support __ulock_wait/wake on Darwin, for instance.

The members of __waiters were lifted to a new base class. The members
are now arranged such that overall sizeof(__waiter_pool_base) fits in
two cache lines (on platforms with at least 64 byte cache lines). The
definition will also use destructive_interference_size for this if it is
available.

The __waiters type is now specific to untimed waits, and is renamed to
__waiter_pool. Timed waits have a corresponding __timed_waiter_pool
type.  Much of the code has been moved from the previous __atomic_wait()
free function to the __waiter_base template and a __waiter derived type
is provided to implement the un-timed wait operations. A similar change
has been made to the timed wait implementation.

The __atomic_spin code has been extended to take a spin policy which is
invoked after the initial busy wait loop. The default policy is to
return from the spin. The timed wait code adds a timed backoff spinning
policy. The code from <thread> which implements this_thread::sleep_for,
sleep_until has been moved to a new <bits/std_thread_sleep.h> header
which allows the thread sleep code to be consumed without pulling in the
whole of <thread>.

The entry points into the wait/notify code have been restructured to
support either -
   * Testing the current value of the atomic stored at the given address
     and waiting on a notification.
   * Applying a predicate to determine if the wait was satisfied.
The entry points were renamed to make it clear that the wait and wake
operations operate on addresses. The first variant takes the expected
value and a function which returns the current value that should be used
in comparison operations, these operations are named with a _v suffix
(e.g. 'value'). All atomic<_Tp> wait/notify operations use the first
variant. Barriers, latches and semaphores use the predicate variant.

This change also centralizes what it means to compare values for the
purposes of atomic<T>::wait rather than scattering through individual
predicates.

This change also centralizes the repetitive code which adjusts for
different user supplied clocks (this should be moved elsewhere
and all such adjustments should use a common implementation).

This change also removes the hashing of the pointer and uses
the pointer value directly for indexing into the waiters table.

libstdc++-v3/ChangeLog:

* include/Makefile.am: Add new <bits/this_thread_sleep.h> header.
* include/Makefile.in: Regenerate.
* include/bits/this_thread_sleep.h: New file.
* include/bits/atomic_base.h: Adjust all calls
to __atomic_wait/__atomic_notify for new call signatures.
* include/bits/atomic_timed_wait.h: Extensive rewrite.
* include/bits/atomic_wait.h: Likewise.
* include/bits/semaphore_base.h: Adjust all calls
to __atomic_wait/__atomic_notify for new call signatures.
* include/std/atomic: Likewise.
* include/std/barrier: Likewise.
* include/std/latch: Likewise.
* include/std/semaphore: Likewise.
* include/std/thread (this_thread::sleep_for)
(this_thread::sleep_until): Move to new header.
* testsuite/29_atomics/atomic/wait_notify/bool.cc: Simplify
test.
* testsuite/29_atomics/atomic/wait_notify/generic.cc: Likewise.
* testsuite/29_atomics/atomic/wait_notify/pointers.cc: Likewise.
* testsuite/29_atomics/atomic_flag/wait_notify/1.cc: Likewise.
* testsuite/29_atomics/atomic_float/wait_notify.cc: Likewise.
* testsuite/29_atomics/atomic_integral/wait_notify.cc: Likewise.
* testsuite/29_atomics/atomic_ref/wait_notify.cc: Likewise.

3 years agors6000: Fix cpu selection w/ isel (PR100108)
Segher Boessenkool [Tue, 20 Apr 2021 12:00:50 +0000 (12:00 +0000)]
rs6000: Fix cpu selection w/ isel (PR100108)

There are various non-IBM CPUs with isel as well, so it is easiest if we
just don't consider that flag here (it is not needed).

2021-04-20  Segher Boessenkool  <segher@kernel.crashing.org>

PR target/100108
* config/rs6000/rs6000.c (rs6000_machine_from_flags): Do not consider
OPTION_MASK_ISEL.

3 years agolibstdc++: Implement P2259R1 changes [PR95983]
Patrick Palka [Tue, 20 Apr 2021 13:18:50 +0000 (09:18 -0400)]
libstdc++: Implement P2259R1 changes [PR95983]

This implements the wording changes of P2259R1 "Repairing input range
adaptors and counted_iterator", which resolves LWG 3283, 3289 and 3408.

The wording changes are relatively straightforward, but they require
some boilerplate to implement: the changes to make a type alias
"conditionally present" in some iterator class are realized by defining
a base class template and an appropriately constrained partial
specialization thereof that contains the type alias, and having the
iterator class derive from this base class.  Sometimes the relevant
condition depend on members from the iterator class, but because a
class is incomplete when instantiating its bases, the constraints on
the partial specialization can't use anything from the iterator class.
This patch works around this by hoisting these members out to the
enclosing scope (e.g. transform_view::_Iterator::_Base is hoisted out
to transform_view::_Base so that transform_view::__iter_cat can use it).

This patch also implements the proposed resolution of LWG 3291 to rename
iota_view::iterator_category to iota_view::iterator_concept, which was
previously problematic due to LWG 3408.

libstdc++-v3/ChangeLog:

PR libstdc++/95983
* include/bits/stl_iterator.h (__detail::__move_iter_cat):
Define.
(move_iterator): Derive from the above in C++20 in order to
conditionally define iterator_category as per P2259.
(move_iterator::__base_cat): No longer used, so remove.
(move_iterator::iterator_category): Remove in C++20.
(__detail::__common_iter_use_postfix_proxy): Define.
(common_iterator::_Proxy): Rename to ...
(common_iterator:__arrow_proxy): ... this.
(common_iterator::__postfix_proxy): Define as per P2259.
(common_iterator::operator->): Adjust.
(common_iterator::operator++): Adjust as per P2259.
(iterator_traits<common_iterator>::_S_iter_cat): Define.
(iterator_traits<common_iterator>::iterator_category): Change as
per P2259.
(__detail::__counted_iter_value_type): Define.
(__detail::__counted_iter_concept): Define.
(__detail::__counted_iter_cat): Define.
(counted_iterator): Derive from the above three classes in order
to conditionally define value_type, iterator_concept and
iterator category respectively as per P2259.
(counted_iterator::operator->): Define as per P2259.
(incrementable_traits<counted_iterator>): Remove as per P2259.
(iterator_traits<counted_iterator>): Adjust as per P2259.
* include/std/ranges (__detail::__iota_view_iter_cat): Define.
(iota_view::_Iterator): Derive from the above in order to
conditionally define iterator_category as per P2259.
(iota_view::_S_iter_cat): Rename to ...
(iota_view::_S_iter_concept): ... this.
(iota_view::iterator_concept): Use it to apply LWG 3291 changes.
(iota_view::iterator_category): Remove.
(__detail::__filter_view_iter_cat): Define.
(filter_view::_Iterator): Derive from the above in order to
conditionally define iterator_category as per P2259.
(filter_view::_Iterator): Move to struct __filter_view_iter_cat.
(filter_view::_Iterator::iterator_category): Remove.
(transform_view::_Base): Define.
(transform_view::__iter_cat): Define.
(transform_view::_Iterator): Derive from the above in order to
conditionally define iterator_category as per P2259.
(transform_view::_Iterator::_Base): Just alias
transform_view::_Base.
(transform_view::_Iterator::_S_iter_cat): Move to struct
transform_view::__iter_cat.
(transform_view::_Iterator::iterator_category): Remove.
(transform_view::_Sentinel::_Base): Just alias
transform_view::_Base.
(join_view::_Base): Define.
(join_view::_Outer_iter): Define.
(join_view::_Inner_iter): Define.
(join_view::_S_ref_is_glvalue): Define.
(join_view::__iter_cat): Define.
(join_view::_Iterator): Derive from it in order to conditionally
define iterator_category as per P2259.
(join_view::_Iterator::_Base): Just alias join_view::_Base.
(join_view::_Iterator::_S_ref_is_glvalue): Just alias
join_view::_S_ref_is_glvalue.
(join_view::_Iterator::_S_iter_cat): Move to struct
transform_view::__iter_cat.
(join_view::_Iterator::_Outer_iter): Just alias
join_view::_Outer_iter.
(join_view::_Iterator::_Inner_iter): Just alias
join_view::_Inner_iter.
(join_view::_Iterator::iterator_category): Remove.
(join_view::_Sentinel::_Base): Just alias join_view::_Base.
(__detail::__split_view_outer_iter_cat): Define.
(__detail::__split_view_inner_iter_cat): Define.
(split_view::_Base): Define.
(split_view::_Outer_iter): Derive from __split_view_outer_iter_cat
in order to conditionally define iterator_category as per P2259.
(split_view::_Outer_iter::iterator_category): Remove.
(split_view::_Inner_iter): Derive from __split_view_inner_iter_cat
in order to conditionally define iterator_category as per P2259.
(split_view::_Inner_iter::_S_iter_cat): Move to
__split_view_inner_iter_cat.
(split_view::_Inner_iter::iterator_category): Remove.
(elements_view::_Base): Define.
(elements_view::__iter_cat): Define.
(elements_view::_Iterator): Derive from the above in order to
conditionall define iterator_category as per P2259.
(elements_view::_Iterator::_Base): Just alias
elements_view::_Base.
(elements_view::_Iterator::_S_iter_concept)
(elements_view::_Iterator::iterator_concept): Define as per
P2259.
(elements_view::_Iterator::iterator_category): Remove.
(elements_view::_Sentinel::_Base): Just alias
elements_view::_Base.
* testsuite/24_iterators/headers/iterator/synopsis_c++20.cc:
Adjust constraints on iterator_traits<counted_iterator>.
* testsuite/std/ranges/p2259.cc: New test.

3 years agoc++: unexpanded pack in enum in lambda [PR100109]
Jason Merrill [Tue, 20 Apr 2021 04:50:49 +0000 (00:50 -0400)]
c++: unexpanded pack in enum in lambda [PR100109]

Another construct we need to look inside.

gcc/cp/ChangeLog:

PR c++/100109
* pt.c (find_parameter_packs_r): Look into enum initializers.

gcc/testsuite/ChangeLog:

PR c++/100109
* g++.dg/cpp0x/lambda/lambda-variadic14.C: New test.

3 years agolibstdc++: Define __cpp_lib_to_chars for C++20 [PR 100146]
Jonathan Wakely [Tue, 20 Apr 2021 11:46:11 +0000 (12:46 +0100)]
libstdc++: Define __cpp_lib_to_chars for C++20 [PR 100146]

This defines the feature test macro when uselocale is available, because
the floating-point std::from_chars support currently depends on that.

Co-authored-by: Jakub Jelinek <jakub@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/100146
* include/std/charconv (__cpp_lib_to_chars): Define
conditionally.
* include/std/version (__cpp_lib_to_chars): Likewise..
* testsuite/20_util/from_chars/4.cc: Only check feature test
macro, not _GLIBCXX_HAVE_USELOCALE.
* testsuite/20_util/from_chars/5.cc: Likewise.
* testsuite/20_util/from_chars/6.cc: Likewise.
* testsuite/20_util/to_chars/long_double.cc: Likewise.

3 years agolibstdc++: Update ppc64le baseline_symbols.txt
Jakub Jelinek [Tue, 20 Apr 2021 10:48:12 +0000 (12:48 +0200)]
libstdc++: Update ppc64le baseline_symbols.txt

> Tested on powerpc64{,le}-linux now (-m32/-m64 on be) and while the first
> patch works fine, the second one unfortunately doesn't on either be or le,
> so more work is needed there.

Here are the needed changes to make it work.
For symbols with _LDBL_ substring in version name we already have code to
ignore those if no such symbols appear (but it is slightly incorrect, see
below).
So, this patch does the same thing for symbol versions with _IEEE128_
substring.
The previously incorrectly handled case is that in addition to
FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29
or
OBJECT:12:_ZTSu9__ieee128@@CXXABI_IEEE128_1.3.13
cases we also have the
OBJECT:0:CXXABI_IEEE128_1.3.13
OBJECT:0:GLIBCXX_IEEE128_3.4.29
cases, which have empty version_name and the name is in that case the
symbol version.  Those need to be ignored too.

2021-04-20  Jakub Jelinek  <jakub@redhat.com>

* testsuite/util/testsuite_abi.cc (compare_symbols): If any symbol
versions with _IEEE128_ substring are found, set ieee_version_found
to true.  Ignore missing symbols with _IEEE128_ in version name if
!ieee_version_found.  Use i->first as version_name instead of
i->second.version_name if the latter is empty.
* config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update.

3 years agoFix typo in param description.
Martin Liska [Tue, 20 Apr 2021 10:10:20 +0000 (12:10 +0200)]
Fix typo in param description.

gcc/ChangeLog:

* doc/invoke.texi: Fix typo.
* params.opt: Likewise.

3 years agoBump version to 12.
Martin Liska [Tue, 20 Apr 2021 09:43:51 +0000 (11:43 +0200)]
Bump version to 12.

gcc/ada/ChangeLog:

* gnatvsn.ads: Bump Library_Version to 12.

3 years agoDocument ranger-logical-depth in invoke.texi
Martin Liska [Tue, 20 Apr 2021 08:59:47 +0000 (10:59 +0200)]
Document ranger-logical-depth in invoke.texi

gcc/ChangeLog:

* doc/invoke.texi: Document new param.

3 years agoUpdate crontab and git_update_version.py
Jakub Jelinek [Tue, 20 Apr 2021 08:50:22 +0000 (10:50 +0200)]
Update crontab and git_update_version.py

2021-04-20  Jakub Jelinek  <jakub@redhat.com>

maintainer-scripts/
* crontab: Snapshots from trunk are now GCC 12 related.
Add GCC 11 snapshots from the respective branch.
contrib/
* gcc-changelog/git_update_version.py (active_refs): Add
releases/gcc-11.

3 years agoBump BASE-VER.
Jakub Jelinek [Tue, 20 Apr 2021 08:26:12 +0000 (10:26 +0200)]
Bump BASE-VER.

2021-04-20  Jakub Jelinek  <jakub@redhat.com>

* BASE-VER: Set to 11.0.0.