]> git.ipfire.org Git - people/ms/gcc.git/log
people/ms/gcc.git
13 months agolibstdc++: Fix simd compilation with Clang master trunk
Matthias Kretz [Thu, 23 Feb 2023 13:55:08 +0000 (14:55 +0100)] 
libstdc++: Fix simd compilation with Clang

Clang fails to compile some constant expressions involving simd.
Therefore, just disable this non-conforming extension for clang.

Fix AVX512 blend implementation for Clang. It was converting the bitmask
to bool before, which is obviously wrong. Instead use a Clang builtin to
convert the bitmask to vector-mask before using a vector blend ?:. A
similar change is required for the masked unary implementation, because
the GCC builtins do not exist on Clang.

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
libstdc++-v3/ChangeLog:

* include/experimental/bits/simd_detail.h: Don't declare the
simd API as constexpr with Clang.
* include/experimental/bits/simd_x86.h (__movm): New.
(_S_blend_avx512): Resolve FIXME. Implement blend using __movm
and ?:.
(_SimdImplX86::_S_masked_unary): Clang does not implement the
same builtins. Implement the function using __movm, ?:, and -
operators on vector_size types instead.

13 months agoc++: DMI in template with virtual base [PR106890]
Jason Merrill [Sat, 18 Mar 2023 12:27:26 +0000 (08:27 -0400)] 
c++: DMI in template with virtual base [PR106890]

When parsing a default member init we just build a CONVERT_EXPR for
converting to a virtual base, and then expand that into the more complex
form when we actually use the DMI in a constructor.  But that wasn't working
for the template case where we are considering the conversion at the point
that the constructor needs the DMI instantiation, so it seemed like we were
in a constructor already.  And then when the other constructor tries to
reuse the instantiation, it sees uses of the first constructor's parameters,
and dies.  So ensure that we get the CONVERT_EXPR in this case, too.

PR c++/106890

gcc/cp/ChangeLog:

* init.cc (maybe_instantiate_nsdmi_init): Don't leave
current_function_decl set to a constructor.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/nsdmi-template25.C: New test.

13 months agoTerminate GORI calculations if a relation is not relevant.
Andrew MacLeod [Mon, 20 Mar 2023 20:11:12 +0000 (16:11 -0400)] 
Terminate GORI calculations if a relation is not relevant.

We currently allow VARYING lhs GORI calculations to continue if there is
a relation present in the hope it will eventually better refine a result.
This adds a check that the relation is relevant to the outgoing range
calculation first.  If it is not relevant, stop calculating.

PR tree-optimization/109192
* gimple-range-gori.cc (gori_compute::compute_operand_range):
Terminate gori calculations if a relation is not relevant.
* value-relation.h (value_relation::set_relation): Allow
equality between op1 and op2 if they are the same.

13 months agotree-optimization/109219 - avoid looking at STMT_SLP_TYPE
Richard Biener [Tue, 21 Mar 2023 11:49:36 +0000 (12:49 +0100)] 
tree-optimization/109219 - avoid looking at STMT_SLP_TYPE

The following avoids looking at STMT_SLP_TYPE apart from the only
place needing it - transform and analysis of non-SLP loop stmts.
In particular it doesn't have a reliable meaning on SLP representatives
which are also passed as stmt_vinfo to vectorizable_* routines.  The
proper way to check in those is to look for the slp_node argument
instead.

PR tree-optimization/109219
* tree-vect-loop.cc (vectorizable_reduction): Check
slp_node, not STMT_SLP_TYPE.
* tree-vect-stmts.cc (vectorizable_condition): Likewise.
* tree-vect-slp.cc (vect_slp_analyze_node_operations_1):
Remove assertion on STMT_SLP_TYPE.

* gcc.dg/torture/pr109219.c: New testcase.

13 months agotestsuite: Remove obsolete comments [PR108898]
Jakub Jelinek [Tue, 21 Mar 2023 12:42:51 +0000 (13:42 +0100)] 
testsuite: Remove obsolete comments [PR108898]

On Tue, Mar 21, 2023 at 12:35:19PM +0000, Andrew Stubbs wrote:
> >   /* Ensure the the in-branch simd clones are used on targets that support them.
> >      Some targets use another call for the epilogue loops.  */
> > -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! aarch64*-*-* } } } } */
> > -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target aarch64*-*-* } } } */
> > +/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" } } */
>
> I suppose those comments are now obsolete.

Oops, fixed thusly.

2023-03-21  Jakub Jelinek  <jakub@redhat.com>

PR testsuite/108898
* gcc.dg/vect/vect-simd-clone-16.c: Remove parts of comment mentioning
epilogue loops.
* gcc.dg/vect/vect-simd-clone-17.c: Likewise.
* gcc.dg/vect/vect-simd-clone-18.c: Likewise.

13 months agotestsuite: Fix up vect-simd-clone1[678]*.c tests [PR108898]
Jakub Jelinek [Tue, 21 Mar 2023 12:28:50 +0000 (13:28 +0100)] 
testsuite: Fix up vect-simd-clone1[678]*.c tests [PR108898]

As mentioned in the PR, vect-simd-clone-1[678]{,f}.c tests FAIL on
x86_64-linux with -m64/-march=cascadelake or -m32/-march=cascadelake,
there are 3 matches for the calls rather than expected two.
As suggested by Richi, this patch changes those tests to use
--param vect-epilogues-nomask=0 such that it is more predictable on how
many calls will show up.  In the non-[a-f] suffixed tests, the
scan-tree-dump-times patterns were expecting 2 for non-aarch64 and 3 for
aarch64, which is a puzzle for me, because vect_simd_clones effective
target is apparently never true on aarch64 (just on x86 in some cases and
on amdgcn; perhaps something to change for GCC14, but I guess too late
for stage4).  That said, I have looked at aarch64 dumps and see only 2
calls with --param vect-epilogues-nomask=0 and 3 with --param
vect-epilogues-nomask=1 or without it, so I have tweaked those to always
expect the same thing.  Another thing is some tests uselessly had
-fdump-tree-optimized in dg-options even when they don't scan anything
there.

Tested on x86_64-linux with
make -j32 -k check-gcc RUNTESTFLAGS="vect.exp=gcc.dg/vect/vect-simd-clone-*.c \
--target_board='unix{-m64/-march=x86-64,-m64/-march=cascadelake,-m32/-march=i686,-m32/-march=cascadelake}'"
and aarch64-linux (where all tests are UNSUPPORTED before/after).

2023-03-21  Jakub Jelinek  <jakub@redhat.com>

PR testsuite/108898
* gcc.dg/vect/vect-simd-clone-16.c: Add --param vect-epilogues-nomask=0
to dg-additional-options.  Always expect just 2 foo.simdclone calls.
* gcc.dg/vect/vect-simd-clone-16f.c: Add
--param vect-epilogues-nomask=0 to dg-additional-options.
* gcc.dg/vect/vect-simd-clone-17.c: Likewise.  Always expect just 2
foo.simdclone calls.
* gcc.dg/vect/vect-simd-clone-17d.c: Remove -fdump-tree-optimized from
dg-additional-options.
* gcc.dg/vect/vect-simd-clone-17e.c: Likewise.
* gcc.dg/vect/vect-simd-clone-17f.c: Likewise.  Add
--param vect-epilogues-nomask=0 to dg-additional-options.
* gcc.dg/vect/vect-simd-clone-18.c: Add --param vect-epilogues-nomask=0
to dg-additional-options.  Always expect just 2 foo.simdclone calls.
* gcc.dg/vect/vect-simd-clone-18f.c: Add
--param vect-epilogues-nomask=0 to dg-additional-options.

13 months agolibstdc++: Fix simd test compilation with Clang
Matthias Kretz [Thu, 23 Feb 2023 13:45:07 +0000 (14:45 +0100)] 
libstdc++: Fix simd test compilation with Clang

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
libstdc++-v3/ChangeLog:

* testsuite/experimental/simd/tests/operators.cc: Clang doesn't
define __GCC_IEC_559. Use __STDC_IEC_559__ instead.

13 months agotree: Fix up component_ref_sam_type handling of arrays of 0 sized elements [PR109215]
Jakub Jelinek [Tue, 21 Mar 2023 10:06:20 +0000 (11:06 +0100)] 
tree: Fix up component_ref_sam_type handling of arrays of 0 sized elements [PR109215]

Our documentation sadly talks about elt_type arr[0]; as zero-length arrays,
not arrays with zero elements.  Unfortunately, those aren't the only arrays
which can have zero size, the same size can be also result of zero-length
element, like in GNU C struct whatever {} or in GNU C/C++ if the element
type is [0] array or combination thereof (dunno if Ada doesn't allow
something similar too).  One can't do much with them, taking address of
their elements, (no-op) copying of the elements in and out.  But they
behave differently from arr[0] arrays e.g. in that using non-zero indexes
in them (as long as they are within bounds as for normal arrays) is valid.

I think this naming inaccuracy resulted in Martin designing
special_array_member in an inconsistent way, mixing size zero array members
with array members of one or two or more elements and then using the
size zero interchangeably with zero elements.

The following patch changes that (but doesn't do any
documentation/diagnostics renaming, as this is really a corner case),
such that int_0/trail_0 for consistency is just about [0] arrays
plus [] for the latter, not one or more zero sized elements case.

The testcase has one xfailed case for where perhaps in later GCC versions
we could add extra code to handle it, for some reason we don't diagnose
out of bounds accesses for the zero sized elements cases.  It will be
harder because e.g. FRE will canonicalize &var.fld[0] and &var.fld[10]
to just one of them because they are provably the same address.
But the important thing is to fix this regression (where we warn on
completely valid code in the Linux kernel).  Anyway, for further work
on this we don't really need any extra help from special_array_member,
all code can just check integer_zerop (TYPE_SIZE_UNIT (TREE_TYPE (type))),
it doesn't depend on the position of the members etc.

2023-03-21  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/109215
* tree.h (enum special_array_member): Adjust comments for int_0
and trail_0.
* tree.cc (component_ref_sam_type): Clear zero_elts if memtype
has zero sized element type and the array has variable number of
elements or constant one or more elements.
(component_ref_size): Adjust comments, formatting fix.

* gcc.dg/Wzero-length-array-bounds-3.c: New test.

13 months agohtml: Set CONTENTS_OUTPUT_LOCATION=inline if makeinfo supports it
Arsen Arsenović [Thu, 9 Mar 2023 20:44:29 +0000 (21:44 +0100)] 
html: Set CONTENTS_OUTPUT_LOCATION=inline if makeinfo supports it

This flag allows us to restore old (pre-6.8) behavior of the
@{summary,}content commands, so that texi2any continues to emit
summarycontents first.

maintainer-scripts/ChangeLog:

* update_web_docs_git: Set CONTENTS_OUTPUT_LOCATION=inline in
order to put @shortcontents above contents.

gcc/ChangeLog:

* configure.ac: Add check for the Texinfo 6.8
CONTENTS_OUTPUT_LOCATION customization variable and set it if
supported.
* configure: Regenerate.
* Makefile.in (MAKEINFO_TOC_INLINE_FLAG): New variable.  Set by
configure.ac to -c CONTENTS_OUTPUT_LOCATION=inline if
CONTENTS_OUTPUT_LOCATION support is detected, empty otherwise.
($(build_htmldir)/%/index.html): Pass MAKEINFO_TOC_INLINE_FLAG.

13 months agodocs: Fix up new instances of index reordering
Arsen Arsenović [Tue, 28 Feb 2023 10:40:56 +0000 (11:40 +0100)] 
docs: Fix up new instances of index reordering

This commit fixes up an instance of the index entry mis-ordering that
occurred between the formulation and application of commit
r13-6310-gf33d7a88d069d1.

gcc/ChangeLog:

* doc/extend.texi: Associate use_hazard_barrier_return index
entry with its attribute.
* doc/invoke.texi: Associate -fcanon-prefix-map index entry with
its attribute

13 months agoupdate_web_docs_git: Update CSS reference to new manual CSS
Arsen Arsenović [Thu, 26 Jan 2023 17:50:38 +0000 (18:50 +0100)] 
update_web_docs_git: Update CSS reference to new manual CSS

maintainer-scripts/ChangeLog:

* update_web_docs_git (CSS): Update CSS reference to point to
/texinfo-manuals.css.

13 months agodoc: Remove the @gol macro/alias
Arsen Arsenović [Wed, 25 Jan 2023 22:33:03 +0000 (23:33 +0100)] 
doc: Remove the @gol macro/alias

