Commit Graph

187742 Commits

Author SHA1 Message Date
Aldy Hernandez
410e874263 Use non-null knowledge in path_range_query.
This patch improves ranges for pointers we are interested in a path, by
using the non-null class from the ranger.  This allows us to thread more
paths with minimal effort.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* gimple-range-path.cc (path_range_query::range_defined_in_block):
	Adjust for non-null.
	(path_range_query::adjust_for_non_null_uses): New.
	(path_range_query::precompute_ranges): Call
	adjust_for_non_null_uses.
	* gimple-range-path.h: Add m_non_null and
	adjust_for_non_null_uses.
2021-09-03 15:30:57 +02:00
Aldy Hernandez
1342891464 Improve path_range_query dumps.
Tested on x86-64 Linux.

gcc/ChangeLog:

	* gimple-range-path.cc (path_range_query::dump): Dump path
	length.
	(path_range_query::precompute_ranges): Dump entire path.
2021-09-03 15:30:57 +02:00
Aldy Hernandez
abcd237363 Implement relation_oracle::debug.
Tested on x86-64 Linux.

gcc/ChangeLog:

	* value-relation.cc (relation_oracle::debug): New.
	* value-relation.h (relation_oracle::debug): New.
2021-09-03 15:30:56 +02:00
Aldy Hernandez
d2e278e26a Remove unnecessary include from tree-ssa-loop-ch.c
Tested on x86-64 Linux.

gcc/ChangeLog:

	* tree-ssa-loop-ch.c: Remove unnecessary include file.
2021-09-03 15:30:56 +02:00
Aldy Hernandez
5db93cd083 Skip statements with no BB in ranger.
The function postfold_gcond_edges() registers relations coming out of a
GIMPLE_COND.  With upcoming changes, we may be called with statements
not in the IL (for example, dummy statements created by the
forward threader).  This patch avoids breakage by exiting if the
statement does not have a defining basic block.  There is a similar
change to the path solver.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* gimple-range-fold.cc (fold_using_range::postfold_gcond_edges):
	Skip statements with no defining BB.
	* gimple-range-path.cc (path_range_query::range_defined_in_block):
	Do not get confused by statements with no defining BB.
2021-09-03 15:30:56 +02:00
Aldy Hernandez
bccf4b88e1 Improve support for IMAGPART_EXPR and REALPART_EXPR in ranger.
Currently we adjust statements containing an IMAGPART_EXPR if the
defining statement was one of a few built-ins known to return boolean
types.  We can also adjust statements for both IMAGPART_EXPR and
REALPART_EXPR where the defining statement is a constant.

This patch adds such support, and cleans up the code a bit.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* gimple-range-fold.cc (adjust_imagpart_expr): Move from
	gimple_range_adjustment.  Add support for constants.
	(adjust_realpart_expr): New.
	(gimple_range_adjustment): Move IMAGPART_EXPR code to
	adjust_imagpart_expr.
	* range-op.cc (integral_table::integral_table): Add entry for
	REALPART_CST.
2021-09-03 15:30:56 +02:00
Tobias Burnus
4ce90454c2 libgomp.*/error-1.{c,f90}: Fix dg-output newline pattern
libgomp/ChangeLog:

	* testsuite/libgomp.c-c++-common/error-1.c: Use \r\n not \n\r in
	dg-output.
	* testsuite/libgomp.fortran/error-1.f90: Likewise.
2021-09-03 15:27:00 +02:00
Eric Botcazou
8d34ffb4e8 Improve compatibility of -fdump-ada-spec with warnings
This makes sure that the style and warning settings used in the
C/C++ bindings generated by -fdump-ada-spec do not leak into the
units that use them.

gcc/c-family/
	* c-ada-spec.c (dump_ads): Generate pragmas to disable style checks
	and -gnatwu warning for the package specification.
2021-09-03 11:19:23 +02:00
Jakub Jelinek
090f0d78f1 openmp: Improve expand_omp_atomic_pipeline
When __atomic_* builtins were introduced, omp-expand.c (omp-low.c
at that point) has been adjusted in several spots so that it uses
the atomic builtins instead of sync builtins, but
expand_omp_atomic_pipeline has not because the __atomic_compare_exchange_*
APIs take address of the argument, so it kept using __sync_val_compare_swap_*.
That means it always uses seq_cst though.
This patch changes it to use the ATOMIC_COMPARE_EXCHANGE ifn which gimple-fold
folds __atomic_compare_exchange_* into - that ifn also passes expected
directly.

2021-09-03  Jakub Jelinek  <jakub@redhat.com>

	* omp-expand.c (expand_omp_atomic_pipeline): Use
	IFN_ATOMIC_COMPARE_EXCHANGE instead of
	BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_? so that memory order
	can be provided.
2021-09-03 09:54:58 +02:00
Jakub Jelinek
e902136b31 c++, abi: Set DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD on C++ zero width bitfields [PR102024]
The removal of remove_zero_width_bitfields function and its call from
C++ FE layout_class_type (which I've done in the P0466R5
layout-compatible helper intrinsics patch, so that the FE can actually
determine what is and isn't layout-compatible according to the spec)
unfortunately changed the ABI on various platforms.
The C FE has been keeping zero-width bitfields in the types, while
the C++ FE has been removing them after structure layout, so in various
cases when passing such structures in registers we had different ABI
between C and C++.

While both the C and C++ FE had some code to remove zero width bitfields
after structure layout, in both FEs it was buggy and didn't really remove
any.  In the C FE that code has been removed later on, while in the C++ FE
for GCC 4.5 in PR42217 it has been actually fixed, so the C++ FE started
to remove those bitfields.

The following patch doesn't change anything ABI-wise, but allows the
targets to decide what to do, emit -Wpsabi warnings etc.
Non-C zero width bitfields will be seen by the backends as normal
zero width bitfields, C++ zero width bitfields that used to be previously
removed will have DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD flag set.
I've reused the DECL_FIELD_ABI_IGNORED flag which is only used on non-bitfield
FIELD_DECLs right now, but the macros now check DECL_BIT_FIELD flag.

Each backend can then decide what it wants, whether it wants to keep
different ABI between C and C++ as in GCC 11 and older (i.e. incompatible
with G++ <= 4.4, compatible with G++ 4.5 .. 11), for that it would
ignore for the aggregate passing/returning decisions all
DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD FIELD_DECLs), whether it wants to never
ignore zero width bitfields (no changes needed for that case, except perhaps
-Wpsabi warning should be added and for that DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD
can be tested), or whether it wants to always ignore zero width bitfields
(I think e.g. riscv in GCC 10+ does that).

All this patch does is set the flag which the backends can then use.

2021-09-03  Jakub Jelinek  <jakub@redhat.com>

	PR target/102024
gcc/
	* tree.h (DECL_FIELD_ABI_IGNORED): Changed into rvalue only macro
	that is false if DECL_BIT_FIELD.
	(SET_DECL_FIELD_ABI_IGNORED, DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD,
	SET_DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD): Define.
	* tree-streamer-out.c (pack_ts_decl_common_value_fields): For
	DECL_BIT_FIELD stream DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD instead
	of DECL_FIELD_ABI_IGNORED.
	* tree-streamer-in.c (unpack_ts_decl_common_value_fields): Use
	SET_DECL_FIELD_ABI_IGNORED instead of writing to
	DECL_FIELD_ABI_IGNORED and for DECL_BIT_FIELD use
	SET_DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD instead.
	* lto-streamer-out.c (hash_tree): For DECL_BIT_FIELD hash
	DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD instead of DECL_FIELD_ABI_IGNORED.
