184423 Commits

Author SHA1 Message Date
GCC Administrator
be8aad8d73 Daily bump. 2021-04-21 00:16:23 +00:00
Joseph Myers
5491da2308 Regenerate gcc.pot.
* gcc.pot: Regenerate.
2021-04-20 18:18:03 +00:00
H.J. Lu
39671f87b2 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.
2021-04-20 08:56:46 -07:00
Jonathan Wakely
54995d98cc 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.
2021-04-20 15:14:58 +01:00
Thomas Rodgers
b52aef3a8c 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.
2021-04-20 15:14:58 +01:00
Segher Boessenkool
6156df483f 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.
2021-04-20 13:28:02 +00:00
Patrick Palka
902b40c797 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.
2021-04-20 09:18:50 -04:00
Jason Merrill
7f5deba1c2 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.
2021-04-20 08:35:14 -04:00
Jonathan Wakely
f1a68574b1 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.
2021-04-20 12:50:50 +01:00
Jakub Jelinek
96de14f46f 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.
2021-04-20 12:48:12 +02:00
Martin Liska
e265278a3b Fix typo in param description.
gcc/ChangeLog:

	* doc/invoke.texi: Fix typo.
	* params.opt: Likewise.
2021-04-20 12:10:20 +02:00
Martin Liska
50bc1a8795 Bump version to 12.
gcc/ada/ChangeLog:

	* gnatvsn.ads: Bump Library_Version to 12.
2021-04-20 11:43:51 +02:00
Martin Liska
a8d90d0992 Document ranger-logical-depth in invoke.texi
gcc/ChangeLog:

	* doc/invoke.texi: Document new param.
2021-04-20 11:01:33 +02:00
Jakub Jelinek
919323c1a4 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.
2021-04-20 10:50:22 +02:00
Jakub Jelinek
0cc79337ad Bump BASE-VER.
2021-04-20  Jakub Jelinek  <jakub@redhat.com>

	* BASE-VER: Set to 11.0.0.
basepoints/gcc-12
2021-04-20 10:26:12 +02:00
Stefan Schulze Frielinghaus
250f234988 testsuite: Fix up gcc.target/s390/zero-scratch-regs-1.c
Depending on whether GCC is configured using --with-mode=zarch or not,
for the 31bit target instructions are generated either for ESA or
z/Architecture.  For the sake of simplicity and robustness test only for
the latter by adding manually option -mzarch.

gcc/testsuite/ChangeLog:

	* gcc.target/s390/zero-scratch-regs-1.c: Force test to run for
	z/Architecture only.
2021-04-20 09:51:16 +02:00
Paul Thomas
67378cd63d Fortran: Fix host associated PDT entity initialization [PR99307].
2021-04-20  Paul Thomas  <pault@gcc.gnu.org>

gcc/fortran
	PR fortran/100110
	* trans-decl.c (gfc_get_symbol_decl): Replace test for host
	association with a check that the current and symbol namespaces
	are the same.

gcc/testsuite/
	PR fortran/100110
	* gfortran.dg/pdt_31.f03: New test.
	* gfortran.dg/pdt_26.f03: Reduce 'builtin_malloc' count from 9
	to 8.