The @gol macro appears to have existed as a workaround for a bug in old
versions of makeinfo and/or texinfo.tex, where they would, in some types
of output, fail to emit line breaks in @gccoptlists.  After updating
texinfo.tex, I noticed that this behavior appears to no longer be
exhibited, instead, both acted correctly and inserted newlines.  The
(groff) manual output also appears unaffected.

gcc/ChangeLog:

* doc/implement-c.texi: Remove usage of @gol.
* doc/invoke.texi: Ditto.
* doc/sourcebuild.texi: Ditto.
* doc/include/gcc-common.texi: Remove @gol.  In new Makeinfo and
texinfo.tex versions, the bug it was working around appears to
be gone.

gcc/fortran/ChangeLog:

* invoke.texi: Remove usages of @gol.
* intrinsic.texi: Ditto.

13 months agodoc: Update texinfo.tex
Arsen Arsenović [Fri, 10 Mar 2023 15:21:33 +0000 (16:21 +0100)] 
doc: Update texinfo.tex

gcc/ChangeLog:

* doc/include/texinfo.tex: Update to 2023-01-17.19.

13 months agodocs: Add @defbuiltin family of helpers
Arsen Arsenović [Fri, 10 Mar 2023 15:13:28 +0000 (16:13 +0100)] 
docs: Add @defbuiltin family of helpers

The @defbuiltin{,x} macros are convenience macros for the often-repeated
task of defining a built-in function in extend.texi.  Usage of this
macro should lead to a higher degree of consistency across pieces of
text written by different people, and provide a better reading
experience, as they prevent easy-to-make errors, like forgetting index
entries for these functions.

gcc/ChangeLog:

* doc/include/gcc-common.texi: Add @defbuiltin{,x} and
@enddefbuiltin for defining built-in functions.
* doc/extend.texi: Apply @defbuiltin{,x} to many, but not all,
places where it should be used.

13 months agodoc: Fix a few minor errors spotted by testers
Arsen Arsenović [Fri, 10 Mar 2023 15:08:19 +0000 (16:08 +0100)] 
doc: Fix a few minor errors spotted by testers

This commit addresses a few minor errors that were spotted while testing
the GCC manual with a few people, and while working on wider changes.

gcc/ChangeLog:

* doc/extend.texi (Formatted Output Function Checking): New
subsection for  grouping together printf et al.
(Exception handling) Fix missing @ sign before copyright
header, which lead to the copyright line leaking into
'(gcc)Exception handling'.
* doc/gcc.texi: Set document language to en_US.
(@copying): Wrap front cover texts in quotations, move in manual
description text.

13 months agodocs: Create Indices appendix
Arsen Arsenović [Sun, 20 Nov 2022 16:57:46 +0000 (17:57 +0100)] 
docs: Create Indices appendix

The GCC manual has multiple indices.  By creating an appendix which
lists them, we help makeinfo present a more accessible way for the
reader to see all the indices.

gcc/ChangeLog:

* doc/gcc.texi: Add the Indices appendix, to make texinfo
generate nice indices overview page.

13 months agotree-optimization/109170 - bogus use-after-free with __builtin_expect
Richard Biener [Fri, 17 Mar 2023 12:14:49 +0000 (13:14 +0100)] 
tree-optimization/109170 - bogus use-after-free with __builtin_expect

The following adds a missing range-op for __builtin_expect which
helps -Wuse-after-free to detect the case a realloc original
pointer is used when the result was NULL.  The implementation
should handle all argument one pass-through builtins we handle
in the fnspec machinery, but that's defered to GCC 14.

The gcc.dg/tree-ssa/ssa-lim-21.c testcase needs adjustment because

   for (int j = 0; j < m; j++)
     if (__builtin_expect (m, 0))
       for (int i = 0; i < m; i++)

is now correctly optimized to a unconditional jump by EVRP - m
cannot be zero when the outer loop is entered.  I've adjusted
the outer loop to iterate 'n' times which makes us apply store-motion
to 'count' and 'q->data1' but only out of the inner loop and
as expected not apply store motion to 'q->data' at all.

The gcc.dg/predict-20.c testcase relies on broken behavior of
profile estimation when trying to handle __builtin_expect values
flowing into PHI nodes.  I have opened PR109210 and removed
the expected matching from the testcase.

PR tree-optimization/109170
* gimple-range-op.cc (cfn_pass_through_arg1): New.
(gimple_range_op_handler::maybe_builtin_call): Handle
__builtin_expect via cfn_pass_through_arg1.

* gcc.dg/Wuse-after-free-pr109170.c: New testcase.
* gcc.dg/tree-ssa/ssa-lim-21.c: Adjust.
* gcc.dg/predict-20.c: Likewise.

13 months agoFortran: Fix regression caused by PR37336 patch [PR109206]
Paul Thomas [Tue, 21 Mar 2023 06:28:07 +0000 (06:28 +0000)] 
Fortran: Fix regression caused by PR37336 patch [PR109206]

2023-03-21  Paul Thomas  <pault@gcc.gnu.org>

gcc/fortran
PR fortran/109206
* trans-array.cc (gfc_trans_array_constructor_value): Correct
incorrect setting of typespec.

13 months agoFortran: Fix regression caused by PR37336 patch [PR109209]
Paul Thomas [Tue, 21 Mar 2023 06:22:37 +0000 (06:22 +0000)] 
Fortran: Fix regression caused by PR37336 patch [PR109209]

2023-03-21  Paul Thomas  <pault@gcc.gnu.org>

gcc/fortran
PR fortran/109209
* resolve.cc (generate_component_assignments): Restore the
exclusion of allocatable components from the loop.

gcc/testsuite/
PR fortran/109209
* gfortran.dg/pr109209.f90: New test.

13 months ago[modula2] Add $(CXX_FLAGS) to the bootstrap tool rules.
Gaius Mulley [Tue, 21 Mar 2023 00:30:56 +0000 (00:30 +0000)] 
[modula2] Add $(CXX_FLAGS) to the bootstrap tool rules.

The bootstrap tool mc is built using $(CXX) and it is missing
$(CXXFLAGS).

gcc/m2/ChangeLog:

* Make-lang.in (m2/mc-boot/$(SRC_PREFIX)%.o): Add $(CXXFLAGS).
(m2/mc-boot-ch/$(SRC_PREFIX)%.o): Add $(CXXFLAGS).
(m2/mc-boot-ch/$(SRC_PREFIX)%.o): Add $(CXXFLAGS).
(m2/mc-boot/main.o): Add $(CXXFLAGS).

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
13 months agoDaily bump.
GCC Administrator [Tue, 21 Mar 2023 00:17:02 +0000 (00:17 +0000)] 
Daily bump.

13 months agolibstdc++: Fix formatting in std::filesystem helper function
Jonathan Wakely [Mon, 20 Mar 2023 13:40:59 +0000 (13:40 +0000)] 
libstdc++: Fix formatting in std::filesystem helper function

libstdc++-v3/ChangeLog:

* src/filesystem/ops-common.h (get_temp_directory_from_env): Fix
formatting.

13 months agoUpdate gcc sv.po
Joseph Myers [Mon, 20 Mar 2023 22:47:39 +0000 (22:47 +0000)] 
Update gcc sv.po

* sv.po: Update.

13 months agoFortran: fix documentation of -fno-underscoring [PR109216]
Harald Anlauf [Mon, 20 Mar 2023 19:55:00 +0000 (20:55 +0100)] 
Fortran: fix documentation of -fno-underscoring [PR109216]

gcc/fortran/ChangeLog:

PR fortran/109216
* invoke.texi: Correct documentation of how underscores are appended
to external names.

13 months agoc++: explicit ctor and list-initialization [PR109159]
Marek Polacek [Fri, 17 Mar 2023 22:25:13 +0000 (18:25 -0400)] 
c++: explicit ctor and list-initialization [PR109159]

When I implemented explicit(bool) in r9-3735, I added this code to
add_template_candidate_real:
+  /* Now the explicit specifier might have been deduced; check if this
+     declaration is explicit.  If it is and we're ignoring non-converting
+     constructors, don't add this function to the set of candidates.  */
+  if ((flags & LOOKUP_ONLYCONVERTING) && DECL_NONCONVERTING_P (fn))
+    return NULL;
but as this test demonstrates, that's incorrect when we're initializing
from a {}: for list-initialization we consider explicit constructors and
complain if one is chosen.

PR c++/109159

gcc/cp/ChangeLog:

* call.cc (add_template_candidate_real): Add explicit decls to the
set of candidates when the initializer is a braced-init-list.

libstdc++-v3/ChangeLog:

* testsuite/20_util/pair/cons/explicit_construct.cc: Adjust dg-error.
* testsuite/20_util/tuple/cons/explicit_construct.cc: Likewise.
* testsuite/23_containers/span/explicit.cc: Likewise.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/explicit16.C: New test.

13 months agoc++: Drop TREE_READONLY on vars (possibly) initialized by tls wrapper [PR109164]
Jakub Jelinek [Mon, 20 Mar 2023 19:29:47 +0000 (20:29 +0100)] 
c++: Drop TREE_READONLY on vars (possibly) initialized by tls wrapper [PR109164]

The following two testcases are miscompiled, because we keep TREE_READONLY
on the vars even when they are (possibly) dynamically initialized by a TLS
wrapper function.  Normally cp_finish_decl drops TREE_READONLY from vars
which need dynamic initialization, but for TLS we do this kind of
initialization upon every access to those variables.  Keeping them
TREE_READONLY means e.g. PRE can hoist loads from those before loops
which contain the TLS wrapper calls, so we can access the TLS variables
before they are initialized.

2023-03-20  Jakub Jelinek  <jakub@redhat.com>

PR c++/109164
* cp-tree.h (var_needs_tls_wrapper): Declare.
* decl2.cc (var_needs_tls_wrapper): No longer static.
* decl.cc (cp_finish_decl): Clear TREE_READONLY on TLS variables
for which a TLS wrapper will be needed.

* g++.dg/tls/thread_local13.C: New test.
* g++.dg/tls/thread_local13-aux.cc: New file.
* g++.dg/tls/thread_local14.C: New test.
* g++.dg/tls/thread_local14-aux.cc: New file.

13 months agoRework 128-bit complex multiply and divide.
Michael Meissner [Mon, 20 Mar 2023 18:48:06 +0000 (14:48 -0400)] 
Rework 128-bit complex multiply and divide.

This patch reworks how the complex multiply and divide built-in functions are
done.  Previously GCC created built-in declarations for doing long double complex
multiply and divide when long double is IEEE 128-bit.  However, it did not
support __ibm128 complex multiply and divide if long double is IEEE 128-bit.

This code does not create the built-in declaration with the changed name.
Instead, it uses the TARGET_MANGLE_DECL_ASSEMBLER_NAME hook to change the name
before it is written out to the assembler file like it now does for all of the
other long double built-in functions.

2023-03-20   Michael Meissner  <meissner@linux.ibm.com>

gcc/

PR target/109067
* config/rs6000/rs6000.cc (create_complex_muldiv): Delete.
(init_float128_ieee): Delete code to switch complex multiply and divide
for long double.
(complex_multiply_builtin_code): New helper function.
(complex_divide_builtin_code): Likewise.
(rs6000_mangle_decl_assembler_name): Add support for mangling the name
of complex 128-bit multiply and divide built-in functions.

gcc/testsuite/

PR target/109067
* gcc.target/powerpc/divic3-1.c: New test.
* gcc.target/powerpc/divic3-2.c: Likewise.
* gcc.target/powerpc/mulic3-1.c: Likewise.
* gcc.target/powerpc/mulic3-2.c: Likewise.

13 months agoFortran: simplification of NEAREST for large argument [PR109186]
Harald Anlauf [Sun, 19 Mar 2023 20:29:46 +0000 (21:29 +0100)] 
Fortran: simplification of NEAREST for large argument [PR109186]

gcc/fortran/ChangeLog:

PR fortran/109186
* simplify.cc (gfc_simplify_nearest): Fix off-by-one error in setting
up real kind-specific maximum exponent for mpfr.

gcc/testsuite/ChangeLog:

PR fortran/109186
* gfortran.dg/nearest_6.f90: New test.

13 months agors6000: Don't ICE when compiling the __builtin_vec_xst_trunc built-in [PR109178]
Peter Bergner [Mon, 20 Mar 2023 14:12:47 +0000 (09:12 -0500)] 
rs6000: Don't ICE when compiling the __builtin_vec_xst_trunc built-in [PR109178]