gcc/cp/
	* class.c (build_base_field): Use SET_DECL_FIELD_ABI_IGNORED
	instead of writing to DECL_FIELD_ABI_IGNORED.
	(layout_class_type): Likewise.  In the place where zero-width
	bitfields used to be removed, use
	SET_DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD on those fields instead.
gcc/lto/
	* lto-common.c (compare_tree_sccs_1): Also compare
	DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD values.
2021-09-03 09:46:32 +02:00
liuhongt
de6795bbf5 Remove macro check for __AMX_BF16/INT8/TILE__ in header file.
gcc/ChangeLog:

	PR target/102166
	* config/i386/amxbf16intrin.h : Remove macro check for __AMX_BF16__.
	* config/i386/amxint8intrin.h : Remove macro check for __AMX_INT8__.
	* config/i386/amxtileintrin.h : Remove macro check for __AMX_TILE__.

gcc/testsuite/ChangeLog:

	PR target/102166
	* g++.target/i386/pr102166.C: New test.
2021-09-03 13:04:41 +08:00
GCC Administrator
9f7c2bad52 Daily bump. 2021-09-03 00:16:33 +00:00
Sandra Loosemore
93b6b2f614 libgfortran: Further fixes for GFC/CFI descriptor conversions.
This patch is for:
PR100907 - Bind(c): failure handling wide character
PR100911 - Bind(c): failure handling C_PTR
PR100914 - Bind(c): errors handling complex
PR100915 - Bind(c): failure handling C_FUNPTR
PR100917 - Bind(c): errors handling long double real

All of these problems are related to the GFC descriptors constructed
by the Fortran front end containing ambigous or incomplete
information.  This patch does not attempt to change the GFC data
structure or the front end, and only makes the runtime interpret it in
more reasonable ways.  It's not a complete fix for any of the listed
issues.

The Fortran front end does not distinguish between C_PTR and
C_FUNPTR, mapping both onto BT_VOID.  That is what this patch does also.

The other bugs are related to GFC descriptors only containing elem_len
and not kind.  For complex types, the elem_len needs to be divided by
2 and then mapped onto a real kind.  On x86 targets, the kind
corresponding to C long double is different than its elem_len; since
we cannot accurately disambiguate between a 16-byte kind 10 long
double from __float128, this patch arbitrarily prefers to interpret that as
the standard long double type rather than the GNU extension.

Similarly, for character types, the GFC descriptor cannot distinguish
between character(kind=c_char, len=4) and character(kind=ucs4, len=1).
But since the front end currently rejects anything other than len=1
(PR92482) this patch uses the latter interpretation.

2021-09-01  Sandra Loosemore  <sandra@codesourcery.com>
	    José Rui Faustino de Sousa  <jrfsousa@gmail.com>

gcc/testsuite/
	PR fortran/100911
	PR fortran/100915
	PR fortran/100916
	* gfortran.dg/PR100911.c: New file.
	* gfortran.dg/PR100911.f90: New file.
	* gfortran.dg/PR100914.c: New file.
	* gfortran.dg/PR100914.f90: New file.
	* gfortran.dg/PR100915.c: New file.
	* gfortran.dg/PR100915.f90: New file.

libgfortran/
	PR fortran/100907
	PR fortran/100911
	PR fortran/100914
	PR fortran/100915
	PR fortran/100917
	* ISO_Fortran_binding-1-tmpl.h (CFI_type_cfunptr): Make equivalent
	to CFI_type_cptr.
	* runtime/ISO_Fortran_binding.c (cfi_desc_to_gfc_desc): Fix
	handling of CFI_type_cptr and CFI_type_cfunptr.  Additional error
	checking and code cleanup.
	(gfc_desc_to_cfi_desc): Likewise.  Also correct kind mapping
	for character, complex, and long double types.
2021-09-02 16:41:02 -07:00
Sandra Loosemore
cb17b50541 Fortran: TS 29113 testsuite
Add tests to exercise features added to Fortran via TS 29113, "Further
Interoperability of Fortran with C":

https://wg5-fortran.org/N1901-N1950/N1942.pdf

