199929 Commits

Author SHA1 Message Date
Jakub Jelinek
48f0f29777 Bump BASE-VER.
2023-04-17  Jakub Jelinek  <jakub@redhat.com>

	* BASE-VER: Set to 14.0.0.
basepoints/gcc-14
2023-04-17 13:52:56 +02:00
Martin Jambor
8e08c7886e
ipa: Fix double reference-count decrements for the same edge (PR 107769, PR 109318)
It turns out that since addition of the code that can identify globals
which are only read from, the code that keeps track of the references
can decrement their count for the same calls, once during IPA-CP and
then again during inlining.  Fixed by adding a special flag to the
pass-through variant and simply wiping out the reference to the
refdesc structure from the constant ones.

Moreover, during debugging of the issue I have discovered that the
code removing references could remove a reference associated with the
same statement but of a wrong type.  In all cases it wanted to remove
an IPA_REF_ADDR reference so removing a lesser one instead should do
no harm in practice, but we should try to be consistent and so this
patch extends symtab_node::find_reference so that it searches for a
reference of a given type only.

gcc/ChangeLog:

2023-04-14  Martin Jambor  <mjambor@suse.cz>

	PR ipa/107769
	PR ipa/109318
	* cgraph.h (symtab_node::find_reference): Add parameter use_type.
	* ipa-prop.h (ipa_pass_through_data): New flag refdesc_decremented.
	(ipa_zap_jf_refdesc): New function.
	(ipa_get_jf_pass_through_refdesc_decremented): Likewise.
	(ipa_set_jf_pass_through_refdesc_decremented): Likewise.
	* ipa-cp.cc (ipcp_discover_new_direct_edges): Provide a value for
	the new parameter of find_reference.
	(adjust_references_in_caller): Likewise. Make sure the constant jump
	function is not used to decrement a refdec counter again.  Only
	decrement refdesc counters when the pass_through jump function allows
	it.  Added a detailed dump when decrementing refdesc counters.
	* ipa-prop.cc (ipa_print_node_jump_functions_for_edge): Dump new flag.
	(ipa_set_jf_simple_pass_through): Initialize the new flag.
	(ipa_set_jf_unary_pass_through): Likewise.
	(ipa_set_jf_arith_pass_through): Likewise.
	(remove_described_reference): Provide a value for the new parameter of
	find_reference.
	(update_jump_functions_after_inlining): Zap refdesc of new jfunc if
	the previous pass_through had a flag mandating that we do so.
	(propagate_controlled_uses): Likewise.  Only decrement refdesc
	counters when the pass_through jump function allows it.
	(ipa_edge_args_sum_t::duplicate): Provide a value for the new
	parameter of find_reference.
	(ipa_write_jump_function): Assert the new flag does not have to be
	streamed.
	* symtab.cc (symtab_node::find_reference): Add parameter use_type, use
	it in searching.

gcc/testsuite/ChangeLog:

2023-04-06  Martin Jambor  <mjambor@suse.cz>

	PR ipa/107769
	PR ipa/109318
	* gcc.dg/ipa/pr109318.c: New test.
	* gcc.dg/lto/pr107769_0.c: Likewise.
2023-04-17 13:04:49 +02:00
Philipp Tomsich
f200c56787 aarch64: disable LDP via tuning structure for -mcpu=ampere1
AmpereOne (-mcpu=ampere1) breaks LDP instructions into two uops.
Given the chance that this causes instructions to slip into the next
decoding cycle and the additional overheads when handling
cacheline-crossing LDP instructions, we disable the generation of LDP
isntructions through the tuning structure from instruction combining
(such as in peephole2).

Given the code-density benefits in builtins and prologue/epilogue
expansion, we allow LDPs there.

This commit:
 * adds a new tuning option AARCH64_EXTRA_TUNE_NO_LDP_COMBINE
 * allows -moverride=tune=... to override this

These changes are benchmark-driven, yielding the following changes
(with a net-overall improvement):
   503.bwaves_r.      -0.88%
   507.cactuBSSN_r     0.35%
   508.namd_r          3.09%
   510.parest_r       -2.99%
   511.povray_r        5.54%
   519.lbm_r          15.83%
   521.wrf_r           0.56%
   526.blender_r       2.47%
   527.cam4_r          0.70%
   538.imagick_r       0.00%
   544.nab_r          -0.33%
   549.fotonik3d_r.   -0.42%
   554.roms_r          0.00%
   -------------------------
   = total             1.79%

Signed-off-by: Philipp Tomsich <philipp.tomsich@vrull.eu>
Co-Authored-By: Di Zhao <di.zhao@amperecomputing.com>

gcc/ChangeLog:

	* config/aarch64/aarch64-tuning-flags.def (AARCH64_EXTRA_TUNING_OPTION):
	Add AARCH64_EXTRA_TUNE_NO_LDP_COMBINE.
	* config/aarch64/aarch64.cc (aarch64_operands_ok_for_ldpstp):
	Check for the above tuning option when processing loads.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/ampere1-no_ldp_combine.c: New test.
2023-04-17 12:15:04 +02:00
Jakub Jelinek
7ec03c41de testsuite: Fix up vect-simd-clone-1[678]f.c tests some more
With
make check-gcc check-g++ -j32 -k RUNTESTFLAGS='--target_board=unix\{-m32,-m32/-mavx,-m32/-mavx512f,-m32/-march=cascadelake,-m64,-m64/-mavx,-m64/-mavx512f,-m64/-march=cascadelake\}
+vect.exp=vect-simd-clone*'
the vect-simd-clone-1[678]f.c tests fail with -m32/-mavx512f and -m32/-march=cascadelake,
in that case there are zero matches rather than the 4 expected for ia32.
-m64/-mavx512f and -m64/-march=cascadelake works fine though (2 expected
matches).