When we expand the __builtin_vec_xst_trunc built-in, we use the wrong mode
for the MEM operand which causes an unrecognizable insn ICE.  The solution
is to use the correct TMODE mode.

2023-03-20  Peter Bergner  <bergner@linux.ibm.com>

gcc/
PR target/109178
* config/rs6000/rs6000-builtin.cc (stv_expand_builtin): Use tmode.

gcc/testsuite/
PR target/109178
* gcc.target/powerpc/pr109178.c: New test.

13 months agotestsuite: Fix up 20230313.C test
Jakub Jelinek [Mon, 20 Mar 2023 11:38:43 +0000 (12:38 +0100)] 
testsuite: Fix up 20230313.C test

I've noticed this testcase FAILs on i686-linux with
-fstack-protector-strong.

sizeof (auto_vec<int, 8>) == 16, which in this case contains
4-byte m_vec (which points to to m_auto), then 8-byte m_auto
which contains just 8-byte m_vecpfx and finally 1 byte m_data,
rest is padding.  We then try to push 2 ints to it, so 8 bytes,
starting at the end of m_vecpfx aka address of m_data, but there
is just 1 byte + 3 bytes of padding.
In the lp64 case, I think sizeof (auto_vec<int, 8>) == 24,
because there is 8-byte m_vec, 8-byte m_vecpfx and 1-byte m_char
all with 8-byte alignment.

2023-03-20  Jakub Jelinek  <jakub@redhat.com>

* g++.dg/torture/20230313.C (auto_vec): Change m_data type
from char to char [2 * sizeof (int)].

13 months agolibstdc++: Remove template-head from std::expected<void> ctor [PR109182]
Jonathan Wakely [Mon, 20 Mar 2023 09:30:58 +0000 (09:30 +0000)] 
libstdc++: Remove template-head from std::expected<void> ctor [PR109182]

The presence of a template-head on this constructor is a copy & paste
error from the primary template.

libstdc++-v3/ChangeLog:

PR libstdc++/109182
* include/std/expected (expected<void>::expected(in_place_t)):
Remove template-head.

13 months agoFortran: Allow external function from in an associate block [PR87127]
Paul Thomas [Mon, 20 Mar 2023 06:13:54 +0000 (06:13 +0000)] 
Fortran: Allow external function from in an associate block [PR87127]

2023-03-20  Paul Thomas  <pault@gcc.gnu.org>

gcc/fortran
PR fortran/87127
* resolve.cc (check_host_association): If an external function
is typed but not declared explicitly to be external, change the
old symbol from a variable to an external function.

gcc/testsuite/
PR fortran/87127
* gfortran.dg/external_procedures_4.f90: New test.

13 months agoDaily bump.
GCC Administrator [Mon, 20 Mar 2023 00:17:08 +0000 (00:17 +0000)] 
Daily bump.

13 months agoFortran: procedures with BIND(C) attribute require explicit interface [PR85877]
Harald Anlauf [Fri, 17 Mar 2023 21:24:49 +0000 (22:24 +0100)] 
Fortran: procedures with BIND(C) attribute require explicit interface [PR85877]

gcc/fortran/ChangeLog:

PR fortran/85877
* resolve.cc (resolve_fl_procedure): Check for an explicit interface
of procedures with the BIND(C) attribute (F2018:15.4.2.2).

gcc/testsuite/ChangeLog:

PR fortran/85877
* gfortran.dg/pr85877.f90: New test.

13 months agoMention undefined behavior on integer overflow.
Thomas Koenig [Sun, 19 Mar 2023 17:34:38 +0000 (18:34 +0100)] 
Mention undefined behavior on integer overflow.

gcc/fortran/ChangeLog:

* gfortran.texi: Mention behavior on overflow.

13 months agoRe: [PATCH] Testsuite: Disable micromips for MSA tests
Xin Liu [Sun, 19 Mar 2023 17:28:07 +0000 (13:28 -0400)] 
Re: [PATCH] Testsuite: Disable micromips for MSA tests

gcc/testsuite
* gcc.target/mips/mips.exp (mips-dg-options): Disable micromips
for MSA tests.

13 months ago[modula2] target independent doc and tools rebuilt
Gaius Mulley [Sun, 19 Mar 2023 13:06:53 +0000 (13:06 +0000)] 
[modula2] target independent doc and tools rebuilt

The target independent documentation needs to be rebuilt together with the
bootstrap tools after the library changes and after the <* noreturn *>
attribute has been implemented.

gcc/m2/ChangeLog:

* Make-maintainer.in (gm2.maintainer-clean): Remove.
(gm2.maintainer-help): Add gm2.maintainer-tools,
gm2.maintainer-doc.  Remove gm2.maintainer-clean.
Change target-independent directory to target-independent/m2.
* gm2-compiler/ppg.mod: Correct __FILE_ typo to __FILE__.
* gm2-compiler/M2Options.def (SetAutoInit): Update comment.
* gm2-compiler/M2Options.mod (SetAutoInit): Update comment.
* gm2-gcc/m2color.cc (m2color_colorize_start): Rename name_len
to _name_high.
* gm2-gcc/m2color.def (colorize_start): change ARRAY OF CHAR to
ADDRESS and add _name_high.
* gm2-gcc/m2decl.cc (m2decl_BuildStartFunctionDeclaration): Change
int to bool.
* gm2-gcc/m2decl.h (m2decl_BuildStartFunctionDeclaration): Change
int to bool.
* gm2-gcc/m2expr.cc (m2expr_BuildBinarySetDo): Change int to bool.
(m2expr_BuildIfConstInVar): Change int to bool.
(m2expr_BuildIfNotConstInVar): Change int to bool.
(m2expr_BuildIfVarInVar): Change int to bool.
(m2expr_BuildIfNotVarInVar): Change int to bool.
(m2expr_BuildForeachWordInSetDoIfExpr): Change int to bool.
* gm2-gcc/m2expr.h (m2expr_BuildIfNotVarInVar): Change int to bool.
(m2expr_BuildIfVarInVar): Change int to bool.
(m2expr_BuildIfNotConstInVar): Change int to bool.
(m2expr_BuildIfConstInVar): Change int to bool.
* gm2-gcc/m2options.h (M2Options_SetAutoInit): Change int to bool.
(M2Options_SetNilCheck): Change int to bool.
(M2Options_SetReturnCheck): Change int to bool.
(M2Options_SetCaseCheck): Change int to bool.
(M2Options_SetCheckAll): Change int to bool.
(M2Options_SetVerboseUnbounded): Change int to bool.
(M2Options_SetUnboundedByReference): Change int to bool.
(M2Options_SetOptimizing): Change int to bool.
(M2Options_SetQuiet): Change int to bool.
(M2Options_SetCpp): Change int to bool.
(M2Options_SetM2g): Change int to bool.
(M2Options_SetLowerCaseKeywords): Change int to bool.
(M2Options_SetVerbose): Change int to bool.
* gm2-gcc/m2treelib.cc (m2treelib_get_rvalue): Change int to bool.
(m2treelib_get_field_no): Change int to bool.
(m2treelib_get_set_value): Change int to bool.
(m2treelib_get_set_address): Change int to bool.
(m2treelib_get_set_address_if_var): Change int to bool.
* gm2-gcc/m2treelib.def (get_set_address_if_var): Change int to bool.
(get_set_address): Change int to bool.
(get_set_value): Change int to bool.
(get_field_no): Change int to bool.
(get_rvalue): Change int to bool.
* gm2-gcc/m2treelib.h (m2treelib_get_field_no): Change int to bool.
(m2treelib_get_set_value): Change int to bool.
(m2treelib_get_set_address): Change int to bool.
(m2treelib_get_set_address_if_var): Change int to bool.
* gm2-gcc/m2type.cc (m2type_BuildEndFunctionType): Change int to bool.
* gm2-gcc/m2type.h (m2type_BuildEndFunctionType): Change int to bool.
* gm2-libs-ch/dtoa.cc (dtoa_calcsign): Change int to bool.
* gm2-libs-ch/ldtoa.cc (dtoa_calcsign): Change int to bool.
(ldtoa_ldtoa): Change int to bool.
* m2.flex (functionInfo): Change int to bool.
(pushFunction): Change parameter from int to bool.
* mc-boot/GDebug.cc (Debug_Halt): Rebuild.
* mc-boot/GDebug.h (Debug_Halt): Rebuild.
* mc-boot/GDynamicStrings.cc: Rebuild.
* mc-boot/GDynamicStrings.h: Rebuild.
* mc-boot/GFIO.cc: Rebuild.
* mc-boot/GM2RTS.cc: Rebuild.
* mc-boot/GM2RTS.h: Rebuild.
* mc-boot/GPushBackInput.cc: Rebuild.
* mc-boot/GRTExceptions.cc: Rebuild.
* mc-boot/GRTint.cc: Rebuild.
* mc-boot/GSysStorage.cc: Rebuild.
* mc-boot/Gdecl.cc: Rebuild.
* mc-boot/GsymbolKey.cc: Rebuild.
* mc/symbolKey.mod: Rebuild.
* target-independent/m2/Builtins.texi: Rebuild.
* target-independent/m2/SYSTEM-iso.texi: Rebuild.
* target-independent/m2/SYSTEM-pim.texi: Rebuild.
* target-independent/m2/gm2-libs.texi: Rebuild.
* tools-src/def2doc.py (PIM_Log): Change gm2-libs-pim to
gm2-lib-log.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
13 months agoor1k: Do not clear existing FPU exceptions before updating
Stafford Horne [Sat, 18 Mar 2023 07:43:05 +0000 (16:43 +0900)] 
or1k: Do not clear existing FPU exceptions before updating

We should always carry the exceptions forward.  This bug was found when
working on testing glibc math tests, many tests were failing with
Overflow and Underflow flags not set.  This was traced to here.

libgcc/ChangeLog:

* config/or1k/sfp-machine.h (FP_HANDLE_EXCEPTIONS): Remove
statement clearing existing exceptions.

13 months agoDocs: correct typo in nonnull function attribute description.
Jonny Grant [Sun, 19 Mar 2023 01:21:33 +0000 (01:21 +0000)] 
Docs: correct typo in nonnull function attribute description.

gcc/ChangeLog:
* doc/extend.texi (Common Function Attributes) <nonnull>:
Correct typo.

13 months agoDaily bump.
GCC Administrator [Sun, 19 Mar 2023 00:16:36 +0000 (00:16 +0000)] 
Daily bump.

13 months agoanalyzer: fix ICE on certain longjmp calls [PR109094]
David Malcolm [Sat, 18 Mar 2023 16:48:01 +0000 (12:48 -0400)] 
analyzer: fix ICE on certain longjmp calls [PR109094]

PR analyzer/109094 reports an ICE in the analyzer seen on qemu's
target/i386/tcg/translate.c

The issue turned out to be that when handling a longjmp, the code
to pop the frames was generating an svalue for the result_decl of any
popped frame that had a non-void return type (and discarding it) leading
to "uninit" poisoned_svalue_diagnostic instances being saved since the
result_decl is only set by the greturn stmt.  Later, when checking the
feasibility of the path to these diagnostics, m_check_expr was evaluated
in the context of the frame of the longjmp, leading to an attempt to
evaluate the result_decl of each intervening frames whilst in the
context of the topmost frame, leading to an assertion failure in
frame_region::get_region_for_local here:

919 case RESULT_DECL:
920   gcc_assert (DECL_CONTEXT (expr) == m_fun->decl);
921   break;

This patch updates the analyzer's longjmp implementation so that it
doesn't attempt to generate svalues for the result_decls when popping
frames, fixing the assertion failure (and presumably fixing "uninit"
false positives in a release build).

gcc/analyzer/ChangeLog:
PR analyzer/109094
* region-model.cc (region_model::on_longjmp): Pass false for
new "eval_return_svalue" param of pop_frame.
(region_model::pop_frame): Add new "eval_return_svalue" param and
use it to suppress the call to get_rvalue on the result when
needed by on_longjmp.
* region-model.h (region_model::pop_frame): Add new
"eval_return_svalue" param.

gcc/testsuite/ChangeLog:
PR analyzer/109094
* gcc.dg/analyzer/setjmp-pr109094.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
13 months agolibstdc++: Fix test for hash<coroutine_handle<P>>::operator() [PR109165]
Jonathan Wakely [Fri, 17 Mar 2023 11:39:55 +0000 (11:39 +0000)] 
libstdc++: Fix test for hash<coroutine_handle<P>>::operator() [PR109165]