2021-09-01  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/testsuite/
	* gfortran.dg/c-interop/allocatable-dummy-c.c: New file.
	* gfortran.dg/c-interop/allocatable-dummy.f90: New file.
	* gfortran.dg/c-interop/allocatable-optional-pointer.f90: New file.
	* gfortran.dg/c-interop/allocate-c.c: New file.
	* gfortran.dg/c-interop/allocate-errors-c.c: New file.
	* gfortran.dg/c-interop/allocate-errors.f90: New file.
	* gfortran.dg/c-interop/allocate.f90: New file.
	* gfortran.dg/c-interop/argument-association-assumed-rank-1.f90:
	New file.
	* gfortran.dg/c-interop/argument-association-assumed-rank-2.f90:
	New file.
	* gfortran.dg/c-interop/argument-association-assumed-rank-3.f90:
	New file.
	* gfortran.dg/c-interop/argument-association-assumed-rank-4.f90:
	New file.
	* gfortran.dg/c-interop/argument-association-assumed-rank-5.f90:
	New file.
	* gfortran.dg/c-interop/argument-association-assumed-rank-6.f90:
	New file.
	* gfortran.dg/c-interop/argument-association-assumed-rank-7.f90:
	New file.
	* gfortran.dg/c-interop/argument-association-assumed-rank-8.f90:
	New file.
	* gfortran.dg/c-interop/assumed-type-dummy.f90: New file.
	* gfortran.dg/c-interop/c-interop.exp: New file.
	* gfortran.dg/c-interop/c1255-1.f90: New file.
	* gfortran.dg/c-interop/c1255-2.f90: New file.
	* gfortran.dg/c-interop/c1255a.f90: New file.
	* gfortran.dg/c-interop/c407a-1.f90: New file.
	* gfortran.dg/c-interop/c407a-2.f90: New file.
	* gfortran.dg/c-interop/c407b-1.f90: New file.
	* gfortran.dg/c-interop/c407b-2.f90: New file.
	* gfortran.dg/c-interop/c407c-1.f90: New file.
	* gfortran.dg/c-interop/c516.f90: New file.
	* gfortran.dg/c-interop/c524a.f90: New file.
	* gfortran.dg/c-interop/c535a-1.f90: New file.
	* gfortran.dg/c-interop/c535a-2.f90: New file.
	* gfortran.dg/c-interop/c535b-1.f90: New file.
	* gfortran.dg/c-interop/c535b-2.f90: New file.
	* gfortran.dg/c-interop/c535b-3.f90: New file.
	* gfortran.dg/c-interop/c535c-1.f90: New file.
	* gfortran.dg/c-interop/c535c-2.f90: New file.
	* gfortran.dg/c-interop/c535c-3.f90: New file.
	* gfortran.dg/c-interop/c535c-4.f90: New file.
	* gfortran.dg/c-interop/cf-descriptor-1-c.c: New file.
	* gfortran.dg/c-interop/cf-descriptor-1.f90: New file.
	* gfortran.dg/c-interop/cf-descriptor-2-c.c: New file.
	* gfortran.dg/c-interop/cf-descriptor-2.f90: New file.
	* gfortran.dg/c-interop/cf-descriptor-3-c.c: New file.
	* gfortran.dg/c-interop/cf-descriptor-3.f90: New file.
	* gfortran.dg/c-interop/cf-descriptor-4-c.c: New file.
	* gfortran.dg/c-interop/cf-descriptor-4.f90: New file.
	* gfortran.dg/c-interop/cf-descriptor-5-c.c: New file.
	* gfortran.dg/c-interop/cf-descriptor-5.f90: New file.
	* gfortran.dg/c-interop/cf-descriptor-6-c.c: New file.
	* gfortran.dg/c-interop/cf-descriptor-6.f90: New file.
	* gfortran.dg/c-interop/cf-descriptor-7-c.c: New file.
	* gfortran.dg/c-interop/cf-descriptor-7.f90: New file.
	* gfortran.dg/c-interop/cf-descriptor-8-c.c: New file.
	* gfortran.dg/c-interop/cf-descriptor-8.f90: New file.
	* gfortran.dg/c-interop/cf-out-descriptor-1-c.c: New file.
	* gfortran.dg/c-interop/cf-out-descriptor-1.f90: New file.
	* gfortran.dg/c-interop/cf-out-descriptor-2-c.c: New file.
	* gfortran.dg/c-interop/cf-out-descriptor-2.f90: New file.
	* gfortran.dg/c-interop/cf-out-descriptor-3-c.c: New file.
	* gfortran.dg/c-interop/cf-out-descriptor-3.f90: New file.
	* gfortran.dg/c-interop/cf-out-descriptor-4-c.c: New file.
	* gfortran.dg/c-interop/cf-out-descriptor-4.f90: New file.
	* gfortran.dg/c-interop/cf-out-descriptor-5-c.c: New file.
	* gfortran.dg/c-interop/cf-out-descriptor-5.f90: New file.
	* gfortran.dg/c-interop/cf-out-descriptor-6-c.c: New file.
	* gfortran.dg/c-interop/cf-out-descriptor-6.f90: New file.
	* gfortran.dg/c-interop/contiguous-1-c.c: New file.
	* gfortran.dg/c-interop/contiguous-1.f90: New file.
	* gfortran.dg/c-interop/contiguous-2-c.c: New file.
	* gfortran.dg/c-interop/contiguous-2.f90: New file.
	* gfortran.dg/c-interop/contiguous-3-c.c: New file.
	* gfortran.dg/c-interop/contiguous-3.f90: New file.
	* gfortran.dg/c-interop/deferred-character-1.f90: New file.
	* gfortran.dg/c-interop/deferred-character-2.f90: New file.
	* gfortran.dg/c-interop/dump-descriptors.c: New file.
	* gfortran.dg/c-interop/dump-descriptors.h: New file.
	* gfortran.dg/c-interop/establish-c.c: New file.
	* gfortran.dg/c-interop/establish-errors-c.c: New file.
	* gfortran.dg/c-interop/establish-errors.f90: New file.
	* gfortran.dg/c-interop/establish.f90: New file.
	* gfortran.dg/c-interop/explicit-interface.f90: New file.
	* gfortran.dg/c-interop/fc-descriptor-1-c.c: New file.
	* gfortran.dg/c-interop/fc-descriptor-1.f90: New file.
	* gfortran.dg/c-interop/fc-descriptor-2-c.c: New file.
	* gfortran.dg/c-interop/fc-descriptor-2.f90: New file.
	* gfortran.dg/c-interop/fc-descriptor-3-c.c: New file.
	* gfortran.dg/c-interop/fc-descriptor-3.f90: New file.
	* gfortran.dg/c-interop/fc-descriptor-4-c.c: New file.
	* gfortran.dg/c-interop/fc-descriptor-4.f90: New file.
	* gfortran.dg/c-interop/fc-descriptor-5-c.c: New file.
	* gfortran.dg/c-interop/fc-descriptor-5.f90: New file.
	* gfortran.dg/c-interop/fc-descriptor-6-c.c: New file.
	* gfortran.dg/c-interop/fc-descriptor-6.f90: New file.
	* gfortran.dg/c-interop/fc-descriptor-7-c.c: New file.
	* gfortran.dg/c-interop/fc-descriptor-7.f90: New file.
	* gfortran.dg/c-interop/fc-descriptor-8-c.c: New file.
	* gfortran.dg/c-interop/fc-descriptor-8.f90: New file.
	* gfortran.dg/c-interop/fc-descriptor-9-c.c: New file.
	* gfortran.dg/c-interop/fc-descriptor-9.f90: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-1-c.c: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-1.f90: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-2-c.c: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-2.f90: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-3-c.c: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-3.f90: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-4-c.c: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-4.f90: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-5-c.c: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-5.f90: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-6-c.c: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-6.f90: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-7-c.c: New file.
	* gfortran.dg/c-interop/fc-out-descriptor-7.f90: New file.
	* gfortran.dg/c-interop/ff-descriptor-1.f90: New file.
	* gfortran.dg/c-interop/ff-descriptor-2.f90: New file.
	* gfortran.dg/c-interop/ff-descriptor-3.f90: New file.
	* gfortran.dg/c-interop/ff-descriptor-4.f90: New file.
	* gfortran.dg/c-interop/ff-descriptor-5.f90: New file.
	* gfortran.dg/c-interop/ff-descriptor-6.f90: New file.
	* gfortran.dg/c-interop/ff-descriptor-7.f90: New file.
	* gfortran.dg/c-interop/note-5-3.f90: New file.
	* gfortran.dg/c-interop/note-5-4-c.c: New file.
	* gfortran.dg/c-interop/note-5-4.f90: New file.
	* gfortran.dg/c-interop/optional-c.c: New file.
	* gfortran.dg/c-interop/optional.f90: New file.
	* gfortran.dg/c-interop/rank-class.f90: New file.
	* gfortran.dg/c-interop/rank.f90: New file.
	* gfortran.dg/c-interop/removed-restrictions-1.f90: New file.
	* gfortran.dg/c-interop/removed-restrictions-2.f90: New file.
	* gfortran.dg/c-interop/removed-restrictions-3.f90: New file.
	* gfortran.dg/c-interop/removed-restrictions-4.f90: New file.
	* gfortran.dg/c-interop/section-1-c.c: New file.
	* gfortran.dg/c-interop/section-1.f90: New file.
	* gfortran.dg/c-interop/section-1p.f90: New file.
	* gfortran.dg/c-interop/section-2-c.c: New file.
	* gfortran.dg/c-interop/section-2.f90: New file.
	* gfortran.dg/c-interop/section-2p.f90: New file.
	* gfortran.dg/c-interop/section-3-c.c: New file.
	* gfortran.dg/c-interop/section-3.f90: New file.
	* gfortran.dg/c-interop/section-3p.f90: New file.
	* gfortran.dg/c-interop/section-4-c.c: New file.
	* gfortran.dg/c-interop/section-4.f90: New file.
	* gfortran.dg/c-interop/section-errors-c.c: New file.
	* gfortran.dg/c-interop/section-errors.f90: New file.
	* gfortran.dg/c-interop/select-c.c: New file.
	* gfortran.dg/c-interop/select-errors-c.c: New file.
	* gfortran.dg/c-interop/select-errors.f90: New file.
	* gfortran.dg/c-interop/select.f90: New file.
	* gfortran.dg/c-interop/setpointer-c.c: New file.
	* gfortran.dg/c-interop/setpointer-errors-c.c: New file.
	* gfortran.dg/c-interop/setpointer-errors.f90: New file.
	* gfortran.dg/c-interop/setpointer.f90: New file.
	* gfortran.dg/c-interop/shape.f90: New file.
	* gfortran.dg/c-interop/size.f90: New file.
	* gfortran.dg/c-interop/tkr.f90: New file.
	* gfortran.dg/c-interop/typecodes-array-basic-c.c: New file.
	* gfortran.dg/c-interop/typecodes-array-basic.f90: New file.
	* gfortran.dg/c-interop/typecodes-array-char-c.c: New file.
	* gfortran.dg/c-interop/typecodes-array-char.f90: New file.
	* gfortran.dg/c-interop/typecodes-array-float128-c.c: New file.
	* gfortran.dg/c-interop/typecodes-array-float128.f90: New file.
	* gfortran.dg/c-interop/typecodes-array-int128-c.c: New file.
	* gfortran.dg/c-interop/typecodes-array-int128.f90: New file.
	* gfortran.dg/c-interop/typecodes-array-longdouble-c.c: New file.
	* gfortran.dg/c-interop/typecodes-array-longdouble.f90: New file.
	* gfortran.dg/c-interop/typecodes-sanity-c.c: New file.
	* gfortran.dg/c-interop/typecodes-sanity.f90: New file.
	* gfortran.dg/c-interop/typecodes-scalar-basic-c.c: New file.
	* gfortran.dg/c-interop/typecodes-scalar-basic.f90: New file.
	* gfortran.dg/c-interop/typecodes-scalar-float128-c.c: New file.
	* gfortran.dg/c-interop/typecodes-scalar-float128.f90: New file.
	* gfortran.dg/c-interop/typecodes-scalar-int128-c.c: New file.
	* gfortran.dg/c-interop/typecodes-scalar-int128.f90: New file.
	* gfortran.dg/c-interop/typecodes-scalar-longdouble-c.c: New file.
	* gfortran.dg/c-interop/typecodes-scalar-longdouble.f90: New file.
	* gfortran.dg/c-interop/ubound.f90: New file.
	* lib/target-supports.exp
	(check_effective_target_fortran_real_c_float128): New function.
