]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
3 years agoi386: Fix wrong optimization for consecutive masked scatters [PR 101472]
konglin1 [Mon, 9 Aug 2021 03:37:52 +0000 (11:37 +0800)] 
i386: Fix wrong optimization for consecutive masked scatters [PR 101472]

gcc/ChangeLog:

PR target/101472
* config/i386/sse.md: (<avx512>scattersi<mode>): Add mask operand to
UNSPEC_VSIBADDR.
(<avx512>scattersi<mode>): Likewise.
(*avx512f_scattersi<VI48F:mode>): Merge mask operand to set_dest.
(*avx512f_scatterdi<VI48F:mode>): Likewise

gcc/testsuite/ChangeLog:

PR target/101472
* gcc.target/i386/avx512f-pr101472.c: New test.
* gcc.target/i386/avx512vl-pr101472.c: New test.

3 years agoDaily bump.
GCC Administrator [Fri, 27 Aug 2021 00:18:01 +0000 (00:18 +0000)] 
Daily bump.

3 years agoFortran: fix pointless warning for static variables
Harald Anlauf [Tue, 24 Aug 2021 19:07:50 +0000 (21:07 +0200)] 
Fortran: fix pointless warning for static variables

gcc/fortran/ChangeLog:

PR fortran/98411
* trans-decl.c (gfc_finish_var_decl): Adjust check to handle
implicit SAVE as well as variables in the main program.  Improve
warning message text.

gcc/testsuite/ChangeLog:

PR fortran/98411
* gfortran.dg/pr98411.f90: Adjust testcase options to restrict to
F2008, and verify case of implicit SAVE.

(cherry picked from commit f95946afd160e2a1f4beac4ee5e6d5633307f39a)

3 years agoDaily bump.
GCC Administrator [Thu, 26 Aug 2021 00:18:46 +0000 (00:18 +0000)] 
Daily bump.

3 years agodiagnostics: Fix sporadic test failure
Bernd Edlinger [Fri, 28 May 2021 12:26:02 +0000 (14:26 +0200)] 
diagnostics: Fix sporadic test failure

it turns out to be reproducible this way:

COLUMNS=80 make check-gcc-c RUNTESTFLAGS="plugin.exp=diagnostic*"

Running /home/ed/gnu/gcc-trunk/gcc/testsuite/gcc.dg/plugin/plugin.exp ...
FAIL: gcc.dg/plugin/diagnostic-test-expressions-1.c
 -fplugin=./diagnostic_plugin_test_tree_expression_range.so  1 blank line(s) in output
FAIL: gcc.dg/plugin/diagnostic-test-expressions-1.c
 -fplugin=./diagnostic_plugin_test_tree_expression_range.so  expected multiline pattern lines 550-551 not found: "                            __builtin_types_compatible_p \(long, int\) \+ f \(i\)\);.*\n                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\^~~~~~~\n"
FAIL: gcc.dg/plugin/diagnostic-test-expressions-1.c
 -fplugin=./diagnostic_plugin_test_tree_expression_range.so (test for excess errors)

a lot more errors happen with COLUMNS=20.

2021-05-29  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* gcc.dg/plugin/diagnostic_plugin_show_trees.c (plugin_init): Fix caret_max_with.
* gcc.dg/plugin/diagnostic_plugin_test_inlining.c
(plugin_init): Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_paths.c (plugin_init): Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_string_literals.c
(plugin_init): Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c
(plugin_init): Likewise.

(cherry picked from commit ade5ac7c7966c8e88a25f448fa737457364935a4)

3 years ago<x86gprintrin.h>: Add pragma GCC target("general-regs-only")
H.J. Lu [Sat, 17 Jul 2021 14:44:45 +0000 (07:44 -0700)] 
<x86gprintrin.h>: Add pragma GCC target("general-regs-only")

1. Intrinsics in <x86gprintrin.h> only require GPR ISAs.  Add

 #if defined __MMX__ || defined __SSE__
 #pragma GCC push_options
 #pragma GCC target("general-regs-only")
 #define __DISABLE_GENERAL_REGS_ONLY__
 #endif

and

 #ifdef __DISABLE_GENERAL_REGS_ONLY__
 #undef __DISABLE_GENERAL_REGS_ONLY__
 #pragma GCC pop_options
 #endif /* __DISABLE_GENERAL_REGS_ONLY__ */

to <x86gprintrin.h> to disable non-GPR ISAs so that they can be used in
functions with __attribute__ ((target("general-regs-only"))).
2. When checking always_inline attribute, if callee only uses GPRs,
ignore MASK_80387 since enable MASK_80387 in caller has no impact on
callee inline.

gcc/

PR target/99744
* config/i386/i386.c (ix86_can_inline_p): Ignore MASK_80387 if
callee only uses GPRs.
* config/i386/ia32intrin.h: Revert commit 5463cee2770.
* config/i386/serializeintrin.h: Revert commit 71958f740f1.
* config/i386/x86gprintrin.h: Add
#pragma GCC target("general-regs-only") and #pragma GCC pop_options
to disable non-GPR ISAs.

gcc/testsuite/

PR target/99744
* gcc.target/i386/pr99744-3.c: New test.
* gcc.target/i386/pr99744-4.c: Likewise.
* gcc.target/i386/pr99744-5.c: Likewise.
* gcc.target/i386/pr99744-6.c: Likewise.
* gcc.target/i386/pr99744-7.c: Likewise.
* gcc.target/i386/pr99744-8.c: Likewise.

(cherry picked from commit 72264a639729a5dcc21dbee304717ce22b338bfd)

3 years agox86: Enable the GPR only instructions for -mgeneral-regs-only
H.J. Lu [Sat, 17 Jul 2021 21:38:39 +0000 (14:38 -0700)] 
x86: Enable the GPR only instructions for -mgeneral-regs-only

For -mgeneral-regs-only, enable the GPR only instructions which are
enabled implicitly by SSE ISAs unless they have been disabled explicitly.

gcc/

PR target/101492
* common/config/i386/i386-common.c (ix86_handle_option): For
-mgeneral-regs-only, enable the GPR only instructions which are
enabled implicitly by SSE ISAs unless they have been disabled
explicitly.

gcc/testsuite/

PR target/101492
* gcc.target/i386/pr101492-1.c: New test.
* gcc.target/i386/pr101492-2.c: Likewise.
* gcc.target/i386/pr101492-3.c: Likewise.
* gcc.target/i386/pr101492-4.c: Likewise.

(cherry picked from commit 6ae8aac19cdbdbd96d90f86e4d8505fe121bdf06)

3 years agox86: Remove OPTION_MASK_ISA_SSE4_2 from CRC32 _builtin functions
H.J. Lu [Wed, 21 Jul 2021 12:15:55 +0000 (05:15 -0700)] 
x86: Remove OPTION_MASK_ISA_SSE4_2 from CRC32 _builtin functions

Since

commit 39671f87b2df6a1894cc11a161e4a7949d1ddccd
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Apr 15 05:59:48 2021 -0700

    x86: Use crc32 target option for CRC32 intrinsics

enabled OPTION_MASK_ISA_CRC32 for -msse4 and removed TARGET_SSE4_2 check
in sse4_2_crc32<mode> pattens, remove OPTION_MASK_ISA_SSE4_2 from CRC32
_builtin functions.

gcc/

PR target/101549
* config/i386/i386-builtin.def: Remove OPTION_MASK_ISA_SSE4_2
from CRC32 _builtin functions.

gcc/testsuite/

PR target/101549
* gcc.target/i386/crc32-6.c: New test.

(cherry picked from commit 7aa28dbc371cf3c09c05c68672b00d9006391595)

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.

(cherry picked from commit 39671f87b2df6a1894cc11a161e4a7949d1ddccd)

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.
* lto-streamer.h (LTO_minor_version): Bump.
* 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.

(cherry picked from commit d8c6cc2ca35489bc41bb58ec96c1195928826922)

3 years agoi386: Fix _mm512_fpclass_ps_mask in O0 [PR 101471]
konglin1 [Mon, 9 Aug 2021 02:58:24 +0000 (10:58 +0800)] 
i386: Fix _mm512_fpclass_ps_mask in O0 [PR 101471]

gcc/ChangeLog:

PR target/101471
* config/i386/avx512dqintrin.h (_mm512_fpclass_ps_mask): Fix
macro define in O0.
(_mm512_mask_fpclass_ps_mask): Ditto.

gcc/testsuite/ChangeLog:

PR target/101471
* gcc.target/i386/avx512f-pr101471.c: New test.

3 years agoDaily bump.
GCC Administrator [Wed, 25 Aug 2021 00:18:39 +0000 (00:18 +0000)] 
Daily bump.

3 years agolibstdc++: Don't check always-true condition [PR101965]
Jonathan Wakely [Thu, 19 Aug 2021 12:05:54 +0000 (13:05 +0100)] 
libstdc++: Don't check always-true condition [PR101965]

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/101965
* include/std/charconv (__to_chars_i): Remove redundant check.

(cherry picked from commit 85a709595005b5df4b2ee9d81717a5df19c0023f)

3 years agolibstdc++: Test std::seed_seq construction from input iterators
Jonathan Wakely [Tue, 17 Aug 2021 13:18:58 +0000 (14:18 +0100)] 
libstdc++: Test std::seed_seq construction from input iterators

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* testsuite/26_numerics/random/seed_seq/cons/range.cc: Check
construction from input iterators.

(cherry picked from commit 20698ec5b681e23fa3404ed0ef78e3367b28e16d)

3 years agolibstdc++: Restore __gnu_debug::array [PR100682]
Jonathan Wakely [Thu, 22 Jul 2021 10:45:32 +0000 (11:45 +0100)] 
libstdc++: Restore __gnu_debug::array [PR100682]

As the PR points out, we removed the debug version of std::array without
any period of deprecation. Although std::array contains all the actual
debug checks now, removing the <debug/arrray> header breaks any code
that was using that explicitly. The manual still lists doing that as
supported.