libstdc++-v3/ChangeLog:

PR libstdc++/109165
* testsuite/18_support/coroutines/hash.cc: Use const object
in second call.

13 months agoFortran: Fix bugs and missing features in finalization [PR37336]
Paul Thomas [Sat, 18 Mar 2023 07:56:23 +0000 (07:56 +0000)] 
Fortran: Fix bugs and missing features in finalization [PR37336]

2023-03-18  Paul Thomas  <pault@gcc.gnu.org>

gcc/fortran
PR fortran/103854
PR fortran/96122
PR fortran/37336
* class.cc (finalize_component): Include the missing arguments
in the call to the component's finalizer wrapper.
(has_finalizer_component): Do not return true for procedure
pointer components.
(finalizer_insert_packed_call): Remove the redundant argument
in the call to the final subroutine.
(generate_finalization_wrapper): Add support for assumed rank
finalizers.
(gfc_may_be_finalized): New helper function.
* dump-parse-tree.cc (write_proc): Whitespace.
* gfortran.h : Add prototype for gfc_may_be_finalized.
* resolve.cc (resolve_function): Correct derived types that
have an incomplete namespace.
(resolve_where, gfc_resolve_where_code_in_forall,
gfc_resolve_forall_body, gfc_resolve_code): Check that the op
code is still EXEC_ASSIGN. If it is set lhs to must finalize.
(is_finalizable_type): New function.
(generate_component_assignments): Set must_finalize if needed.
(gfc_resolve_finalizers): Error if assumed rank finalizer is
not the only one. Warning on lack of scalar finalizer modified
to account for assumed rank finalizers.
(generate_final_call): New function.
(generate_component_assignments): Enclose the outermost call in
a block to capture automatic deallocation and final calls.
Set must_finalize as required to satisfy the standards. Use an
explicit pointer assignment for pointer components to capture
finalization of the target. Likewise use explicit assignment
for allocatable components. Do not use the temporary copy of
the lhs in defined assignment if the component is allocatable.
Put the temporary in the same namespace as the lhs symbol if
the component may be finalized. Remove the leading assignment
from the expansion of assignment of components that have their
own defined assignment components. Suppress finalization of
assignment of temporary components to the lhs. Make an explicit
final call for the rhs function temporary if it exists.
(gfc_resolve_code): Set must_finalize for assignments with an
array constructor on the rhs.
(gfc_resolve_finalizers): Ensure that an assumed rank finalizer
is the only finalizer for that type and correct the surprising
warning for the lack of a scalar finalizer.
(check_defined_assignments): Handle allocatable components.
(resolve_fl_derived): Set referenced the vtab for use
associated symbols.
(resolve_symbol): Set referenced an unreferenced symbol that
will be finalized.
* trans-array.cc (gfc_trans_array_constructor_value): Add code
to finalize the constructor result. Warn that this feature was
removed in F2018 and that it is suppressed by -std=2018.
(trans_array_constructor): Add finalblock, pass to previous
and apply to loop->post if filled.
(gfc_add_loop_ss_code): Add se finalblock to outer loop post.
(gfc_trans_array_cobounds, gfc_trans_array_bounds): Add any
generated finalization code to the main block.
(structure_alloc_comps): Add boolean argument to suppress
finalization and use it for calls from
gfc_deallocate_alloc_comp_no_caf. Otherwise it defaults to
false.
(gfc_copy_alloc_comp_no_fini): New wrapper for
structure_alloc_comps.
(gfc_alloc_allocatable_for_assignment): Suppress finalization
by setting new arg in call to gfc_deallocate_alloc_comp_no_caf.
(gfc_trans_deferred_array): Use gfc_may_be_finalized and do not
deallocate the components of entities with a leading '_' in the
name that are also marked as artificial.
* trans-array.h : Add the new boolean argument to the prototype
of gfc_deallocate_alloc_comp_no_caf with a default of false.
Add prototype for gfc_copy_alloc_comp_no_fini.
* trans-decl.cc(init_intent_out_dt): Tidy up the code.
* trans-expr.cc (gfc_init_se): Initialize finalblock.
(gfc_conv_procedure_call): Use gfc_finalize_tree_expr to
finalize function results. Replace in-line block for class
results with call to new function.
(gfc_conv_expr): Finalize structure constructors for F2003 and
F2008. Warn that this feature was deleted in F2018 and, unlike
array constructors, is not default. Add array constructor
finalblock to the post block.
(gfc_trans_scalar_assign): Suppress finalization by setting new
argument in call to gfc_deallocate_alloc_comp_no_caf. Add the
finalization blocks to the main block.
(gfc_trans_arrayfunc_assign): Use gfc_assignment_finalizer_call
and ensure that finalization occurs after the evaluation of the
rhs but using the initial value for the lhs. Finalize rhs
function results using gfc_finalize_tree_expr.
(trans_class_assignment, gfc_trans_assignment_1): As previous
function, taking care to order evaluation, assignment and
finalization correctly.
* trans-io.cc (gfc_trans_transfer): Add the final block.
* trans-stmt.cc (gfc_trans_call, gfc_trans_allocate): likewise.
(trans_associate_var): Nullify derived allocatable components
and finalize function targets with defined assignment
components on leaving the block scope.
(trans_allocate): Finalize source expressions, if required,
and set init_expr artificial temporarily to suppress the
finalization in gfc_trans_assignment.
* trans.cc (gfc_add_finalizer_call): Do not finalize the
temporaries generated in type assignment with defined
assignment components.
(gfc_assignment_finalizer_call): New function.
(gfc_finalize_tree_expr): New function.
* trans.h: Add finalblock to gfc_se. Add the prototypes for
gfc_finalize_tree_expr and gfc_assignment_finalizer_call.

gcc/testsuite/
PR fortran/64290
* gfortran.dg/finalize_38.f90 : New test.
* gfortran.dg/finalize_38a.f90 : New test.
* gfortran.dg/allocate_with_source_25.f90 : The number of final
calls goes down from 6 to 4.
* gfortran.dg/associate_25.f90 : Remove the incorrect comment.
* gfortran.dg/auto_dealloc_2.f90 : Change the tree dump expr
but the final count remains the same.
* gfortran.dg/unlimited_polymorphic_8.f90 : Tree dump reveals
foo.1.x rather than foo.0.x

PR fortran/67444
* gfortran.dg/finalize_39.f90 : New test.

PR fortran/67471
* gfortran.dg/finalize_40.f90 : New test.

PR fortran/69298
PR fortran/70863
* gfortran.dg/finalize_41.f90 : New test.

PR fortran/71798
* gfortran.dg/finalize_42.f90 : New test.

PR fortran/80524
* gfortran.dg/finalize_43.f90 : New test.

PR fortran/82996
* gfortran.dg/finalize_44.f90 : New test.

PR fortran/84472
* gfortran.dg/finalize_45.f90 : New test.

PR fortran/88735
PR fortran/93691
* gfortran.dg/finalize_46.f90 : New test.

PR fortran/91316
* gfortran.dg/finalize_47.f90 : New test.

PR fortran/106576
* gfortran.dg/finalize_48.f90 : New test.

PR fortran/37336
* gfortran.dg/finalize_49.f90 : New test.
* gfortran.dg/finalize_50.f90 : New test.
* gfortran.dg/finalize_51.f90 : New test.

13 months agoDaily bump.
GCC Administrator [Sat, 18 Mar 2023 00:16:40 +0000 (00:16 +0000)] 
Daily bump.

13 months agolra: Ignore debug insns and notes in combine_reload_insn [PR109179]
Peter Bergner [Sat, 18 Mar 2023 00:01:45 +0000 (19:01 -0500)] 
lra: Ignore debug insns and notes in combine_reload_insn [PR109179]

We ICE in combine_reload_insn if we've deleted the TO insn operand during
processing, because lra_get_insn_recog_data doesn't expect to see the note
that replaces the deleted insn.  The solution here is to exit early if TO
is a debug insn or note.

2023-03-17  Peter Bergner  <bergner@linux.ibm.com>

gcc/
PR rtl-optimization/109179
* lra-constraints.cc (combine_reload_insn): Enforce TO is not a debug
insn or note.  Move the tests earlier to guard lra_get_insn_recog_data.

13 months agotestsuite: Skip some gcc.dg/plugin tests for default_packed targets
Hans-Peter Nilsson [Fri, 17 Mar 2023 16:03:34 +0000 (17:03 +0100)] 
testsuite: Skip some gcc.dg/plugin tests for default_packed targets

Avoid unweildy structure-layout-specific message-matching
expressions by exluding targets that lay out structures as
if they had been specified with __attribute__ ((__packed__)),
for tests where multiple messages depend on the structure
layout.

It's arguably a judgement call whether to skip some of these
tests or add multiple lines of matches depending on the
layout of structures.

* gcc.dg/plugin/infoleak-2.c,
gcc.dg/plugin/infoleak-CVE-2011-1078-1.c,
gcc.dg/plugin/infoleak-CVE-2011-1078-2.c,
gcc.dg/plugin/infoleak-CVE-2017-18549-1.c,
gcc.dg/plugin/infoleak-CVE-2017-18550-1.c,
gcc.dg/plugin/infoleak-antipatterns-1.c,
gcc.dg/plugin/infoleak-fixit-1.c: Skip for default_packed targets.

13 months agoc++: constant, array, lambda, template [PR108975]
Jason Merrill [Fri, 17 Mar 2023 21:26:40 +0000 (17:26 -0400)] 
c++: constant, array, lambda, template [PR108975]

When a lambda refers to a constant local variable in the enclosing scope, we
tentatively capture it, but if we end up pulling out its constant value, we
go back at the end of the lambda and prune any unneeded captures.  Here
while parsing the template we decided that the dim capture was unneeded,
because we folded it away, but then we brought back the use in the template
trees that try to preserve the source representation with added type info.
So then when we tried to instantiate that use, we couldn't find what it was
trying to use, and crashed.

Fixed by not trying to prune when parsing a template; we'll prune at
instantiation time.

PR c++/108975

gcc/cp/ChangeLog:

* lambda.cc (prune_lambda_captures): Don't bother in a template.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/lambda/lambda-const11.C: New test.

13 months agoc++: throw and private destructor [PR109172]
Jason Merrill [Fri, 17 Mar 2023 19:27:10 +0000 (15:27 -0400)] 
c++: throw and private destructor [PR109172]

Since we aren't going through the normal call machinery, we need to check
the dtor access specifically.

PR c++/109172

gcc/cp/ChangeLog:

* except.cc (build_throw): Check dtor access.

gcc/testsuite/ChangeLog:

* g++.dg/eh/dtor4.C: New test.

13 months agolibstdc++: Add const to hash<coroutine_handle<P>>::operator() [PR109165]
Jonathan Wakely [Fri, 17 Mar 2023 11:39:55 +0000 (11:39 +0000)] 
libstdc++: Add const to hash<coroutine_handle<P>>::operator() [PR109165]

libstdc++-v3/ChangeLog:

PR libstdc++/109165
* include/std/coroutine (hash<>::operator()): Add const.
* testsuite/18_support/coroutines/hash.cc: New test.

13 months agoc++: namespace-scoped friend in local class [PR69410]
Jason Merrill [Fri, 17 Mar 2023 13:43:48 +0000 (09:43 -0400)] 
c++: namespace-scoped friend in local class [PR69410]

do_friend was only considering class-qualified identifiers for the
qualified-id case, but we also need to skip local scope when there's an
explicit namespace scope.

PR c++/69410

gcc/cp/ChangeLog:

* friend.cc (do_friend): Handle namespace as scope argument.
* decl.cc (grokdeclarator): Pass down in_namespace.

gcc/testsuite/ChangeLog:

* g++.dg/lookup/friend24.C: New test.

13 months agotree-inline: Fix up multiversioning with vector arguments [PR105554]
Jakub Jelinek [Fri, 17 Mar 2023 17:59:56 +0000 (18:59 +0100)] 
tree-inline: Fix up multiversioning with vector arguments [PR105554]