2021-09-02 16:34:27 -07:00
Jonathan Wakely
89cf858571 libstdc++: Implement std::atomic<T*>::compare_exchange_weak
For some reason r170217 didn't add compare_exchange_weak to the
__atomic_base<T*> partial specialization, and so weak compare exchange
operations on pointers use compare_exchange_strong instead.

This adds __atomic_base<T*>::compare_exchange_weak and then uses it in
std::atomic<T*>::compare_exchange_weak.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* include/bits/atomic_base.h (__atomic_base<P*>::compare_exchange_weak):
	Add new functions.
	* include/std/atomic (atomic<T*>::compare_exchange_weak): Use
	it.
2021-09-02 18:22:33 +01:00
Jonathan Wakely
892400f1f2 libstdc++: Tweak whitespace in <atomic>
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* include/std/atomic: Tweak whitespace.
2021-09-02 18:22:32 +01:00
Jonathan Wakely
dba1ab2122 libstdc++: Remove "no stronger" assertion in compare exchange [PR102177]
P0418R2 removed some preconditions from std::atomic::compare_exchange_*
but we still enforce them via __glibcxx_assert. This removes those
assertions.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	PR c++/102177
	* include/bits/atomic_base.h (__is_valid_cmpexch_failure_order):
	New function to check if a memory order is valid for the failure
	case of compare exchange operations.
	(__atomic_base<I>::compare_exchange_weak): Simplify assertions
	by using __is_valid_cmpexch_failure_order.
	(__atomic_base<I>::compare_exchange_strong): Likewise.
	(__atomic_base<P*>::compare_exchange_weak): Likewise.
	(__atomic_base<P*>::compare_exchange_strong): Likewise.
	(__atomic_impl::compare_exchange_weak): Add assertion.
	(__atomic_impl::compare_exchange_strong): Likewise.
	* include/std/atomic (atomic::compare_exchange_weak): Likewise.
	(atomic::compare_exchange_strong): Likewise.
2021-09-02 18:21:23 +01:00
Jonathan Wakely
5b73abd1a5 libstdc++: Define std::invoke_r for C++23 (P2136R3)
We already supported this feature as std::__invoke<R>, for internal use.
This just adds a public version of it to <functional>.

Internal uses should continue to include <bits/invoke.h> and use
std::__invoke<R> so that they don't need to include all of <functional>.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* include/std/functional (invoke_r): Define.
	* include/std/version (__cpp_lib_invoke_r): Define.
	* testsuite/20_util/function_objects/invoke/version.cc: Check
	for __cpp_lib_invoke_r as well as __cpp_lib_invoke.
	* testsuite/20_util/function_objects/invoke/4.cc: New test.
2021-09-02 17:48:45 +01:00
Martin Sebor
9695e1c23b Improve -Wuninitialized note location.
Related:
PR tree-optimization/17506 - warning about uninitialized variable points to wrong location
PR testsuite/37182 - Revision 139286 caused gcc.dg/pr17506.c and gcc.dg/uninit-15.c

gcc/ChangeLog:

	PR tree-optimization/17506
	PR testsuite/37182
	* tree-ssa-uninit.c (warn_uninit): Remove conditional guarding note.

gcc/testsuite/ChangeLog:

	PR tree-optimization/17506
	PR testsuite/37182
	* gcc.dg/diagnostic-tree-expr-ranges-2.c: Add expected output.
	* gcc.dg/uninit-15-O0.c: Remove xfail.
	* gcc.dg/uninit-15.c: Same.
2021-09-02 09:20:09 -06:00
Marcel Vollweiler
5960477a43 Add support for device-modifiers for 'omp target device'.
gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/target-device-ancestor-4.f90: Comment out dg-final to avoid
	UNRESOLVED.
2021-09-02 06:01:22 -07:00
Richard Biener
483e400870 Refine fix for PR78185, improve LIM for code after inner loops
This refines the fix for PR78185 after understanding that the code
regarding to the comment 'In a loop that is always entered we may
proceed anyway.  But record that we entered it and stop once we leave
it.' was supposed to protect us from leaving possibly infinite inner
loops.  The simpler fix of moving the misplaced stopping code
can then be refined to continue processing when the exited inner
loop is finite, improving invariant motion for cases like in the
added testcase.

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

	* tree-ssa-loop-im.c (fill_always_executed_in_1): Refine
	fix for PR78185 and continue processing when leaving
	finite inner loops.

	* gcc.dg/tree-ssa/ssa-lim-16.c: New testcase.
2021-09-02 11:39:27 +02:00
Jakub Jelinek
2af6dd77ea match.pd: Demote IFN_{ADD,SUB,MUL}_OVERFLOW operands [PR99591]
The overflow builtins work on infinite precision integers and then convert
to the result type's precision, so any argument promotions are useless.
The expand_arith_overflow expansion is able to demote the arguments itself
through get_range_pos_neg and get_min_precision calls and if needed promote
to whatever mode it decides to perform the operations in, but if there are
any promotions it demoted, those are already expanded.  Normally combine
would remove the useless sign or zero extensions when it sees the result
of those is only used in a lowpart subreg, but typically those lowpart
subregs appear multiple times in the pattern so that they describe properly
the overflow behavior and combine gives up, so we end up with e.g.
        movswl  %si, %esi
        movswl  %di, %edi
        imulw   %si, %di
        seto    %al
where both movswl insns are useless.