2021-04-20 07:30:45 +01:00
Iain Buclaw
30b11d8d1b libphobos: Fix SIGBUS in read_encoded_value_with_base on sparc-sun-solaris (PR98584)
Instead of unsafe pointer dereferencing, use memcpy() to read encoded
values from memory.  The function `read_encoded_value' has been updated
to accept a ref parameter, this simplifies handling of the pointer to
memory needing to be read.

libphobos/ChangeLog:

	PR d/98584
	* libdruntime/gcc/deh.d (scanLSDA): Update calls to read_uleb128 and
	read_encoded_value.
	(actionTableLookup): Update calls to read_sleb128 and
	read_encoded_value_with_base.
	* libdruntime/gcc/unwind/pe.d (read_uleb128): Update signature.
	(read_sleb128): Update signature.
	(read_unaligned): New function.
	(read_encoded_value_with_base): Update signature.  Call read_unaligned
	instead of unsafe pointer dereferencing.
	(read_encoded_value): Update signature.
2021-04-20 02:28:12 +02:00
GCC Administrator
6e81e015d9 Daily bump. 2021-04-20 00:16:27 +00:00
Marek Polacek
29d8838c5e c++: ICE with concept defined in function [PR97536]
This is an ICE-on-invalid, but I keep seeing it when reducing code so
I'd like to fix it.  We crash on

  template <typename> void forward() {
    concept C = true;
  }

which breaks two requirements:
[temp.concept]/1: A concept is a template ...
[temp.concept]/3: A concept-definition shall inhabit a namespace scope.

This patch adds a test that exercises broken code and fixes the ICE
by checking that a concept-definition is defined at namespace scope.

gcc/cp/ChangeLog:

	PR c++/97536
	* decl.c (grokvardecl): Given an error when a concept is not defined
	at namespace scope.

gcc/testsuite/ChangeLog:

	PR c++/97536
	* g++.dg/concepts/diagnostic16.C: New test.
2021-04-19 16:35:00 -04:00
Andrew MacLeod
329d2f0df7 tree-optimization/100081 - Limit depth of logical expression windback.
Limit how many logical expressions GORI will look back through when
evaluating outgoing edge range.

	PR tree-optimization/100081
	* gimple-range-cache.h (ranger_cache): Inherit from gori_compute
	rather than gori_compute_cache.
	* gimple-range-gori.cc (is_gimple_logical_p): Move to top of file.
	(range_def_chain::m_logical_depth): New member.
	(range_def_chain::range_def_chain): Initialize m_logical_depth.
	(range_def_chain::get_def_chain): Don't build defchains through more
	than LOGICAL_LIMIT logical expressions.
	* params.opt (param_ranger_logical_depth): New.
2021-04-19 15:49:04 -04:00
Iain Buclaw
dc7d1c74ff d: Fix ICE in when formating a string with '%' or '`' characters (PR98457)
The percentage character was being confused for a format specifier in
pp_format(), whilst the backtick character was confused for the
beginning of a quoted string in expand_d_format().

Both are now properly escaped to avoid the ICE.

gcc/d/ChangeLog:

	PR d/98457
	* d-diagnostic.cc (expand_d_format): Handle escaped backticks.
	(escape_d_format): New funtion.
	(verror): Call escape_d_format on prefixing strings.
	(vdeprecation): Likewise.

gcc/testsuite/ChangeLog:

	PR d/98457
	* gdc.dg/pr98457.d: New test.
2021-04-19 19:28:09 +02:00
Iain Buclaw
e19c638996 libphobos: Merge upstream druntime 89f870b7, phobos e6907ff3e
Phobos changes:

 - Synchronize C bindings with the latest port fixes in upstream
   druntime.

 - Add Config.stderrPassThrough to std.process (PR98494).

Reviewed-on: https://github.com/dlang/druntime/pull/3448
	     https://github.com/dlang/phobos/pull/7984

libphobos/ChangeLog:

	PR d/98494
	* libdruntime/MERGE: Merge upstream druntime 89f870b7.
	* src/MERGE: Merge upstream phobos e6907ff3e.