The following testcase ICEs, because we call tree_function_versioning from
old_decl which has target attributes not supporting V4DImode and so
DECL_MODE of DECL_ARGUMENTS is BLKmode, while new_decl supports those.
tree_function_versioning initially copies DECL_RESULT and DECL_ARGUMENTS
from old_decl to new_decl, then calls initialize_cfun to create cfun
and only when the cfun is created it can later actually remap_decl
DECL_RESULT and DECL_ARGUMENTS etc.
The problem is that initialize_cfun -> push_struct_function ->
allocate_struct_function calls relayout_decl on DECL_RESULT and
DECL_ARGUMENTS, which clobbers DECL_MODE of old_decl and we then ICE because
of it.
In particular, allocate_struct_function does:
      if (!abstract_p)
        {
          /* Now that we have activated any function-specific attributes
             that might affect layout, particularly vector modes, relayout
             each of the parameters and the result.  */
          relayout_decl (result);
          for (tree parm = DECL_ARGUMENTS (fndecl); parm;
               parm = DECL_CHAIN (parm))
            relayout_decl (parm);

          /* Similarly relayout the function decl.  */
          targetm.target_option.relayout_function (fndecl);
        }

      if (!abstract_p && aggregate_value_p (result, fndecl))
        {
 #ifdef PCC_STATIC_STRUCT_RETURN
          cfun->returns_pcc_struct = 1;
 #endif
          cfun->returns_struct = 1;
        }
Now, in the case of tree_function_versioning, I believe all that we need
from these is possibly the
targetm.target_option.relayout_function (fndecl);
call (arm only), we will remap DECL_RESULT and DECL_ARGUMENTS later on
and copy_decl_for_dup_finish in that case will handle all we need:
  /* For vector typed decls make sure to update DECL_MODE according
     to the new function context.  */
  if (VECTOR_TYPE_P (TREE_TYPE (copy)))
    SET_DECL_MODE (copy, TYPE_MODE (TREE_TYPE (copy)));
We don't need the cfun->returns_*struct either, because we override it
in initialize_cfun a few lines later:
  /* Copy items we preserve during cloning.  */
...
  cfun->returns_struct = src_cfun->returns_struct;
  cfun->returns_pcc_struct = src_cfun->returns_pcc_struct;

So, to avoid the clobbering of DECL_RESULT/DECL_ARGUMENTS of old_decl,
the following patch arranges allocate_struct_function to be called with
abstract_p true and calls targetm.target_option.relayout_function (fndecl);
by hand.

The removal of DECL_RESULT/DECL_ARGUMENTS copying at the start of
initialize_cfun is removed because the only caller -
tree_function_versioning, does that unconditionally before.

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

PR target/105554
* function.h (push_struct_function): Add ABSTRACT_P argument defaulted
to false.
* function.cc (push_struct_function): Add ABSTRACT_P argument, pass it
to allocate_struct_function instead of false.
* tree-inline.cc (initialize_cfun): Don't copy DECL_ARGUMENTS
nor DECL_RESULT here.  Pass true as ABSTRACT_P to
push_struct_function.  Call targetm.target_option.relayout_function
after it.
(tree_function_versioning): Formatting fix.

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

13 months agoc, ubsan: Instrument even shortened divisions [PR109151]
Jakub Jelinek [Fri, 17 Mar 2023 15:10:14 +0000 (16:10 +0100)] 
c, ubsan: Instrument even shortened divisions [PR109151]

On the following testcase, the C FE decides to shorten the division because
it has a guarantee that INT_MIN / -1 division won't be encountered, the
first operand is widened from narrower unsigned and/or the second operand is
a constant other than all ones (in this case both are true).
The problem is that the narrower type in this case is _Bool and
ubsan_instrument_division only instruments it if op0's type is INTEGER_TYPE
or REAL_TYPE.  Strangely this doesn't happen in C++ FE.
Anyway, we only shorten divisions if the INT_MIN / -1 case is impossible,
so I think we should be fine even with -fstrict-enums in C++ in case it
shortened to ENUMERAL_TYPEs.

The following patch just instruments those on the ubsan_instrument_division
side.  Perhaps only the first hunk and testcase might be needed because
we shouldn't shorten if the other case could be triggered.

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

PR c/109151
* c-ubsan.cc (ubsan_instrument_division): Handle all scalar integral
types rather than just INTEGER_TYPE.

* c-c++-common/ubsan/div-by-zero-8.c: New test.

13 months agoPR modula2/109032 - message 'compiler checks to force' is too complicated
Gaius Mulley [Fri, 17 Mar 2023 14:32:22 +0000 (14:32 +0000)] 
PR modula2/109032 - message 'compiler checks to force' is too complicated

Correct typos and improve the descriptions of command line options.
Improve comments in gm2-gcc/m2expr.cc.

gcc/m2/ChangeLog:

PR modula2/109032
* gm2-gcc/m2expr.cc: Correct ? : order in comments.
(m2expr_BuildDivM2): Improve comment.
* lang.opt: Improve option descriptions.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
13 months agoLRA: Implement combining secondary memory reload and original insn
Vladimir N. Makarov [Fri, 17 Mar 2023 12:58:58 +0000 (08:58 -0400)] 
LRA: Implement combining secondary memory reload and original insn

LRA creates secondary memory reload insns but do not try to combine it
with the original insn.  This patch implements a simple insn combining
for such cases in LRA.

        PR rtl-optimization/109052

gcc/ChangeLog:

* lra-constraints.cc: Include hooks.h.
(combine_reload_insn): New function.
(lra_constraints): Call it.

gcc/testsuite/ChangeLog:

* gcc.target/i386/pr109052.c: New.

13 months agoPR modula2/109102 Wrong quotes in diagnostic
Gaius Mulley [Fri, 17 Mar 2023 12:47:06 +0000 (12:47 +0000)] 
PR modula2/109102 Wrong quotes in diagnostic

The backtick and single quote should be replaced with %< and %> or
%qs.

gcc/m2/ChangeLog:

PR modula2/109102
* gm2-gcc/m2builtins.cc (ASSERT): Change format specifier to
use %qs rather than quotes.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
13 months agoRISC-V: Handle undef for vector mask patterns
Ju-Zhe Zhong [Mon, 13 Mar 2023 07:52:01 +0000 (15:52 +0800)] 
RISC-V: Handle undef for vector mask patterns

Add new instruction pattern for setting vector mask to undefine value,
also merge undef and non-undef ternary operation pattern like MAC operations to
single pattern.

gcc/ChangeLog:

* config/riscv/riscv-v.cc (legitimize_move): Allow undef value
as legitimate value.
* config/riscv/riscv-vector-builtins.cc
(function_expander::use_ternop_insn): Fix bugs of ternary intrinsic.
(function_expander::use_widen_ternop_insn): Ditto.
* config/riscv/vector.md (@vundefined<mode>): New pattern.
(pred_mul_<optab><mode>_undef_merge): Remove.
(*pred_mul_<optab><mode>_undef_merge_scalar): Ditto.
(*pred_mul_<optab><mode>_undef_merge_extended_scalar): Ditto.
(pred_neg_mul_<optab><mode>_undef_merge): Ditto.
(*pred_neg_mul_<optab><mode>_undef_merge_scalar): Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/base/binop_vv_constraint-4.c: Adapt the test.
* gcc.target/riscv/rvv/base/binop_vv_constraint-6.c: Ditto.
* gcc.target/riscv/rvv/base/binop_vx_constraint-127.c: Ditto.
* g++.target/riscv/rvv/base/bug-1.C: New test.
* gcc.target/riscv/rvv/base/bug-2.c: New test.

Signed-off-by: Ju-Zhe Zhong <juzhe.zhong@rivai.ai>
Co-authored-by: kito-cheng <kito.cheng@sifive.com>
13 months agoRISC-V: Use reg_or_subregno to check regno [PR109092]
Ju-Zhe Zhong [Mon, 13 Mar 2023 14:17:57 +0000 (22:17 +0800)] 
RISC-V: Use reg_or_subregno to check regno [PR109092]

gcc/ChangeLog:

PR target/109092
* config/riscv/riscv.md: Fix subreg bug.

13 months agotestsuite: Fix up forwprop-39.c testcase [PR109145]
Jakub Jelinek [Fri, 17 Mar 2023 08:58:08 +0000 (09:58 +0100)] 
testsuite: Fix up forwprop-39.c testcase [PR109145]

As written in the PR, newlib headers aren't C11 compliant in that they
don't define CMPLXF macro, and glibc before 2.16 doesn't define that
either.  I think it is easier to use __builtin_complex directly, over
another patch which keeps including complex.h but defines CMPLXF if it
isn't defined, we want to test how forwprop behaves rather than what
complex.h defines or doesn't define.

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

PR testsuite/109145
* gcc.dg/tree-ssa/forwprop-39.c: Remove -std=c11 from dg-options.
Don't include complex.h.
(foo): Use __builtin_complex rather than CMPLXF.

13 months agoopenmp: Fix up handling of doacross loops with noreturn body in loops [PR108685]
Jakub Jelinek [Fri, 17 Mar 2023 07:46:28 +0000 (08:46 +0100)] 
openmp: Fix up handling of doacross loops with noreturn body in loops [PR108685]

The following patch fixes an ICE with doacross loops which have a single entry
no exit body, at least one of the ordered > collapse loops isn't guaranteed to
have at least one iteration and the whole doacross loop is inside some other loop.
The OpenMP constructs aren't represented by struct loop until the omp expansions,
so for a normal doacross loop which doesn't have a noreturn body the entry_bb
with the GOMP_FOR statement and the first bb of the body typically have the
same loop_father, and if the doacross loop isn't inside of some other loop
and the body is noreturn as well, both are part of loop 0.  The problematic
case is when the entry_bb is inside of some deeper loop, but the body, because
it falls through into EXIT, has loop 0 as loop_father.  l0_bb is created by
splitting the entry_bb fallthru edge into l1_bb, and because the two basic blocks
have different loop_father, a common loop is found for those (which is loop 0).
Now, if the doacross loop has collapse == ordered or all the ordered > collapse
loops are guaranteed to iterate at least once, all is still fine, because all
enter the l1_bb (body), which doesn't return and so doesn't loop further either.
But, if one of those loops could loop 0 times, the user written body wouldn't be
reached at all, so unlike the expectations the whole construct actually wouldn't
be noreturn if entry_bb is encountered and decides to handle at least one
iteration.

In this case, we need to fix up, move the l0_bb into the same loop as entry_bb
(initially) and for the extra added loops put them as children of that same
loop, rather than of loop 0.

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

PR middle-end/108685
* omp-expand.cc (expand_omp_for_ordered_loops): Add L0_BB argument,
use its loop_father rather than BODY_BB's loop_father.
(expand_omp_for_generic): Adjust expand_omp_for_ordered_loops caller.
If broken_loop with ordered > collapse and at least one of those
extra loops aren't guaranteed to have at least one iteration, change
l0_bb's loop_father to entry_bb's loop_father.  Set cont_bb's
loop_father to l0_bb's loop_father rather than l1_bb's.

* c-c++-common/gomp/doacross-8.c: New test.

13 months agogdbhooks: Update gdbhooks.py for recent tree_code_type changes [PR108634]
Jakub Jelinek [Fri, 17 Mar 2023 07:44:19 +0000 (08:44 +0100)] 
gdbhooks: Update gdbhooks.py for recent tree_code_type changes [PR108634]

On Mon, Mar 13, 2023 at 04:15:12PM -0400, Jason Merrill wrote:
> The r13-6577 change to use tree_code_type_tmpl in earlier C++ dialects broke
> gdbhooks, which expects tree_code_type to always be available.  I considered
> trying to make gdbhooks more robust, but it seemed simpler to define
> tree_code_type as a reference to the template.

As I said earlier, I think it is better to tweak gdbhooks.

The following patch does that, I've tested it now both with gcc 12 and
older gcc as system compiler and the patch fixed the latter while keeping
the former working as before.

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

PR plugins/108634
* gdbhooks.py (TreePrinter.to_string): Wrap
gdb.parse_and_eval('tree_code_type') in a try block, parse
and eval 'tree_code_type_tmpl<0>::tree_code_type' instead if it
raises exception.  Update comments for the recent tree_code_type
changes.

13 months agod: Merge upstream dmd, druntime 5f7552bb28, phobos 67a47cf39.
Iain Buclaw [Thu, 16 Mar 2023 23:27:52 +0000 (00:27 +0100)] 
d: Merge upstream dmd, druntime 5f7552bb28, phobos 67a47cf39.

D front-end changes:

- Import dmd v2.103.0-rc.1.

D runtime changes:

- Import druntime v2.103.0-rc.1.

Phobos changes:

- Import phobos v2.103.0-rc.1.

gcc/d/ChangeLog:

* dmd/MERGE: Merge upstream dmd 5f7552bb28.
* dmd/VERSION: Bump version to v2.103.0-rc.1.

libphobos/ChangeLog:

* libdruntime/MERGE: Merge upstream druntime 5f7552bb28.
* src/MERGE: Merge upstream phobos 67a47cf39.

13 months agoDocs: Fix formatting issues in BPF built-ins documentation.
Sandra Loosemore [Thu, 16 Mar 2023 21:07:18 +0000 (21:07 +0000)] 
Docs: Fix formatting issues in BPF built-ins documentation.

gcc/ChangeLog:
* doc/extend.texi (BPF Built-in Functions): Fix numerous markup
issues.  Add more line breaks to example so it doesn't overflow
the margins.

13 months agoDocs: Fix some too-long lines in Texinfo manual.
Sandra Loosemore [Thu, 16 Mar 2023 21:05:53 +0000 (21:05 +0000)] 
Docs: Fix some too-long lines in Texinfo manual.

gcc/ChangeLog:
* doc/extend.texi (Common Function Attributes) <access>: Fix bad
line breaks in examples.
<malloc>: Fix bad line breaks in running text, also copy-edit
for consistency.
(Extended Asm) <Generic Operand Modifiers>: Fix @multitable width.
* doc/invoke.texi (Option Summary) <Developer Options>: Fix misplaced
@gol.
(C++ Dialect Options) <-fcontracts>: Add line break in example.
<-Wctad-maybe-unsupported>: Likewise.
<-Winvalid-constexpr>: Likewise.
(Warning Options) <-Wdangling-pointer>: Likewise.
<-Winterference-size>: Likewise.
<-Wvla-parameter>: Likewise.
(Static Analyzer Options): Fix bad line breaks in running text,
plus add some missing markup.
(Optimize Options) <openacc-privatization>: Fix more bad line
breaks in running text.

13 months ago[modula2] Bugfix local symbol names for -fm2-whole-program
Gaius Mulley [Fri, 17 Mar 2023 00:23:02 +0000 (00:23 +0000)] 
[modula2] Bugfix local symbol names for -fm2-whole-program

Local symbols must be prefixed by the modulename if
-fm2-whole-program is used to avoid a name clash.

gcc/m2/ChangeLog:

* gm2-compiler/M2AsmUtil.mod (SymNeedsModulePrefix):
Re-implemented.
* gm2-libs/SysStorage.mod (enableTrace): Disable tracing.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
13 months agoDaily bump.
GCC Administrator [Fri, 17 Mar 2023 00:17:03 +0000 (00:17 +0000)] 
Daily bump.

13 months agomaintainer-scripts: Add Modula-2 manual to update_web_docs_git
Gaius Mulley [Thu, 16 Mar 2023 23:08:20 +0000 (00:08 +0100)] 
maintainer-scripts: Add Modula-2 manual to update_web_docs_git

maintainer-scripts/ChangeLog:

* update_web_docs_git (MANUALS): Add gm2.
Add include path for gm2 manual.

13 months agoc++: __func__ and local class DMI [PR105809]
Jason Merrill [Thu, 16 Mar 2023 19:35:15 +0000 (15:35 -0400)] 
c++: __func__ and local class DMI [PR105809]

As in 108242, we need to instantiate in the context of the enclosing
function, not after it's gone.

PR c++/105809

gcc/cp/ChangeLog:

* init.cc (get_nsdmi): Split out...
(maybe_instantiate_nsdmi_init): ...this function.
* cp-tree.h: Declare it.
* pt.cc (tsubst_expr): Use it.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/constexpr-__func__3.C: New test.

13 months agoc++: generic lambda, local class, __func__ [PR108242]
Jason Merrill [Thu, 16 Mar 2023 19:11:25 +0000 (15:11 -0400)] 
c++: generic lambda, local class, __func__ [PR108242]

Here we are trying to do name lookup in a deferred instantiation of t() and
failing to find __func__.  tsubst_expr already tries to instantiate members
of local classes, but was failing with the partial instantiation of generic
lambdas.

PR c++/108242

gcc/cp/ChangeLog:

* pt.cc (tsubst_expr) [TAG_DEFN]: Handle partial instantiation.

gcc/testsuite/ChangeLog:

* g++.dg/cpp1y/lambda-generic-func2.C: New test.

13 months agoc++: &enum::enumerator [PR101869]
Jason Merrill [Thu, 16 Mar 2023 17:11:32 +0000 (13:11 -0400)] 
c++: &enum::enumerator [PR101869]

We don't want to call build_offset_ref with an enum.

PR c++/101869

gcc/cp/ChangeLog:

* semantics.cc (finish_qualified_id_expr): Don't try to build a
pointer-to-member if the scope is an enumeration.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/enum43.C: New test.

13 months ago[modula2] Add missing stdbool to testcode
Gaius Mulley [Thu, 16 Mar 2023 21:50:02 +0000 (21:50 +0000)] 
[modula2] Add missing stdbool to testcode

The type bool is now used to represent BOOLEAN.  The C source
must now include <stdbool.h>.

gcc/testsuite/ChangeLog:

* gm2/types/run/pass/d.c: Add missing include <stdbool.h>.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
13 months agoPR modula2/109125 SIGBUS in m2pim_ldtoa_ldtoa
Gaius Mulley [Thu, 16 Mar 2023 20:41:20 +0000 (20:41 +0000)] 
PR modula2/109125 SIGBUS in m2pim_ldtoa_ldtoa

13 regression failures seen on sparc SIGBUS in m2pim_ldtoa_ldtoa.
This patch fixes int bool struct field mismatches between the
definition modules and their C/C++ implementations.

gcc/testsuite/ChangeLog:

PR modula2/109125
* gm2/types/run/pass/d.c: Convert data structure from
BOOLEAN int to bool and cast int to bool in test function.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
13 months agoPR 107630 runtime libs should be self-contained
Gaius Mulley [Thu, 16 Mar 2023 20:34:32 +0000 (20:34 +0000)] 
PR 107630 runtime libs should be self-contained

This is a patch to improve the layering of libgm2.
It removes the m2cor Debug.{def,mod} (the codebase will use
m2pim Debug instead).  It also layers SysStorage under
both m2pim Storage and m2iso Storage.  SysStorage is now
a dependant of m2pim Storage.mod.  Halt parameters for
Debug.mod and M2RTS.mod now have the same order.

gcc/m2/ChangeLog:

* gm2-compiler/SymbolKey.mod (PutSymKey): Halt parameters
reordered.
(DelSymKey): Ditto.
* gm2-compiler/ppg.mod (GetEpsilon): Ditto.
(GetReachEnd): Ditto.
(GetFollow): Ditto.
(CodeCondition): Ditto.
(CodeThenDo): Ditto.
(CodeEnd): Ditto.
(RecoverCondition): Ditto.
(ConditionIndent): Ditto.
* gm2-libs-ch/m2rts.h (M2RTS_Halt): Ditto.
* gm2-libs-coroutines/Executive.mod (Assert): Ditto.
(Resume): Remove redundant comments.
(Wait): Remove redundant comments.
* gm2-libs-coroutines/SYSTEM.mod (TRANSFER): Halt parameters
reordered.
(IOTransferHandler): Ditto.
(Finished): Ditto.
(localInit): Ditto.
* gm2-libs-coroutines/TimerHandler.mod (WaitOn): Halt parameters
reordered.
(Cancel): Ditto.
(ReArmEvent): Ditto.
(OnActiveQueue): Ditto.
* gm2-libs-iso/COROUTINES.mod (NEWCOROUTINE): Ditto.
(Transfer): Ditto.
(IOTRANSFER): Ditto.
* gm2-libs-iso/EXCEPTIONS.mod (RAISE): Correct Halt parameters.
* gm2-libs-iso/M2RTS.def (Halt): Halt parameters reordered.
(HaltC): Ditto.
* gm2-libs-iso/M2RTS.mod: Ditto.
* gm2-libs-iso/RTentity.mod (PutKey): Ditto.
(DelKey): Ditto.
(findChildAndParent): Ditto.
(assert): Ditto.
* gm2-libs-iso/Storage.mod (ALLOCATE): Add DebugTrace.
Add UseMallocFree test.
(DEALLOCATE): Add DebugTrace.  Add UseMallocFree test.
(assert): Halt parameters reordered.
* gm2-libs-log/Termbase.mod (Read): Ditto.
(KeyPressed): Ditto.
(Write): Ditto.
(Init): Ditto.
* gm2-libs/Debug.def (Halt): Halt parameters reordered.
* gm2-libs/Debug.mod (Halt): Ditto.
* gm2-libs/DynamicStrings.def (PopAllocation): Improve comment.
* gm2-libs/DynamicStrings.mod (PopAllocation): Improve comment.
Halt parameters reordered.
* gm2-libs/M2RTS.def (Halt): Ditto.
(HaltC): Ditto.
* gm2-libs/M2RTS.mod (Halt): Ditto.
(HaltC): Ditto.
* gm2-libs/PushBackInput.mod (PutStr): Ditto.
(PutString): Ditto.
(PutCh): Ditto.
* gm2-libs/RTExceptions.mod (GetBaseExceptionBlock): Ditto.
* gm2-libs/RTint.mod (ReArmTimeVector): Ditto.
(GetTimeVector): Ditto.
(AttachVector): Ditto.
(IncludeVector): Ditto.
(Listen): Ditto.
* gm2-libs/SysStorage.mod (ALLOCATE): Ditto.
(DEALLOCATE): Ditto.
(REALLOCATE): Ditto.
* gm2-libs-coroutines/Debug.def: Removed.
* gm2-libs-coroutines/Debug.mod: Removed.

libgm2/ChangeLog:

* libm2cor/Makefile.am: Remove
* libm2cor/Makefile.in: Rebuild.
* libm2iso/RTco.cc (newSem): Halt parameters reordered.
(currentThread): Ditto.
(never): Ditto.
(defined): Ditto.
(initThread): Ditto.
* libm2iso/m2rts.h (m2iso_M2RTS_HaltC): Ditto.

gcc/testsuite/ChangeLog:

* gm2/complex/pass/arith3.mod: Halt parameters reordered.
* gm2/complex/run/pass/arith3.mod: Ditto.
* gm2/complex/run/pass/arith4.mod: Ditto.
* gm2/complex/run/pass/arith5.mod: Ditto.
* gm2/isolib/run/pass/real2.mod: Ditto.
* gm2/isolib/run/pass/real3.mod: Ditto.
* gm2/isolib/run/pass/realconv.mod: Ditto.
* gm2/isolib/run/pass/realconv2.mod: Ditto.
* gm2/pim/pass/testshort.mod: Ditto.
* gm2/projects/pim/run/pass/tower/AdvSystem.mod: Ditto.
* gm2/projects/pim/run/pass/tower/DrawL.mod: Ditto.
* gm2/warnings/returntype/pass/Termbase.mod: Ditto.
* gm2/warnings/returntype/pass/keypressedsimple.mod: Ditto.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
13 months agoi386: Robustify vec perm blend functions for TARGET_MMX_WITH_SSE
Uros Bizjak [Thu, 16 Mar 2023 19:41:55 +0000 (20:41 +0100)] 
i386: Robustify vec perm blend functions for TARGET_MMX_WITH_SSE

8-byte modes should be processed only for TARGET_MMX_WITH_SSE.

gcc/ChangeLog:

* config/i386/i386-expand.cc (expand_vec_perm_pblendv):
Handle 8-byte modes only with TARGET_MMX_WITH_SSE.
(expand_vec_perm_2perm_pblendv): Ditto.

13 months agoc++: maybe_constant_init and unevaluated operands [PR109030]
Patrick Palka [Thu, 16 Mar 2023 18:47:43 +0000 (14:47 -0400)] 
c++: maybe_constant_init and unevaluated operands [PR109030]

This testcase in this PR (already fixed by r13-6526-ge4692319fd5fc7)
demonstrates that maybe_constant_init can be called on an unevaluated
operand (e.g. from massage_init_elt) so this entry point should also
limit constant evaluation in that case, like maybe_constant_value does.

PR c++/109030

gcc/cp/ChangeLog:

* constexpr.cc (maybe_constant_init_1): For an unevaluated
non-manifestly-constant operand, don't constant evaluate
and instead call fold_to_constant as in maybe_constant_value.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/constexpr-inst2.C: New test.