The following patch fixes it by demoting operands of the ifns (only gets
rid of integral to integral conversions that increase precision).
While IFN_{ADD,MUL}_OVERFLOW are commutative and just one simplify would be
enough, IFN_SUB_OVERFLOW is not, therefore two simplifications.

2021-09-02  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/99591
	* match.pd: Demote operands of IFN_{ADD,SUB,MUL}_OVERFLOW if they
	were promoted.

	* gcc.target/i386/pr99591.c: New test.
	* gcc.target/i386/pr97950.c: Match or reject setb or jn?b instructions
	together with seta or jn?a.
2021-09-02 11:25:07 +02:00
Richard Biener
1e6267b335 Revert "tree-optimization/102155 - fix LIM fill_always_executed_in CFG walk"
This reverts commit f482bf2af8.
2021-09-02 09:58:46 +02:00
liuhongt
b387e664cf libgcc: Enable hfmode soft-sf/df/xf/tf extensions and truncations.
libgcc/ChangeLog:

	* config/i386/32/sfp-machine.h (_FP_NANFRAC_H): New macro.
	* config/i386/64/sfp-machine.h (_FP_NANFRAC_H): Ditto.
	* config/i386/sfp-machine.h (_FP_NANSIGN_H): Ditto.
	* config/i386/t-softfp: Add hf soft-fp.
	* config.host: Add i386/64/t-softfp.
	* config/i386/64/t-softfp: New file.
2021-09-02 14:11:59 +08:00
liuhongt
7cbc870c49 Enable _Float16 type for TARGET_SSE2 and above.
gcc/ChangeLog:

	* config/i386/i386-modes.def (FLOAT_MODE): Define ieee HFmode.
	* config/i386/i386.c (enum x86_64_reg_class): Add
	X86_64_SSEHF_CLASS.
	(merge_classes): Handle X86_64_SSEHF_CLASS.
	(examine_argument): Ditto.
	(construct_container): Ditto.
	(classify_argument): Ditto, and set HFmode/HCmode to
	X86_64_SSEHF_CLASS.
	(function_value_32): Return _FLoat16/Complex Float16 by
	%xmm0.
	(function_value_64): Return _Float16/Complex Float16 by SSE
	register.
	(ix86_print_operand): Handle CONST_DOUBLE HFmode.
	(ix86_secondary_reload): Require gpr as intermediate register
	to store _Float16 from sse register when sse4 is not
	available.
	(ix86_libgcc_floating_mode_supported_p): Enable _FLoat16 under
	sse2.
	(ix86_scalar_mode_supported_p): Ditto.
	(TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P): Defined.
	* config/i386/i386.h (VALID_SSE2_REG_MODE): Add HFmode.
	(VALID_INT_MODE_P): Add HFmode and HCmode.
	* config/i386/i386.md (*pushhf_rex64): New define_insn.
	(*pushhf): Ditto.
	(*movhf_internal): Ditto.
	* doc/extend.texi (Half-Precision Floating Point): Documemt
	_Float16 for x86.

gcc/lto/ChangeLog:

	* lto-lang.c (lto_type_for_mode): Return float16_type_node
	when mode == TYPE_MODE (float16_type_node).

gcc/testsuite/ChangeLog

	* gcc.target/i386/sse2-float16-1.c: New test.
	* gcc.target/i386/sse2-float16-2.c: Ditto.
	* gcc.target/i386/sse2-float16-3.c: Ditto.
	* gcc.target/i386/float16-5.c: New test.
2021-09-02 14:11:57 +08:00
liuhongt
e42d2d2a20 Update hf soft-fp from glibc.
libgcc/ChangeLog

	* soft-fp/eqhf2.c: New file.
	* soft-fp/extendhfdf2.c: New file.
	* soft-fp/extendhfsf2.c: New file.
	* soft-fp/half.h (FP_CMP_EQ_H): New marco.
	* soft-fp/truncdfhf2.c: New file
	* soft-fp/truncsfhf2.c: New file
2021-09-02 14:11:53 +08:00
Richard Biener
f482bf2af8 tree-optimization/102155 - fix LIM fill_always_executed_in CFG walk
This fixes the CFG walk order of fill_always_executed_in to use
RPO oder rather than the dominator based order computed by
get_loop_body_in_dom_order.  That fixes correctness issues with
unordered dominator children.

The RPO order computed by rev_post_order_and_mark_dfs_back_seme in
its for-iteration mode is a good match for the algorithm.

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

	PR tree-optimization/102155
	* tree-ssa-loop-im.c (fill_always_executed_in_1): Iterate
	over a part of the RPO array and do not recurse here.
	Dump blocks marked as always executed.
	(fill_always_executed_in): Walk over the RPO array and
	process loops whose header we run into.
	(loop_invariant_motion_in_fun): Compute the first RPO
	using rev_post_order_and_mark_dfs_back_seme in iteration
	order and pass that to fill_always_executed_in.
2021-09-02 07:55:29 +02:00
YunQiang Su
6e16b2123d Revert "MIPS: add .module mipsREV to all output asm file"
This reverts commit d904008df2.

".module MIPSRev" has higher priority than -march=octeon or like.
It makes assembler cannot recognize the extension instructions
of octeon (See pr62030-octeon.c).
2021-09-02 10:17:18 +08:00
GCC Administrator
e11c6046f9 Daily bump. 2021-09-02 00:16:59 +00:00
Jeff Law
165446a1e8 Call reduce_vector_comparison_to_scalar_comparison earlier
As noted in the PR, we can get an ICE after the introduction of code to reduce a vector comparison to a scalar.  The problem is we left the operand cache in an inconsistent state because we called the new function too late.   This is trivially fixed by making the transformation before we call update_stmt_if_modified.

The irony here is the whole point of calling reduce_vector_comparison_to_scalar_comparison when we did was to expose these kinds of secondary opportunities.  In this particular case we collapsed the test to a comparison of constants (thus no SSA operands).

Anyway, this fixes the problem in the obvious way.  This may all end up being moot if I can twiddle Richi's match.pd pattern to work.  It doesn't work as-written due to a couple issues that I haven't worked totally through yet.

Installed on the trunk after bootstrap & regression testing on x86 and verifying it addresses the aarch64 issue.

gcc/
	PR tree-optimization/102152
	* tree-ssa-dom.c (dom_opt_dom_walker::optimize_stmt): Reduce a vector
	comparison to a scalar comparison before calling
	update_stmt_if_modified.

gcc/testsuite/
	PR tree-optimization/102152
	* gcc.dg/pr102152.c: New test
2021-09-01 19:13:58 -04:00
Andrew Pinski
a45786e9a3 Fix target/101934: aarch64 memset code creates unaligned stores for -mstrict-align
The problem here is the aarch64_expand_setmem code did not check
STRICT_ALIGNMENT if it is creating an overlapping store.
This patch adds that check and the testcase works.

gcc/ChangeLog:

	PR target/101934
	* config/aarch64/aarch64.c (aarch64_expand_setmem):
	Check STRICT_ALIGNMENT before creating an overlapping
	store.

gcc/testsuite/ChangeLog:

	PR target/101934
	* gcc.target/aarch64/memset-strict-align-1.c: New test.