So, the following patch just adds -mno-avx512f for x86 non-lp64.

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

	* gcc.dg/vect/vect-simd-clone-16f.c: Add -mno-avx512f for non-lp64 x86.
	* gcc.dg/vect/vect-simd-clone-17f.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-18f.c: Likewise.
2023-04-17 11:45:53 +02:00
Richard Biener
f66ae49bba tree-optimization/109524 - ICE with VRP edge removal
VRP queues edges to process late for updating global ranges for
__builtin_unreachable.  But this interferes with edge removal
from substitute_and_fold.  The following deals with this by
looking up the edge with source/dest block indices which do not
become stale.

	PR tree-optimization/109524
	* tree-vrp.cc (remove_unreachable::m_list): Change to a
	vector of pairs of block indices.
	(remove_unreachable::maybe_register_block): Adjust.
	(remove_unreachable::remove_and_update_globals): Likewise.
	Deal with removed blocks.

	* g++.dg/pr109524.C: New testcase.
2023-04-17 11:02:29 +02:00
Jiufu Guo
a1f25e04b8 testsuite: update builtins-5-p9-runnable.c for BE
Hi,

As PR108809 mentioned, vec_xl_len_r and vec_xst_len_r are tested
in gcc.target/powerpc/builtins-5-p9-runnable.c.
The vector operand of these two bifs are different from the view
of v16_int8 between BE and LE, even it is same from the view of
128bits(uint128/V1TI).

The test case gcc.target/powerpc/builtins-5-p9-runnable.c was
written for LE environment, this patch updates it for BE.

Tested on ppc64 BE and LE.
Is this ok for trunk?

BR,
Jeff (Jiufu)

gcc/testsuite/ChangeLog:

	PR testsuite/108809
	* gcc.target/powerpc/builtins-5-p9-runnable.c: Update for BE.
2023-04-17 10:39:26 +08:00
Kito Cheng
2e6b57196d RISC-V: Fix testsuite fail on RV32
gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/scalar_move-2.c: Adjust include way
	for riscv_vector.h
	* gcc.target/riscv/rvv/base/spill-sp-adjust.c: Add missing
	-mabi.
2023-04-17 09:51:36 +08:00
Pan Li
0c4d366ef7 RISC-V: Add test cases for the RVV mask insn shortcut.
There are sorts of shortcut codegen for the RVV mask insn. For
example.

vmxor vd, va, va => vmclr vd.

We would like to add more optimization like this but first of all
we must add the tests for the existing shortcut optimization, to
ensure we don't break existing optimization from underlying shortcut
optimization.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/mask_insn_shortcut.c: New test.

Signed-off-by: Pan Li <pan2.li@intel.com>
2023-04-17 09:51:35 +08:00
GCC Administrator
a167416a23 Daily bump. 2023-04-17 00:17:00 +00:00
Jeff Law
a647198fcf [committed] [PR target/109508] Adjust conditional move expansion for SFB
Recently the conditional move expander's predicates were loosened for the
benefit of the THEAD processors.  In particular one operand that was
previously "register_operand" is now "reg_or_0_operand".  That's fine for
THEAD, but breaks for SFB which requires a register for that operand.

This results in an ICE when compiling the testcase an SFB target such as
the sifive s76.

This change adjusts the expansion code slightly to copy the value into
a register for SFB.

Bootstrapped and regression tested (c,c++,fortran only) with a toolchain
configured to enable SFB by default.

	PR target/109508
gcc/

	* config/riscv/riscv.cc (riscv_expand_conditional_move): For
	TARGET_SFB_ALU, force the true arm into a register.

gcc/testsuite
	* gcc.target/riscv/pr109508.c: New test.
2023-04-16 09:56:21 -06:00
Roger Sayle
f006d1a5a1 [Committed] New test case gcc.target/avr/pr54816.c
PR target/54816 is now fixed on mainline.  This adds a test case to
check that it doesn't regress in future.  Tested with a cross compiler
to avr-elf.  Committed as obvious.

2023-04-16  Roger Sayle  <roger@nextmovesoftware.com>

gcc/testsuite/ChangeLog
	PR target/54816
	* gcc.target/avr/pr54816.c: New test case.
2023-04-16 13:03:10 +01:00
GCC Administrator
55085c7e3c Daily bump. 2023-04-16 00:16:26 +00:00
Eric Botcazou
2e2b6ec156 Fix fallout of previous change on x86/Linux
gcc/ada/
	PR bootstrap/109510
	* gcc-interface/decl.cc (gnat_to_gnu_entity) <types>: Do not reset
	align to zero in any case.  Set TYPE_USER_ALIGN on the type only if
	it is an aggregate type, or else a type whose default alignment is
	specifically capped on selected platforms.
2023-04-15 19:35:02 +02:00
John David Anglin
4f1c5e54d7 Fix handling of large arguments passed by value.
2023-04-15  John David Anglin  <danglin@gcc.gnu.org>