13 months agoc++: checking ICE with diagnosed constraint recursion [PR100288]
Patrick Palka [Thu, 16 Mar 2023 18:22:54 +0000 (14:22 -0400)] 
c++: checking ICE with diagnosed constraint recursion [PR100288]

When satisfaction_cache::get detects constraint recursion, it asserts
that entry->result is empty.  This makes sense when we're initially
detecting/diagnosing recursion from the inner recursive call, but
afterwards from the outer recursive call the recursion error is treated
like any other unrelated constraint failure encountered during
satisfaction, and we set entry->result to whatever the satisfaction
value ended up being.

Perhaps we should keep entry->result cleared in this case, but that'd
require the inner recursive call to communicate to the outer recursive
call that constraint recursion occurred, likely via setting entry->result
to some sentinel value, which doesn't seem to be worth the complexity.
So this patch just relaxes the problematic assert to accept non-empty
entry->result as long as we've already issued an error.

PR c++/100288

gcc/cp/ChangeLog:

* constraint.cc (satisfaction_cache::get): Relax overly strict
checking assert in the constraint recursion case.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-recursive-sat5.C: New test.

13 months agod: Merge upstream dmd, druntime 4ca4140e58, phobos 454dff14d.
Iain Buclaw [Sun, 5 Mar 2023 00:47:19 +0000 (01:47 +0100)] 
d: Merge upstream dmd, druntime 4ca4140e58, phobos 454dff14d.

D front-end changes:

- Import dmd v2.103.0-beta.1.
- Using `alias this' for classes has been deprecated.
- The feature `-fpreview=dip25` is now enabled by default.
- The compile-time traits `isVirtualFunction' and
  `getVirtualFunctions' have been deprecated.

D runtime changes:

- Import druntime v2.103.0-beta.1.

Phobos changes:

- Import phobos v2.103.0-beta.1.
- Updated unicode grapheme walking updated to conform to Unicode
  version 15.
- Improved friendliness of error messages when instantiating
  `std.algorithm.iteration.joiner' and
  `std.algorithm.sorting.sort' with wrong inputs.

gcc/d/ChangeLog:

* dmd/MERGE: Merge upstream dmd 4ca4140e58.
* dmd/VERSION: Bump version to v2.103.0-beta.1.
* Make-lang.in (D_FRONTEND_OBJS): Add d/errorsink.o.
* d-ctfloat.cc (CTFloat::sprint): Update signature for new front-end
interface.
* d-frontend.cc (getTypeInfoType): Likewise.
* d-lang.cc (d_handle_option): Remove handling of -fpreview=dip25 and
-frevert=dip25.
(d_post_options): Remove enabling of sealed references language
feature when scoped pointers is enabled.
* d-tree.h (create_typeinfo): Update signature.
* decl.cc (DeclVisitor::finish_vtable): Update for new front-end
interface.
(DeclVisitor::visit (VarDeclaration *)): Likewise.
(DeclVisitor::visit (FuncDeclaration *)): Check skipCodegen to see if
front-end explicitly requested not to generate code.
* expr.cc (ExprVisitor::visit (NewExp *)): Update for new front-end
interface.
* lang.opt (fpreview=dip25): Remove.
(frevert=dip25): Remove.
* modules.cc (layout_moduleinfo_fields): Update for new front-end
interface.
(layout_moduleinfo): Likewise.
* runtime.def (NEWCLASS): Remove.
* toir.cc (IRVisitor::visit (IfStatement *)): Don't generate IR for if
statement list when condition is `__ctfe'.
* typeinfo.cc (create_typeinfo): Add generate parameter.
* types.cc (layout_aggregate_members): Update for new front-end
interface.

libphobos/ChangeLog:

* libdruntime/MERGE: Merge upstream druntime 4ca4140e58.
* libdruntime/Makefile.am (DRUNTIME_DSOURCES): Add core/factory.d.
* libdruntime/Makefile.in: Regenerate.
* src/MERGE: Merge upstream phobos 454dff14d.
* testsuite/libphobos.hash/test_hash.d: Update test.
* testsuite/libphobos.shared/finalize.d: Update test.
* libdruntime/core/factory.d: New file.

gcc/testsuite/ChangeLog:

* gdc.dg/torture/simd23084.d: New test.
* gdc.dg/torture/simd23085.d: New test.
* gdc.dg/torture/simd23218.d: New test.

13 months agomiddle-end: always find a basename for -fdiagnostics-format=*
Martin Liska [Tue, 10 Jan 2023 14:14:05 +0000 (15:14 +0100)] 
middle-end: always find a basename for -fdiagnostics-format=*

In some situations, x_dump_base_name is NULL and thus we can
and should use x_main_input_basename which should never be NULL.

PR middle-end/106133

gcc/ChangeLog:

* gcc.cc (driver_handle_option): Use x_main_input_basename
if x_dump_base_name is null.
* opts.cc (common_handle_option): Likewise.

gcc/testsuite/ChangeLog:

* c-c++-common/pr106133.c: New test.

13 months ago[testsuite] fix array element count
Alexandre Oliva [Thu, 16 Mar 2023 13:10:54 +0000 (10:10 -0300)] 
[testsuite] fix array element count

This test is similar to pr103116-1.c, but instead of writing to
4*COUNT elements of x, it writes to 8*COUNT elements, but the
definition of x seems to have been adjusted along with the loop.  Fix
the array size so that it doesn't scribble over unrelated
statically-allocated objects.

for  gcc/testsuite/ChangeLog

* gcc.dg/vect/pr103116-2.c (x): Fix array size.

13 months agoc++: co_await and move-only type [PR105406]
Jason Merrill [Wed, 15 Mar 2023 21:02:15 +0000 (17:02 -0400)] 
c++: co_await and move-only type [PR105406]

Here we were building a temporary MoveOnlyAwaitable to hold the result of
evaluating 'o', but since 'o' is an lvalue we should build a reference
instead.

PR c++/105406

gcc/cp/ChangeLog:

* coroutines.cc (build_co_await): Handle lvalue 'o'.

gcc/testsuite/ChangeLog:

* g++.dg/coroutines/co-await-moveonly1.C: New test.

13 months agod: Fix closure fields don't get same alignment as local variable [PR109144]
Iain Buclaw [Thu, 16 Mar 2023 00:07:02 +0000 (01:07 +0100)] 
d: Fix closure fields don't get same alignment as local variable [PR109144]

Local variables with both non-local references and explicit alignment
did not propagate their alignment to either the closure field or closure
frame type, resulting in the closure being misaligned. This is now
correctly set-up when building the frame type.

PR d/109144

gcc/d/ChangeLog:

* d-codegen.cc (build_frame_type): Set frame field and type alignment.

gcc/testsuite/ChangeLog:

* gdc.dg/torture/pr109144.d: New test.

13 months agocontrib: Update instructions regarding Unicode updates
Jakub Jelinek [Thu, 16 Mar 2023 09:28:25 +0000 (10:28 +0100)] 
contrib: Update instructions regarding Unicode updates

I've noticed we have instructions on how to update from newer Unicode
standard, but it didn't mention uname2c.h regeneration.

The following patch mentions that, also mentions that the Copyright years
of Unicode should be updated and adds a copy of NameAliases.txt which
is used for uname2c.h generation.

2023-03-16  Jakub Jelinek  <jakub@redhat.com>

* unicode/README: Update to mention also makeuname2c.
* unicode/NameAliases.txt: New file.

13 months agolibcpp: Update Unicode copyright years
Jakub Jelinek [Thu, 16 Mar 2023 09:19:04 +0000 (10:19 +0100)] 
libcpp: Update Unicode copyright years

I've noticed I forgot to update copyright years when updating from
Unicode 15.0.0 (and makeucnid.cc had it hopelessly obsolete).

2023-03-16  Jakub Jelinek  <jakub@redhat.com>

* makeucnid.cc (write_copyright): Update Unicode copyright years
up to 2022.
* makeuname2c.cc (write_copyright): Likewise.
* ucnid.h: Regenerated.
* uname2c.h: Regenerated.

13 months agotree-optimization/109123 - run -Wuse-afer-free only early
Richard Biener [Wed, 15 Mar 2023 08:12:33 +0000 (09:12 +0100)] 
tree-optimization/109123 - run -Wuse-afer-free only early

The following switches the -Wuse-after-free diagnostics from emitted
during the late access warning passes to the early access warning
passes to make sure we run before passes performing code motion run
which are the source of a lot of false positives on use-after-free
not involving memory operations.

The patch also fixes an issue in c-c++-common/Wuse-after-free-6.c
and causes the name of the unused pointer to appear in the diagnostic
for extra cases in gcc.dg/Wuse-after-free-2.c

PR tree-optimization/109123
* gimple-ssa-warn-access.cc (pass_waccess::warn_invalid_pointer):
Do not emit -Wuse-after-free late.
(pass_waccess::check_call): Always check call pointer uses.

* gcc.dg/Wuse-after-free-pr109123.c: New testcase.
* gcc.dg/Wuse-after-free-2.c: Amend expected diagnostic with
the name of the pointer.
* c-c++-common/Wuse-after-free-6.c: Un-XFAIL case.

13 months agoAvoid random stmt order result in pass_waccess::use_after_inval_p
Richard Biener [Wed, 15 Mar 2023 10:41:20 +0000 (11:41 +0100)] 
Avoid random stmt order result in pass_waccess::use_after_inval_p

use_after_inval_p uses stmt UIDs to speed up repeated dominance
checks within a basic-block but it fails to assign UIDs to PHIs
which means compares with PHIs in the same block get a random
result.

The following factors renumber_gimple_stmt_uids to expose a new
renumber_gimple_stmt_uids_in_block we can share.

But since we rely on processing even earlier PHIs to follow
pointer adjustments (we look at those even if earlier) the patch
also moves PHI handling out of the use_after_inval_p guard.
This then also fixes PR109141.

PR tree-optimization/109141
* tree-dfa.h (renumber_gimple_stmt_uids_in_block): New.
* tree-dfa.cc (renumber_gimple_stmt_uids_in_block): Split
out from ...
(renumber_gimple_stmt_uids): ... here and
(renumber_gimple_stmt_uids_in_blocks): ... here.
* gimple-ssa-warn-access.cc (pass_waccess::use_after_inval_p):
Use renumber_gimple_stmt_uids_in_block to also assign UIDs
to PHIs.
(pass_waccess::check_pointer_uses): Process all PHIs.

13 months agoMove target independent documentation files into subdir
Gaius Mulley [Thu, 16 Mar 2023 04:17:28 +0000 (04:17 +0000)] 
Move target independent documentation files into subdir

Move target independent documentation files into a subdir m2 so that
the maintainer-scripts/update_web_docs_git can build gm2.texi from the
source tree (and without any build dir).

gcc/m2/ChangeLog:

* Make-lang.in: Rename target-independent to
target-independent/m2.
* target-independent/readme.txt: Update.
* target-independent/m2/gm2-ebnf.texi: New file.
* target-independent/m2/gpl_v3_without_node.texi: New file.
* target-independent/Builtins.texi: Rename ...
* target-independent/m2/Builtins.texi: ... to this.
* target-independent/SYSTEM-iso.texi: Rename ...
* target-independent/m2/SYSTEM-iso.texi: ... to this.
* target-independent/SYSTEM-pim.texi: Rename ...
* target-independent/m2/SYSTEM-pim.texi: ... to this.
* target-independent/gm2-libs.texi: Rename ...
* target-independent/m2/gm2-libs.texi: ... to this.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
13 months agomaintainer-scripts: Abstract BUGURL in update_web_docs_git
Gerald Pfeifer [Thu, 16 Mar 2023 00:20:26 +0000 (01:20 +0100)] 
maintainer-scripts: Abstract BUGURL in update_web_docs_git

The URL where to report bugs is hard coded in two places; abstract that
into one variable, defined up front.

maintainer-scripts/ChangeLog:

* update_web_docs_git (BUGURL): Introduce and use throughout.

13 months agoDaily bump.
GCC Administrator [Thu, 16 Mar 2023 00:16:56 +0000 (00:16 +0000)] 
Daily bump.

13 months agoc++: co_await and initializer_list [PR103871]
Jason Merrill [Wed, 15 Mar 2023 20:33:37 +0000 (16:33 -0400)] 
c++: co_await and initializer_list [PR103871]

When flatten_await_stmt processes the backing array for an initializer_list,
we call cp_build_modify_expr to initialize the promoted variable from the
TARGET_EXPR; that needs to be accepted.

PR c++/103871
PR c++/98056