2021-09-01 20:58:00 +00:00
Jakub Jelinek
c4d6dcacfc libcpp: Implement C++23 P1949R7 - C++ Identifier Syntax using Unicode Standard Annex 31
The following patch implements the
P1949R7 - C++ Identifier Syntax using Unicode Standard Annex 31
paper.  We already allow UTF-8 characters in the source, so that part
is already implemented, so IMHO all we need to do is pedwarn instead of
just warn for the (default) -Wnormalize=nfc (or for -Wnormalize={id,nkfc})
if the character is not in NFC and to use the unicode XID_Start and
XID_Continue derived code properties to find out what characters are allowed
(the standard actually adds U+005F to XID_Start, but we are handling the
ASCII compatible characters differently already and they aren't allowed
in UCNs in identifiers).  Instead of hardcoding the large tables
in ucnid.tab, this patch makes makeucnid.c read them from the Unicode
tables (13.0.0 version at this point).

For non-pedantic mode, we accept as 2nd+ char in identifiers a union
of valid characters in all supported modes, but for the 1st char it
was actually pedantically requiring that it is not any of the characters
that may not appear in the currently chosen standard as the first character.
This patch changes it such that also what is allowed at the start of an
identifier is a union of characters valid at the start of an identifier
in any of the pedantic modes.

2021-09-01  Jakub Jelinek  <jakub@redhat.com>

	PR c++/100977
libcpp/
	* include/cpplib.h (struct cpp_options): Add cxx23_identifiers.
	* charset.c (CXX23, NXX23): New enumerators.
	(CID, NFC, NKC, CTX): Renumber.
	(ucn_valid_in_identifier): Implement P1949R7 - use CXX23 and
	NXX23 flags for cxx23_identifiers.  For start character in
	non-pedantic mode, allow characters that are allowed as start
	characters in any of the supported language modes, rather than
	disallowing characters allowed only as non-start characters in
	current mode but for characters from other language modes allowing
	them even if they are never allowed at start.
	* init.c (struct lang_flags): Add cxx23_identifiers.
	(lang_defaults): Add cxx23_identifiers column.
	(cpp_set_lang): Initialize CPP_OPTION (pfile, cxx23_identifiers).
	* lex.c (warn_about_normalization): If cxx23_identifiers, use
	cpp_pedwarning_with_line instead of cpp_warning_with_line for
	"is not in NFC" diagnostics.
	* makeucnid.c: Adjust usage comment.
	(CXX23, NXX23): New enumerators.
	(all_languages): Add CXX23.
	(not_NFC, not_NFKC, maybe_not_NFC): Renumber.
	(read_derivedcore): New function.
	(write_table): Print also CXX23 and NXX23 columns.
	(main): Require 5 arguments instead of 4, call read_derivedcore.
	* ucnid.h: Regenerated using Unicode 13.0.0 files.
gcc/testsuite/
	* g++.dg/cpp23/normalize1.C: New test.
	* g++.dg/cpp23/normalize2.C: New test.
	* g++.dg/cpp23/normalize3.C: New test.
	* g++.dg/cpp23/normalize4.C: New test.
	* g++.dg/cpp23/normalize5.C: New test.
	* g++.dg/cpp23/normalize6.C: New test.
	* g++.dg/cpp23/normalize7.C: New test.
	* g++.dg/cpp23/ucnid-1-utf8.C: New test.
	* g++.dg/cpp23/ucnid-2-utf8.C: New test.
	* gcc.dg/cpp/ucnid-4.c: Don't expect
	"not valid at the start of an identifier" errors.
	* gcc.dg/cpp/ucnid-4-utf8.c: Likewise.
	* gcc.dg/cpp/ucnid-5-utf8.c: New test.
2021-09-01 22:33:06 +02:00
Andrew Pinski
852fdc23a2 Add MIPS Linux support to gcc.misc-tests/linkage.c (testsuite/51748)
This adds MIPS Linux support to gcc.misc-tests/linkage.exp.  Basically
copying what was done for MIPS IRIX and changing the options to be correct.

OK?

gcc/testsuite/ChangeLog:

	PR testsuite/51748
	* gcc.misc-tests/linkage.exp: Add mips*-linux-* support.
2021-09-01 19:48:17 +00:00
Martin Sebor
ece28da924 Enable ranger and caching in pass_waccess.
gcc/ChangeLog:

	* gimple-ssa-warn-access.cc (get_size_range): Add argument.
	(check_access): Pass additional argument.
	(check_memop_access): Remove template and make a member function.
	(maybe_check_dealloc_call): Make a pass_waccess member function.
	(class pass_waccess): Add, rename, and remove members.
	(pass_waccess::pass_waccess): Adjust to name change.
	(pass_waccess::~pass_waccess): Same.
	(check_alloca): Make a member function.
	(check_alloc_size_call): Same.
	(check_strcat): Same.
	(check_strncat): Same.
	(check_stxcpy): Same.
	(check_stxncpy): Same.
	(check_strncmp): Same.
	(maybe_warn_rdwr_sizes): Rename...
	(pass_waccess::maybe_check_access_sizes): ...to this.
	(pass_waccess::check_call): Adjust to name changes.
	(pass_waccess::maybe_check_dealloc_call): Make a pass_waccess member
	function.
	(pass_waccess::execute): Adjust to name changes.
	* gimple-ssa-warn-access.h (check_memop_access): Remove.
	* pointer-query.cc (access_ref::phi): Handle null pointer.
	(access_ref::inform_access): Same.
	(pointer_query::put_ref): Modify a cached value, not a copy of it.
	(pointer_query::dump): New function.
	(compute_objsize_r): Avoid overwriting access_ref::bndrng.  Cache
	more results.
	* pointer-query.h (pointer_query::dump): Declare.
	* tree-ssa-strlen.c (get_range): Simplify.  Use function query.
	(dump_strlen_info): Use function query.
	(printf_strlen_execute): Factor code out into pointer_query::put_ref.

gcc/testsuite/ChangeLog:

	* gcc.dg/Wstringop-overflow-11.c: Remove xfails.
	* gcc.dg/Wstringop-overflow-12.c: Same.
	* gcc.dg/Wstringop-overflow-43.c: Add xfails.
	* gcc.dg/Wstringop-overflow-73.c: New test.
2021-09-01 13:46:19 -06:00
Jason Merrill
ac6e77aacf libcpp: __VA_OPT__ tweak
> We want to remove the latter <placemarker> but not the former one, and
> the patch adds the vaopt_padding_tokens counter for it to control
> how many placemarkers are removed on vaopt_state::END.
> As can be seen in #c1 and #c2 of the PR, I've tried various approaches,
> but neither worked out for all the cases except the posted one.

I notice that the second placemarker you mention is avoid_paste, which seems
relevant.  This seems to also work, at least it doesn't seem to break any of
the va_opt tests.

2021-09-01  Jason Merrill  <jason@redhat.com>

	* macro.c (replace_args): When __VA_OPT__ is on the LHS of ##,
	remove trailing avoid_paste tokens.
2021-09-01 21:33:30 +02:00
Jakub Jelinek
e928cf47f3 libcpp: __VA_OPT__ p1042r1 placemarker changes [PR101488]
So, besides missing #__VA_OPT__ patch for which I've posted patch last week,
P1042R1 introduced some placemarker changes for __VA_OPT__, most notably
the addition of before "removal of placemarker tokens," rescanning ...
and the
 #define H4(X, ...) __VA_OPT__(a X ## X) ## b
H4(, 1)  // replaced by a b
example mentioned there where we replace it currently with ab