This restores the <debug/array> header, but simply defines
__gnu_debug::array as an alias for std::array, and declares the alias
with the deprecated attribute. The docs are updated to match.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/100682
* doc/xml/manual/debug_mode.xml: Update documentation about
debug capability of std::array.
* doc/html/*: Regenerate.
* include/debug/array: New file.

(cherry picked from commit 254e5d19a177af23a77b67fd51d0d1a25eaabfc7)

3 years agolibstdc++: Only define basic_string::contains for C++23
Jonathan Wakely [Mon, 16 Aug 2021 19:42:54 +0000 (20:42 +0100)] 
libstdc++: Only define basic_string::contains for C++23

The new contains member of the COW string is defined for non-strict
gnu++20 mode as well as for C++23 modes. I think that was left in the
committed patch unintentionally. It is inconsistent with the SSO string,
and doesn't actually compile because it uses the
basic_string_view::contains member which only defined for C++23.

This makes it only defined for C++23.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/basic_string.h (basic_string::contains): Do not
define for -std=gnu++20.

(cherry picked from commit 3b3f2f7c265ef9f176cb811a8049b24538d954d9)

3 years agolibstdc++: Add missing headers for errno and std::terminate
Jonathan Wakely [Mon, 26 Apr 2021 11:28:37 +0000 (12:28 +0100)] 
libstdc++: Add missing headers for errno and std::terminate

libstdc++-v3/ChangeLog:

* include/bits/semaphore_base.h: Include <exception> and <errno.h>.

(cherry picked from commit a38b1a59f8eb6f41a885f8a7c8838378be717b02)

3 years agolibstdc++: Implement LWG 3422 for std::seed_seq
Jonathan Wakely [Tue, 22 Jun 2021 17:05:11 +0000 (18:05 +0100)] 
libstdc++: Implement LWG 3422 for std::seed_seq

This ensures that the std::seed_seq initializer-list constructor will
not be used for list-initialization unless the initializers in the list
are integers. This allows list-initialization syntax to be used with a
pair of pointers and for that to use the appropriate constructor.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/random.h (seed_seq): Constrain initializer-list
constructor.
* include/bits/random.tcc (seed_seq): Add template parameter.
* testsuite/26_numerics/random/seed_seq/cons/default.cc: Check
for noexcept.
* testsuite/26_numerics/random/seed_seq/cons/initlist.cc: Check
constraints.

(cherry picked from commit 6c63cb231e4cf99552bb7904ebe402f7adcafda4)

3 years agolibstdc++: Use <sys/socket.h> features conditionally [PR 100285]
Jonathan Wakely [Fri, 30 Apr 2021 13:25:25 +0000 (14:25 +0100)] 
libstdc++: Use <sys/socket.h> features conditionally [PR 100285]

This makes the uses of getsockopt and setsockopt in
<experimental/socket> conditional on the availability of <sys/socket.h>.

It also fixes a test to check for <sys/socket.h> instead of <socket.h>.

libstdc++-v3/ChangeLog:

PR libstdc++/100285
* include/experimental/socket (__basic_socket_impl::set_option)
(__basic_socket_impl::get_option) [!_GLIBCXX_HAVE_SYS_SOCKET_H]:
Just set error code.
* testsuite/experimental/net/socket/socket_base.cc: CHeck
for <sys/socket.h> not <socket.h>.

(cherry picked from commit 0d501c338548152f9d2728d383eec3e9cef16784)

3 years agolibstdc++: Define effective-target for net::ip features [PR 100351]
Jonathan Wakely [Fri, 30 Apr 2021 10:45:07 +0000 (11:45 +0100)] 
libstdc++: Define effective-target for net::ip features [PR 100351]

Define a new effective-target keyword so that tests for the Networking
TS <experimental/internet> header can be skipped on targets where none
of it can be usefully defined.

libstdc++-v3/ChangeLog:

PR libstdc++/100180
PR libstdc++/100286
PR libstdc++/100351
* testsuite/experimental/net/internet/address/v4/comparisons.cc:
Use new effective-target keyword.
* testsuite/experimental/net/internet/address/v4/cons.cc:
Likewise.
* testsuite/experimental/net/internet/address/v4/creation.cc:
Likewise.
* testsuite/experimental/net/internet/address/v4/members.cc:
Likewise.
* testsuite/experimental/net/internet/address/v6/members.cc:
Likewise.
* testsuite/experimental/net/internet/resolver/base.cc:
Likewise.
* testsuite/experimental/net/internet/resolver/ops/lookup.cc:
Likewise.
* testsuite/experimental/net/internet/resolver/ops/reverse.cc:
Likewise.
* testsuite/experimental/net/internet/socket/opt.cc:
Likewise.
* testsuite/experimental/net/internet/tcp.cc:
Likewise.
* testsuite/experimental/net/internet/udp.cc:
Likewise.
* testsuite/lib/libstdc++.exp (check_effective_target_net_ts_ip):
New proc to check net_ts_ip et.

(cherry picked from commit 57028ff2d3f56deec25498f83e99c39478acc02f)

3 years agolibstdc++: Minor refactoring in <experimental/internet>
Jonathan Wakely [Tue, 27 Apr 2021 12:43:23 +0000 (13:43 +0100)] 
libstdc++: Minor refactoring in <experimental/internet>

libstdc++-v3/ChangeLog:

* include/experimental/internet (address_v6::bytes_type): Adjust
formatting.
(basic_endpoint): Define _M_is_v6() to put all checks for
AF_INET6 in one place.
(basic_endpoint::resize): Simplify.
(operator==(const tcp&, const tcp&)): Add constexpr and noexcept.
(operator!=(const tcp&, const tcp&)): Likewise.
(operator==(const udp&, const udp&)): Likewise.
(operator!=(const udp&, const udp&)): Likewise.
* testsuite/experimental/net/internet/tcp.cc: New test.
* testsuite/experimental/net/internet/udp.cc: New test.

(cherry picked from commit 39073938b4e85fdbdc897c32e56fb5fc59ded9b5)

3 years agolibstdc++: Better preprocessor conditions in net::ip [PR 100286]
Jonathan Wakely [Tue, 27 Apr 2021 12:06:43 +0000 (13:06 +0100)] 
libstdc++: Better preprocessor conditions in net::ip [PR 100286]

This improves the use of preprocessor conditionas to enable/disable
members of namespace net::ip according to what is supported by the
target. This fixes PR 100286 by ensuring that the to_string member
functions are always defined for the address_v4 and address_v6 classes.
On the other hand, the IP protocol classes and internet socket option
classes aren't useful at all if the corresponding constants (such as
IPPROTO_TCP or IPV6_MULTICAST_HOPS) aren't define. So those types are
not defined at all if they can't be used.

The net/internet/socket/opt.cc test uses __has_include to check whether
or not to expect the types to be available.

libstdc++-v3/ChangeLog:

PR libstdc++/100286
* include/experimental/internet (resolver_errc, resolver_category())
(make_error_code, make_error_condition): Define unconditionally,
only make enumerators and use of gai_strerror depend on the
availability of <netdb.h>.
(address_v4::to_string): Use correct constant for string length.
(address_v4::to_string, address_v6::to_string): Define
unconditionally, throw if unsupported.
(make_address_v4, make_address_v6): Define unconditionally.
Return an error if unsupported.
(tcp, udp, v6_only, unicast::hops, multicast::*): Define
conditionally,
* testsuite/experimental/net/internet/socket/opt.cc: Check for
<netinet/in.h> and <netinet/tcp.h> before using types from
namespace net::ip.

(cherry picked from commit 9ee35a8685ee174c6914059143aceb7009d3e920)

3 years agolibstdc++: Define net::socket_base::message_flags operators as friends [PR 100285]
Jonathan Wakely [Tue, 27 Apr 2021 10:07:47 +0000 (11:07 +0100)] 
libstdc++: Define net::socket_base::message_flags operators as friends [PR 100285]

The overloaded operators for socket_base::message_flags should only be
defined when the message_flags type itself is defined. Rather than
duplicate the preprocessor conditional, this moves the operators into
the same scope as the type, defining them as hidden friends.

As well as fixing the bug, this has all the usual advantages of hidden
friends (they are not visible to normal name lookup for unrelated
types).

For consistency, do the same for the resolver_base::flags bitmask
operators too.

libstdc++-v3/ChangeLog:

PR libstdc++/100285
* include/experimental/internet (resolver_base::flags):
Define overloaded operators as hidden friends.
* include/experimental/socket (socket_base::message_flags):
Likewise.

(cherry picked from commit 8aadb4fedb17e7a44583a7a5a4e96b1874e1ce98)

3 years agolibstdc++: Fix internet socket option classes
Jonathan Wakely [Mon, 26 Apr 2021 20:16:21 +0000 (21:16 +0100)] 
libstdc++: Fix internet socket option classes

Similar to the previous commit, this fixes various problems with the
socket options classes in the <internet> header:

- The constructors were not noexcept.
- The __sockopt_base<T>::value() member function was present
  unconditionally (so was defined for socket_base::linger which is
  incorrect).
- The __socket_crtp<C, T>::operator=(T) assignment operator was not
  noexcept, and was hidden in the derived classes.
- The MulticastSocketOptions incorrectly used a union, incorrectly
  defined resize and const data() member functions, and their
  constructors were unimplemented.

Also, where appropriate:

- Use class instead of struct for the socket option types.
- Define the _S_level and _S_name constants as private.
- Declare the __socket_crtp base as a friend.

libstdc++-v3/ChangeLog:

* include/experimental/internet (tcp::no_delay, v6_only)
(unicast::hops, multicast::hops, multicast::enable_loopback):
Change access of base class and static data members. Add
using-declaration for __socket_crtp::operator=(_Tp).
(multicast::__mcastopt): New type.
(multicast::join_group, multicast::leave_group): Derive from
__mcastopt for common implementation.
* include/experimental/socket: Add comment.
* testsuite/experimental/net/internet/socket/opt.cc: New test.
* testsuite/experimental/net/socket/socket_base.cc: Check for
protected constructor/destructor of socket_base. Check for
explicit constructors of socket option classes.

(cherry picked from commit 2e0b1c6ce3afe0670b96444c6b955ce184ed0046)

3 years agolibstdc++: Fix socket option classes
Jonathan Wakely [Mon, 26 Apr 2021 20:16:21 +0000 (21:16 +0100)] 
libstdc++: Fix socket option classes

This fixes some flaws in the socket option types defined in
net::socket_base:

- The constructors were not noexcept.
- The __sockopt_base<T>::value() member function was present
  unconditionally (so was defined for socket_base::linger which is
  incorrect).
- The __socket_crtp<C, T>::operator=(T) assignment operator was not
  noexcept, and was hidden in the derived classes.

Also:

- Use class instead of struct for the socket option types.
- Define the _S_level and _S_name constants as private.
- Declare the __socket_crtp base as a friend.

libstdc++-v3/ChangeLog:

* include/experimental/bits/net.h (__socket_base): Add
bool template parameter to allow BooleanSocketOption and
IntegerSocketOption to have different __socket_base<int>
base classes.
(__socket_base<bool>): Adjust base class.
(__socket_base<int>): Add partial specialization.
(__socket_crtp::operator=(_Tp)): Add noexcept-specifier.
* include/experimental/socket (socket_base::broadcast)
(socket_base::debug, socket_base::do_not_route)
(socket_base::keep_alive, socket_base::linger)
(socket_base::out_of_band_inline)
(socket_base::receive_buffer_size)
(socket_base::receive_low_watermark)
(socket_base::reuse_address, socket_base::send_buffer_size)
(socket_base::send_low_watermark): Add using-declaration for
__socket_crtp::operator=(_Tp).
* testsuite/experimental/net/socket/socket_base.cc: Check
properties of socket option types.

(cherry picked from commit 06c86a4f210c76a157512a2963e6c31302d161cb)

3 years agolibstdc++: Simplify definition of net::ip::resolver_base constants
Jonathan Wakely [Mon, 26 Apr 2021 20:16:20 +0000 (21:16 +0100)] 
libstdc++: Simplify definition of net::ip::resolver_base constants

libstdc++-v3/ChangeLog:

* include/experimental/internet (resolver_base::flags): Remove
enumerators. Initialize constants directly with desired values.
Make all operators constexpr and noexcept.
* testsuite/experimental/net/internet/resolver/base.cc: Use
__gnu_test::test_bitmask_values for bitmask type. Check
construction and destruction is protected.

(cherry picked from commit 49adc066729bda093b0658e3926bbf64cd4628b3)

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.

(cherry picked from commit 0e1e7b77904f1fe2a6dbfe84bb4fc026584ba480)

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.

(cherry picked from commit 3517dfe05c05a48885149334143230fcf0ebe6be)

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.

(cherry picked from commit a752a43073dc49909c017fd52feacd7526ed31c0)

3 years agoarm: Add tests for VLLDM mitigation [PR102035]
Richard Earnshaw [Tue, 6 Jul 2021 14:10:18 +0000 (15:10 +0100)] 
arm: Add tests for VLLDM mitigation [PR102035]

New tests for the erratum mitigation.

gcc/testsuite:
PR target/102035
* gcc.target/arm/cmse/mainline/8_1m/soft/cmse-13a.c: New test.
* gcc.target/arm/cmse/mainline/8_1m/soft/cmse-7a.c: Likewise.
* gcc.target/arm/cmse/mainline/8_1m/soft/cmse-8a.c: Likewise.
* gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-7a.c: Likewise.
* gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-8a.c: Likewise.
* gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-13a.c: Likewise.
* gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-7a.c: Likewise.
* gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-8a.c: Likewise.

(cherry picked from commit 809330ab8450261e05919b472783bf15e4b000f7)

3 years agoarm: fix vlldm erratum for Armv8.1-m [PR102035]
Richard Earnshaw [Fri, 18 Jun 2021 16:18:37 +0000 (17:18 +0100)] 
arm: fix vlldm erratum for Armv8.1-m [PR102035]

For Armv8.1-m we generate code that emits VLLDM directly and do not
rely on support code in the library, so emit the mitigation directly
as well, when required.  In this case, we can use the compiler options
to determine when to apply the fix and when it is safe to omit it.

gcc:
PR target/102035
* config/arm/arm.md (attribute arch): Add fix_vlldm.
(arch_enabled): Use it.
* config/arm/vfp.md (lazy_store_multiple_insn): Add alternative to
use when erratum mitigation is needed.
(cherry picked from commit 30461cf8dba3d3adb15a125e4da48800eb2b9b8f)

3 years agoarm: add erratum mitigation to __gnu_cmse_nonsecure_call [PR102035]
Richard Earnshaw [Fri, 18 Jun 2021 16:16:25 +0000 (17:16 +0100)] 
arm: add erratum mitigation to __gnu_cmse_nonsecure_call [PR102035]

Add the recommended erratum mitigation sequence to
__gnu_cmse_nonsecure_call for use on Armv8-m.main devices. Since this
is in the library code we cannot know in advance whether the core we
are running on will be affected by this, so always enable it.

libgcc:
PR target/102035
* config/arm/cmse_nonsecure_call.S (__gnu_cmse_nonsecure_call):
Add vlldm erratum work-around.
(cherry picked from commit 574e7950bd6b34e9e2cacce18c802b45505d1d0a)

3 years agoarm: Add command-line option for enabling CVE-2021-35465 mitigation [PR102035]
Richard Earnshaw [Fri, 11 Jun 2021 15:02:05 +0000 (16:02 +0100)] 
arm: Add command-line option for enabling CVE-2021-35465 mitigation [PR102035]

Add a new option, -mfix-cmse-cve-2021-35465 and document it.  Enable it
automatically for cortex-m33, cortex-m35p and cortex-m55.

gcc:
PR target/102035
* config/arm/arm.opt (mfix-cmse-cve-2021-35465): New option.
* doc/invoke.texi (Arm Options): Document it.
* config/arm/arm-cpus.in (quirk_vlldm): New feature bit.
(ALL_QUIRKS): Add quirk_vlldm.
(cortex-m33): Add quirk_vlldm.
(cortex-m35p, cortex-m55): Likewise.
* config/arm/arm.c (arm_option_override): Enable fix_vlldm if
targetting an affected CPU and not explicitly controlled on
the command line.
(cherry picked from commit 3929bca9ca95de9d35e82ae8828b188029e3eb70)

3 years agoarm: testsuite: improve detection of CMSE hardware.
Richard Earnshaw [Fri, 18 Jun 2021 16:13:04 +0000 (17:13 +0100)] 
arm: testsuite: improve detection of CMSE hardware.

The test for CMSE support being available in hardware currently
relies on the compiler not optimizing away a secure gateway operation.
But even that is suspect, because the SG instruction is just a NOP
on armv8-m implementations that do not support the security extension.

Replace the existing test with a new one that reads and checks
the appropriate hardware feature register (memory mapped).  This has
to be run from secure mode, but that shouldn't matter, because if we
can't do that we can't really test the CMSE extensions anyway.  We
retain the SG instruction to ensure the test can't pass accidentally
if run on pre-armv8-m devices.

gcc/testsuite:
* lib/target-supports.exp (check_effective_target_arm_cmse_hw):
New function.

(cherry picked from commit 79fb2700bdbab4212346d907be6063c5a32d3836)

3 years agoarm: Fix general issues with patterns for VLLDM and VLSTM
Richard Earnshaw [Fri, 11 Jun 2021 16:18:12 +0000 (17:18 +0100)] 
arm: Fix general issues with patterns for VLLDM and VLSTM

Both lazy_store_multiple_insn and lazy_load_multiple_insn contain
invalid RTL (eg they contain a post_inc statement outside of a mem).
What's more, the instructions concerned do not modify their input
address register.  We probably got away with this because they are
generated so late in the compilation that no subsequent pass needed to
understand them.  Nevertheless, this could cause problems someday, so
fixed to use a simple legal unspec.

gcc:
* config/arm/vfp.md (lazy_store_multiple_insn): Rewrite as valid RTL.
(lazy_load_multiple_insn): Likewise.
(cherry picked from commit 4702d3cf044924970a9a00142542da1edacfd76c)

3 years agoFix previous ipa-modref patch
Jan Hubicka [Mon, 23 Aug 2021 14:16:25 +0000 (16:16 +0200)] 
Fix previous ipa-modref patch

gcc/ChangeLog:

PR middle-end/101949
* ipa-modref.c (analyze_ssa_name_flags): Fix merging of
EAF_NOCLOBBER

(cherry picked from commit 5bd4ab91660c8f5534c46979d4846a4f1a0972b0)

3 years agoClear EAF_NOCLOBBER for indirect calls
Jan Hubicka [Sun, 22 Aug 2021 18:57:19 +0000 (20:57 +0200)] 
Clear EAF_NOCLOBBER for indirect calls

gcc/ChangeLog:

2021-08-22  Jan Hubicka  <hubicka@ucw.cz>
    Martin Liska  <mliska@suse.cz>

PR middle-end/101949
* ipa-modref.c (analyze_ssa_name_flags): Indirect call implies
~EAF_NOCLOBBER.

gcc/testsuite/ChangeLog:

2021-08-22  Jan Hubicka  <hubicka@ucw.cz>
    Martin Liska  <mliska@suse.cz>

* gcc.dg/lto/pr101949_0.c: New test.
* gcc.dg/lto/pr101949_1.c: New test.

(cherry picked from commit 9b08f7764cecd16cba84944f2a8b67a7f73a7ce7)

3 years agoipa/97565 - fix IPA PTA body availability check
Richard Biener [Mon, 23 Aug 2021 13:37:48 +0000 (15:37 +0200)] 
ipa/97565 - fix IPA PTA body availability check

Looks like the existing check using has_gimple_body_p isn't enough
at LTRANS time but I need to check in_other_partition as well.

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

PR ipa/97565
* tree-ssa-structalias.c (ipa_pta_execute): Check in_other_partition
in addition to has_gimple_body.

* g++.dg/lto/pr97565_0.C: New testcase.
* g++.dg/lto/pr97565_1.C: Likewise.

(cherry picked from commit 0230e69a3fabe6ad1d80cdf308ad1bf1934c4381)

3 years agoDaily bump.
GCC Administrator [Tue, 24 Aug 2021 00:18:52 +0000 (00:18 +0000)] 
Daily bump.

3 years agolibstdc++: Add default template argument to basic_istream_view
Jonathan Wakely [Mon, 23 Aug 2021 15:16:05 +0000 (16:16 +0100)] 
libstdc++: Add default template argument to basic_istream_view

The standard shows this default template argument in the <ranges>
synopsis, but it was missing in libstdc++.

libstdc++-v3/ChangeLog:

* include/std/ranges (basic_istream_view): Add default template
argument.
* testsuite/std/ranges/istream_view.cc: Check it.

(cherry picked from commit 1a129376bbc26d3c30af3c1ae6036e2e1446db40)

3 years agoarm: Fix __arm_vctp16q return type in arm_mve.h
Christophe Lyon [Mon, 23 Aug 2021 09:47:14 +0000 (09:47 +0000)] 
arm: Fix __arm_vctp16q return type in arm_mve.h

__arm_vctp16q actually returns mve_pred16_t rather than int64_t.

2021-08-23  Christophe Lyon  <christophe.lyon@foss.st.com>

gcc/
* config/arm/arm_mve.h: Fix __arm_vctp16q return type.

(cherry picked from commit ac3bcc813f26e6dc4c3b037d9d5c5a84f7f62cf4)

3 years agodwarf2out: Emit DW_AT_location for global register vars during early dwarf [PR101905]
Jakub Jelinek [Mon, 23 Aug 2021 09:50:14 +0000 (11:50 +0200)] 
dwarf2out: Emit DW_AT_location for global register vars during early dwarf [PR101905]

The following patch emits DW_AT_location for global register variables
already during early dwarf, since usually late_global_decl hook isn't even
called for those, as nothing needs to be emitted for them.

2021-08-23  Jakub Jelinek  <jakub@redhat.com>

PR debug/101905
* dwarf2out.c (gen_variable_die): Add DW_AT_location for global
register variables already during early_dwarf if possible.

* gcc.dg/guality/pr101905.c: New test.

(cherry picked from commit b284053bb75661fc1bf13c275f3ba5364bb17608)

3 years agogcov: fix output location for JSON mode.
Martin Liska [Tue, 17 Aug 2021 14:24:26 +0000 (16:24 +0200)] 
gcov: fix output location for JSON mode.

PR gcov-profile/89961

gcc/ChangeLog:

* gcov.c (make_gcov_file_name): Rewrite using std::string.
(mangle_name): Simplify, do not used the second argument.
(strip_extention): New function.
(get_md5sum): Likewise.
(get_gcov_intermediate_filename): Handle properly -p and -x
options.
(output_gcov_file): Use string type.
(generate_results): Likewise.
(md5sum_to_hex): Remove.

(cherry picked from commit b777f228b481ae881a7fbb09de367a053740932c)

3 years agoDaily bump.
GCC Administrator [Mon, 23 Aug 2021 00:18:05 +0000 (00:18 +0000)] 
Daily bump.

3 years agoDaily bump.
GCC Administrator [Sun, 22 Aug 2021 00:18:16 +0000 (00:18 +0000)] 
Daily bump.

3 years agoDaily bump.
GCC Administrator [Sat, 21 Aug 2021 00:18:05 +0000 (00:18 +0000)] 
Daily bump.

3 years agoDaily bump.
GCC Administrator [Fri, 20 Aug 2021 00:18:08 +0000 (00:18 +0000)] 
Daily bump.

3 years agolibstdc++: Move status table entry to be with other ranges papers
Jonathan Wakely [Thu, 19 Aug 2021 14:03:21 +0000 (15:03 +0100)] 
libstdc++: Move status table entry to be with other ranges papers

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* doc/xml/manual/status_cxx2020.xml: Move row  earlier in table.
* doc/html/manual/status.html: Regenerate.

(cherry picked from commit c5e0f954aef8caf4ee54b185e0fbfa88aeab62c6)

3 years agolibstdc++: Document P1739R4 status [PR100139]
Jonathan Wakely [Thu, 19 Aug 2021 10:44:57 +0000 (11:44 +0100)] 
libstdc++: Document P1739R4 status [PR100139]

We should document the status of this unimplemented feature.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/100139
* doc/xml/manual/status_cxx2020.xml: Add P1739R4 to status table.
* doc/html/manual/status.html: Regenerate.

(cherry picked from commit 926d4a71c7e5a2f7d17a4f943d6e7fe9f1e3ba55)

3 years agoFix up 'gcc.dg/pr78213.c' for '--enable-checking=release' etc.
Thomas Schwinge [Thu, 19 Aug 2021 06:25:47 +0000 (08:25 +0200)] 
Fix up 'gcc.dg/pr78213.c' for '--enable-checking=release' etc.

Fix up for r242748 (commit 3615816da830d41f67a5d8955ae588eba7f0b6fb)
"[PR target/78213] Do not ICE on non-empty -fself-test", as made
apparent by recent commit a42467bdb70650cd2f421e67b6c3418f74feaec2
"Restore 'gcc.dg/pr78213.c' testing", after the test case had gotten
disabled in r243681 (commit ecfc21ff34ddc6f8aa517251fb51494c68ff741f)
"Introduce selftest::locate_file" shortly after its original introduction.

gcc/testsuite/
PR testsuite/101969
* gcc.dg/pr78213.c: Fix up for '--enable-checking=release' etc.

(cherry picked from commit b7fc42073c04813f6b63e0641d3f6765424857c9)

3 years agoDaily bump.
GCC Administrator [Thu, 19 Aug 2021 00:18:33 +0000 (00:18 +0000)] 
Daily bump.

3 years agoarm: Fix pr69245.c testcase for reorder assembler architecture directives [PR101723]
Christophe Lyon [Fri, 6 Aug 2021 14:25:47 +0000 (14:25 +0000)] 
arm: Fix pr69245.c testcase for reorder assembler architecture directives [PR101723]

In gcc.target/arm/pr69245.c, to have a .fpu neon-vfpv4 directive, make
sure code for fn1() is emitted, by removing the static keyword.

Fix a typo in gcc.target/arm/pr69245.c, where \s should be \\s.

2021-08-06  Christophe Lyon  <christophe.lyon@foss.st.com>

gcc/testsuite/

PR target/101723
* gcc.target/arm/pr69245.c: Make sure to emit code for fn1, fix
typo.

(cherry picked from commit aff75af3b50f8c039ed6fbfa3f313ba45d44f6e6)

3 years agoarm: Fix typos for reorder assembler architecture directives [PR101723]
Christophe Lyon [Fri, 6 Aug 2021 14:06:44 +0000 (14:06 +0000)] 
arm: Fix typos for reorder assembler architecture directives [PR101723]

Two tests had typos preventing them from passing, committed as obvious.

2021-08-06  Christophe Lyon  <christophe.lyon@foss.st.com>

gcc/testsuite/
PR target/101723
* gcc.target/arm/attr-neon3.c: Fix typo.
* gcc.target/arm/pragma_fpu_attribute_2.c: Fix typo.

(cherry picked from commit a22b3e022c2b45047a28d901042888eb77620499)

3 years agoarm: reorder assembler architecture directives [PR101723]
Richard Earnshaw [Thu, 29 Jul 2021 10:00:31 +0000 (11:00 +0100)] 
arm: reorder assembler architecture directives [PR101723]

A change to the way gas interprets the .fpu directive in binutils-2.34
means that issuing .fpu will clear any features set by .arch_extension
that apply to the floating point or simd units.  This unfortunately
causes problems for more recent versions of the architecture because
we currently emit .arch, .arch_extension and .fpu directives at
different times and try to suppress redundant changes.

This change addresses this by firstly unifying all the places where we
emit these directives to a single block of code and secondly
(re)emitting all the directives if any changes have been made to the
target options.  Whilst this is slightly more than the strict minimum
it should be enough to catch all cases where a change could have
happened.  The new code also emits the directives in the order: .arch,
.fpu, .arch_extension.  This ensures that the additional architectural
extensions are not removed by a later .fpu directive.

Whilst writing this patch I also noticed that in the corner case where
the last function to be compiled had a non-standard set of
architecture flags, the assembler would add an incorrect set of
derived attributes for the file as a whole.  Instead of reflecting the
command-line options it would reflect the flags from the last file in
the function.  To address this I've also added a call to re-emit the
flags from the asm_file_end callback so the assembler will be in the
correct state when it finishes processing the intput.

There's some slight churn to the testsuite as a consequence of this,
because previously we had a hack to suppress emitting a .fpu directive
for one specific case, but with the new order this is no-longer
necessary.

gcc/ChangeLog:

PR target/101723
* config/arm/arm-cpus.in (generic-armv7-a): Add quirk to suppress
writing .cpu directive in asm output.
* config/arm/arm.c (arm_identify_fpu_from_isa): New variable.
(arm_last_printed_arch_string): Delete.
(arm_last-printed_fpu_string): Delete.
(arm_configure_build_target): If use of floating-point/SIMD is
disabled, remove all fp/simd related features from the target ISA.
(last_arm_targ_options): New variable.
(arm_print_asm_arch_directives): Add new parameters.  Change order
of emitted directives and handle all cases here.
(arm_file_start): Always call arm_print_asm_arch_directives, move
all generation of .arch/.arch_extension here.
(arm_file_end): Call arm_print_asm_arch.
(arm_declare_function_name): Call arm_print_asm_arch_directives
instead of printing .arch/.fpu directives directly.

gcc/testsuite/ChangeLog:

PR target/101723
* gcc.target/arm/cortex-m55-nofp-flag-hard.c: Update expected output.
* gcc.target/arm/cortex-m55-nofp-flag-softfp.c: Likewise.
* gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c: Likewise.
* gcc.target/arm/mve/intrinsics/mve_fpu1.c: Convert to dg-do assemble.
Add a non-no-op function body.
* gcc.target/arm/mve/intrinsics/mve_fpu2.c: Likewise.
* gcc.target/arm/pr98636.c (dg-options): Add -mfloat-abi=softfp.
* gcc.target/arm/attr-neon.c: Tighten scan-assembler tests.
* gcc.target/arm/attr-neon2.c: Use -Ofast, convert test to use
check-function-bodies.
* gcc.target/arm/attr-neon3.c: Likewise.
* gcc.target/arm/pr69245.c: Tighten scan-assembler match, but allow
multiple instances.
* gcc.target/arm/pragma_fpu_attribute.c: Likewise.
* gcc.target/arm/pragma_fpu_attribute_2.c: Likewise.

(cherry picked from commit c1cdabe3aab817d95a8db00a8b5e9f6bcdea936f)

3 years agoarm: Don't reconfigure globals in arm_configure_build_target
Richard Earnshaw [Tue, 27 Jul 2021 14:44:57 +0000 (15:44 +0100)] 
arm: Don't reconfigure globals in arm_configure_build_target

arm_configure_build_target is usually used to reconfigure the
arm_active_target structure, which is then used to reconfigure a
number of other global variables describing the current target.
Occasionally, however, we need to use arm_configure_build_target to
construct a temporary target structure and in that case it is wrong to
try to reconfigure the global variables (although probably harmless,
since arm_option_reconfigure_globals() only looks at
arm_active_target).  At the very least, however, this is wasted work,
so it is best not to do it unless needed.  What's more, several
callers of arm_configure_build target call
arm_option_reconfigure_globals themselves within a few lines, making
the call from within arm_configure_build_target completely redundant.

So this patch moves the responsibility of calling of
arm_configure_build_target to its callers (only two places needed
updating).

gcc:
* config/arm/arm.c (arm_configure_build_target): Don't call
arm_option_reconfigure_globals.
(arm_option_restore): Call arm_option_reconfigure_globals after
reconfiguring the target.
* config/arm/arm-c.c (arm_pragma_target_parse): Likewise.
(cherry picked from commit 6a37d0331c25f23628d4308e5a75624005c223b2)

3 years agoarm: ensure the arch_name is always set for the build target
Richard Earnshaw [Mon, 26 Jul 2021 16:07:14 +0000 (17:07 +0100)] 
arm: ensure the arch_name is always set for the build target

This should never happen now if GCC is invoked by the driver, but in
the unusual case of calling cc1 (or its ilk) directly from the command
line the build target's arch_name string can remain NULL.  This can
complicate later processing meaning that we need to check for this
case explicitly in some circumstances.  Nothing should rely on this
behaviour, so it's simpler to always set the arch_name when
configuring the build target and be done with it.

gcc:

* config/arm/arm.c (arm_configure_build_target): Ensure the target's
arch_name is always set.

(cherry picked from commit 62e66c6a6cc52dc0e014141d369cff52757cd7ae)

3 years agoDaily bump.
GCC Administrator [Wed, 18 Aug 2021 00:18:30 +0000 (00:18 +0000)] 
Daily bump.

3 years agolibstdc++: Avoid illegal argument to verbose in dg-test callback, continued
Thomas Schwinge [Tue, 17 Aug 2021 15:58:30 +0000 (17:58 +0200)] 
libstdc++: Avoid illegal argument to verbose in dg-test callback, continued

This is a follow-up to commit 697b94cfaef4a958132faf0cf4b35b15dfb29acc
"libstdc++: Avoid illegal argument to verbose in dg-test callback".
I'm confirming the original problem, but on one system, it's not
resolved by this change, because instead we get:

    extra_tool_flags are:
    ERROR: tcl error sourcing [...]/libstdc++-v3/testsuite/libstdc++-dg/conformance.exp.
    ERROR: usage: send [args] string
        while executing
    "send_log "$message\n""
        (procedure "verbose" line 48)
        invoked from within
    "verbose -log -- $extra_tool_flags"
        (procedure "libstdc++-dg-test" line 45)
        invoked from within
    "${tool}-dg-test $prog [lindex ${dg-do-what} 0] "$tool_flags ${dg-extra-tool-flags}""
        (procedure "saved-dg-test" line 115)
        invoked from within
    [...]

That's Ubuntu's dejagnu 1.5-3ubuntu1 being so old that it doesn't include
DejaGnu commit 57c22601afe43d2c2b8819df4f2ecacb034516fd "Protect from leading
dash in message".  (I suppose that's what'd make this work, but have not
verified.)

libstdc++-v3/
* testsuite/lib/libstdc++.exp: Avoid illegal argument to verbose,
continued.

(cherry picked from commit 60b94d8bd2280837e980a53cf81bdf902d726e61)

3 years agoRestore 'gcc.dg/pr78213.c' testing
Thomas Schwinge [Tue, 17 Aug 2021 06:45:18 +0000 (08:45 +0200)] 
Restore 'gcc.dg/pr78213.c' testing

... after it had gotten disabled in r243681 (Git
commit ecfc21ff34ddc6f8aa517251fb51494c68ff741f)
"Introduce selftest::locate_file".

gcc/testsuite/
* gcc.dg/pr78213.c: Restore testing.

(cherry picked from commit a42467bdb70650cd2f421e67b6c3418f74feaec2)

3 years agotree-optimization/101868 - avoid PRE of trapping mems across calls
Richard Biener [Tue, 17 Aug 2021 06:38:35 +0000 (08:38 +0200)] 
tree-optimization/101868 - avoid PRE of trapping mems across calls

This backports a fix for the omission of a check of trapping mems
when hoisting them across calls that might not return.  This was
originally done as part of a fix to handle const functions that throw
properly.

2021-08-17  Richard Biener  <rguenther@suse.de>

PR tree-optimization/101373
PR tree-optimization/101868
* tree-ssa-pre.c (prune_clobbered_mems): Also prune trapping
references when the BB may not return.

* gcc.dg/lto/pr101868_0.c: New testcase.
* gcc.dg/lto/pr101868_1.c: Likewise.
* gcc.dg/lto/pr101868_2.c: Likewise.
* gcc.dg/lto/pr101868_3.c: Likewise.

3 years agoDaily bump.
GCC Administrator [Tue, 17 Aug 2021 00:18:10 +0000 (00:18 +0000)] 
Daily bump.

3 years agoFortran: fix checks for STAT= and ERRMSG= arguments of SYNC ALL/SYNC IMAGES
Harald Anlauf [Sun, 15 Aug 2021 18:13:11 +0000 (20:13 +0200)] 
Fortran: fix checks for STAT= and ERRMSG= arguments of SYNC ALL/SYNC IMAGES

gcc/fortran/ChangeLog:

PR fortran/99351
* match.c (sync_statement): Replace %v code by %e in gfc_match to
allow for function references as STAT and ERRMSG arguments.
* resolve.c (resolve_sync): Adjust checks of STAT= and ERRMSG= to
being definable arguments.  Function references with a data
pointer result are accepted.
* trans-stmt.c (gfc_trans_sync): Adjust assertion.

gcc/testsuite/ChangeLog:

PR fortran/99351
* gfortran.dg/coarray_sync.f90: New test.
* gfortran.dg/coarray_3.f90: Adjust error messages.

(cherry picked from commit bbf19f9c20515da9fcd23f08c8139427374e8d77)

3 years agoUpdate cpplib de.po
Joseph Myers [Mon, 16 Aug 2021 19:17:50 +0000 (19:17 +0000)] 
Update cpplib de.po

* de.po: Update.

3 years agoFix regression in debug info for Ada with DWARF 5
Eric Botcazou [Mon, 16 Aug 2021 13:26:22 +0000 (15:26 +0200)] 
Fix regression in debug info for Ada with DWARF 5

add_scalar_info can directly generate a reference to an existing DIE for a
scalar attribute, e.g the upper bound of a VLA, but it does so only if this
existing DIE has a location or is a constant:

              if (get_AT (decl_die, DW_AT_location)
                  || get_AT (decl_die, DW_AT_data_member_location)
                  || get_AT (decl_die, DW_AT_const_value))

Now, in DWARF 5, members of a structure that are bitfields no longer have a
DW_AT_data_member_location but a DW_AT_data_bit_offset attribute instead, so
the condition is bypassed.

gcc/
* dwarf2out.c (add_scalar_info): Deal with DW_AT_data_bit_offset.

3 years agoipa: ICF should check SSA_NAME_IS_DEFAULT_DEF
Martin Liska [Fri, 13 Aug 2021 10:35:47 +0000 (12:35 +0200)] 
ipa: ICF should check SSA_NAME_IS_DEFAULT_DEF

PR ipa/100600

gcc/ChangeLog:

* ipa-icf-gimple.c (func_checker::compare_ssa_name): Do not
  consider equal SSA_NAMEs when one is a param.

gcc/testsuite/ChangeLog:

* gcc.dg/ipa/pr100600.c: New test.

3 years agoipa: do not make localaliases for target_clones [PR101261]
Martin Liska [Fri, 13 Aug 2021 09:10:56 +0000 (11:10 +0200)] 
ipa: do not make localaliases for target_clones [PR101261]

PR ipa/101261

gcc/ChangeLog:

* symtab.c (symtab_node::noninterposable_alias): Do not create
  local aliases for target_clone functions as the clonning pass
  rejects aliases.

gcc/testsuite/ChangeLog:

* gcc.target/i386/pr101261.c: New test.

3 years agoipa: make target_clone default decl local [PR101726]
Martin Liska [Thu, 12 Aug 2021 14:01:01 +0000 (16:01 +0200)] 
ipa: make target_clone default decl local [PR101726]

PR ipa/101726

gcc/ChangeLog:

* multiple_target.c (create_dispatcher_calls): Make default
  function local only if it is a definition.

3 years agoLTO: bump minor version
Martin Liska [Mon, 16 Aug 2021 11:02:54 +0000 (13:02 +0200)] 
LTO: bump minor version

Bump the LTO_minor_version due to changes in 52f0aa4dee8401ef3958dbf789780b0ee877beab

PR c/100150

gcc/ChangeLog:

* lto-streamer.h (LTO_minor_version): Bump.

3 years agoDaily bump.
GCC Administrator [Mon, 16 Aug 2021 00:18:19 +0000 (00:18 +0000)] 
Daily bump.

3 years agoDaily bump.
GCC Administrator [Sun, 15 Aug 2021 00:18:14 +0000 (00:18 +0000)] 
Daily bump.

3 years agoDaily bump.
GCC Administrator [Sat, 14 Aug 2021 00:18:04 +0000 (00:18 +0000)] 
Daily bump.

3 years agocoverage: handle function beginning
Martin Liska [Tue, 1 Jun 2021 13:13:18 +0000 (15:13 +0200)] 
coverage: handle function beginning

PR gcov-profile/100788

gcc/ChangeLog:

* coverage.c (coverage_begin_function): Update function
  beginning when #line macro is used.

gcc/testsuite/ChangeLog:

* gcc.dg/pr100788.c: New test.

3 years agoDaily bump.
GCC Administrator [Fri, 13 Aug 2021 00:18:24 +0000 (00:18 +0000)] 
Daily bump.

3 years agolibcpp: Fix ICE with -Wtraditional preprocessing [PR101638]
Jakub Jelinek [Thu, 12 Aug 2021 20:38:18 +0000 (22:38 +0200)] 
libcpp: Fix ICE with -Wtraditional preprocessing [PR101638]

The following testcase ICEs in cpp_sys_macro_p, because cpp_sys_macro_p
is called for a builtin macro which doesn't use node->value.macro union
member but a different one and so dereferencing it ICEs.
As the testcase is distilled from contemporary glibc headers, it means
basically -Wtraditional now ICEs on almost everything.

The fix can be either the patch below, return true for builtin macros,
or we could instead return false for builtin macros, or the fix could
be also (untested):
--- libcpp/expr.c       2021-05-07 10:34:46.345122608 +0200
+++ libcpp/expr.c       2021-08-12 09:54:01.837556365 +0200
@@ -783,13 +783,13 @@ cpp_classify_number (cpp_reader *pfile,

       /* Traditional C only accepted the 'L' suffix.
          Suppress warning about 'LL' with -Wno-long-long.  */