gcc/cp/ChangeLog:

* typeck.cc (cp_build_modify_expr): Allow array initialization of
DECL_ARTIFICIAL variable.

gcc/testsuite/ChangeLog:

* g++.dg/coroutines/co-await-initlist1.C: New test.

13 months agodiagnostics: attempt to capture crash info in SARIF output [PR109097]
David Malcolm [Wed, 15 Mar 2023 22:16:17 +0000 (18:16 -0400)] 
diagnostics: attempt to capture crash info in SARIF output [PR109097]

As noted in PR analyzer/109097, if an internal compiler error occurs
when -fdiagnostics-format=sarif-file is specified, we currently fail
to write out a .sarif file, and the output to stderr doesn't contain
"internal compiler error" or "Internal compiler error"; just the
backtrace if we're lucky, and the "Please submit a full bug report"
messages.

This is a nuisance e.g. for my integration testing of -fanalyzer, where
I'm gathering the results of builds via the .sarif output: if it crashes
on a particular source file, then no output is generated, and it's
effectively silent about the crash.

This patch fixes things by adding a callback to diagnostic_context so
that the SARIF output code can make one final attempt to write its
output if an ICE occurs.  It also special-cases the output, so that an
ICE is treated as an "error"-level "notification" relating to the
operation of the tool (SARIF v2.1.0 section 3.58), rather than a
"result" about the code being analyzed by the tool.

The patch adds test coverage for this via a plugin that can inject:
* calls to internal_compiler_error, and
* writes through a NULL pointer
and verifying that a  .sarif file is written out capturing the crash
(and also that an ICE occurs via dg-ice, which seems to treat the ICE as
an XFAIL, which is reasonable).

I've added support for this to my integration-testing scripts: testing
shows that with this patch we capture analyzer crashes in .sarif files
(specifically, the analyzer crash on qemu: PR analyzer/109094), and I've
updated my scripts to work with and report such output.

I manually verified that the resulting .sarif files validate against the
schema.

gcc/ChangeLog:
PR analyzer/109097
* diagnostic-format-sarif.cc (class sarif_invocation): New.
(class sarif_ice_notification): New.
(sarif_builder::m_invocation_obj): New field.
(sarif_invocation::add_notification_for_ice): New.
(sarif_invocation::prepare_to_flush): New.
(sarif_ice_notification::sarif_ice_notification): New.
(sarif_builder::sarif_builder): Add m_invocation_obj.
(sarif_builder::end_diagnostic): Special-case DK_ICE and
DK_ICE_NOBT.
(sarif_builder::flush_to_file): Call prepare_to_flush on
m_invocation_obj.  Pass the latter to make_top_level_object.
(sarif_builder::make_result_object): Move creation of "locations"
array to...
(sarif_builder::make_locations_arr): ...this new function.
(sarif_builder::make_top_level_object): Add "invocation_obj" param
and pass it to make_run_object.
(sarif_builder::make_run_object): Add "invocation_obj" param and
use it.
(sarif_ice_handler): New callback.
(diagnostic_output_format_init_sarif): Wire up sarif_ice_handler.
* diagnostic.cc (diagnostic_initialize): Initialize new field
"ice_handler_cb".
(diagnostic_action_after_output): If it is set, make one attempt
to call ice_handler_cb.
* diagnostic.h (diagnostic_context::ice_handler_cb): New field.

gcc/testsuite/ChangeLog:
PR analyzer/109097
* c-c++-common/diagnostic-format-sarif-file-1.c: Verify that we
have an invocation object marked as succeeding, with no
notifications.
* gcc.dg/plugin/crash-test-ice-sarif.c: New test.
* gcc.dg/plugin/crash-test-ice-stderr.c: New test.
* gcc.dg/plugin/crash-test-write-though-null-sarif.c: New test.
* gcc.dg/plugin/crash-test-write-though-null-stderr.c: New test.
* gcc.dg/plugin/crash_test_plugin.c: New plugin.
* gcc.dg/plugin/plugin.exp (plugin_test_list): Add the new plugin
and test cases.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
13 months agoPR 109125 13 regression SIGBUS in m2pim_ldtoa_ldtoa
Gaius Mulley [Wed, 15 Mar 2023 21:30:33 +0000 (21:30 +0000)] 
PR 109125 13 regression SIGBUS in m2pim_ldtoa_ldtoa

This patch fixes more bool int parameter mismatches
found in dtoa and ldtoa.

gcc/m2/ChangeLog:

PR modula2/109125
* gm2-libs-ch/dtoa.cc (dtoa_strtod): Replace int with bool.
* gm2-libs-ch/ldtoa.cc (ldtoa_strtold): Replace int with bool.

libgm2/ChangeLog:

PR modula2/109125
* libm2pim/dtoa.cc (TRUE): Remove.
(FALSE): Remove.  Replace int with bool.
* libm2pim/ldtoa.cc (TRUE): Remove.
(FALSE): Remove.  Replace int with bool.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
13 months agoi386: Fix blend vector permutation for 8-byte modes
Uros Bizjak [Wed, 15 Mar 2023 19:33:48 +0000 (20:33 +0100)] 
i386: Fix blend vector permutation for 8-byte modes

8-byte modes should be processed only for TARGET_MMX_WITH_SSE. Handle
V2SFmode and fix V2HImode handling. The resulting BLEND instructions
are always faster than MOVSS/MOVSD, so prioritize them w.r.t MOVSS/MOVSD
for TARGET_SSE4_1.

gcc/ChangeLog:

* config/i386/i386-expand.cc (expand_vec_perm_blend):
Handle 8-byte modes only with TARGET_MMX_WITH_SSE. Handle V2SFmode
and fix V2HImode handling.
(expand_vec_perm_1): Try to emit BLEND instruction
before MOVSS/MOVSD.
* config/i386/mmx.md (*mmx_blendps): New insn pattern.

gcc/testsuite/ChangeLog:

* gcc.target/i386/merge-1.c (dg-options): Use -mno-sse4.
* gcc.target/i386/sse2-mmx-21.c (dg-options): Ditto.
* gcc.target/i386/sse-movss-4.c (dg-options):
Use -mno-sse4.  Simplify scan-assembler-not strings.
* gcc.target/i386/sse2-movsd-3.c (dg-options): Ditto.
* gcc.target/i386/sse2-mmx-movss-1.c: New test.

13 months agoFortran: rank checking with explicit-/assumed-size arrays and CLASS [PR58331]
Harald Anlauf [Tue, 14 Mar 2023 19:23:06 +0000 (20:23 +0100)] 
Fortran: rank checking with explicit-/assumed-size arrays and CLASS [PR58331]

gcc/fortran/ChangeLog:

PR fortran/58331
* interface.cc (compare_parameter): Adjust check of array dummy
arguments to handle the case of CLASS variables.

gcc/testsuite/ChangeLog:

PR fortran/58331
* gfortran.dg/class_dummy_10.f90: New test.

Co-authored-by: Tobias Burnus <tobias@codesourcery.com>
13 months agoc++: ICE with constexpr lambda [PR107280]
Marek Polacek [Fri, 10 Mar 2023 15:14:20 +0000 (10:14 -0500)] 
c++: ICE with constexpr lambda [PR107280]

We crash here since r10-3661, the store_init_value hunk in particular.
Before, we called cp_fully_fold_init, so e.g.

  {.str=VIEW_CONVERT_EXPR<char[8]>("")}

was folded into

  {.str=""}

but now we don't fold and keep the VCE around, and it causes trouble in
cxx_eval_store_expression: in the !refs->is_empty () loop we descend on
.str's initializer but since it's wrapped in a VCE, we skip the STRING_CST
check and then crash on the CONSTRUCTOR_NO_CLEARING.

PR c++/107280

gcc/cp/ChangeLog:

* constexpr.cc (cxx_eval_store_expression): Strip location wrappers.

gcc/testsuite/ChangeLog:

* g++.dg/cpp1z/constexpr-lambda28.C: New test.

13 months agoOpenMP: Add omp_in_explicit_task to omp_runtime_api_call
Tobias Burnus [Wed, 15 Mar 2023 14:31:52 +0000 (15:31 +0100)] 
OpenMP: Add omp_in_explicit_task to omp_runtime_api_call

gcc/
* omp-low.cc (omp_runtime_api_call): Add omp_in_explicit_task.

13 months agoAvoid duplicate diagnostic in g++.dg/warn/Wuse-after-free3.C
Richard Biener [Wed, 15 Mar 2023 13:48:57 +0000 (14:48 +0100)] 
Avoid duplicate diagnostic in g++.dg/warn/Wuse-after-free3.C

We are diagnosing

  operator delete (this_3(D));
  A::f (this_3(D));
  *this_3(D) ={v} CLOBBER;

where the CLOBBER appears at the end of the DTOR for C++11 and later.
The following avoids this by simply never diagnosing clobbers as
use-after-free.

* gimple-ssa-warn-access.cc (pass_waccess::check_pointer_uses):
Do not diagnose clobbers.

* g++.dg/warn/Wuse-after-free3.C: Remove expected duplicate
diagnostic.

13 months agoc++: injected class name as default ttp arg [PR58538]
Jason Merrill [Wed, 15 Mar 2023 03:16:21 +0000 (23:16 -0400)] 
c++: injected class name as default ttp arg [PR58538]

This function needs to handle this case like convert_template_argument.

PR c++/58538

gcc/cp/ChangeLog:

* semantics.cc (check_template_template_default_arg): Check
maybe_get_template_decl_from_type_decl.

gcc/testsuite/ChangeLog:

* g++.dg/template/ttp7.C: Remove expected error.

13 months agoc++: passing one ttp to another [PR108179]
Jason Merrill [Fri, 10 Mar 2023 19:55:27 +0000 (14:55 -0500)] 
c++: passing one ttp to another [PR108179]

I kept trying to improve our choice of how many levels of outer_args to add,
when really the problem was that outer_args are for PARM and for this
reverse deduction we should be adding the outer arguments for ARG.

I spent quite a while trying to get DECL_CONTEXT set consistently on
template template parameters that have gone through
reduce_template_parm_level before I realized I could just use
current_scope().

PR c++/108179
PR c++/104107
PR c++/95036

gcc/cp/ChangeLog:

* pt.cc (coerce_template_template_parms): Use args from
DECL_CONTEXT (arg_tmpl) instead of outer_args.

gcc/testsuite/ChangeLog:

* g++.dg/template/ttp35.C: New test.

13 months agoc++: coerce_template_template_parms interface tweak
Jason Merrill [Wed, 15 Mar 2023 02:07:45 +0000 (22:07 -0400)] 
c++: coerce_template_template_parms interface tweak

This should have no semantic effect, but is a prerequisite for the PR108179
fix to follow.

PR c++/108179

gcc/cp/ChangeLog:

* pt.cc (coerce_template_template_parms): Take the arg and parm
templates directly.
(coerce_template_template_parm): Adjust.
(template_template_parm_bindings_ok_p): Adjust.
(convert_template_argument): Adjust.

13 months agotree-optimization/109139 - fix .DEFERRED_INIT removal
Richard Biener [Wed, 15 Mar 2023 08:47:18 +0000 (09:47 +0100)] 
tree-optimization/109139 - fix .DEFERRED_INIT removal

The following make sure to strip MEMs when looking for unused
decls on the LHS of .DEFERRED_INIT.

PR tree-optimization/109139
* tree-ssa-live.cc (remove_unused_locals): Look at the
base address for unused decls on the LHS of .DEFERRED_INIT.

* gcc.dg/torture/pr109139.c: New testcase.

13 months agobuiltins: Move the character difference into result instead of reassigning result...
Xi Ruoyao [Wed, 15 Mar 2023 07:34:52 +0000 (15:34 +0800)] 
builtins: Move the character difference into result instead of reassigning result [PR109086]

expand_simple_binop() is allowed to allocate a new pseudo-register and
return it, instead of forcing the result into the provided
pseudo-register.  This can cause a problem when we expand the unrolled
loop for __builtin_strcmp: the compiler always generates code for all n
iterations of the loop, so "result" will be an alias of the
pseudo-register allocated and used in the last iteration; but at runtime
the loop can break early, causing this pseudo-register uninitialized.

Emit a move instruction in the iteration to force the difference into
one register which has been allocated before the loop, to avoid this
issue.

gcc/ChangeLog:

PR other/109086
* builtins.cc (inline_string_cmp): Force the character
difference into "result" pseudo-register, instead of reassign
the pseudo-register.