The following patch are the minimum changes (except for the
__builtin_expect) that achieve the same preprocessing between current
clang++ and patched gcc on all the testcases I've tried (i.e. gcc __VA_OPT__
testsuite in c-c++-common/cpp/va-opt* including the new test and the clang
clang/test/Preprocessor/macro_va_opt* testcases).

At one point I was trying to implement the __VA_OPT__(args) case as if
for non-empty __VA_ARGS__ it expanded as if __VA_OPT__( and ) were missing,
but from the tests it seems that is not how it should work, in particular
if after (or before) we have some macro argument and it is not followed
(or preceded) by ##, then it should be macro expanded even when __VA_OPT__
is after ## or ) is followed by ##.  And it seems that not removing any
padding tokens isn't possible either, because the expansion of the arguments
typically has a padding token at the start and end and those at least
according to the testsuite need to go.  It is unclear if it would be enough
to remove just one or if all padding tokens should be removed.
Anyway, e.g. the previous removal of all padding tokens at the end of
__VA_OPT__ is undesirable, as it e.g. eats also the padding tokens needed
for the H4 example from the paper.

2021-09-01  Jakub Jelinek  <jakub@redhat.com>

	PR preprocessor/101488
	* macro.c (replace_args): Fix up handling of CPP_PADDING tokens at the
	start or end of __VA_OPT__ arguments when preceeded or followed by ##.

	* c-c++-common/cpp/va-opt-3.c: Adjust expected output.
	* c-c++-common/cpp/va-opt-7.c: New test.
2021-09-01 21:31:25 +02:00
Marek Polacek
7c5003c687 c++: Add test for fixed PR [PR101592]
Fixed by my c++/99701 patch.

	PR c++/101592

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Wlogical-op-3.C: New test.
2021-09-01 15:17:28 -04:00
Iain Sandoe
fbb334a6ac libiberty, configure, Darwin: Avoid detecting deprecated sbrk.
Darwin provides an implementation of sbrk, which is detected by
the configuration process.  However, it is deprecated which leads
to build warnings.  The malloc-based implementation is more
suitable.  This patch removes sbrk from the functions searched
for Darwin.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

libiberty/ChangeLog:

	* configure: Regenerate.
	* configure.ac: Do not search for sbrk on Darwin.
	* xmalloc.c: Do not declare sbrk unless it has been found
	by configure.
2021-09-01 19:34:07 +01:00
Harald Anlauf
a88280cff3 Fortran - improve wording of error message
gcc/fortran/ChangeLog:

	PR fortran/56985
	* resolve.c (resolve_common_vars): Fix grammar and improve wording
	of error message rejecting an unlimited polymorphic in COMMON.
2021-09-01 19:05:47 +02:00
Sebastian Huber
7a6f40d045 Fix arm target build with inhibit_libc
Do not declare abort in "libgcc/unwind-arm-common.inc" since it is already
provided by "tsystem.h".  It fixes the following build error:

In file included from libgcc/config/arm/unwind-arm.c:144:
libgcc/unwind-arm-common.inc:55:24: error: macro "abort" passed 1 arguments, but takes just 0
   55 | extern void abort (void);

libgcc/

	* unwind-arm-common.inc (abort): Remove.
2021-09-01 17:50:00 +02:00
Thomas Schwinge
424e460157 Simplify 'gcc/tree.c:walk_tree_1' handling of 'OMP_CLAUSE'
No behavioral change, other than that for a few clauses, operands are now
walked in a different order, and 'OMP_CLAUSE_ERROR' now no longer runs into
'default: gcc_unreachable ();' here (but instead will at some later stage).

Follow-up for r110243 (commit aaf46ef979)
"Fix PR 25886.  Convert OMP_CLAUSE_* into sub-codes".

	gcc/
	* tree.c (walk_tree_1) <OMP_CLAUSE>: Simplify.
2021-09-01 17:39:14 +02:00
Iain Sandoe
1cef3039b8 Objective-C, NeXT: Fix messenging non-aggregate return-in-memory.
When a method returns a type that the platform ABI says should be
returned in memory, and that is done by a hidden 'sret' parameter,
the message send calls must be adjusted to inform the runtime that
the sret parameter is present.  As reported in the PR, this is not
working for non-aggregate types that use this mechanism.  The fix
here is to adjust the logic such that all return values that flag
'in memory' are considered to use the mechanism *unless* they
provide a struct_value_rtx *and* the return object is an aggregate.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

PR objc/101718 - Objective-C frontend emits wrong code to call methods returning scalar types returned in memory

	PR objc/101718

gcc/objc/ChangeLog:

	* objc-next-runtime-abi-02.c (build_v2_build_objc_method_call):
	Revise for cases where scalar objects use an sret parameter.
	(next_runtime_abi_02_build_objc_method_call): Likwise.
2021-09-01 15:23:05 +01:00
Iain Sandoe
8433baadec C-family: Add attribute 'unavailable'.
If an interface is marked 'deprecated' then, presumably, at some point it
will be withdrawn and no longer available.  The 'unavailable' attribute
makes it possible to mark up interfaces to indicate this status.  It is used
quite extensively in some codebases where a single set of headers can be used
to permit code generation for multiple system versions.

From a configuration perspective, it also allows a compile test to determine
that an interface is missing - rather than requiring a link test.

The implementation follows the pattern of attribute deprecated, but produces
an error (where deprecation produces a warning).

This attribute has been implemented in clang for some years.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

gcc/c-family/ChangeLog:

	* c-attribs.c (handle_unavailable_attribute): New.

gcc/c/ChangeLog:

	* c-decl.c (enum deprecated_states): Add unavailable state.
	(merge_decls): Copy unavailability.
	(quals_from_declspecs): Handle unavailable case.
	(start_decl): Amend the logic handling suppression of nested
	deprecation states to include unavailability.
	(smallest_type_quals_location): Amend comment.
	(grokdeclarator): Handle the unavailable deprecation state.
	(declspecs_add_type): Set TREE_UNAVAILABLE from the decl specs.
	* c-tree.h (struct c_declspecs): Add unavailable_p.
	* c-typeck.c (build_component_ref): Handle unavailability.
	(build_external_ref): Likewise.

gcc/cp/ChangeLog:

	* call.c (build_over_call): Handle unavailable state in addition to
	deprecation.
	* class.c (type_build_ctor_call): Likewise.
	(type_build_dtor_call): Likewise.
	* cp-tree.h: Rename cp_warn_deprecated_use to
	cp_handle_deprecated_or_unavailable.
	* decl.c (duplicate_decls): Merge unavailability.
	(grokdeclarator): Handle unavailability in addition to deprecation.
	(type_is_unavailable): New.
	(grokparms): Handle unavailability in addition to deprecation.
	* decl.h (enum deprecated_states): Add
	UNAVAILABLE_DEPRECATED_SUPPRESS.
	* decl2.c (cplus_decl_attributes): Propagate unavailability to
	templates.
	(cp_warn_deprecated_use): Rename to ...
	(cp_handle_deprecated_or_unavailable): ... this and amend to handle
	the unavailable case. It remains a warning in the case of deprecation
	but becomes an error in the case of unavailability.
	(cp_warn_deprecated_use_scopes): Handle unavailability.
	(mark_used): Likewise.
	* parser.c (cp_parser_template_name): Likewise.
	(cp_parser_template_argument): Likewise.
	(cp_parser_parameter_declaration_list): Likewise.
	* typeck.c (build_class_member_access_expr): Likewise.
	(finish_class_member_access_expr): Likewise.
	* typeck2.c (build_functional_cast_1): Likewise.