2021-04-19 19:27:41 +02:00
Iain Buclaw
6eae7549b8 libphobos: Add Thread/Fiber support code for Darwin (PR98058)
libphobos/ChangeLog:

	PR d/98058
	* configure: Regenerate.
	* libdruntime/Makefile.am (DRUNTIME_DSOURCES_DARWIN): Add
	core/sys/darwin/config.d
	* libdruntime/Makefile.in: Regenerate.
	* libdruntime/config/powerpc/switchcontext.S: Implement
	fiber_switchContext for __MACH__.
	* libdruntime/config/x86/switchcontext.S: Likewise.
	* libdruntime/core/sys/darwin/config.d: New file.
	* libdruntime/core/thread/fiber.d (Fiber.getThis): Mark noinline.
	(UnsafeFiberMigration): Define for OSX/X86 and OSX/X86_64.
	* libdruntime/core/thread/osthread.d (callWithStackShell): Add inline
	assembler implementation for X86, X86_64, PPC, and PPC64.
	* libdruntime/core/thread/threadbase.d (ThreadBase.getThis): Mark
	noinline.
	* libdruntime/gcc/deh.d (FuncTable): Remove definition.
	* m4/druntime/os.m4 (DRUNTIME_OS_MINFO_BRACKETING): Check for right
	bracket symbol on darwin* targets.
	* testsuite/libphobos.thread/fiber_guard_page.d: Update test to
	support ucontext-based Fibers.
2021-04-19 19:27:27 +02:00
Iain Buclaw
b66e72b43e libphobos: Add D runtime support code for MinGW (PR99794)
libphobos/ChangeLog:

	PR d/99794
	* libdruntime/Makefile.am (DRUNTIME_SOURCES_CONFIGURED): Add
	config/mingw/msvc.c on DRUNTIME_OS_MINGW.
	* libdruntime/Makefile.in: Regenerate.
	* libdruntime/config/mingw/msvc.c: New file.
	* libdruntime/config/mingw/switchcontext.S (fiber_switchContext): Fix
	function definition.
	* libdruntime/gcc/deh.d (__gdc_personality_seh0): Fix call to
	_GCC_specific_handler.
	* libdruntime/gcc/gthread.d (__gthread_once_t): Fix definition.
	* libdruntime/gcc/unwind/generic.d (_GCC_specific_handler): Fix
	declaration.
	* libdruntime/rt/dmain2.d (rt_loadLibrary): Remove function.
	(rt_loadLibraryW): Remove function.
	(initLibrary): Remove function.
	(rt_unloadLibrary): Remove function.
2021-04-19 19:27:13 +02:00
Iain Buclaw
d86e60855f libphobos: Add section support code for OpenBSD (PR99691)
libphobos/ChangeLog:

	PR d/99691
	* configure: Regenerate.
	* libdruntime/config/common/threadasm.S: Add __OpenBSD__.
	* libdruntime/gcc/backtrace.d: Import core.sys.openbsd.dlfcn on
	OpenBSD platforms.
	* libdruntime/gcc/sections/elf.d (SharedElf): Define on OpenBSD.
	(linkMapForHandle): Implement for OpenBSD.
	(exeLinkMap): Remove.
	(getDependencies): Adjust dlpi_addr on OpenBSD.
	(handleForName): Implement for OpenBSD.
	(IterateManually): Define on OpenBSD.
	* libdruntime/gcc/sections/package.d (SectionsElf): Define on OpenBSD.
	* m4/druntime/libraries.m4 (DRUNTIME_LIBRARIES_ATOMIC): Test for
	enable_libatomic.
	(DRUNTIME_LIBRARIES_BACKTRACE): Test for enable_libbacktrace.
2021-04-19 19:26:43 +02:00
Richard Earnshaw
3bffc4b37e arm: partial revert of r11-8168 [PR100067]
This is a partial revert of r11-8168.  The overall purpose of the
commit is retained (to fix a bogus warning when -mfpu=<not-auto> is
used in combination with eg -mcpu=neoverse-v1), but it removes the
hunk that changed the subsequent feature bits for features of a
simd/fp unit that cannot be described by -mfpu.  While I still think
that is the correct direction of travel, it's somewhat disruptive and
not appropriate for late stage4.  I'll revisit for gcc-12.