gcc/ChangeLog:

	PR target/104989
	* config/pa/pa-protos.h (pa_function_arg_size): Update prototype.
	* config/pa/pa.cc (pa_function_arg): Return NULL_RTX if argument
	size is zero.
	(pa_arg_partial_bytes): Don't call pa_function_arg_size twice.
	(pa_function_arg_size): Change return type to int.  Return zero
	for arguments larger than 1 GB.  Update comments.
2023-04-15 17:02:44 +00:00
Jason Merrill
13669741e6 c++: constexpr aggregate destruction [PR109357]
We were assuming that the result of evaluation of TARGET_EXPR_INITIAL would
always be the new value of the temporary, but that's not necessarily true
when the initializer is complex (i.e. target_expr_needs_replace).  In that
case evaluating the initializer initializes the temporary as a side-effect.

	PR c++/109357

gcc/cp/ChangeLog:

	* constexpr.cc (cxx_eval_constant_expression) [TARGET_EXPR]:
	Check for complex initializer.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/constexpr-dtor15.C: New test.
2023-04-15 12:35:15 -04:00
Jakub Jelinek
de0ee9d141 if-conv: Small improvement for expansion of complex PHIs [PR109154]
The following patch is just a dumb improvement, gets rid of 2 unnecessary
instructions on both the PR's original testcase and on the two reduced ones,
both on -mcpu=neoverse-v1 and -mavx512f.

The thing is, if we have args_len (args_len >= 2) unique PHI arguments,
we need only args_len - 1 COND_EXPRs to expand the PHI, because first
COND_EXPR can merge 2 unique arguments and all the following ones merge
another unique argument with the previously merged arguments,
while the code for mysterious reasons was always emitting args_len
COND_EXPRs, where the first COND_EXPR merged the first and second unique
arguments, the second COND_EXPR merged the second unique argument with
result of merging the first and second unique arguments and the rest was
already expectable, nth COND_EXPR for n > 2 merged the nth unique argument
with result of merging the previous unique arguments.
Now, in my understanding, the bb_predicate for bb's predecessor need to
form a disjunct set which together creates the successor's bb_predicate,
so I don't see why we'd need to check all the bb_predicates, if we check
all but one then when all those other ones are false the last bb_predicate
is necessarily true.  Given that the code attempts to sort argument with
most occurrences (so likely most complex combined predicate) last, I chose
not to test that last argument's predicate.
So e.g. on the testcase from comment 47 in the PR:
void
foo (int *f, int d, int e)
{
  for (int i = 0; i < 1024; i++)
    {
      int a = f[i];
      int t;
      if (a < 0)
        t = 1;
      else if (a < e)
        t = 1 - a * d;
      else
        t = 0;
      f[i] = t;
    }
}
we used to emit:
  _7 = a_10 < 0;
  _21 = a_10 >= 0;
  _22 = a_10 < e_11(D);
  _23 = _21 & _22;
  _26 = a_10 >= e_11(D);
  _27 = _21 & _26;
  _ifc__42 = _7 ? 1 : t_13;
  _ifc__43 = _23 ? t_13 : _ifc__42;
  t_6 = _27 ? 0 : _ifc__43;
while the following patch changes it to:
  _7 = a_10 < 0;
  _21 = a_10 >= 0;
  _22 = a_10 < e_11(D);
  _23 = _21 & _22;
  _ifc__42 = _23 ? t_13 : 0;
  t_6 = _7 ? 1 : _ifc__42;
which I believe should be sufficient for a PHI <1, t_13, 0>.

I've gathered some statistics and on x86_64-linux and i686-linux
bootstraps/regtests, this code triggers:
     92 4 4
    112 2 4
    141 3 4
   4046 3 3