gcc/ChangeLog:

	* doc/extend.texi: Document unavailable attribute.
	* print-tree.c (print_node): Handle unavailable attribute.
	* tree-core.h (struct tree_base): Add a bit to carry unavailability.
	* tree.c (error_unavailable_use): New.
	* tree.h (TREE_UNAVAILABLE): New.
	(error_unavailable_use): New.

gcc/objc/ChangeLog:

	* objc-act.c (objc_add_property_declaration): Register unavailable
	attribute.
	(maybe_make_artificial_property_decl): Set available.
	(objc_maybe_build_component_ref): Generalise to the method prototype
	to count availability.
	(objc_build_class_component_ref): Likewise.
	(build_private_template): Likewise.
	(objc_decl_method_attributes): Handle unavailable attribute.
	(lookup_method_in_hash_lists): Amend comments.
	(objc_finish_message_expr): Handle unavailability in addition to
	deprecation.
	(start_class): Likewise.
	(finish_class): Likewise.
	(lookup_protocol): Likewise.
	(objc_declare_protocol): Likewise.
	(start_protocol): Register unavailable attribute.
	(really_start_method): Likewise.
	(objc_gimplify_property_ref): Emit error on encountering an
	unavailable entity (and a warning for a deprecated one).

gcc/testsuite/ChangeLog:

	* g++.dg/ext/attr-unavailable-1.C: New test.
	* g++.dg/ext/attr-unavailable-2.C: New test.
	* g++.dg/ext/attr-unavailable-3.C: New test.
	* g++.dg/ext/attr-unavailable-4.C: New test.
	* g++.dg/ext/attr-unavailable-5.C: New test.
	* g++.dg/ext/attr-unavailable-6.C: New test.
	* g++.dg/ext/attr-unavailable-7.C: New test.
	* g++.dg/ext/attr-unavailable-8.C: New test.
	* g++.dg/ext/attr-unavailable-9.C: New test.
	* gcc.dg/attr-unavailable-1.c: New test.
	* gcc.dg/attr-unavailable-2.c: New test.
	* gcc.dg/attr-unavailable-3.c: New test.
	* gcc.dg/attr-unavailable-4.c: New test.
	* gcc.dg/attr-unavailable-5.c: New test.
	* gcc.dg/attr-unavailable-6.c: New test.
	* obj-c++.dg/attributes/method-unavailable-1.mm: New test.
	* obj-c++.dg/attributes/method-unavailable-2.mm: New test.
	* obj-c++.dg/attributes/method-unavailable-3.mm: New test.
	* obj-c++.dg/property/at-property-unavailable-1.mm: New test.
	* obj-c++.dg/property/at-property-unavailable-2.mm: New test.
	* obj-c++.dg/property/dotsyntax-unavailable-1.mm: New test.
	* objc.dg/attributes/method-unavailable-1.m: New test.
	* objc.dg/attributes/method-unavailable-2.m: New test.
	* objc.dg/attributes/method-unavailable-3.m: New test.
	* objc.dg/property/at-property-unavailable-1.m: New test.
	* objc.dg/property/at-property-unavailable-2.m: New test.
	* objc.dg/property/dotsyntax-unavailable-1.m: New test.
2021-09-01 15:09:38 +01:00
Iain Sandoe
21b4d0ef54 coroutines : Add a missed begin/finish else clause to the codegen.
Minor code-gen correction.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

gcc/cp/ChangeLog:

	* coroutines.cc (build_actor_fn): Add begin/finish clauses
	to the initial test in the actor function.
2021-09-01 14:26:03 +01:00
Iain Sandoe
8406ed9af2 coroutines: No cleanups on goto statements.
Minor cleanup, this is statement not an expression, we do not
need to use finish_expr_stmt here.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

gcc/cp/ChangeLog:

	* coroutines.cc (await_statement_walker): Use build_stmt and
	add_stmt instead of build1 and finish_expr_stmt.
2021-09-01 14:23:16 +01:00
Iain Buclaw
fcc0c84cf5 libphobos: Update comment for DRUNTIME_OS_SOURCES
libphobos/ChangeLog:

	* m4/druntime/os.m4: Update comment for DRUNTIME_OS_SOURCES.
2021-09-01 14:19:35 +02:00
Iain Buclaw
53cfed5cc9 libphobos: Don't add zlib when ENABLE_LIBDRUNTIME_ONLY
The D run-time library does not depend on zlib, so only include it in
the library when Phobos is being built as well.

libphobos/ChangeLog:

	* src/Makefile.am: Don't add zlib when ENABLE_LIBDRUNTIME_ONLY.
	* src/Makefile.in: Regenerate.
2021-09-01 14:19:35 +02:00
Jakub Jelinek
bea07159d1 vectorizer: Fix up vectorization using WIDEN_MINUS_EXPR [PR102124]
The following testcase is miscompiled on aarch64-linux at -O3 since the
introduction of WIDEN_MINUS_EXPR.
The problem is if the inner type (half_type) is unsigned and the result
type in which the subtraction is performed (type) has precision more than
twice as larger as the inner type's precision.
For other widening operations like WIDEN_{PLUS,MULT}_EXPR, if half_type
is unsigned, the addition/multiplication result in itype is also unsigned
and needs to be zero-extended to type.
But subtraction is special, even when half_type is unsigned, the subtraction
behaves as signed (also regardless of whether the result type is signed or
unsigned), 0xfeU - 0xffU is -1 or 0xffffffffU, not 0x0000ffff.

I think it is better not to use mixed signedness of types in
WIDEN_MINUS_EXPR (have unsigned vector of operands and signed result
vector), so this patch instead adds another cast to make sure we always
sign-extend the result from itype to type if type is wider than itype.

2021-09-01  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/102124
	* tree-vect-patterns.c (vect_recog_widen_op_pattern): For ORIG_CODE
	MINUS_EXPR, if itype is unsigned with smaller precision than type,
	add an extra cast to signed variant of itype to ensure sign-extension.

	* gcc.dg/torture/pr102124.c: New test.
2021-09-01 13:40:43 +02:00
Martin Liska
a61623d9b3 graph output: use better colors for edges
gcc/ChangeLog:

	* graph.c (draw_cfg_node_succ_edges): Do not color fallthru
	  edges and rather use colors for TRUE and FALSE edges.
2021-09-01 13:33:04 +02:00
Richard Biener
13a43a90ae tree-optimization/93491 - avoid PRE of trapping calls across exits
This makes us avoid PREing calls that could trap across other
calls that might not return.  The PR88087 testcase has exactly
such case so I've refactored the testcase to contain a valid PRE.
I've also adjusted PRE to not consider pure calls possibly
not returning in line with what we do elsewhere.

Note we don't have a good idea whether a function always returns
normally or whether its body is known to never trap.  That's
something IPA could compute.

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

	PR tree-optimization/93491
	* tree-ssa-pre.c (compute_avail): Set BB_MAY_NOTRETURN
	after processing the stmt itself.  Do not consider
	pure functions possibly not returning.  Properly avoid
	adding possibly trapping calls to EXP_GEN when there's
	a preceeding possibly not returning call.
	* tree-ssa-sccvn.c (vn_reference_may_trap): Conservatively
	not handle calls.

	* gcc.dg/torture/pr93491.c: New testcase.
	* gcc.dg/tree-ssa/pr88087.c: Change to valid PRE opportunity.
2021-09-01 12:56:13 +02:00