gcc:
	PR target/100067
	* config/arm/arm.c (arm_configure_build_target): Do not strip
	extended FPU/SIMD feature bits from the target ISA when -mfpu
	is specified (partial revert of r11-8168).
2021-04-19 16:56:31 +01:00
Christophe Lyon
714bdc31b6 aarch64: Fix up 2 other combine opt regressions vs. GCC8 [PR100075]
The testcase is endianness dependent and works only on little-endian.

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

	PR target/100075
	gcc/testsuite/
	* gcc.target/aarch64/pr100075.c: Add aarch64_little_endian
	effective target.
2021-04-19 13:27:18 +00:00
Richard Biener
2f422b550f preprocessor/100142 - revert unwanted change in last commit
This reverts a s/column_offset/column/ change in the fix for PR99446.

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

	PR preprocessor/100142
libcpp/
	* line-map.c (linemap_position_for_loc_and_offset): Revert
	unintended s/column_offset/column/ change.

gcc/testsuite/
	* gcc.dg/pr100142.c: New testcase.
	* g++.dg/diagnostic/pr72803.C: Revert last change.
2021-04-19 14:43:39 +02:00
Thomas Schwinge
3395dfc4da [OpenACC 'kernels'] '-fopenacc-kernels=[...]' -> '--param=openacc-kernels=[...]'
This configuration knob is temporary, and isn't really meant to be exposed to
users.

	gcc/
	* params.opt (-param=openacc-kernels=): Add.
	* omp-oacc-kernels-decompose.cc
	(pass_omp_oacc_kernels_decompose::gate): Use it.
	* doc/invoke.texi (-fopenacc-kernels=@var{mode}): Move...
	(--param): ... here, 'openacc-kernels'.
	gcc/c-family/
	* c.opt (fopenacc-kernels=): Remove.
	gcc/fortran/
	* lang.opt (fopenacc-kernels=): Remove.
	gcc/testsuite/
	* c-c++-common/goacc/if-clause-2.c: '-fopenacc-kernels=[...]' ->
	'--param=openacc-kernels=[...]'.
	* c-c++-common/goacc/kernels-decompose-1.c: Likewise.
	* c-c++-common/goacc/kernels-decompose-2.c: Likewise.
	* c-c++-common/goacc/kernels-decompose-ice-1.c: Likewise.
	* c-c++-common/goacc/kernels-decompose-ice-2.c: Likewise.
	* gfortran.dg/goacc/kernels-decompose-1.f95: Likewise.
	* gfortran.dg/goacc/kernels-decompose-2.f95: Likewise.
	* gfortran.dg/goacc/kernels-tree.f95: Likewise.
	libgomp/
	* testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c:
	'-fopenacc-kernels=[...]' -> '--param=openacc-kernels=[...]'.
	* testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose.c:
	Likewise.
	* testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c:
	Likewise.
	* testsuite/libgomp.oacc-fortran/pr94358-1.f90: Likewise.
2021-04-19 14:29:48 +02:00
H.J. Lu
15cfa8ddac libstdc++: Update some baseline_symbols.txt (x32)
* config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt:
	Updated.
2021-04-19 05:06:31 -07:00
Martin Liska
fde4a87e73 Align decl and def arguments.
gcc/ChangeLog:

	PR c/100143
	* gengtype.c (finish_root_table): Align function arguments
	in between declaration and definition.
2021-04-19 11:20:46 +02:00
Eric Botcazou
0bb37e80bb Fix another -freorder-blocks-and-partition glitch with Windows SEH
Since GCC 8, the -freorder-blocks-and-partition pass can split a function
into hot and cold parts, thus generating 2 FDEs for a single function in
DWARF for exception purposes and doing an equivalent trick for Windows SEH.

Now the Windows system unwinder does not support arbitrarily large frames
and there is even a hard limit on the encoding of the CFI, which changes
the stack allocation strategy when it is topped and which must be reflected
everywhere.