(where 2nd number is args_len and 3rd argument EDGE_COUNT (bb->preds)
and first argument count of those from sort | uniq -c | sort -n).
In all these cases the patch should squeze one extra COND_EXPR and
its associated predicate (the latter only if it wasn't used elsewhere).

Incrementally, I think we should try to perform some analysis on which
predicates depend on inverses of other predicates and if possible try
to sort the arguments better and omit testing unnecessary predicates.
So essentially for the above testcase deconstruct it back to:
  _7 = a_10 < 0;
  _22 = a_10 < e_11(D);
  _ifc__42 = _22 ? t_13 : 0;
  t_6 = _7 ? 1 : _ifc__42;
which is like what this patch produces, but with the & a_10 >= 0 part
removed, because the last predicate is a_10 < 0 and so testing a_10 >= 0
on what appears on the false branch doesn't make sense.
But I'm afraid that will take more work than is doable in stage4 right now.

2023-04-15  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/109154
	* tree-if-conv.cc (predicate_scalar_phi): For complex PHIs, emit just
	args_len - 1 COND_EXPRs rather than args_len.  Formatting fix.
2023-04-15 12:08:45 +02:00
Alexandre Oliva
86b31d583a rs6000: don't expect __ibm128 with 64-bit long double [PR99708]
When long double is 64-bit wide, as on vxworks, the rs6000 backend
defines neither the __ibm128 type nor the __SIZEOF_IBM128__ macro, but
pr99708.c expected both to be always defined.  Adjust the test to
match the implementation.


Co-Authored-By: Kewen Lin <linkw@linux.ibm.com>

for  gcc/testsuite/ChangeLog

	PR target/99708
	* gcc.target/powerpc/pr99708.c: Accept lack of
	__SIZEOF_IBM128__ when long double is 64-bit wide.
2023-04-14 23:53:57 -03:00
Jason Merrill
9964df74a9 -Wdangling-pointer: fix MEM_REF handling [PR109514]
Here we hit the MEM_REF case, with its arg an ADDR_EXPR, but had no handling
for that and wrongly assumed it would be a reference to a local variable.
This patch overhauls the logic for deciding whether the target is something
to warn about so that we only warn if we specifically recognize the target
as non-local.  None of the existing tests regress as a result.

	PR c++/109514

gcc/ChangeLog:

	* gimple-ssa-warn-access.cc (pass_waccess::check_dangling_stores):
	Overhaul lhs_ref.ref analysis.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Wdangling-pointer-6.C: New test.
2023-04-14 21:34:14 -04:00
GCC Administrator
1aee19f9b5 Daily bump. 2023-04-15 00:16:36 +00:00
Harald Anlauf
fa4cb42870 Fortran: fix compile-time simplification of SET_EXPONENT [PR109511]
gcc/fortran/ChangeLog:

	PR fortran/109511
	* simplify.cc (gfc_simplify_set_exponent): Fix implementation of
	compile-time simplification of intrinsic SET_EXPONENT for argument
	X < 1 and for I < 0.

gcc/testsuite/ChangeLog:

	PR fortran/109511
	* gfortran.dg/set_exponent_1.f90: New test.
2023-04-14 20:50:02 +02:00
Eric Botcazou
94a21e008c Fix build failure of Ada runtime for Aarch64 targets
The Aarch64 back-end now asserts that the main variant of scalar types
has TYPE_USER_ALIGN cleared, and that's not the case for scalar types
declared with a confirming alignment clause in Ada.

gcc/ada/
	PR bootstrap/109510
	* gcc-interface/decl.cc (gnat_to_gnu_entity) <types>: Reset align
	to zero if its value is equal to TYPE_ALIGN and the type is scalar.
	Set TYPE_USER_ALIGN on the type only if align is positive.
2023-04-14 20:17:55 +02:00
Patrick Palka
0d94c6df18 libstdc++: Implement P2278R4 "cbegin should always return a constant iterator"
This also implements the approved follow-up LWG issues 3765, 3766, 3769,
3770, 3811, 3850, 3853, 3862 and 3872.

libstdc++-v3/ChangeLog:

	* include/bits/ranges_base.h (const_iterator_t): Define for C++23.
	(const_sentinel_t): Likewise.
	(range_const_reference_t): Likewise.
	(constant_range): Likewise.
	(__cust_access::__possibly_const_range): Likewise, replacing ...
	(__cust_access::__as_const): ... this.
	(__cust_access::_CBegin::operator()): Redefine for C++23 as per P2278R4.
	(__cust_access::_CEnd::operator()): Likewise.
	(__cust_access::_CRBegin::operator()): Likewise.
	(__cust_access::_CREnd::operator()): Likewise.
	(__cust_access::_CData::operator()): Likewise.
	* include/bits/ranges_util.h (ranges::__detail::__different_from):
	Make it an alias of std::__detail::__different_from.
	(view_interface::cbegin): Define for C++23.
	(view_interface::cend): Likewise.
	* include/bits/stl_iterator.h (__detail::__different_from): Define.
	(iter_const_reference_t): Define for C++23.
	(__detail::__constant_iterator): Likewise.
	(__detail::__is_const_iterator): Likewise.
	(__detail::__not_a_const_iterator): Likewise.
	(__detail::__iter_const_rvalue_reference_t): Likewise.
	(__detail::__basic_const_iter_cat):: Likewise.
	(const_iterator): Likewise.
	(__detail::__const_sentinel): Likewise.
	(const_sentinel): Likewise.
	(basic_const_iterator): Likewise.
	(common_type<basic_const_iterator<_Tp>, _Up>): Likewise.
	(common_type<_Up, basic_const_iterator<_Tp>>): Likewise.
	(common_type<basic_const_iterator<_Tp>, basic_const_iterator<Up>>):
	Likewise.
	(make_const_iterator): Define for C++23.
	(make_const_sentinel): Likewise.
	* include/std/ranges (__cpp_lib_ranges_as_const): Likewise.
	(as_const_view): Likewise.
	(enable_borrowed_range<as_const_view>): Likewise.
	(views::__detail::__is_ref_view): Likewise.
	(views::__detail::__can_is_const_view): Likewise.
	(views::_AsConst, views::as_const): Likewise.
	* include/std/span (span::const_iterator): Likewise.
	(span::const_reverse_iterator): Likewise.
	(span::cbegin): Likewise.
	(span::cend): Likewise.
	(span::crbegin): Likewise.
	(span::crend): Likewise.
	* include/std/version (__cpp_lib_ranges_as_const): Likewise.
	* testsuite/std/ranges/adaptors/join.cc (test06): Adjust to
	behave independently of C++20 vs C++23.
	* testsuite/std/ranges/version_c++23.cc: Verify value of
	__cpp_lib_ranges_as_const macro.
	* testsuite/24_iterators/const_iterator/1.cc: New test.
	* testsuite/std/ranges/adaptors/as_const/1.cc: New test.
2023-04-14 10:32:12 -04:00
Patrick Palka
2ab0d83e88 libstdc++: Move down definitions of ranges::cbegin/cend/cetc
This moves down the definitions of the range const-access CPOs to after
the definition of input_range in preparation for implementing P2278R4
which redefines these CPOs in a way that indirectly uses input_range.

libstdc++-v3/ChangeLog:

	* include/bits/ranges_base.h (__cust_access::__as_const)
	(__cust_access::_CBegin, __cust::cbegin)
	(__cust_access::_CEnd, __cust::cend)
	(__cust_access::_CRBegin, __cust::crbegin)
	(__cust_access::_CREnd, __cust::crend)
	(__cust_access::_CData, __cust::cdata): Move down definitions to
	shortly after the definition of input_range.
2023-04-14 10:31:54 -04:00
Patrick Palka
7639bf34fa libstdc++: Implement ranges::fold_* from P2322R6
libstdc++-v3/ChangeLog:

	* include/bits/ranges_algo.h: Include <optional> for C++23.
	(__cpp_lib_fold): Define for C++23.
	(in_value_result): Likewise.
	(__detail::__flipped): Likewise.
	(__detail::__indirectly_binary_left_foldable_impl): Likewise.
	(__detail::__indirectly_binary_left_foldable): Likewise.
	(___detail:__indirectly_binary_right_foldable): Likewise.
	(fold_left_with_iter_result): Likewise.
	(__fold_left_with_iter_fn, fold_left_with_iter): Likewise.
	(__fold_left_fn, fold_left): Likewise.
	(__fold_left_first_with_iter_fn, fold_left_first_with_iter):
	Likewise.
	(__fold_left_first_fn, fold_left_first): Likewise.
	(__fold_right_fn, fold_right): Likewise.
	(__fold_right_last_fn, fold_right_last): Likewise.
	* include/std/version (__cpp_lib_fold): Likewise.
	* testsuite/25_algorithms/fold_left/1.cc: New test.
	* testsuite/25_algorithms/fold_right/1.cc: New test.
2023-04-14 10:31:44 -04:00
Richard Biener
a87d95def0 vect-simd-clone testcase adjustments
The following reverts the s/avx_runtime/avx/ changes I've done,
they were wrong.

	* gcc.dg/vect/vect-simd-clone-16e.c: Revert back to
	checking avx_runtime in dump scanning.
	* gcc.dg/vect/vect-simd-clone-17e.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-18e.c: Likewise.
2023-04-14 13:32:37 +02:00
Jonathan Wakely
6a9547f3ca libstdc++: Improve diagnostics for invalid std::format calls
Add a static_assert and a comment so that calling std::format for
unformattable argument types will now show:

/home/jwakely/gcc/13/include/c++/13.0.1/format:3563:22: error: static assertion failed: std::formatter must be specialized for each format arg
 3563 |       static_assert((is_default_constructible_v<formatter<_Args, _CharT>> && ...),
      |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

and:

  140 |       formatter() = delete; // No std::formatter specialization for this type.

libstdc++-v3/ChangeLog:

	* include/std/format (formatter): Add comment to deleted default
	constructor of primary template.
	(_Checking_scanner): Add static_assert.
2023-04-14 11:58:39 +01:00
Paul Thomas
b0e85485fb Fortran: Fix an excess finalization during allocation [PR104272]
2023-04-14  Paul Thomas  <pault@gcc.gnu.org>

gcc/fortran
	PR fortran/104272
	* gfortran.h : Add expr3_not_explicit bit field to gfc_code.
	* resolve.cc (resolve_allocate_expr): Set bit field when the
	default initializer is applied to expr3.
	* trans-stmt.cc (gfc_trans_allocate): If expr3_not_explicit is
	set, do not deallocate expr3.

gcc/testsuite/
	PR fortran/104272
	* gfortran.dg/class_result_8.f90 : Number of builtin_frees down
	from 6 to 5 without memory leaks.
	* gfortran.dg/finalize_52.f90: New test
2023-04-14 11:15:12 +01:00
Richard Biener
bf24f2db28 tree-optimization/109502 - vector conversion between mask and non-mask
The following fixes a check that should have rejected vectorizing
a conversion between a mask and non-mask type.  Those should be
done via pattern statements.

	PR tree-optimization/109502
	* tree-vect-stmts.cc (vectorizable_assignment): Fix
	check for conversion between mask and non-mask types.

	* gcc.dg/vect/pr109502.c: New testcase.
2023-04-14 11:45:47 +02:00
Richard Biener
040e64b09d Fix vect-simd-clone testcase dump scanning
This replaces i686*-*-* && { ! lp64 } with the appropriate
{ i?86-*-* x86_64-*-* } && { ! lp64 } for the testcases and
also amends the e variants checking last variant for avx.
I've used avx in the dump scanning, not avx_runtime, since
the dumps get produced when one would not execute but only
compile them.  The f varaints lack AVX checking, I didn't
rectify this with this patch.

	* gcc.dg/vect/vect-simd-clone-16e.c: Fix x86 lp64 checking
	and add missing avx guard.
	* gcc.dg/vect/vect-simd-clone-17e.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-18e.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-16f.c: Fix x86 lp64 checking.
	* gcc.dg/vect/vect-simd-clone-17f.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-18f.c: Likewise.
2023-04-14 11:43:18 +02:00
Jakub Jelinek
9d1a611959 combine: Fix AND handling for WORD_REGISTER_OPERATIONS targets [PR109040]
The following testcase is miscompiled on riscv since the addition
of *mvconst_internal define_insn_and_split.
We have:
(insn 36 35 39 2 (set (mem/c:SI (plus:SI (reg/f:SI 65 frame)
                (const_int -64 [0xffffffffffffffc0])) [2  S4 A128])
        (reg:SI 166)) "pr109040.c":9:11 178 {*movsi_internal}
     (expr_list:REG_DEAD (reg:SI 166)
        (nil)))
(insn 39 36 40 2 (set (reg:SI 171)
        (zero_extend:SI (mem/c:HI (plus:SI (reg/f:SI 65 frame)
                    (const_int -64 [0xffffffffffffffc0])) [0  S2 A128]))) "pr109040.c":9:11 111 {*zero_extendhisi2}
     (nil))
and RTL DSE's replace_read since r0-86337-g18b526e806ab6455 handles
even different modes like in the above case, and so it optimizes it into:
(insn 47 35 39 2 (set (reg:HI 175)
        (subreg:HI (reg:SI 166) 0)) "pr109040.c":9:11 179 {*movhi_internal}
     (expr_list:REG_DEAD (reg:SI 166)
        (nil)))
(insn 39 47 40 2 (set (reg:SI 171)
        (zero_extend:SI (reg:HI 175))) "pr109040.c":9:11 111 {*zero_extendhisi2}
     (expr_list:REG_DEAD (reg:HI 175)
        (nil)))
Pseudo 166 is result of AND with 0x8084c constant (forced into a register).
Combine attempts to combine the AND with the insn 47 above created by DSE,
and turns it because of WORD_REGISTER_OPERATIONS and its assumption that all
the subword operations are actually done on word mode into:
(set (subreg:SI (reg:HI 175) 0)
    (and:SI (reg:SI 167 [ m ])
        (reg:SI 168)))
and later on the ZERO_EXTEND is thrown away.

We then see
(and:SI (subreg:SI (reg:HI 175) 0) (const_int 0x84c))
and optimize that into
(subreg:SI (and:HI (reg:HI 175) (const_int 0x84c)) 0)
which is still fine, in WORD_REGISTER_OPERATIONS the AND in HImode
will set all upper bits up to BITS_PER_WORD to zeros.

But later on simplify_binary_operation_1 or simplify_and_const_int_1
sees that because nonzero_bits ((reg:HI 175), HImode) == 0x84c, we can
optimize the AND into (reg:HI 175).  That isn't correct, because while
the low 16 bits of that REG are known to have all bits but 0x84c cleared,
we don't know that all the upper 16 bits are all clear as well.
So, for WORD_REGISTER_OPERATIONS for integral modes smaller than word mode,
we need to check all bits from word_mode in nonzero_bits for the optimizations.

2023-04-14  Jeff Law  <jlaw@ventanamicro.com>
	    Jakub Jelinek  <jakub@redhat.com>

	PR target/108947
	PR target/109040
	* combine.cc (simplify_and_const_int_1): Compute nonzero_bits in
	word_mode rather than mode if WORD_REGISTER_OPERATIONS and mode is
	smaller than word_mode.
	* simplify-rtx.cc (simplify_context::simplify_binary_operation_1)
	<case AND>: Likewise.

	* gcc.dg/pr108947.c: New test.
	* gcc.c-torture/execute/pr109040.c: New test.
2023-04-14 09:20:49 +02:00
Jakub Jelinek
2134fcfee8 loop-iv: Fix up bounds computation
On Thu, Apr 13, 2023 at 06:35:07AM -0600, Jeff Law wrote:
> Bootstrap was successful with v3, but there's hundreds of testsuite failures
> due to the simplify-rtx hunk.  compile/20070520-1.c for example when
> compiled with:  -O3 -funroll-loops -march=rv64gc -mabi=lp64d
>
> Thursdays are my hell day.  It's unlikely I'd be able to look at this at all
> today.

So, seems to me this is because loop-iv.cc asks for invalid RTL to be
simplified, it calls simplify_gen_binary (AND, SImode,
(subreg:SI (plus:DI (reg:DI 289 [ ivtmp_312 ])
        (const_int 4294967295 [0xffffffff])) 0),
(const_int 4294967295 [0xffffffff]))
but 0xffffffff is not valid SImode CONST_INT, and unlike previously
we no longer on WORD_REGISTER_OPERATIONS targets which have DImode
word_mode optimize that into the op0, so the invalid constant is emitted
into the IL and checking fails.

The following patch fixes that (and we optimize that & -1 away even earlier
with that).

2023-04-14  Jakub Jelinek  <jakub@redhat.com>

	* loop-iv.cc (iv_number_of_iterations): Use gen_int_mode instead
	of GEN_INT.
2023-04-14 09:19:25 +02:00
Jiufu Guo
edc6659c97 testsuite: filter out warning noise for CWE-1341 test
The case file-CWE-1341-example.c checkes [CWE-1341](`double-fclose`).
While on some systems, besides [CWE-1341], a message of [CWE-415] is
also reported. On those systems, attribute `malloc` may be attached on
fopen:
```
# 258 "/usr/include/stdio.h" 3 4
extern FILE *fopen (const char *__restrict __filename,
      const char *__restrict __modes)
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;

or say: __attribute_malloc__ __attr_dealloc_fclose __wur;
```

See (PR analyzer/108722) for future fix in the analyzer.
This workaround patch adds -Wno-analyzer-double-free to this case.

gcc/testsuite/ChangeLog:

	PR analyzer/108722
	* gcc.dg/analyzer/file-CWE-1341-example.c: Update.
2023-04-14 11:09:38 +08:00
GCC Administrator
48d0244b60 Daily bump. 2023-04-14 00:16:48 +00:00
Harald Anlauf
43816633af Fortran: call of overloaded ‘abs(long long int&)’ is ambiguous [PR109492]
gcc/fortran/ChangeLog:

	PR fortran/109492
	* trans-expr.cc (gfc_conv_power_op): Use absu_hwi and
	unsigned HOST_WIDE_INT for portability.
2023-04-13 22:42:23 +02:00
Patrick Palka
50dc52e853 c++: 'typename T::X' vs 'struct T::X' lookup [PR109420]
r13-6098-g46711ff8e60d64 made make_typename_type no longer ignore
non-types during the lookup, unless the TYPENAME_TYPE in question was
followed by the :: scope resolution operator.  But there is another
exception to this rule: we need to ignore non-types during the lookup
also if the TYPENAME_TYPE was named with a tag other than 'typename',
such as 'struct' or 'enum', since in that case we're dealing with an
elaborated-type-specifier and so [basic.lookup.elab] applies.  This
patch implements this additional exception.

	PR c++/109420

gcc/cp/ChangeLog:

	* decl.cc (make_typename_type): Also ignore non-types during the
	lookup if tag_type corresponds to an elaborated-type-specifier.
	* pt.cc (tsubst) <case TYPENAME_TYPE>: Pass class_type or
	enum_type as tag_type to make_typename_type accordingly instead
	of always passing typename_type.

gcc/testsuite/ChangeLog:

	* g++.dg/template/typename27.C: New test.
2023-04-13 16:02:21 -04:00
Jason Merrill
f32f7881fb c++: make trait of incomplete type a permerror [PR109277]
An incomplete type argument to several traits is specified to be undefined
behavior in the library; since it's a compile-time property, we diagnose
it.  But apparently some code was relying on the previous behavior of not
diagnosing.  So let's make it a permerror.

The assert in cxx_incomplete_type_diagnostic didn't like that, and I don't
see the point of having the assert, so let's just remove it.

	PR c++/109277

gcc/cp/ChangeLog:

	* semantics.cc (check_trait_type): Handle incomplete type directly.
	* typeck2.cc (cxx_incomplete_type_diagnostic): Remove assert.

gcc/testsuite/ChangeLog:

	* g++.dg/ext/is_convertible5.C: New test.
2023-04-13 14:59:31 -04:00
Jason Merrill
fdb8c06b3d c++: make cxx_incomplete_type_diagnostic return bool
Like other diagnostic functions that might be silenced by options, it should
return whether or not it actually emitted a diagnostic.

gcc/cp/ChangeLog:

	* typeck2.cc (cxx_incomplete_type_diagnostic): Return bool.
	* cp-tree.h (cxx_incomplete_type_diagnostic): Adjust.
2023-04-13 14:59:31 -04:00
Andrew MacLeod
9c2a5db997 Ensure PHI equivalencies do not dominate the argument edge.
When we create an equivalency between a PHI definition and an argument,
ensure the definition does not dominate the incoming argument edge.

	PR tree-optimization/108139
	PR tree-optimization/109462
	* gimple-range-cache.cc (ranger_cache::fill_block_cache): Remove
	equivalency check for PHI nodes.
	* gimple-range-fold.cc (fold_using_range::range_of_phi): Ensure def
	does not dominate single-arg equivalency edges.
2023-04-13 14:12:04 -04:00
Gaius Mulley
52bb22bb5e PR modula2/109488 Typo in lang.opt: libraries maybe
Correct spelling of "maybe" to "may be" in the modula-2 language
options.

gcc/m2/ChangeLog:

	PR modula2/109488
	* lang.opt: Fix typo "maybe" to "may be".

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2023-04-13 18:43:44 +01:00
Gaius Mulley
a1afdc6e2a PR modula2/109496 Fix constant char parameter passing to an array of char
This patch fixes PR modula2/109496 and PR modula2/109497.  The fix for
PR modula2/109496 promotes a char constant to a string.  The PR
modula2/109497 allows for constant chars to be added to form a string.
The fixes for both PR's occur in M2GenGCC.mod and M2GCCDeclare.mod
after the resolving of constant declarations.

gcc/m2/ChangeLog:

	* gm2-compiler/M2ALU.def (PopChar): New procedure function.
	* gm2-compiler/M2ALU.mod (PopChar): New procedure function.
	* gm2-compiler/M2GCCDeclare.mod (PromoteToString): Detect
	a single constant char and build a C string.
	* gm2-compiler/M2GenGCC.mod (IsConstStr): New procedure
	function.
	(GetStr): New procedure function.
	(FoldAdd): Use IsConstStr.
	* gm2-compiler/M2Quads.mod: Formatting changes.
	* gm2-gcc/m2expr.cc (m2expr_GetCstInteger): New function.
	* gm2-gcc/m2expr.def (GetCstInteger): New procedure function.
	* gm2-gcc/m2expr.h (m2expr_GetCstInteger): New prototype.

gcc/testsuite/ChangeLog:

	PR modula2/109497
	* gm2/pim/run/pass/addcharconst.mod: New test.
	PR modula2/109496
	* gm2/pim/run/pass/singlechar.mod: New test.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2023-04-13 17:02:48 +01:00
Richard Sandiford
66946624b9 aarch64: Don't trust TYPE_ALIGN for pointers [PR108910]
The aarch64 PCS rules ignore user alignment for scalars and
vectors and use the "natural" alignment of the type.  GCC tried
to calculate that natural alignment using:

  TYPE_ALIGN (TYPE_MAIN_VARIANT (type))

But as discussed in the PR, it's possible that the main variant
of a pointer type is an overaligned type (although that's usually
accidental).

This isn't known to be a problem for other types, so this patch
changes the bare minimum.  It might be that we need to ignore
TYPE_ALIGN in other cases too.

gcc/
	PR target/108910
	* config/aarch64/aarch64.cc (aarch64_function_arg_alignment): Do
	not trust TYPE_ALIGN for pointer types; use POINTER_SIZE instead.

gcc/testsuite/
	PR target/108910
	* gcc.dg/torture/pr108910.c: New test.
2023-04-13 16:57:57 +01:00
Richard Biener
a37783de23 tree-optimization/109491 - ICE in expressions_equal_p
At some point I elided the NULL pointer check in expressions_equal_p
because it shouldn't be necessary not realizing that for example
TARGET_MEM_REF has optional operands we cannot substitute with
something non-NULL with the same semantics.  The following does the
simple thing and restore the check removed in r11-4982.

	PR tree-optimization/109491
	* tree-ssa-sccvn.cc (expressions_equal_p): Restore the
	NULL operands test.
2023-04-13 14:09:30 +02:00
GCC Administrator
66c7257b67 Daily bump. 2023-04-13 00:16:48 +00:00
Jonathan Wakely
adda0e2887 libstdc++: Document libstdc++exp.a library for -fcontracts
libstdc++-v3/ChangeLog:

	* doc/xml/manual/using.xml: Document libstdc++exp.a library.
	* doc/html/*: Regenerate.
2023-04-12 23:26:35 +01:00
Jonathan Wakely
25264f6b3a libstdc++: Fix some AIX test failures
AIX <sys/thread.h> defines struct tstate with non-reserved names, so
adjust the 17_intro/names.cc test. It also defines struct user, which
conflicts with namespace user in some tests.

Replacing the global operator new doesn't work on AIX the same way as it
does for ELF, so skip some tests that depend on replacing it.

Add missing DG directives to synchronized_value test so it doesn't run
for the single-threaded AIX multilib.

libstdc++-v3/ChangeLog:

	* testsuite/17_intro/names.cc [_AIX]: Do not define policy.
	* testsuite/19_diagnostics/error_code/cons/lwg3629.cc: Rename
	namespace to avoid clashing with libc struct.
	* testsuite/19_diagnostics/error_condition/cons/lwg3629.cc:
	Likewise.
	* testsuite/23_containers/unordered_map/96088.cc: Skip on AIX.
	* testsuite/23_containers/unordered_multimap/96088.cc: Likewise.
	* testsuite/23_containers/unordered_multiset/96088.cc: Likewise.
	* testsuite/23_containers/unordered_set/96088.cc: Likewise.
	* testsuite/experimental/synchronized_value.cc: Require gthreads
	and add missing option for pthreads targets.
2023-04-12 23:25:17 +01:00
Joseph Myers
d339e9802f Update gcc de.po
* de.po: Update.
2023-04-12 21:07:51 +00:00
Patrick Palka
0f3b4d38d4 libstdc++: Implement ranges::enumerate_view from P2164R9
libstdc++-v3/ChangeLog:

	* include/std/ranges (__cpp_lib_ranges_enumerate): Define
	for C++23.
	(__detail::__range_with_movable_reference): Likewise.
	(enumerate_view): Likewise.
	(enumerate_view::_Iterator): Likewise.
	(enumerate_view::_Sentinel): Likewise.
	(views::__detail::__can_enumerate_view): Likewise.
	(views::_Enumerate, views::enumerate): Likewise.
	* include/std/version (__cpp_lib_ranges_enumerate): Likewise.
	* testsuite/std/ranges/version_c++23.cc: Verify value of
	__cpp_lib_ranges_enumerate.
	* testsuite/std/ranges/adaptors/enumerate/1.cc: New test.
2023-04-12 13:24:37 -04:00
Patrick Palka
aa65771427 libstdc++: Implement LWG 3904 change to lazy_split_view's iterator
libstdc++-v3/ChangeLog:

	* include/std/ranges (lazy_split_view::_OuterIter::_OuterIter):
	Propagate _M_trailing_empty in the const-converting constructor
	as per LWG 3904.
	* testsuite/std/ranges/adaptors/adjacent/1.cc (test04): Correct
	assertion.
	* testsuite/std/ranges/adaptors/lazy_split.cc (test12): New test.
2023-04-12 13:04:36 -04:00
Patrick Palka
13669111e7 libstdc++: Ensure headers used by fast_float are included
This makes floating_from_chars.cc explicitly include all headers
that are used by the original fast_float amalgamation according to
r12-6647-gf5c8b82512f9d3, except:

  1. <cctype> since fast_float doesn't seem to use anything from it
  2. <cinttypes> since fast_float doesn't seem to use anything directly
     from it (this header also pulls in <cstdint>)
  3. <system_error> since std::errc is naturally already available
     from <charconv>

This avoids potential fast_float build failures on platforms for which
some required headers (in particular <cstdint>) end up not getting
transitively included from elsewhere.

libstdc++-v3/ChangeLog:

	* src/c++17/floating_from_chars.cc: Include <algorithm>,
	<iterator>, <limits> and <cstdint>.
2023-04-12 12:40:41 -04:00
Joseph Myers
e5656d27b8 Update gcc .po files
* be.po, da.po, de.po, el.po, es.po, fi.po, fr.po, hr.po, id.po,
	ja.po, nl.po, ru.po, sr.po, sv.po, tr.po, uk.po, vi.po, zh_CN.po,
	zh_TW.po: Update.
2023-04-12 16:18:32 +00:00