-      if (CPP_WTRADITIONAL (pfile) && ! cpp_sys_macro_p (pfile))
+      if (CPP_WTRADITIONAL (pfile))
        {
          int u_or_i = (result & (CPP_N_UNSIGNED|CPP_N_IMAGINARY));
          int large = (result & CPP_N_WIDTH) == CPP_N_LARGE
                       && CPP_OPTION (pfile, cpp_warn_long_long);

-         if (u_or_i || large)
+         if ((u_or_i || large) && ! cpp_sys_macro_p (pfile))
            cpp_warning_with_line (pfile, large ? CPP_W_LONG_LONG : CPP_W_TRADITIONAL,
                                   virtual_location, 0,
                                   "traditional C rejects the \"%.*s\" suffix",
The builtin macros at least currently don't add any suffixes
or numbers -Wtraditional would like to warn about.  For floating
point suffixes, -Wtraditional calls cpp_sys_macro_p only right
away before emitting the warning, but in the above case the ICE
is because cpp_sys_macro_p is called even if the number doesn't
have any suffixes (that is I think always for builtin macros
right now).

2021-08-12  Jakub Jelinek  <jakub@redhat.com>

PR preprocessor/101638
* macro.c (cpp_sys_macro_p): Return true instead of
crashing on builtin macros.

* gcc.dg/cpp/pr101638.c: New test.

(cherry picked from commit 408d88af60e3268f7fad59fa393ec7e28922c435)

3 years agosanitizer: Cherry-pick realpath fix
Jakub Jelinek [Wed, 11 Aug 2021 08:23:34 +0000 (10:23 +0200)] 
sanitizer: Cherry-pick realpath fix

tsan in some cases starts ignoring interceptors and only calls the
intercepted functions.  But for realpath the behavior for NULL second argument
was only handled in the interceptor and intercepted function was the one
found by dlsym which is often one that doesn't handle NULL as second argument.

Fixed by using dlvsym with "GLIBC_2.3" if possible for intercepted function
and don't emulate behavior in the wrapper.

2021-08-11  Jakub Jelinek  <jakub@redhat.com>

* sanitizer_common/sanitizer_common_interceptors.inc: Cherry-pick
llvm-project revision faef0d042f523357fe5590e7cb6a8391cf0351a8.

(cherry picked from commit 0e6017f5b4f13906dd2c09b25403ffa94a80181f)

3 years agoc++: Fix up #pragma omp declare {simd,variant} and acc routine parsing
Jakub Jelinek [Wed, 4 Aug 2021 09:53:48 +0000 (11:53 +0200)] 
c++: Fix up #pragma omp declare {simd,variant} and acc routine parsing

When parsing default arguments, we need to temporarily clear parser->omp_declare_simd
and parser->oacc_routine, otherwise it can clash with further declarations
inside of e.g. lambdas inside of those default arguments.

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

PR c++/101759
* parser.c (cp_parser_default_argument): Temporarily override
parser->omp_declare_simd and parser->oacc_routine to NULL.

* g++.dg/gomp/pr101759.C: New test.
* g++.dg/goacc/pr101759.C: New test.

(cherry picked from commit af31cab04770f7a1a1da069415ab62ca2ef54fc4)

3 years agoubsan: Fix ICEs with DECL_REGISTER tests [PR101624]
Jakub Jelinek [Wed, 28 Jul 2021 16:43:15 +0000 (18:43 +0200)] 
ubsan: Fix ICEs with DECL_REGISTER tests [PR101624]

The following testcase ICEs, because the base is a CONST_DECL for
the Fortran parameter, and ubsan/sanopt uses DECL_REGISTER macro on it.
 /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'.  */
 #define DECL_REGISTER(NODE) (DECL_WRTL_CHECK (NODE)->decl_common.decl_flag_0)
while CONST_DECL doesn't satisfy DECL_WRTL_CHECK.

The following patch checks explicitly for VAR_DECL/PARM_DECL/RESULT_DECL
only before using DECL_REGISTER, assumes other decls aren't DECL_REGISTER.
Not really sure about RESULT_DECL but it at least satisfies DECL_WRTL_CHECK...

2021-07-28  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/101624
* ubsan.c (maybe_instrument_pointer_overflow,
instrument_object_size): Only test DECL_REGISTER on VAR_DECLs,
PARM_DECLs or RESULT_DECLs.
* sanopt.c (maybe_optimize_ubsan_ptr_ifn): Likewise.

* gfortran.dg/ubsan/ubsan.exp: New file.
* gfortran.dg/ubsan/pr101624.f90: New test.

(cherry picked from commit 49e28c02a95a4bee981e69a80950309869580151)

3 years agoc++: constexpr std::construct_at on empty field [PR101663]
Patrick Palka [Thu, 12 Aug 2021 00:59:53 +0000 (20:59 -0400)] 
c++: constexpr std::construct_at on empty field [PR101663]

Here during constexpr evaluation of

  std::construct_at(&a._M_value)

we find ourselves in cxx_eval_store_expression where the target object
is 'a._M_value' and the initializer is {}.  Since _M_value is an empty
[[no_unique_address]] member we don't create a sub-CONSTRUCTOR for it,
so we end up in the early exit code path for empty stores with mismatched
types and trip over the assert therein

  gcc_assert (is_empty_class (TREE_TYPE (init)) && !lval);

because lval is true.  The reason it's true is because the INIT_EXPR in
question is the LHS of a COMPOUND_EXPR, and evaluation of the LHS is
always performed with lval=true (to indicate there's no lvalue-to-rvalue
conversion).

This patch makes the code path in question handle the lval=true case
appropriately rather than asserting.  In passing, it also consolidates
the duplicate implementations of std::construct_at/destroy_at in some
of the C++20 constexpr tests into a common header file.

PR c++/101663

gcc/cp/ChangeLog:

* constexpr.c (cxx_eval_store_expression): Handle the lval=true
case in the early exit code path for empty stores with mismatched
types.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/construct_at.h: New convenience header file that
defines minimal implementations of std::construct_at/destroy_at,
split out from ...
* g++.dg/cpp2a/constexpr-new5.C: ... here.
* g++.dg/cpp2a/constexpr-new6.C: Use the header.
* g++.dg/cpp2a/constexpr-new14.C: Likewise.
* g++.dg/cpp2a/constexpr-new20.C: New test.

(cherry picked from commit 21fd62e5ca9967bba8f97fd6244a8c6a564c2146)

3 years agoMake -no-pie option work for native Windows
Eric Botcazou [Thu, 12 Aug 2021 07:30:31 +0000 (09:30 +0200)] 
Make -no-pie option work for native Windows

Binutils 2.36/2.37 generate PIE executables by default on native Windows
(because --dynamicbase is the default) so it makes sense to have a simple
way to counter that and -no-pie seems appropriate, all the more so that
it is automatically passed when building the compiler itself.

gcc/
* configure.ac (PE linker --disable-dynamicbase support): New check.
* configure: Regenerate.
* config.in: Likewise.
* config/i386/mingw32.h (LINK_SPEC_DISABLE_DYNAMICBASE): New define.
(LINK_SPEC): Use it.
* config/i386/mingw-w64.h (LINK_SPEC_DISABLE_DYNAMICBASE): Likewise.
(LINK_SPEC): Likewise.

3 years agoDaily bump.
GCC Administrator [Thu, 12 Aug 2021 00:18:06 +0000 (00:18 +0000)] 
Daily bump.

3 years agolibstdc++: Fix test that fails randomly [PR101866]
Jonathan Wakely [Wed, 11 Aug 2021 21:11:19 +0000 (22:11 +0100)] 
libstdc++: Fix test that fails randomly [PR101866]

This test assumes that the same sequence of three values cannot occur,
which is incorect. It's unlikely, but not impossible.

Perform the check in a loop, so that in the unlikely event of an
identical sequence, we retry. If the library code is buggy it will keep
producing the same sequence and the test will time out. If the code is
working correctly then we will usually break out of the loop after one
iteration, or very rarely after two or three.

libstdc++-v3/ChangeLog:

PR libstdc++/101866
* testsuite/experimental/random/randint.cc: Loop and retry if
reseed() produces the same sequence.

(cherry picked from commit 93f1dbc7cdcc4b31ea4061efb4c2acf2d4f81eb8)

3 years agoc++: parameterized requires-expr as default argument [PR101725]
Patrick Palka [Wed, 11 Aug 2021 20:53:53 +0000 (16:53 -0400)] 
c++: parameterized requires-expr as default argument [PR101725]

Here we're rejecting the default template argument

  requires (T t) { x(t); }

because we consider the 't' in the requirement to be a local variable
(according to local_variable_p), and we generally forbid local variables
from appearing inside default arguments.  We can perhaps fix this by
giving special treatment to parameters introduced by requires-expressions,
but DR 2082 relaxed the restriction about local variables appearing within
default arguments to permit them inside unevaluated operands thereof.
So this patch just implements DR 2082 which also fixes this PR since a
requires-expression is an unevaluated context.

PR c++/101725
DR 2082

gcc/cp/ChangeLog:

* cp-tree.h (unevaluated_p): Return true for REQUIRES_EXPR.
* decl.c (local_variable_p_walkfn): Don't walk into unevaluated
operands.
* parser.c (cp_parser_primary_expression) <case CPP_NAME>: Never
reject uses of local variables in unevaluated contexts.
* tree.c (cp_walk_subtrees) <case REQUIRES_EXPR>: Increment
cp_unevaluated_operand.  Use cp_walk_tree directly instead of
WALK_SUBTREE to avoid the goto.  Use REQUIRES_EXPR_REQS instead
of TREE_OPERAND directly.

gcc/testsuite/ChangeLog:

* g++.dg/DRs/dr2082.C: New test.
* g++.dg/cpp2a/concepts-uneval4.C: New test.

(cherry picked from commit 9707d2e5dbb92d2bc990c922461a5a16ae652319)

3 years agoFortran: ICE in resolve_allocate_deallocate for invalid STAT argument
Harald Anlauf [Wed, 28 Jul 2021 17:11:27 +0000 (19:11 +0200)] 
Fortran: ICE in resolve_allocate_deallocate for invalid STAT argument

gcc/fortran/ChangeLog:

PR fortran/101564
* expr.c (gfc_check_vardef_context): Add check for KIND and LEN
parameter inquiries.
* match.c (gfc_match): Fix comment for %v code.
(gfc_match_allocate, gfc_match_deallocate): Replace use of %v code
by %e in gfc_match to allow for function references as STAT and
ERRMSG arguments.
* resolve.c (resolve_allocate_deallocate): Avoid NULL pointer
dereferences and shortcut for bad STAT and ERRMSG argument to
(DE)ALLOCATE.  Remove bogus parts of checks for STAT and ERRMSG.

gcc/testsuite/ChangeLog:

PR fortran/101564
* gfortran.dg/allocate_stat_3.f90: New test.
* gfortran.dg/allocate_stat.f90: Adjust error messages.
* gfortran.dg/implicit_11.f90: Likewise.
* gfortran.dg/inquiry_type_ref_3.f90: Likewise.

(cherry picked from commit 7bf582e6cfcef922a087b1b2b42aa04ea9cb2d94)

3 years agoc++: Improve memory usage of subsumption [PR100828]
Patrick Palka [Mon, 2 Aug 2021 13:59:56 +0000 (09:59 -0400)] 
c++: Improve memory usage of subsumption [PR100828]

Constraint subsumption is implemented in two steps.  The first step
computes the disjunctive (or conjunctive) normal form of one of the
constraints, and the second step verifies that each clause in the
decomposed form implies the other constraint.   Performing these two
steps separately is problematic because in the first step the DNF/CNF
can be exponentially larger than the original constraint, and by
computing it ahead of time we'd have to keep all of it in memory.

This patch fixes this exponential blowup in memory usage by interleaving
the two steps, so that as soon as we decompose one clause we check
implication for it.  In turn, memory usage during subsumption is now
worst case linear in the size of the constraints rather than
exponential, and so we can safely remove the hard limit of 16 clauses
without introducing runaway memory usage on some inputs.  (Note the
_time_ complexity of subsumption is still exponential in the worst case.)

In order for this to work we need to make formula::branch() insert the
copy of the current clause directly after the current clause rather than
at the end of the list, so that we fully decompose a clause shortly
after creating it.  Otherwise we'd end up accumulating exponentially
many (partially decomposed) clauses in memory anyway.

PR c++/100828

gcc/cp/ChangeLog:

* logic.cc (formula::formula): Use emplace_back instead of
push_back.
(formula::branch): Insert a copy of m_current directly after
m_current instead of at the end of the list.
(formula::erase): Define.
(decompose_formula): Remove.
(decompose_antecedents): Remove.
(decompose_consequents): Remove.
(derive_proofs): Remove.
(max_problem_size): Remove.
(diagnose_constraint_size): Remove.
(subsumes_constraints_nonnull): Rewrite directly in terms of
decompose_clause and derive_proof, interleaving decomposition
with implication checking.  Remove limit on constraint complexity.
Use formula::erase to free the current clause before moving on to
the next one.

(cherry picked from commit f48c3cd2e3f9cd9e3c329eb2d3185bd26e7c7607)

3 years agolibstdc++: Fix create_directories to resolve symlinks [PR101510]
Jonathan Wakely [Tue, 20 Jul 2021 17:15:48 +0000 (18:15 +0100)] 
libstdc++: Fix create_directories to resolve symlinks [PR101510]

When filesystem__create_directories checks to see if the path already
exists and resolves to a directory, it uses filesystem::symlink_status,
which means it reports an error if the path is a symlink. It should use
filesystem::status, so that the target directory is detected, and no
error is reported.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/101510
* src/c++17/fs_ops.cc (fs::create_directories): Use status
instead of symlink_status.
* src/filesystem/ops.cc (fs::create_directories): Likewise.
* testsuite/27_io/filesystem/operations/create_directories.cc:
Check symlink to existing directory.
* testsuite/27_io/filesystem/operations/create_directory.cc: Do
not test with symlinks on Windows.
* testsuite/experimental/filesystem/operations/create_directories.cc:
Check symlink to existing directory.
* testsuite/experimental/filesystem/operations/create_directory.cc:
Do not test with symlinks on Windows.

(cherry picked from commit 124eaa50e0a34f5f89572c1aa812c50979da58fc)

3 years agolibstdc++: Add more tests for filesystem::create_directory [PR101510]
Jonathan Wakely [Tue, 20 Jul 2021 11:35:37 +0000 (12:35 +0100)] 
libstdc++: Add more tests for filesystem::create_directory [PR101510]

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/101510
* src/c++17/fs_ops.cc (create_dir): Adjust whitespace.
* testsuite/27_io/filesystem/operations/create_directory.cc:
Test creating directory with name of existing symlink to
directory.
* testsuite/experimental/filesystem/operations/create_directory.cc:
Likewise.

(cherry picked from commit 0c4ae4ff46b1d7633f1e06f57d348b5817b8f640)

3 years agolibstdc++: Implement LWG 3465 for std::compare_partial_order_fallback [PR101056]
Jonathan Wakely [Mon, 14 Jun 2021 11:30:52 +0000 (12:30 +0100)] 
libstdc++: Implement LWG 3465 for std::compare_partial_order_fallback [PR101056]

libstdc++-v3/ChangeLog:

PR libstdc++/101056
* libsupc++/compare (compare_partial_order_fallback): Add
constraint using reversed parameter order, as per LWG 3465.
* testsuite/18_support/comparisons/algorithms/fallback.cc:
Adjust expected result.

(cherry picked from commit b76a529c095f076c4780df0c913cf6d2391bcbc9)

3 years agolibstdc++: Change [cmp.alg] assertions to constraints
Jonathan Wakely [Mon, 14 Jun 2021 11:25:43 +0000 (12:25 +0100)] 
libstdc++: Change [cmp.alg] assertions to constraints

This moves the same_as<decay_t<_Tp>, decay_t<_Up>> checks from the
[cmp.alg] function bodies into their constraints.

Also add a test for the compare_xxx_order_fallback algorithms.

libstdc++-v3/ChangeLog:

* libsupc++/compare (__decayed_same_as): New helper concept.
(strong_order, weak_order, partial_order): Constrain with new
concept instead of using static_assert.
(compare_strong_order_fallback, compare_weak_order_fallback)
(compare_partial_order_fallback): Likewise. Do not deduce return
types. Remove redundant if-constexpr checks.
* testsuite/18_support/comparisons/algorithms/fallback.cc: New test.

(cherry picked from commit e2c79b968ff95421c31a5a9a1b80b11321fe70d2)

3 years agolibstdc++: Improvements to Doxygen markup
Jonathan Wakely [Wed, 30 Jun 2021 23:30:54 +0000 (00:30 +0100)] 
libstdc++: Improvements to Doxygen markup

This attempts to improve the doxygen output to work around what seems to
be some bugs in doxygen (issues 8635 and 8638).

The @addtogroup command doesn't work for entities inside a nested
namespace (see 8635) so we need to close and reopen groups on entering
and elaving nested namespaces. This fixes the problem that
chrono::duration and chrono::time_point were not documented in the
"Time" documentation group. I am unable to make the path classes appear
as part of their relevant groups (File System and Filesystem TS), nor
the contents of <exception> or <system_error>. I have made some minor
improvements to the docs for those types, including starting to address
PR 97001 by adding @since to the doxygen comments.

This change also excludes the <experimental/bits/net.h> header from
Doxygen processing, so we don't get an unwanted "Networking-ts" group
in the documentation.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* doc/doxygen/doxygroups.cc: Fix docs for std::literals.
* doc/doxygen/user.cfg.in: Exclude the Networking TS header.
Add some more predefined macros.
* include/bits/fs_fwd.h: Move @addtogroup commands inside
namespaces. Add better documentation.
* include/bits/fs_path.h: Likewise.
* include/experimental/bits/fs_fwd.h: Likewise.
* include/experimental/bits/fs_path.h: Likewise.
* include/ext/throw_allocator.h: Fix typo and improve docs.
* include/std/chrono: Move @addtogroup commands.
* include/std/system_error: Move @addtogroup commands.
* libsupc++/exception: Improve documentation.
* libsupc++/exception.h: Add @since documentation.

(cherry picked from commit f2ce64b53fa76a4c192fe51b2f6c5a863a3b1241)

3 years agolibstdc++: Improve Doxygen documentation groups [PR 101258]
Jonathan Wakely [Wed, 30 Jun 2021 15:00:58 +0000 (16:00 +0100)] 
libstdc++: Improve Doxygen documentation groups [PR 101258]

This defines some new Doxygen groups for C++17 variable templates and
for the contents of <experimental/type_traits>. By documenting the group
as a whole and adding each template to a group we don't need to document
them individually.

Also mark more internals with "@cond undocumented" so that Doxygen
ignores them by default. Also make Doxygen process <experimental/simd>.

For some reason, many of the class templates in <type_traits> do not
appear in the "Metaprogramming" group. For example, add_cv,
remove_extent, and all the is_xxx_constructible and is_xxx_assignable
traits. For some reason, Doxygen doesn't include them in the group,
despite doing it correctly for other traits in the same header.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/101258
* doc/doxygen/user.cfg.in (INPUT): Add <experimental/simd>.
(COLS_IN_ALPHA_INDEX): Remove obsolete tag.
(PREDEFINED): Add/fix some more macros that need to be expanded.
* include/bits/random.h: Stop Doxygen from documenting internal
implementation details.
* include/bits/random.tcc: Likewise.
* include/bits/this_thread_sleep.h: Fix @file name.
* include/experimental/bits/simd.h: Add to Doxygen group. Do not
document internal implementation details.
* include/experimental/bits/simd_detail.h: Do not document
internal implementation details.
* include/experimental/simd: Define Doxygen groups.
* include/experimental/type_traits: Improve documentation for
the header file. Define groups. Use @since commands.
* include/std/scoped_allocator (scoped_allocator_adaptor): Move
declaration before undocumented region.
* include/std/type_traits (true_type, false_type): Use using
declaration instead of typedef.
(is_invocable_v, is_nothrow_invocable_v, is_invocable_r_v)
(is_nothrow_invocable_r_v): Move definitions next to other C++17
variable templates.
Do not document internal implementation details. Move misplaced
group-end command. Define group for variable templates.
* include/std/variant: Do not document internal implementation
details.
* testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error
line number.

(cherry picked from commit 6963c3b9ed1308bf5d2d8877956e56fec92853a7)

3 years agoDaily bump.
GCC Administrator [Wed, 11 Aug 2021 00:18:04 +0000 (00:18 +0000)] 
Daily bump.

4 years agoDaily bump.
GCC Administrator [Tue, 10 Aug 2021 00:18:01 +0000 (00:18 +0000)] 
Daily bump.

4 years agoDaily bump.
GCC Administrator [Mon, 9 Aug 2021 00:18:16 +0000 (00:18 +0000)] 
Daily bump.

4 years agoDaily bump.
GCC Administrator [Sun, 8 Aug 2021 00:18:08 +0000 (00:18 +0000)] 
Daily bump.

4 years agoDaily bump.
GCC Administrator [Sat, 7 Aug 2021 00:18:16 +0000 (00:18 +0000)] 
Daily bump.

4 years agoaarch64: Add -mtune=neoverse-512tvb
Richard Sandiford [Fri, 6 Aug 2021 14:36:58 +0000 (15:36 +0100)] 
aarch64: Add -mtune=neoverse-512tvb

This patch adds an option to tune for Neoverse cores that have
a total vector bandwidth of 512 bits (4x128 for Advanced SIMD
and a vector-length-dependent equivalent for SVE).  This is intended
to be a compromise between tuning aggressively for a single core like
Neoverse V1 (which can be too narrow) and tuning for AArch64 cores
in general (which can be too wide).

-mcpu=neoverse-512tvb is equivalent to -mcpu=neoverse-v1
-mtune=neoverse-512tvb.

gcc/
* doc/invoke.texi: Document -mtune=neoverse-512tvb and
-mcpu=neoverse-512tvb.
* config/aarch64/aarch64-cores.def (neoverse-512tvb): New entry.
* config/aarch64/aarch64-tune.md: Regenerate.
* config/aarch64/aarch64.c (neoverse512tvb_sve_vector_cost)
(neoverse512tvb_sve_issue_info, neoverse512tvb_vec_issue_info)
(neoverse512tvb_vector_cost, neoverse512tvb_tunings): New structures.
(aarch64_adjust_body_cost_sve): Handle -mtune=neoverse-512tvb.
(aarch64_adjust_body_cost): Likewise.

(cherry picked from commit 048039c49b96875144f67e7789fdea54abf7710b)

4 years agoaarch64: Restrict issue heuristics to inner vector loop
Richard Sandiford [Fri, 6 Aug 2021 14:36:57 +0000 (15:36 +0100)] 
aarch64: Restrict issue heuristics to inner vector loop

The AArch64 vector costs try to take issue rates into account.
However, when vectorising an outer loop, we lumped the inner
and outer operations together, which is somewhat meaningless.
This patch restricts the heuristic to the inner loop.

gcc/
* config/aarch64/aarch64.c (aarch64_add_stmt_cost): Only
record issue information for operations that occur in the
innermost loop.

(cherry picked from commit 9690309baf8294b0512b55b133bc102dc0dac5b5)

4 years agoaarch64: Tweak MLA vector costs
Richard Sandiford [Fri, 6 Aug 2021 14:36:56 +0000 (15:36 +0100)] 
aarch64: Tweak MLA vector costs

The issue-based vector costs currently assume that a multiply-add
sequence can be implemented using a single instruction.  This is
generally true for scalars (which have a 4-operand instruction)
and SVE (which allows the output to be tied to any input).
However, for Advanced SIMD, multiplying two values and adding
an invariant will end up being a move and an MLA.

The only target to use the issue-based vector costs is Neoverse V1,
which would generally prefer SVE in this case anyway.  I therefore
don't have a self-contained testcase.  However, the distinction
becomes more important with a later patch.

gcc/
* config/aarch64/aarch64.c (aarch64_multiply_add_p): Add a vec_flags
parameter.  Detect cases in which an Advanced SIMD MLA would almost
certainly require a MOV.
(aarch64_count_ops): Update accordingly.

(cherry picked from commit 028059b46ec9aef7dd447792c579f35396751068)

4 years agoaarch64: Tweak the cost of elementwise stores
Richard Sandiford [Fri, 6 Aug 2021 14:36:55 +0000 (15:36 +0100)] 
aarch64: Tweak the cost of elementwise stores

When the vectoriser scalarises a strided store, it counts one
scalar_store for each element plus one vec_to_scalar extraction
for each element.  However, extracting element 0 is free on AArch64,
so it should have zero cost.

I don't have a testcase that requires this for existing -mtune
options, but it becomes more important with a later patch.

gcc/
* config/aarch64/aarch64.c (aarch64_is_store_elt_extraction): New
function, split out from...
(aarch64_detect_vector_stmt_subtype): ...here.
(aarch64_add_stmt_cost): Treat extracting element 0 as free.

(cherry picked from commit 537afb0857c8f60c2b60a09fad4660420cd13e8f)

4 years agoaarch64: Add gather_load_xNN_cost tuning fields
Richard Sandiford [Fri, 6 Aug 2021 14:36:55 +0000 (15:36 +0100)] 
aarch64: Add gather_load_xNN_cost tuning fields

This patch adds tuning fields for the total cost of a gather load
instruction.  Until now, we've costed them as one scalar load
per element instead.  Those scalar_load-based values are also
what the patch uses to fill in the new fields for existing
cost structures.

gcc/
* config/aarch64/aarch64-protos.h (sve_vec_cost):
Add gather_load_x32_cost and gather_load_x64_cost.
* config/aarch64/aarch64.c (generic_sve_vector_cost)
(a64fx_sve_vector_cost, neoversev1_sve_vector_cost): Update
accordingly, using the values given by the scalar_load * number
of elements calculation that we used previously.
(aarch64_detect_vector_stmt_subtype): Use the new fields.

(cherry picked from commit 78770e0e5d9fef70679e1db4eb2fb06596fbb2f8)