gcc/
	* config/i386/winnt.c (i386_pe_seh_cold_init): Properly deal with
	frames larger than the SEH maximum frame size.
gcc/testsuite/
	* gnat.dg/opt92.adb: New test.
2021-04-19 10:19:13 +02:00
GCC Administrator
d64720a07f Daily bump. 2021-04-19 00:16:19 +00:00
Segher Boessenkool
b412ce8e96 combine: Don't create REG_UNUSED notes if the reg already died (PR99927)
If the register named in an existing REG_UNUSED note dies somewhere
between where the note used to be and I3, we should just drop it.

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

	PR rtl-optimization/99927
	* combine.c (distribute_notes) [REG_UNUSED]: If the register already
	is dead, just drop it.
2021-04-18 15:01:13 +00:00
GCC Administrator
da946b41be Daily bump. 2021-04-18 00:16:21 +00:00
Stefan Schulze Frielinghaus
ed16241c6d testsuite: Enable zero-scratch-regs-{8,9,10,11}.c on s390*
On s390* the only missing part for the mentioned testcases was a load of
a double floating-point zero via a move (in particular for quite old
machines) which was added in commit 46c47420a5fefd4d9d02b0db347235dd74e20fb2.
Common code implementation is sufficient in order to clear volatile
GPRs, FPRs, and VRs.  Access registers a0 and a1 are nonvolatile and not
cleared.  Therefore, target hook TARGET_ZERO_CALL_USED_REGS is not
implemented for s390*.

Added a target specific test in order to ensure that all call clobbered
GPRs, FPRs, and VRs are zeroed and all call saved registers are kept.

gcc/testsuite/ChangeLog:

	* c-c++-common/zero-scratch-regs-8.c: Enable on s390*.
	* c-c++-common/zero-scratch-regs-9.c: Likewise.
	* c-c++-common/zero-scratch-regs-10.c: Likewise.
	* c-c++-common/zero-scratch-regs-11.c: Likewise.
	* gcc.target/s390/zero-scratch-regs-1.c: New test.
2021-04-17 17:53:33 +02:00
Iain Buclaw
bda5195965 d: Add TARGET_D_TEMPLATES_ALWAYS_COMDAT
Following up on the fix for PR99914, when testing on MinGW, it was found
not to support weak in the same way as on ELF or Mach-O targets.

So the linkage has been reverted back to COMDAT for that target, however
in order to properly support overriding functions and variables, all
declarations with external linkage must be put on COMDAT.  For this a
new target hook has been added to control the behavior.

gcc/ChangeLog:

	PR d/99914
	* config/i386/winnt-d.c (TARGET_D_TEMPLATES_ALWAYS_COMDAT): Define.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in (D language and ABI): Add @hook for
	TARGET_D_TEMPLATES_ALWAYS_COMDAT.

gcc/d/ChangeLog:

	PR d/99914
	* d-target.def (d_templates_always_comdat): New hook.
	* d-tree.h (mark_needed): Remove prototype.
	* decl.cc: Include d-target.h.
	(mark_needed): Rename to...
	(d_mark_needed): ...this.  Make static.
	(set_linkage_for_decl): Put variables in comdat if
	d_templates_always_comdat.
2021-04-17 12:50:25 +02:00
Iain Buclaw
d81bc495a4 d: Implement __traits(getTargetInfo, "objectFormat")
Following on from adding TARGET_D_REGISTER_OS_TARGET_INFO, this adds the
required handlers to implement `__traits(getTargetInfo, "objectFormat")'
for all platforms that have D support files.

Some back-ends (i386, rs6000, and pa) have some awarenes of the what
object format they are compiling for, so new getTargetInfo handlers have
been have added both to those back-ends as well as platform-specific
target files to override the default in the D front-end.

gcc/ChangeLog:

	* config/darwin-d.c (darwin_d_handle_target_object_format): New
	function.
	(darwin_d_register_target_info): New function.
	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
	* config/dragonfly-d.c (dragonfly_d_handle_target_object_format): New
	function.
	(dragonfly_d_register_target_info): New function.
	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
	* config/freebsd-d.c (freebsd_d_handle_target_object_format): New
	function.
	(freebsd_d_register_target_info): New function.
	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
	* config/glibc-d.c (glibc_d_handle_target_object_format): New
	function.
	(glibc_d_register_target_info): New function.
	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
	* config/i386/i386-d.c (ix86_d_handle_target_object_format): New
	function.
	(ix86_d_register_target_info): Add ix86_d_handle_target_object_format
	as handler for objectFormat key.
	* config/i386/winnt-d.c (winnt_d_handle_target_object_format): New
	function.
	(winnt_d_register_target_info): New function.
	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
	* config/netbsd-d.c (netbsd_d_handle_target_object_format): New
	function.
	(netbsd_d_register_target_info): New function.
	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
	* config/openbsd-d.c (openbsd_d_handle_target_object_format): New
	function.
	(openbsd_d_register_target_info): New function.
	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
	* config/pa/pa-d.c (pa_d_handle_target_object_format): New function.
	(pa_d_register_target_info): Add pa_d_handle_target_object_format as
	handler for objectFormat key.
	* config/rs6000/rs6000-d.c (rs6000_d_handle_target_object_format): New
	function.
	(rs6000_d_register_target_info): Add
	rs6000_d_handle_target_object_format as handler for objectFormat key.
	* config/sol2-d.c (solaris_d_handle_target_object_format): New
	function.
	(solaris_d_register_target_info): New function.
	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.

gcc/d/ChangeLog:

	* d-target.cc (d_handle_target_object_format): New function.
	(d_language_target_info): Add d_handle_target_object_format as handler
	for objectFormat key.
	(Target::getTargetInfo): Continue if handler returned NULL_TREE.
2021-04-17 12:50:25 +02:00
Jakub Jelinek
b96c7a063b libstdc++: Update ppc32 baseline_symbols.txt
And here is an update for 32-bit powerpc-linux.

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

	* config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Update.
	* config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt: Update.
2021-04-17 11:33:52 +02:00
Jakub Jelinek
d700e666fd libstdc++: Update some baseline_symbols.txt
As we have only one P1 left right now, I think it is the right time
to update abi list files in libstdc++.

Here is an update for x86_64/i?86/s390x/ppc64 linux (aarch64 seems
to be correct already).  For ppc64le it is missing the IEEE128 symver
symbols, but those need further work on the abi checking side.

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

	* config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Update.
	* config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Update.
	* config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update.
	* config/abi/post/i486-linux-gnu/baseline_symbols.txt: Update.
	* config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Update.
	* config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update.
2021-04-17 11:31:30 +02:00
Jakub Jelinek
d9f462fb37 sanitizer: Fix asan against glibc 2.34 [PR100114]
As mentioned in the PR, SIGSTKSZ is no longer a compile time constant in
glibc 2.34 and later, so
static const uptr kAltStackSize = SIGSTKSZ * 4;
needs dynamic initialization, but is used by a function called indirectly
from .preinit_array and therefore before the variable is constructed.
This results in using 0 size instead and all asan instrumented programs
die with:
==91==ERROR: AddressSanitizer failed to allocate 0x0 (0) bytes of SetAlternateSignalStack (error code: 22)

Here is a cherry-pick from upstream to fix this.

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

	PR sanitizer/100114
	* sanitizer_common/sanitizer_posix_libcdep.cpp: Cherry-pick
	llvm-project revisions 82150606fb11d28813ae6da1101f5bda638165fe
	and b93629dd335ffee2fc4b9b619bf86c3f9e6b0023.
2021-04-17 11:27:14 +02:00
GCC Administrator
8ae884c09f Daily bump. 2021-04-17 00:16:25 +00:00
José Rui Faustino de Sousa
c1c86ab96c Fortran: Add missing TKR initialization [PR100094]
gcc/fortran/ChangeLog:

	PR fortran/100094
	* trans-array.c (gfc_trans_deferred_array): Add code to initialize
	pointers and allocatables with correct TKR parameters.

gcc/testsuite/ChangeLog:

	PR fortran/100094
	* gfortran.dg/PR100094.f90: New test.
2021-04-16 23:33:04 +00:00
Christophe Lyon
0754a104be testsuite/arm: Fix scan-assembler-times in pr96770.c with movt/movw
The previous change to this testcase missed the fact that the data may
be accessed via an anchor, depending on the optimization level,
leading to false failures.

This patch restricts matching to upper16:lower16 followed by
non-spaces, followed by +4 (in f4) or +320 (in f5).

Using '.*' instead of '[^ \]' would match accross the whole assembly
file, which is not what we want, hence the limitation with spaces.

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

	gcc/testsuite/
	PR target/96770
	* gcc.target/arm/pure-code/pr96770.c: Fix scan-assembler-times
	with movt/movw.
2021-04-16 19:58:25 +00:00
Jakub Jelinek
49813aad32 aarch64: Don't emit -Wpsabi note when ABI was never affected [PR91710]
As the following testcase shows, we emit a -Wpsabi note about argument
passing change since GCC 9, but in reality the ABI didn't change.
The alignment is 8 bits in GCC < 9 and 32 bits in GCC >= 9 and
the aarch64_function_arg_alignment returns in that case:
return MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY);
so when both the old and new alignment are smaller or equal to PARM_BOUNDARY
(or both are larger than STACK_BOUNDARY, just in theory), even when the new
one is bigger, it doesn't change the argument passing.

So, the following patch changes aarch64_function_arg_alignment to tell the
callers the exact old alignmentm so that they can test it if needed.
The other aarch64_function_arg_alignment callers either check the
alignment for equality against 16-byte alignment (when old alignment was
smaller than that and the new one is 16-byte, we want to emit -Wpsabi
in all the cases) or the va_arg case which I think is ok now too.

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

	PR target/91710
	* config/aarch64/aarch64.c (aarch64_function_arg_alignment): Change
	abi_break argument from bool * to unsigned *, store there the pre-GCC 9
	alignment.
	(aarch64_layout_arg, aarch64_gimplify_va_arg_expr): Adjust callers.
	(aarch64_function_arg_regno_p): Likewise.  Only emit -Wpsabi note if
	the old and new alignment after applying MIN/MAX to it is different.

	* gcc.target/aarch64/pr91710.c: New test.
2021-04-16 20:49:33 +02:00
Jakub Jelinek
4a1493f060 intl: Add --enable-host-shared support [PR100096]
As mentioned in the PR, building gcc with jit enabled and
--enable-host-shared doesn't work on NetBSD/i?86, as libgccjit.so.0
has text relocations.
The r0-125846-g459260ecf8b420b029601a664cdb21c185268ecb changes
added --enable-host-shared support to various libraries, but didn't
add it to intl/ subdirectory; on Linux it isn't really needed, because
all: all-no
all-no: #nothing
but on other OSes intl/libintl.a is built.

The following patch makes sure it is built with -fPIC when
--enable-host-shared is used.

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

	PR jit/100096
	* configure.ac: Add --enable-host-shared support.
	* Makefile.in: Update copyright.  Add @PICFLAG@ to CFLAGS.
	* configure: Regenerated.
2021-04-16 18:32:27 +02:00
José Rui Faustino de Sousa
98c5b5924d Fortran: Fix ICE due to referencing a NULL pointer [PR100018]
gcc/fortran/ChangeLog:

	PR fortran/100018
	* resolve.c: Add association check before de-referencing pointer.

gcc/testsuite/ChangeLog:

	PR fortran/100018
	* gfortran.dg/PR10018.f90: New test.
2021-04-16 16:19:56 +00:00
Tamar Christina
8535755af7 SVE: Fix wrong sve predicate split (PR100048)
The attached testcase generates the following paradoxical subregs when creating
the predicates.

(insn 22 21 23 2 (set (reg:VNx8BI 100)
	(subreg:VNx8BI (reg:VNx2BI 103) 0))
     (expr_list:REG_EQUAL (const_vector:VNx8BI [
		(const_int 1 [0x1])
		(const_int 0 [0])
		(const_int 1 [0x1])
	(const_int 0 [0]) repeated x5
	    ])
	(nil)))

and

(insn 15 14 16 2 (set (reg:VNx8BI 96)
	(subreg:VNx8BI (reg:VNx2BI 99) 0))
     (expr_list:REG_EQUAL (const_vector:VNx8BI [
		(const_int 1 [0x1])
		(const_int 0 [0]) repeated x7
	    ])
	(nil)))

This causes CSE to incorrectly think that the two predicates are equal because
some of the significant bits get ignored due to the subreg.

The attached patch instead makes it so it always looks at all 16-bits of the
predicate, but in turn means we need to generate a TRN that matches the expected
result mode.  In effect in RTL we keep the mode as VNx16BI but during codegen
re-interpret them as the mode the predicate instruction wanted:

(insn 10 9 11 2 (set (reg:VNx8BI 96)
	(subreg:VNx8BI (reg:VNx16BI 99) 0))
     (expr_list:REG_EQUAL (const_vector:VNx8BI [
		(const_int 1 [0x1])
		(const_int 0 [0]) repeated x7
	    ])
	(nil)))

Which needed correction to the TRN pattern.  A new TRN1_CONV unspec is
introduced which allows one to keep the arguments as VNx16BI but encode the
instruction as a type of the last operand.

(insn 9 8 10 2 (set (reg:VNx16BI 99)
	(unspec:VNx16BI [
		(reg:VNx16BI 97)
		(reg:VNx16BI 98)
		(reg:VNx2BI 100)
	    ] UNSPEC_TRN1_CONV))
	(nil))

This allows us remove all the paradoxical subregs and end up with

(insn 16 15 17 2 (set (reg:VNx8BI 101)
	(subreg:VNx8BI (reg:VNx16BI 104) 0))
	(expr_list:REG_EQUAL (const_vector:VNx8BI [
		(const_int 1 [0x1])
		(const_int 0 [0])
		(const_int 1 [0x1])
		(const_int 0 [0]) repeated x5
	    ])
	(nil)))

gcc/ChangeLog:

	PR target/100048
	* config/aarch64/aarch64-sve.md (@aarch64_sve_trn1_conv<mode>): New.
	* config/aarch64/aarch64.c (aarch64_expand_sve_const_pred_trn): Use new
	TRN optab.
	* config/aarch64/iterators.md (UNSPEC_TRN1_CONV): New.

gcc/testsuite/ChangeLog:

	PR target/100048
	* gcc.target/aarch64/sve/pr100048.c: New test.
2021-04-16 16:58:50 +01:00
Jakub Jelinek
35e8b38a91 c++: Fix empty base stores in cxx_eval_store_expression [PR100111]
In r11-6895 handling of empty bases has been fixed such that non-lval
stores of empty classes are not added when the type of *valp doesn't
match the type of the initializer, but as this testcase shows it is
done only when *valp is non-NULL.  If it is NULL, we still shouldn't
add empty class constructors if the type of the constructor elt *valp
points to doesn't match.

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

	PR c++/100111
	* constexpr.c (cxx_eval_store_expression): Don't add CONSTRUCTORs
	for empty classes into *valp when types don't match even when *valp
	is NULL.

	* g++.dg/cpp0x/constexpr-100111.C: New test.
2021-04-16 17:44:03 +02:00