platform/upstream/gcc.git
16 months agogccrs: ast: dump assignment and compound assignment expr
David Faust [Wed, 5 Oct 2022 17:10:18 +0000 (10:10 -0700)]
gccrs: ast: dump assignment and compound assignment expr

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Dump assignment and compound
assignment expressions.

16 months agogccrs: testing: try loop in const function
Faisal Abbas [Mon, 3 Oct 2022 18:32:30 +0000 (19:32 +0100)]
gccrs: testing: try loop in const function

Signed-off-by: Faisal Abbas <90.abbasfaisal@gmail.com>
gcc/testsuite/ChangeLog:

* rust/compile/const9.rs: New test.

Signed-off-by: Faisal Abbas <faisal.abbas@elastica.co>
16 months agogccrs: Add catch for recusive type queries
Philip Herron [Fri, 30 Sep 2022 12:41:09 +0000 (13:41 +0100)]
gccrs: Add catch for recusive type queries

When we have a type query where by generic substitution occurs we can hit
the case where we need to Probe the bounds of the substited item to
determine whether the the bounds are compatible this can cause us to
end up querying the same type recursively.

Fixes #1550

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-base.cc (TypeCheckBase::query_type):
Check for recursive queries.
* typecheck/rust-hir-type-check.h: New functions: `query_completed`,
`query_in_progress`, `insert_query`.
* typecheck/rust-tyty-bounds.cc (TypeBoundsProbe::scan): Use `query_type` API.

16 months agogccrs: dump: Emit visibility when dumping items
Arthur Cohen [Tue, 27 Sep 2022 13:50:39 +0000 (15:50 +0200)]
gccrs: dump: Emit visibility when dumping items

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::emit_visibility): New function.
(Dump::visit): Call into `emit_visibility`.
(Dump::format_function_common): Likewise.
* ast/rust-ast-dump.h: Declare `emit_visibility`.

16 months agogccrs: visibility: Rename get_public_vis_type -> get_vis_type
Arthur Cohen [Tue, 27 Sep 2022 13:49:59 +0000 (15:49 +0200)]
gccrs: visibility: Rename get_public_vis_type -> get_vis_type

gcc/rust/ChangeLog:

* ast/rust-item.h: Rename get_public_vis_type.
* hir/rust-ast-lower.cc (translate_visibility): Use new name.

16 months agogccrs: Fix missing dead code analysis ICE on local enum definition
Philip Herron [Tue, 27 Sep 2022 08:50:06 +0000 (09:50 +0100)]
gccrs: Fix missing dead code analysis ICE on local enum definition

When resolving local enum's within a Block the name resolution info is
not at the top of the stack so this patch introduces a new mappings class
for miscellaneous name resolutions which can be used during path analaysis.

Fixes #1272

gcc/rust/ChangeLog:

* resolve/rust-name-resolver.h: Add miscellenaous item mappings.
* resolve/rust-name-resolver.cc (Resolver::insert_resolved_misc): Use
new mappings.
(Resolver::lookup_resolved_misc): Likewise.
* typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::resolve_segments):
Adapt function to insert into miscelleanous mappings.
* checks/lints/rust-lint-marklive.cc (MarkLive::find_ref_node_id):
Allow lookup in miscelleanous mappings in mark-live phase.

gcc/testsuite/ChangeLog:

* rust/compile/issue-1272.rs: New test.

16 months agotree-optimization/108868 - new testcase
Richard Biener [Tue, 21 Feb 2023 09:32:10 +0000 (10:32 +0100)]
tree-optimization/108868 - new testcase

New testcase for the fixed bug.

PR tree-optimization/108868
* gcc.dg/pr108868.c: New testcase.

16 months agotree-optimization/108855 - new testcase
Richard Biener [Tue, 21 Feb 2023 09:31:29 +0000 (10:31 +0100)]
tree-optimization/108855 - new testcase

New testcase for the fixed bug.

PR tree-optimization/108855
* gcc.dg/pr108855.c: New testcase.

16 months agoRevert "tree-optimization/108691 - indirect calls to setjmp"
Richard Biener [Tue, 21 Feb 2023 09:26:30 +0000 (10:26 +0100)]
Revert "tree-optimization/108691 - indirect calls to setjmp"

This reverts commit 6436add49ed9ecf74f1f01b4fe18961df4f3e83d.

16 months agoxtensa: Enforce return address saving when -Og is specified
Takayuki 'January June' Suwa [Sat, 18 Feb 2023 04:54:10 +0000 (13:54 +0900)]
xtensa: Enforce return address saving when -Og is specified

Leaf function often omits saving its return address to the stack slot,
and this feature often makes debugging very confusing, especially for
stack dump analysis.

gcc/ChangeLog:

* config/xtensa/xtensa.cc (xtensa_call_save_reg): Change to return
true if register A0 (return address register) when -Og is specified.

16 months agoDaily bump.
GCC Administrator [Tue, 21 Feb 2023 00:18:20 +0000 (00:18 +0000)]
Daily bump.

16 months agoi386: Introduce general_x64constmem_operand predicate
Uros Bizjak [Mon, 20 Feb 2023 22:17:20 +0000 (23:17 +0100)]
i386: Introduce general_x64constmem_operand predicate

Instructions that use high-part QImode registers can not be encoded
with REX prefix.  To avoid REX prefix, operand constraints allow
only legacy QImode registers, immediates and constant memory operands.
The patch introduces matching predicate, so invalid operands are not
combined into instruction RTX only to be later fixed up by reload pass.

2023-02-20  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:

* config/i386/predicates.md
(general_x64constmem_operand): New predicate.
* config/i386/i386.md (*cmpqi_ext<mode>_1):
Use nonimm_x64constmem_operand.
(*cmpqi_ext<mode>_3): Use general_x64constmem_operand.
(*addqi_ext<mode>_1): Ditto.
(*testqi_ext<mode>_1): Ditto.
(*andqi_ext<mode>_1): Ditto.
(*andqi_ext<mode>_1_cc): Ditto.
(*<any_or:code>qi_ext<mode>_1): Ditto.
(*xorqi_ext<mode>_1_cc): Ditto.

17 months agopowerpc: Another umaddditi4 fix [PR108862]
Jakub Jelinek [Mon, 20 Feb 2023 21:07:57 +0000 (22:07 +0100)]
powerpc: Another umaddditi4 fix [PR108862]

The following testcase is miscompiled on powerpc64le-linux with
-O2 -mcpu=power9.  The problem is that gen_umaddditi4 is called with
the same TImode register for both op0 and op3, and maddlddi4
overwrites the low half of op0 before the low half of op3 is read,
so when they are the same register it reads the result of maddlddi4.

The following patch fixes that by swapping maddlddi4 and
umadddi4_highpart{,_le} during expansion, as the latter writes into
a temporary pseudo and so can't change anything maddlddi4 depends on.

2023-02-20  Jakub Jelinek  <jakub2redhat.com>

PR target/108862
* config/rs6000/rs6000.md (umaddditi4): Swap gen_maddlddi4 with
gen_umadddi4_highpart{,_le}.

* gcc.dg/pr108862.c: New test.
* gcc.target/powerpc/pr108862.c: New test.

17 months agolibstdc++: Update baseline symbols for m68k-linux
Andreas Schwab [Sat, 11 Feb 2023 10:30:45 +0000 (11:30 +0100)]
libstdc++: Update baseline symbols for m68k-linux

libstdc++-v3/:
* config/abi/post/m68k-linux-gnu/baseline_symbols.txt: Update.

17 months agoc++: ICE with -fno-elide-constructors and trivial fn [PR101073]
Marek Polacek [Thu, 9 Feb 2023 00:13:18 +0000 (19:13 -0500)]
c++: ICE with -fno-elide-constructors and trivial fn [PR101073]

In constexpr-nsdmi3.C, with -fno-elide-constructors, we don't elide
the Y::Y(const Y&) call used to initialize o.c.  So store_init_value
-> cxx_constant_init must constexpr-evaluate the call to Y::Y(const Y&)
in cxx_eval_call_expression.  It's a trivial function, so we do the
"Shortcut trivial constructor/op=" code and rather than evaluating
the function, we just create an assignment

  o.c = *(const struct Y &) (const struct Y *) &(&<PLACEHOLDER_EXPR struct X>)->b

which is a MODIFY_EXPR, so the preeval code in cxx_eval_store_expression
clears .ctor and .object, therefore we can't replace the PLACEHOLDER_EXPR
whereupon we crash at

      /* A placeholder without a referent.  We can get here when
         checking whether NSDMIs are noexcept, or in massage_init_elt;
         just say it's non-constant for now.  */
      gcc_assert (ctx->quiet);

The PLACEHOLDER_EXPR can also be on the LHS as in constexpr-nsdmi10.C.
I don't think we can do much here, but I noticed that the whole
trivial_fn_p (fun) block is only entered when -fno-elide-constructors.
This is true since GCC 9; it wasn't easy to bisect what changes made it
so, but r240845 is probably one of them.  -fno-elide-constructors is an
option for experiments only so it's not clear to me why we'd still want
to shortcut trivial constructor/op=.  I propose to remove the code and
add a checking assert to make sure we're not getting a trivial_fn_p
unless -fno-elide-constructors.

PR c++/101073

gcc/cp/ChangeLog:

* constexpr.cc (cxx_eval_call_expression): Replace shortcutting trivial
constructor/op= with a checking assert.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/constexpr-nsdmi3.C: New test.
* g++.dg/cpp1y/constexpr-nsdmi10.C: New test.

17 months agolibstdc++: Fix uses of non-reserved names in simd header
Matthias Kretz [Thu, 16 Feb 2023 15:29:54 +0000 (16:29 +0100)]
libstdc++: Fix uses of non-reserved names in simd header

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

* include/experimental/bits/simd.h (__extract_part, split):
Use reserved name for template parameter.

17 months agolibstdc++: Update baseline symbols for riscv64-linux
Andreas Schwab [Sat, 11 Feb 2023 10:28:01 +0000 (11:28 +0100)]
libstdc++: Update baseline symbols for riscv64-linux

libstdc++-v3/
* config/abi/post/riscv64-linux-gnu/baseline_symbols.txt: Update.

17 months agoRISC-V: prefetch.* only take base register with zero-offset for the address
Kito Cheng [Mon, 20 Feb 2023 13:47:01 +0000 (21:47 +0800)]
RISC-V: prefetch.* only take base register with zero-offset for the address

Catched by running gcc.c-torture/execute/builtin-prefetch-2.c with
-march=rv64gc_zicbop.

gcc/ChangeLog:

* config/riscv/riscv.md (prefetch): Use r instead of p for the
address operand.
(riscv_prefetchi_<mode>): Ditto.

17 months agoc++: ICE with redundant capture [PR108829]
Marek Polacek [Thu, 16 Feb 2023 22:41:24 +0000 (17:41 -0500)]
c++: ICE with redundant capture [PR108829]

Here we crash in is_capture_proxy:

  /* Location wrappers should be stripped or otherwise handled by the
     caller before using this predicate.  */
  gcc_checking_assert (!location_wrapper_p (decl));

We only crash with the redundant capture:

  int abyPage = [=, abyPage] { ... }

because prune_lambda_captures is only called when there was a default
capture, and with [=] only abyPage won't be in LAMBDA_EXPR_CAPTURE_LIST.

The problem is that LAMBDA_CAPTURE_EXPLICIT_P wasn't propagated
correctly and so var_to_maybe_prune proceeded where it shouldn't.

Co-Authored by: Patrick Palka <ppalka@redhat.com>

PR c++/108829

gcc/cp/ChangeLog:

* pt.cc (prepend_one_capture): Set LAMBDA_CAPTURE_EXPLICIT_P.
(tsubst_lambda_expr): Pass LAMBDA_CAPTURE_EXPLICIT_P to
prepend_one_capture.

gcc/testsuite/ChangeLog:

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

17 months agotree-optimization/108816 - vect versioning check split confusion
Richard Biener [Mon, 20 Feb 2023 09:59:15 +0000 (10:59 +0100)]
tree-optimization/108816 - vect versioning check split confusion

The split of the versioning condition assumes the definition is
in the condition block which is ensured by the versioning code.
But that only works when we actually have to insert any statements
for the versioning condition.  The following adjusts the guard
accordingly and asserts this condition.

PR tree-optimization/108816
* tree-vect-loop-manip.cc (vect_loop_versioning): Adjust
versioning condition split prerequesite, assert required
invariant.

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

17 months agorust: Fix rust-tree.cc compilation on SPARC
Rainer Orth [Mon, 20 Feb 2023 10:40:24 +0000 (11:40 +0100)]
rust: Fix rust-tree.cc compilation on SPARC

This patch

commit 27a89f84c458ae938bc3eb92ad0d594c06fc3b42
Author: Thomas Schwinge <thomas@codesourcery.com>
Date:   Fri Feb 17 23:36:20 2023 +0100

    '#include "tm_p.h"' in 'gcc/rust/backend/rust-tree.cc'

broke rust bootstrap on SPARC:

In file included from ./tm_p.h:4,
                 from /vol/gcc/src/hg/master/local/gcc/rust/backend/rust-tree.cc:38:
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc-protos.h:46:47: error: use of enum 'memmodel' without previous declaration
   46 | extern void sparc_emit_membar_for_model (enum memmodel, int, int);
      |                                               ^~~~~~~~

Fixed by including memmodel.h.  Tested on sparc-sun-solaris2.11 and
i386-pc-solaris2.11.

2023-02-20  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

gcc/rust:
* backend/rust-tree.cc: Include memmodel.h.

17 months agotree-optimization/108825 - checking ICE with unroll-and-jam
Richard Biener [Mon, 20 Feb 2023 08:54:37 +0000 (09:54 +0100)]
tree-optimization/108825 - checking ICE with unroll-and-jam

The issue is that unroll-and-jam applies RPO VN on the transformed body but
that leaves the IL in "indetermined" state (it returns a TODO to make it
valid again).  But unroll-and-jam then continues to transform another loop and
in using the tree_unroll_loop helper runs into tree_transform_and_unroll_loop
performing IL checking on the whole function.

While the real fix is to elide all such checking I'm only making the
loop-local LC SSA verifier not perform function-wide SSA verification
at this point.

PR tree-optimization/108825
* tree-ssa-loop-manip.cc (verify_loop_closed_ssa): For
loop-local verfication only verify there's no pending SSA
update.

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

17 months agotree-optimization/108819 - niter analysis ICE with unexpected constant
Richard Biener [Fri, 17 Feb 2023 13:21:39 +0000 (14:21 +0100)]
tree-optimization/108819 - niter analysis ICE with unexpected constant

The following makes sure we do not ICE on unfolded stmts like
_1 = 1 & 1.

PR tree-optimization/108819
* tree-ssa-loop-niter.cc (number_of_iterations_cltz): Check
we have an SSA name as iv_2 as expected.

17 months agoDaily bump.
GCC Administrator [Mon, 20 Feb 2023 00:16:30 +0000 (00:16 +0000)]
Daily bump.

17 months agolibgm2/libm2iso/RTco.cc (re-implementation) Bugfix for [PR108835]
Gaius Mulley [Sun, 19 Feb 2023 22:08:31 +0000 (22:08 +0000)]
libgm2/libm2iso/RTco.cc (re-implementation) Bugfix for [PR108835]

This is a re-implementation of RTco.cc which fixes the race hazzard
seen occasionally when running testtransfer and coroutines from the
modula2 testsuite.

libgm2/ChangeLog:

PR testsuite/108835
* libm2iso/RTco.cc: Re-implementation using a single lock
mutex and inlined wait/signal implementation within
transfer.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
17 months agoDaily bump.
GCC Administrator [Sun, 19 Feb 2023 00:16:39 +0000 (00:16 +0000)]
Daily bump.

17 months agoc++: static_assert (false) in template [DR2518]
Jason Merrill [Sat, 11 Feb 2023 00:16:45 +0000 (16:16 -0800)]
c++: static_assert (false) in template [DR2518]

For a long time, people have expected to be able to write
static_assert (false) in a template and only have it diagnosed if the
template is instantiated, but we (and other implementations) gave an error
about the uninstantiated template because the standard says that if no valid
instantiation of the template is possible, the program is ill-formed, no
diagnostic required, and we try to diagnose IFNDR things when feasible.

At the meeting last week we were looking at CWG2518, which wanted to specify
that an implementation must not accept a program containing a failing #error
or static_assert.  We also looked at P2593, which proposed allowing
static_assert in an uninstantiated template.  We ended up combining these
two in order to avoid requiring implementations to reject programs with
static_assert (false) in uninstantiated templates.

The committee accepted this as a DR, so I'm making the change to all
standard modes.  This behavior was also conformant previously, since no
diagnostic was required in this case.

We continue to diagnose non-constant or otherwise ill-formed conditions, so
no changes to existing tests were needed.

DR 2518
PR c++/52809
PR c++/53638
PR c++/87389
PR c++/89741
PR c++/92099
PR c++/104041
PR c++/104691

gcc/cp/ChangeLog:

* semantics.cc (finish_static_assert): Don't diagnose in
template context.

gcc/testsuite/ChangeLog:

* g++.dg/DRs/dr2518.C: New test.

17 months agoreassoc: Fold some statements [PR108819]
Jakub Jelinek [Sat, 18 Feb 2023 11:40:49 +0000 (12:40 +0100)]
reassoc: Fold some statements [PR108819]

This spot in update_ops can replace one or both of the assign operands with
constants, creating 1 & 1 and similar expressions which can confuse later
passes until they are folded.  Rather than folding both constants by hand
and also handling swapping of operands for commutative ops if the first one
is constant and second one is not, the following patch just uses
fold_stmt_inplace to do that.  I think we shouldn't fold more than the
single statement because that could screw up the rest of the pass, we'd have
to mark all those with uids, visited and the like.

2023-02-18  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/108819
* tree-ssa-reassoc.cc (update_ops): Fold new stmt in place.

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

17 months agoi386: Fix up replacement of registers in certain peephole2s [PR108832]
Jakub Jelinek [Sat, 18 Feb 2023 11:40:04 +0000 (12:40 +0100)]
i386: Fix up replacement of registers in certain peephole2s [PR108832]

As mentioned in the PR, replace_rtx has 2 modes, one that only replaces
x == from with to, the other which i386.md uses which also replaces
REGNO (x) == REGNO (from) with to if both are REGs, but assert they have
the same mode.  This is reasonable behavior if one replaces from with
some other expression, say constant etc., but ICEs whenever the register
appears in a different mode, which happens e.g. on the following testcase,
where from/to has DImode but inside of the operands we have SImode of
the from register.  replace_rtx also does some limited simplifications
(though far less than simplify_replace_fn_rtx), which is needed if
from a REG is replaced say with CONST_INT, but the peephole2s that use
this only replace one REG with another one.

The following patch introduces a new backend function for this, avoids doing
any simplifications and just replaces the REGs, for safety on a copy of
the expression if any changes will be needed.

2023-02-18  Jakub Jelinek  <jakub@redhat.com>

PR target/108832
* config/i386/i386-protos.h (ix86_replace_reg_with_reg): Declare.
* config/i386/i386-expand.cc (ix86_replace_reg_with_reg): New
function.
* config/i386/i386.md: Replace replace_rtx calls in all peephole2s
with ix86_replace_reg_with_reg.

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

17 months agolibstdc++: Switch two links to www.open-std.org to https
Gerald Pfeifer [Sat, 18 Feb 2023 09:59:11 +0000 (10:59 +0100)]
libstdc++: Switch two links to open-std.org to https

libstdc++-v3/ChangeLog:

* doc/xml/faq.xml: Switch two links to www.open-std.org to https.
* doc/html/faq.html: Regenerate.

17 months agodoc: Update link to AVR-LibC
Gerald Pfeifer [Sat, 18 Feb 2023 09:45:44 +0000 (10:45 +0100)]
doc: Update link to AVR-LibC

gcc/ChangeLog:

* doc/invoke.texi (AVR Options): Update link to AVR-LibC.

17 months agoC: Detect all variably modified types [PR108375]
Martin Uecker [Wed, 15 Feb 2023 09:54:00 +0000 (10:54 +0100)]
C: Detect all variably modified types [PR108375]

Some variably modified types were not detected correctly.
Define C_TYPE_VARIABLY_MODIFIED via TYPE_LANG_FLAG 6 in the CFE.
This flag records whether a type is variably modified and is
set for all such types including arrays with variably modified
element type or structures and unions with variably modified
members. This is then used to detect such types in the C FE
and middle-end (via the existing language hook).

gcc/c/ChangeLog:
PR c/108375
* c-decl.cc (decl_jump_unsafe): Use c_type_variably_modified_p.
(diagnose_mismatched_decl): Dito.
(warn_about_goto): Dito:
(c_check_switch_jump_warnings): Dito.
(finish_decl): Dito.
(finish_struct): Dito.
(grokdeclarator): Set C_TYPE_VARIABLY_MODIFIED.
(finish_struct): Set C_TYPE_VARIABLY_MODIFIED.
* c-objc-common.cc (c_var_mod_p): New function.
(c_var_unspec_p): Remove.
* c-objc-common.h: Set lang hook.
* c-parser.cc (c_parser_declararion_or_fndef): Use c_type_variably_modified_p.
(c_parser_typeof_specifier): Dito.
(c_parser_has_attribute_expression): Dito.
(c_parser_generic_selection): Dito.
* c-tree.h: Define C_TYPE_VARIABLY_MODIFIED and define c_var_mode_p.
* c-typeck.cc: Remove c_vla_mod_p and use C_TYPE_VARIABLY_MODIFIED.

gcc/testsuite/ChangeLog:
PR c/108375
* gcc.dg/pr108375-1.c: New test.
* gcc.dg/pr108375-2.c: New test.

17 months agoFix ICE related to implicit access attributes for VLA arguments [PR105660]
Martin Uecker [Wed, 8 Feb 2023 14:02:43 +0000 (15:02 +0100)]
Fix ICE related to implicit access attributes for VLA arguments [PR105660]

When constructing the specifier string when merging an access attribute
that encodes information about VLA arguments, the string was constructed
in random order by iterating through a hash table. Fix this by iterating
though the list of arguments.

gcc/c-family/Changelog:
PR c/105660
* c-attribs.cc (append_access_attr): Use order of arguments when
construction string.
(append_access_attr_idxs): Rename and make static.
* c-warn.cc (warn_parm_array_mismatch): Add assertion.

gcc/testsuite/ChangeLog:
PR c/105660
* gcc.dg/pr105660-1.c: New test.
* gcc.dg/pr105660-2.c: New test.

17 months agoLoongArch: Fix multiarch tuple canonization
Xi Ruoyao [Mon, 13 Feb 2023 10:38:53 +0000 (18:38 +0800)]
LoongArch: Fix multiarch tuple canonization

Multiarch tuple will be coded in file or directory names in
multiarch-aware distros, so one ABI should have only one multiarch
tuple.  For example, "--target=loongarch64-linux-gnu --with-abi=lp64s"
and "--target=loongarch64-linux-gnusf" should both set multiarch tuple
to "loongarch64-linux-gnusf".  Before this commit,
"--target=loongarch64-linux-gnu --with-abi=lp64s --disable-multilib"
will produce wrong result (loongarch64-linux-gnu).

A recent LoongArch psABI revision mandates "loongarch64-linux-gnu" to be
used for -mabi=lp64d (instead of "loongarch64-linux-gnuf64") for some
non-technical reason [1].  Note that we cannot make
"loongarch64-linux-gnuf64" an alias for "loongarch64-linux-gnu" because
to implement such an alias, we must create thousands of symlinks in the
distro and doing so would be completely unpractical.  This commit also
aligns GCC with the revision.

Tested by building cross compilers with --enable-multiarch and multiple
combinations of --target=loongarch64-linux-gnu*, --with-abi=lp64{s,f,d},
and --{enable,disable}-multilib; and run "xgcc --print-multiarch" then
manually verify the result with eyesight.

[1]: https://github.com/loongson/LoongArch-Documentation/pull/80

gcc/ChangeLog:

* config.gcc (triplet_abi): Set its value based on $with_abi,
instead of $target.
(la_canonical_triplet): Set it after $triplet_abi is set
correctly.
* config/loongarch/t-linux (MULTILIB_OSDIRNAMES): Make the
multiarch tuple for lp64d "loongarch64-linux-gnu" (without
"f64" suffix).

17 months agoRemove #if GIMPLE around 1 - a pattern
Andrew Pinski [Fri, 17 Feb 2023 16:43:27 +0000 (16:43 +0000)]
Remove #if GIMPLE around 1 - a pattern

This removes the "#if GIMPLE" around the
"1 - a" pattern as ssa_name_has_boolean_range
(get_range_query) works when cfun is a nullptr.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

gcc/ChangeLog:

* match.pd: Remove #if GIMPLE around the
"1 - a" pattern

17 months agoSupport get_range_query with a nullptr argument
Andrew Pinski [Fri, 17 Feb 2023 16:45:43 +0000 (16:45 +0000)]
Support get_range_query with a nullptr argument

get_range_query didn't support a nullptr argument
before and would crash.
See also the thread at
https://inbox.sourceware.org/gcc/4f6718af-e17a-41ef-a886-f45e4ac3d7a4@redhat.com/T/

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

gcc/ChangeLog:

* value-query.h (get_range_query): Return the global ranges
for a nullptr func.

17 months agoDaily bump.
GCC Administrator [Sat, 18 Feb 2023 00:17:20 +0000 (00:17 +0000)]
Daily bump.

17 months ago'#include "tm_p.h"' in 'gcc/rust/backend/rust-tree.cc'
Thomas Schwinge [Fri, 17 Feb 2023 22:36:20 +0000 (23:36 +0100)]
'#include "tm_p.h"' in 'gcc/rust/backend/rust-tree.cc'

... to resolve issues like:

<https://github.com/Rust-GCC/gccrs/issues/1864> "Upstream GCC broken for --target=pdp11-aout":

    In file included from ./tm.h:18:0,
                     from [...]/gcc/target.h:52,
                     from [...]/gcc/rust/backend/rust-tree.cc:34:
    [...]/gcc/rust/backend/rust-tree.cc: In function ‘void Rust::mark_exp_read(tree)’:
    [...]/gcc/config/pdp11/pdp11.h:572:48: error: ‘pdp11_gen_int_label’ was not declared in this scope
       pdp11_gen_int_label ((LABEL), (PREFIX), (NUM))
                                                    ^
    [...]/gcc/rust/backend/rust-tree.cc:53:3: note: in expansion of macro ‘ASM_GENERATE_INTERNAL_LABEL’
       ASM_GENERATE_INTERNAL_LABEL (tmp_name, "Lsrc_loc", 1);
       ^
    [...]/gcc/rust/backend/rust-tree.cc: In function ‘tree_node* Rust::fold_builtin_source_location(location_t)’:
    [...]/gcc/config/pdp11/pdp11.h:572:48: error: ‘pdp11_gen_int_label’ was not declared in this scope
       pdp11_gen_int_label ((LABEL), (PREFIX), (NUM))
                                                    ^
    [...]/gcc/rust/backend/rust-tree.cc:4799:7: note: in expansion of macro ‘ASM_GENERATE_INTERNAL_LABEL’
           ASM_GENERATE_INTERNAL_LABEL (tmp_name, "Lsrc_loc", source_location_id++);
           ^
    make[1]: *** [rust/rust-tree.o] Error 1

<https://github.com/Rust-GCC/gccrs/issues/1819> "New build failure on upstream GCC for --target=powerpc-ibm-aix7.{1,2}":

    In file included from ./tm.h:22:0,
                     from [...]/gcc/target.h:52,
                     from [...]/gcc/rust/backend/rust-tree.cc:34:
    [...]/gcc/rust/backend/rust-tree.cc: In function ‘void Rust::mark_exp_read(tree)’:
    [...]/gcc/config/rs6000/xcoff.h:206:63: error: ‘rs6000_xcoff_strip_dollar’ was not declared in this scope
       sprintf (LABEL, "*%s..%u", rs6000_xcoff_strip_dollar (PREFIX), (unsigned) (NUM))
                                                                   ^
    [...]/gcc/rust/backend/rust-tree.cc:53:3: note: in expansion of macro ‘ASM_GENERATE_INTERNAL_LABEL’
       ASM_GENERATE_INTERNAL_LABEL (tmp_name, "Lsrc_loc", 1);
       ^
    [...]/gcc/rust/backend/rust-tree.cc: In function ‘tree_node* Rust::fold_builtin_source_location(location_t)’:
    [...]/gcc/config/rs6000/xcoff.h:206:63: error: ‘rs6000_xcoff_strip_dollar’ was not declared in this scope
       sprintf (LABEL, "*%s..%u", rs6000_xcoff_strip_dollar (PREFIX), (unsigned) (NUM))
                                                                   ^
    [...]/gcc/rust/backend/rust-tree.cc:4799:7: note: in expansion of macro ‘ASM_GENERATE_INTERNAL_LABEL’
           ASM_GENERATE_INTERNAL_LABEL (tmp_name, "Lsrc_loc", source_location_id++);
           ^
    make[1]: *** [rust/rust-tree.o] Error 1

Fix-up for recent commit e66fec8e6ba35edf01f86c2bf6514109aba4ded2
"gccrs: const folding port".

gcc/rust/
* backend/rust-tree.cc: '#include "tm_p.h"'.

17 months agodoc: Fix typo in -Wall description
Siddhesh Poyarekar [Fri, 17 Feb 2023 14:06:59 +0000 (09:06 -0500)]
doc: Fix typo in -Wall description

-Wall enables -Wuse-after-free=2 and not -Wuse-after-free=3.

gcc/ChangeLog:

* doc/invoke.texi (@item -Wall): Fix typo in
-Wuse-after-free.

Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
17 months agoc++: speculative constexpr and is_constant_evaluated [PR108243]
Patrick Palka [Fri, 17 Feb 2023 20:18:10 +0000 (15:18 -0500)]
c++: speculative constexpr and is_constant_evaluated [PR108243]

This PR illustrates that __builtin_is_constant_evaluated currently acts
as an optimization barrier for our speculative constexpr evaluation,
since we don't want to prematurely fold the builtin to false before the
expression in question undergoes manifestly constant evaluation if
appropriate (in which case the builtin must instead be folded to true).

This patch fixes this by permitting __builtin_is_constant_evaluated to
get folded as false at appropiate points, namely during cp_fold_function
and cp_fully_fold_init where we know we're done with manifestly constant
evaluation.  The function cp_fold gets a flags parameter that controls
whether we pass mce_false or mce_unknown to maybe_constant_value when
folding a CALL_EXPR.

PR c++/108243
PR c++/97553

gcc/cp/ChangeLog:

* cp-gimplify.cc (enum fold_flags): Define.
(fold_flags_t): Declare.
(cp_fold_data::genericize): Replace this data member with ...
(cp_fold_data::fold_flags): ... this.
(cp_fold_r): Adjust use of cp_fold_data and calls to cp_fold.
(cp_fold_function): Likewise.
(cp_fold_maybe_rvalue): Add an internal overload that
additionally takes and propagates a fold_flags_t parameter, and
define the existing public overload in terms of it.
(cp_fold_rvalue): Likewise.
(cp_fully_fold_init): Adjust use of cp_fold_data.
(fold_cache): Replace with ...
(fold_caches): ... this 2-element array of caches.
(get_fold_cache): Define.
(clear_fold_cache): Adjust.
(cp_fold): Add fold_flags_t parameter.  Use get_fold_cache.
Pass flags to calls to cp_fold, cp_fold_rvalue and
cp_fold_maybe_rvalue.
<case CALL_EXPR>: If ff_mce_false is set, fold
__builtin_is_constant_evaluated to false and pass mce_false to
maybe_constant_value.

gcc/testsuite/ChangeLog:

* g++.dg/opt/is_constant_evaluated1.C: New test.
* g++.dg/opt/is_constant_evaluated2.C: New test.

17 months agoc++: make manifestly_const_eval tri-state
Patrick Palka [Fri, 17 Feb 2023 20:18:08 +0000 (15:18 -0500)]
c++: make manifestly_const_eval tri-state

This patch converts the constexpr machinery's manifestly_const_eval flag
into a tri-state enum to allow us to express wanting to fold
__builtin_is_constant_evaluated to false via speculative constexpr
evaluation.  For now, only the maybe_constant_value entry point is
changed to take this enum; the others continue to take bool.  The
subsequent patch will teach cp_fold (which uses maybe_constant_value) to
fold the builtin to false when called from cp_fold_function and
cp_fully_fold_init.

gcc/cp/ChangeLog:

* constexpr.cc (constexpr_call::manifestly_const_eval): Give
it type int instead of bool.
(constexpr_ctx::manifestly_const_eval): Give it type mce_value
instead of bool.
(cxx_eval_builtin_function_call): Adjust after making
manifestly_const_eval tri-state.
(cxx_eval_call_expression): Likewise.
(cxx_eval_binary_expression): Likewise.
(cxx_eval_conditional_expression): Likewise.
(cxx_eval_constant_expression): Likewise.
(cxx_eval_outermost_constant_expr): Likewise.
(cxx_constant_value): Likewise.
(cxx_constant_dtor): Likewise.
(maybe_constant_value): Give manifestly_const_eval parameter
type mce_value instead of bool and adjust accordingly.
(fold_non_dependent_expr_template): Adjust call
to cxx_eval_outermost_constant_expr.
(fold_non_dependent_expr): Likewise.
(maybe_constant_init_1): Likewise.
* constraint.cc (satisfy_atom): Adjust call to
maybe_constant_value.
* cp-tree.h (enum class mce_value): Define.
(maybe_constant_value): Adjust manifestly_const_eval parameter
type and default argument.
* decl.cc (compute_array_index_type_loc): Adjust call to
maybe_constant_value.
* pt.cc (convert_nontype_argument): Likewise.

17 months agoii386: Generate QImode binary ops with high-part input register [PR108831]
Uros Bizjak [Fri, 17 Feb 2023 16:00:12 +0000 (17:00 +0100)]
ii386: Generate QImode binary ops with high-part input register [PR108831]

Following testcase:

--cut here--
struct S
{
  unsigned char pad1;
  unsigned char val;
  unsigned short pad2;
};

unsigned char
test_add (unsigned char a, struct S b)
{
  a += b.val;

  return a;
}
--cut here--

should be compiled to something like:

        addb %dh, %al

but is currently compiled to:

        movzbl  %dh, %edx
        addl    %edx, %eax

The patch implements insn patterns that model QImode binary ops with
high-part QImode input register.  These ops can not be encoded with
REX prefix, so only Q registers and constant memory output operands
are allowed on x86_64 targets.

2023-02-17  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:

PR target/108831
* config/i386/predicates.md
(nonimm_x64constmem_operand): New predicate.
* config/i386/i386.md (*addqi_ext<mode>_0): New insn pattern.
(*subqi_ext<mode>_0): Ditto.
(*andqi_ext<mode>_0): Ditto.
(*<any_or:code>qi_ext<mode>_0): Ditto.

gcc/testsuite/ChangeLog:

PR target/108831
* gcc.target/i386/pr108831-1.c: New test.
* gcc.target/i386/pr108831-2.c: Ditto.

17 months agosimplify-rtx: Fix VOIDmode operand handling in simplify_subreg [PR108805]
Uros Bizjak [Fri, 17 Feb 2023 14:58:12 +0000 (15:58 +0100)]
simplify-rtx: Fix VOIDmode operand handling in simplify_subreg [PR108805]

simplify_subreg can return VOIDmode const_int operand and will
cause ICE in simplify_gen_subreg when this operand is passed to it.

The patch uses int_outermode instead of GET_MODE of temporary as the
innermode argument of simplify_gen_subreg.

2023-02-17  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:

PR target/108805
* simplify-rtx.cc (simplify_context::simplify_subreg): Use
int_outermode instead of GET_MODE (tem) to prevent
VOIDmode from entering simplify_gen_subreg.

gcc/testsuite/ChangeLog:

PR target/108805
* gcc.dg/pr108805.c: New test.

17 months agofixincludes: Bypass solaris_math_12 on newer Solaris 11.4
Rainer Orth [Fri, 17 Feb 2023 12:48:45 +0000 (13:48 +0100)]
fixincludes: Bypass solaris_math_12 on newer Solaris 11.4

Solaris 11 <math.h> long had this snippet

which badly broke libstdc++.  This has long been undone using
fixincludes in

[fixincludes, v3] Don't define libstdc++-internal macros in Solaris 10+ <math.h>
https://gcc.gnu.org/ml/gcc-patches/2016-11/msg00330.html

However, the issue came up again recently when that code broke the LLVM
build, too, which unfortunately doesn't know about GCC's include-fixed
directory.  The issue was reinvestigated and it turned out that the
workaround/hack is only needed for specific old versions of the Sun/Oracle
Studio compilers.  So <math.h> now looks like

/* Accommodate historical C++11 -std=c++03 behavior of Studio 12.4 and 12.5 */
    ((__SUNPRO_CC == 0x5130) || (__SUNPRO_CC == 0x5140) ||  \
     defined(__MATH_PREEMPTS_GLIBCXX_C99_MATH))

If this change is in place, there's no longer a need for the fixincludes
fix, so this patch bypasses it as appropriate.

Tested on Solaris 11.3 (without the fixed header) and recent 11.4 (with
the fixed header).

2022-11-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

fixincludes:
* inclhack.def (solaris_math_12): Add bypass.
* fixincl.x: Regenerate.

17 months agocontrib: Fix make_sunver.pl warning
Rainer Orth [Fri, 17 Feb 2023 12:33:25 +0000 (13:33 +0100)]
contrib: Fix make_sunver.pl warning

Petr informed me that perl 5.32 bundled with Solaris 11.4 warns about
make_sunver.pl:

Unescaped left brace in regex is passed through in regex; marked by <-- HERE in m/^([ \t]*){ <-- HERE $/ at /vol/gcc/src/hg/master/local/libgomp/../contrib/make_sunver.pl line 216.

I didn't notice since I'm using a common installation of perl 5.12
across Solaris versions that doesn't show that warning.

His patch fixes the issue.  Tested on Solaris 11.3 (perl 5.12) and 11.4
(perl 5.32).

2023-01-20  Petr Sumbera  <petr.sumbera@oracle.com>

contrib:
* make_sunver.pl: Escape brace.

17 months agotree-optimization/108821 - store motion and volatiles
Richard Biener [Fri, 17 Feb 2023 11:36:44 +0000 (12:36 +0100)]
tree-optimization/108821 - store motion and volatiles

The following fixes store motion to not re-issue volatile stores
to preserve TBAA behavior since that will result in the number
of volatile accesses changing.

PR tree-optimization/108821
* tree-ssa-loop-im.cc (sm_seq_valid_bb): We can also not
move volatile accesses.

* gcc.dg/tree-ssa/ssa-lim-24.c: New testcase.

17 months agoFix wrong-code issue in VN
Richard Biener [Fri, 17 Feb 2023 08:30:49 +0000 (09:30 +0100)]
Fix wrong-code issue in VN

The following fixes the wrong removed dead store discovered on the
PR108657 testcase when the reported DSE issue is not fixed.
The issue is we were using ssa_undefined_value_p on virtual operands
which returns a result based on the real definition of the definition
statement.  That doesn't make sense so this patch guards the calls
properly and makes sure nobody else does the same mistake.

* tree-ssa.cc (ssa_undefined_value_p): Assert we are not
called on virtual operands.
* tree-ssa-sccvn.cc (vn_phi_lookup): Guard
ssa_undefined_value_p calls.
(vn_phi_insert): Likewise.
(set_ssa_val_to): Likewise.
(visit_phi): Avoid extra work with equivalences for
virtual operand PHIs.

17 months agoFortran test: Modify test cases to pass on mingw.
Jerry DeLisle [Fri, 17 Feb 2023 03:29:44 +0000 (19:29 -0800)]
Fortran test: Modify test cases to pass on mingw.

gcc/testsuite/ChangeLog:

* gfortran.dg/ISO_Fortran_binding_14.f90: Change example function to
CLOCK which is available on mingw as well as other platforms.
* gfortran.dg/pr96486.f90: Change variable to PATH likewise.

17 months agoRISC-V: Fix vmnot asm check (Should check vmnot.m instead of vmnot.mm)
Ju-Zhe Zhong [Thu, 16 Feb 2023 03:34:28 +0000 (11:34 +0800)]
RISC-V: Fix vmnot asm check (Should check vmnot.m instead of vmnot.mm)

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/base/binop_vx_constraint-148.c: Change vmnot.mm to vmnot.m.
* gcc.target/riscv/rvv/base/binop_vx_constraint-149.c: Change vmnot.mm to vmnot.m.
* gcc.target/riscv/rvv/base/binop_vx_constraint-150.c: Change vmnot.mm to vmnot.m.
* gcc.target/riscv/rvv/base/binop_vx_constraint-151.c: Change vmnot.mm to vmnot.m.
* gcc.target/riscv/rvv/base/binop_vx_constraint-152.c: Change vmnot.mm to vmnot.m.
* gcc.target/riscv/rvv/base/binop_vx_constraint-153.c: Change vmnot.mm to vmnot.m.
* gcc.target/riscv/rvv/base/binop_vx_constraint-156.c: Change vmnot.mm to vmnot.m.
* gcc.target/riscv/rvv/base/binop_vx_constraint-157.c: Change vmnot.mm to vmnot.m.
* gcc.target/riscv/rvv/base/binop_vx_constraint-159.c: Change vmnot.mm to vmnot.m.
* gcc.target/riscv/rvv/base/binop_vx_constraint-160.c: Change vmnot.mm to vmnot.m.
* gcc.target/riscv/rvv/base/binop_vx_constraint-161.c: Change vmnot.mm to vmnot.m.

17 months agoRISC-V: Add RVV all mask C/C++ intrinsics support
Ju-Zhe Zhong [Thu, 16 Feb 2023 03:30:01 +0000 (11:30 +0800)]
RISC-V: Add RVV all mask C/C++ intrinsics support

gcc/ChangeLog:

* config/riscv/riscv-vector-builtins-bases.cc (class mask_logic): New
class.
(class mask_nlogic): Ditto.
(class mask_notlogic): Ditto.
(class vmmv): Ditto.
(class vmclr): Ditto.
(class vmset): Ditto.
(class vmnot): Ditto.
(class vcpop): Ditto.
(class vfirst): Ditto.
(class mask_misc): Ditto.
(class viota): Ditto.
(class vid): Ditto.
(BASE): Ditto.
* config/riscv/riscv-vector-builtins-bases.h: Ditto.
* config/riscv/riscv-vector-builtins-functions.def (vmand): Ditto.
(vmnand): Ditto.
(vmandn): Ditto.
(vmxor): Ditto.
(vmor): Ditto.
(vmnor): Ditto.
(vmorn): Ditto.
(vmxnor): Ditto.
(vmmv): Ditto.
(vmclr): Ditto.
(vmset): Ditto.
(vmnot): Ditto.
(vcpop): Ditto.
(vfirst): Ditto.
(vmsbf): Ditto.
(vmsif): Ditto.
(vmsof): Ditto.
(viota): Ditto.
(vid): Ditto.
* config/riscv/riscv-vector-builtins-shapes.cc (struct alu_def): Ditto.
(struct mask_alu_def): Ditto.
(SHAPE): Ditto.
* config/riscv/riscv-vector-builtins-shapes.h: Ditto.
* config/riscv/riscv-vector-builtins.cc: Ditto.
* config/riscv/riscv-vsetvl.cc (pass_vsetvl::cleanup_insns): Fix bug
for dest it scalar RVV intrinsics.
* config/riscv/vector-iterators.md (sof): New iterator.
* config/riscv/vector.md (@pred_<optab>n<mode>): New pattern.
(@pred_<optab>not<mode>): New pattern.
(@pred_popcount<VB:mode><P:mode>): New pattern.
(@pred_ffs<VB:mode><P:mode>): New pattern.
(@pred_<misc_op><mode>): New pattern.
(@pred_iota<mode>): New pattern.
(@pred_series<mode>): New pattern.

17 months agoRISC-V: Rename tu_preds to none_tu_preds [NFC]
Ju-Zhe Zhong [Wed, 15 Feb 2023 11:22:31 +0000 (19:22 +0800)]
RISC-V: Rename tu_preds to none_tu_preds [NFC]

To be consistent with other naming of preds array variable.
Change tu_preds into none_tu_preds which indicate such preds
include vop and vop_tu combinations.

gcc/ChangeLog:

* config/riscv/riscv-vector-builtins-functions.def (vadc): Rename.
(vsbc): Ditto.
(vmerge): Ditto.
(vmv_v): Ditto.
* config/riscv/riscv-vector-builtins.cc: Ditto.

17 months agoRISC-V: Normalize SEW = 64 handling into a simplified function
Ju-Zhe Zhong [Wed, 15 Feb 2023 08:39:54 +0000 (16:39 +0800)]
RISC-V: Normalize SEW = 64 handling into a simplified function

Co-authored-by: kito-cheng <kito.cheng@sifive.com>
gcc/ChangeLog:

* config/riscv/riscv-protos.h (sew64_scalar_helper): New function.
* config/riscv/riscv-v.cc (has_vi_variant_p): Adjust.
(sew64_scalar_helper): New function.
* config/riscv/vector.md: Normalization.

Co-authored-by: kito-cheng <kito.cheng@sifive.com>
17 months agoRISC-V: Rearrange the organization of declarations of RVV intrinsics [NFC]
Ju-Zhe Zhong [Tue, 14 Feb 2023 22:27:33 +0000 (06:27 +0800)]
RISC-V: Rearrange the organization of declarations of RVV intrinsics [NFC]

This patch doesn't change any functionality, only rearrange the oraganzation.
Make it to be consistent with RVV ISA. Add annotation for it to make codes
more readable.

gcc/ChangeLog:

* config/riscv/riscv-vector-builtins-functions.def (vsetvlmax): Rearrange.
(vsm): Ditto.
(vsse): Ditto.
(vsoxei64): Ditto.
(vsub): Ditto.
(vand): Ditto.
(vor): Ditto.
(vxor): Ditto.
(vsll): Ditto.
(vsra): Ditto.
(vsrl): Ditto.
(vmin): Ditto.
(vmax): Ditto.
(vminu): Ditto.
(vmaxu): Ditto.
(vmul): Ditto.
(vmulh): Ditto.
(vmulhu): Ditto.
(vmulhsu): Ditto.
(vdiv): Ditto.
(vrem): Ditto.
(vdivu): Ditto.
(vremu): Ditto.
(vnot): Ditto.
(vsext): Ditto.
(vzext): Ditto.
(vwadd): Ditto.
(vwsub): Ditto.
(vwmul): Ditto.
(vwmulu): Ditto.
(vwmulsu): Ditto.
(vwaddu): Ditto.
(vwsubu): Ditto.
(vsbc): Ditto.
(vmsbc): Ditto.
(vnsra): Ditto.
(vmerge): Ditto.
(vmv_v): Ditto.
(vmsne): Ditto.
(vmslt): Ditto.
(vmsgt): Ditto.
(vmsle): Ditto.
(vmsge): Ditto.
(vmsltu): Ditto.
(vmsgtu): Ditto.
(vmsleu): Ditto.
(vmsgeu): Ditto.
(vnmsac): Ditto.
(vmadd): Ditto.
(vnmsub): Ditto.
(vwmacc): Ditto.
(vsadd): Ditto.
(vssub): Ditto.
(vssubu): Ditto.
(vaadd): Ditto.
(vasub): Ditto.
(vasubu): Ditto.
(vsmul): Ditto.
(vssra): Ditto.
(vssrl): Ditto.
(vnclip): Ditto.

17 months agoRISC-V: Move saturating add/subtract md pattern location [NFC]
Ju-Zhe Zhong [Tue, 14 Feb 2023 23:18:20 +0000 (07:18 +0800)]
RISC-V: Move saturating add/subtract md pattern location [NFC]

gcc/ChangeLog:

* config/riscv/vector.md (@pred_<optab><mode>): Rearrange.
(@pred_<optab><mode>_scalar): Ditto.
(*pred_<optab><mode>_scalar): Ditto.
(*pred_<optab><mode>_extended_scalar): Ditto.

17 months agoRISC-V: Remove "extern" for namespace [NFC]
Ju-Zhe Zhong [Tue, 14 Feb 2023 15:39:03 +0000 (23:39 +0800)]
RISC-V: Remove "extern" for namespace [NFC]

Just like other targets, aarch64_sve namespace in aarch64-protos.h
arm_mve in arm-protos, nds namesace in nds32-protos.h

They all don't have 'extern' in namespace.
This is a NFC patch to make RISC-V be consistent with other targets.
No functionality change.

gcc/ChangeLog:

* config/riscv/riscv-protos.h (riscv_run_selftests): Remove 'extern'.
(init_builtins): Ditto.
(mangle_builtin_type): Ditto.
(verify_type_context): Ditto.
(handle_pragma_vector):  Ditto.
(builtin_decl): Ditto.
(expand_builtin): Ditto.
(const_vec_all_same_in_range_p): Ditto.
(legitimize_move): Ditto.
(emit_vlmax_op): Ditto.
(emit_nonvlmax_op): Ditto.
(get_vlmul): Ditto.
(get_ratio): Ditto.
(get_ta): Ditto.
(get_ma): Ditto.
(get_avl_type): Ditto.
(calculate_ratio): Ditto.
(enum vlmul_type): Ditto.
(simm5_p): Ditto.
(neg_simm5_p): Ditto.
(has_vi_variant_p): Ditto.

17 months agoRISC-V: Replace simm32_p with immediate_operand (Pmode)
Ju-Zhe Zhong [Tue, 14 Feb 2023 15:04:49 +0000 (23:04 +0800)]
RISC-V: Replace simm32_p with immediate_operand (Pmode)

simm32_p is used to check constant int value within 32-bit.
It's used in handling SEW = 64 in rv32 system since such constant int
value with 32-bit allow us use vx instruction.

The current implementation of simm32_p is quite ugly and now I figure
out immedate_operand (op, pmode) can help us to check whether the op
is a constant value within 32-bit.

I already have a bunch testcases to test SEW = 64 in rv32 system and
all regression tests are passed with this patch.

gcc/ChangeLog:

* config/riscv/riscv-protos.h (simm32_p): Remove.
* config/riscv/riscv-v.cc (simm32_p): Ditto.
* config/riscv/vector.md: Use immediate_operand
instead of riscv_vector::simm32_p.

17 months agoFortran Tests: Allow passing on mingw.
Jerry DeLisle [Fri, 17 Feb 2023 02:13:56 +0000 (18:13 -0800)]
Fortran Tests: Allow passing on mingw.

gcc/testsuite/ChangeLog:

* gfortran.dg/bind_c_array_params_2.f90: Add *-*-ming* to dg-final.

17 months agoDaily bump.
GCC Administrator [Fri, 17 Feb 2023 00:17:49 +0000 (00:17 +0000)]
Daily bump.

17 months agoanalyzer: respect some conditions from bit masks [PR108806]
David Malcolm [Thu, 16 Feb 2023 23:12:55 +0000 (18:12 -0500)]
analyzer: respect some conditions from bit masks [PR108806]

PR analyzer/108806 reports false +ves seen from -fanalyzer on code like this
in qemu-7.2.0's hw/intc/omap_intc.c:

  [...snip...]
  struct omap_intr_handler_bank_s* bank = NULL;
  if ((offset & 0xf80) == 0x80) {
    [...set "bank" to non-NULL...]
  }
  switch (offset) {
    [...snip various cases that don't deref "bank"...]
    case 0x80:
      return bank->inputs;
    case 0x84:
      return bank->mask;
    [...etc...]
   }

where the analyzer falsely complains about execution paths in which
"(offset & 0xf80) == 0x80" was false (leaving "bank" as NULL), but then
in which "switch (offset)" goes to a case for which
"(offset & 0xf80) == 0x80" is true and dereferences NULL "bank", i.e.
paths in which "(offset & 0xf80) == 0x80" is both true *and* false.

This patch adds enough logic to constraint_manager for -fanalyzer to
reject such execution paths as impossible, fixing the false +ves.

Integration testing shows this eliminates 20 probable false positives:

Comparison: 9.08% -> 9.34% GOOD: 66 BAD: 661 -> 641 (-20)

where the affected warnings/projects are:

  -Wanalyzer-null-dereference: 0.00% GOOD: 0 BAD: 279 -> 269 (-10)
        qemu-7.2.0: 175 -> 165 (-10)

  -Wanalyzer-use-of-uninitialized-value: 0.00% GOOD: 0 BAD: 153 -> 143 (-10)
     coreutils-9.1:  18 ->  14 (-4)
        qemu-7.2.0:  54 ->  48 (-6)

gcc/analyzer/ChangeLog:
PR analyzer/108806
* constraint-manager.cc (bounded_range::dump_to_pp): Use
bounded_range::singleton_p.
(constraint_manager::add_bounded_ranges): Handle singleton ranges
by adding an EQ_EXPR constraint.
(constraint_manager::impossible_derived_conditions_p): New.
(constraint_manager::eval_condition): Reject EQ_EXPR when it would
imply impossible derived conditions.
(selftest::test_bits): New.
(selftest::run_constraint_manager_tests): Run it.
* constraint-manager.h (bounded_range::singleton_p): New.
(constraint_manager::impossible_derived_conditions_p): New decl.
* region-model.cc (region_model::get_rvalue_1): Handle
BIT_AND_EXPR, BIT_IOR_EXPR, and BIT_XOR_EXPR.

gcc/testsuite/ChangeLog:
PR analyzer/108806
* gcc.dg/analyzer/null-deref-pr108806-qemu.c: New test.
* gcc.dg/analyzer/pr103217.c: Add -Wno-analyzer-too-complex.
* gcc.dg/analyzer/switch.c (test_bitmask_1): New.
(test_bitmask_2): New.
* gcc.dg/analyzer/uninit-pr108806-qemu.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
17 months agodoc: Reword how to get possible values of a parameter
Gerald Pfeifer [Thu, 16 Feb 2023 22:56:34 +0000 (23:56 +0100)]
doc: Reword how to get possible values of a parameter

gcc/ChangeLog:

* doc/invoke.texi (Optimize Options): Reword the explanation
getting minimal, maximal and default values of a parameter.

17 months agotestsuite, objective-c: Cater for Windows intptr type.
Iain Sandoe [Thu, 16 Feb 2023 16:18:11 +0000 (16:18 +0000)]
testsuite, objective-c: Cater for Windows intptr type.

This adjusts the diagnostic output matches to cater for the differences
in intptr types on Windows.

Patch from 'nightstrike'.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
gcc/testsuite/ChangeLog:

* objc.dg/proto-lossage-4.m: Amendn diagnostic matches for Windows.

17 months agoc++: TYPENAME_TYPE lookup ignoring non-types [PR107773]
Patrick Palka [Thu, 16 Feb 2023 16:12:19 +0000 (11:12 -0500)]
c++: TYPENAME_TYPE lookup ignoring non-types [PR107773]

Currently when resolving a TYPENAME_TYPE for 'typename T::m' via
make_typename_type, we consider only type bindings of 'm' and ignore
non-type ones.  But [temp.res.general]/3 says, in a note, "the usual
qualified name lookup ([basic.lookup.qual]) applies even in the presence
of 'typename'", and qualified name lookup doesn't discriminate between
type and non-type bindings.  So when resolving such a TYPENAME_TYPE
we want the lookup to consider all bindings.

An exception is when we have a TYPENAME_TYPE corresponding to the
qualifying scope of the :: scope resolution operator, such as 'T::type'
in 'T::type::m'.  In that case, [basic.lookup.qual]/1 applies, and
lookup for such a TYPENAME_TYPE must ignore non-type bindings.  So in
order to correctly handle all cases, make_typename_type needs an
additional flag controlling whether to restrict the lookup.

To that end this patch adds a new tsubst flag tf_qualifying_scope
denoting whether we're substituting the LHS of the :: operator,
which make_typename_type will look for to conditionally restrict the
lookup to type bindings (by default we want to consider all bindings).
So in contexts such as substituting into the scope of TYPENAME_TYPE,
SCOPE_REF or USING_DECL we simply pass tf_qualifying_scope to the
relevant tsubst / tsubst_copy call, and if that scope is a TYPENAME_TYPE
then make_typename_type will restrict the lookup accordingly.  This flag
is intended to apply only to overall scope (TYPENAME_TYPE or not) so we
must be careful to clear the flag to avoid propagating it when recursing
into sub-trees of the scope.

PR c++/107773

gcc/cp/ChangeLog:

* cp-tree.h (enum tsubst_flags): New flag tf_qualifying_scope.
* decl.cc (make_typename_type): Use lookup_member instead of
lookup_field.  If tf_qualifying_scope is set, pass want_type=true
instead of =false to lookup_member.  Generalize format specifier
in diagnostic to handle both type and non-type bindings.
* pt.cc (tsubst_aggr_type_1): Clear tf_qualifying_scope.  Tidy
the function.
(tsubst_decl) <case USING_DECL>: Set tf_qualifying_scope when
substituting USING_DECL_SCOPE.
(tsubst): Clear tf_qualifying_scope right away and remember if
it was set.  Do the same for tf_tst_ok sooner.
<case TYPENAME_TYPE>: Set tf_qualifying_scope when substituting
TYPE_CONTEXT.  Pass tf_qualifying_scope to make_typename_type
if it was set.
(tsubst_qualified_id): Set tf_qualifying_scope when substituting
the scope.
(tsubst_copy): Clear tf_qualifying_scope and remember if it was
set.
<case SCOPE_REF>: Set tf_qualifying_scope when substituting the
scope.
<case *_TYPE>: Pass tf_qualifying_scope to tsubst if it was set.
* search.cc (lookup_member): Document default argument.

gcc/testsuite/ChangeLog:

* g++.dg/template/typename24.C: New test.
* g++.dg/template/typename25.C: New test.
* g++.dg/template/typename25a.C: New test.
* g++.dg/template/typename26.C: New test.

17 months agoMAINTAINERS: stepping down from my positions
Martin Liska [Thu, 16 Feb 2023 15:50:38 +0000 (16:50 +0100)]
MAINTAINERS: stepping down from my positions

ChangeLog:

* MAINTAINERS: I'm stepping down from my positions.

17 months agodon't declare header-defined functions both static and inline
Patrick Palka [Thu, 16 Feb 2023 15:30:20 +0000 (10:30 -0500)]
don't declare header-defined functions both static and inline

Many functions defined in our headers are declared 'static inline' which
is a C idiom whose use predates our move to C++ as the implementation
language.  But in C++ the inline keyword is more than just a compiler
hint, and is sufficient to give the function the intended semantics.
In fact declaring a function both static and inline is a pessimization
since static effectively disables the desired definition merging
behavior enabled by inline, and is also a source of (harmless) ODR
violations when a static inline function gets called from a non-static
inline one (such as tree_operand_check calling tree_operand_length).

This patch mechanically fixes the vast majority of occurrences of this
anti-pattern throughout the compiler's headers via the command line

  sed -i 's/^static inline/inline/g' gcc/*.h gcc/*/*.h

There's also a manual change to remove the redundant declarations
of is_ivar and lookup_category in gcc/objc/objc-act.cc which would
otherwise conflict with their modified definitions in objc-act.h
(due to the difference in staticness).

Besides fixing some ODR violations, this speeds up stage1 cc1plus by
about 2% and reduces the size of its text segment by 1.5MB.

gcc/ChangeLog:

* addresses.h: Mechanically drop 'static' from 'static inline'
functions via s/^static inline/inline/g.
* asan.h: Likewise.
* attribs.h: Likewise.
* basic-block.h: Likewise.
* bitmap.h: Likewise.
* cfghooks.h: Likewise.
* cfgloop.h: Likewise.
* cgraph.h: Likewise.
* cselib.h: Likewise.
* data-streamer.h: Likewise.
* debug.h: Likewise.
* df.h: Likewise.
* diagnostic.h: Likewise.
* dominance.h: Likewise.
* dumpfile.h: Likewise.
* emit-rtl.h: Likewise.
* except.h: Likewise.
* expmed.h: Likewise.
* expr.h: Likewise.
* fixed-value.h: Likewise.
* gengtype.h: Likewise.
* gimple-expr.h: Likewise.
* gimple-iterator.h: Likewise.
* gimple-predict.h: Likewise.
* gimple-range-fold.h: Likewise.
* gimple-ssa.h: Likewise.
* gimple.h: Likewise.
* graphite.h: Likewise.
* hard-reg-set.h: Likewise.
* hash-map.h: Likewise.
* hash-set.h: Likewise.
* hash-table.h: Likewise.
* hwint.h: Likewise.
* input.h: Likewise.
* insn-addr.h: Likewise.
* internal-fn.h: Likewise.
* ipa-fnsummary.h: Likewise.
* ipa-icf-gimple.h: Likewise.
* ipa-inline.h: Likewise.
* ipa-modref.h: Likewise.
* ipa-prop.h: Likewise.
* ira-int.h: Likewise.
* ira.h: Likewise.
* lra-int.h: Likewise.
* lra.h: Likewise.
* lto-streamer.h: Likewise.
* memmodel.h: Likewise.
* omp-general.h: Likewise.
* optabs-query.h: Likewise.
* optabs.h: Likewise.
* plugin.h: Likewise.
* pretty-print.h: Likewise.
* range.h: Likewise.
* read-md.h: Likewise.
* recog.h: Likewise.
* regs.h: Likewise.
* rtl-iter.h: Likewise.
* rtl.h: Likewise.
* sbitmap.h: Likewise.
* sched-int.h: Likewise.
* sel-sched-ir.h: Likewise.
* sese.h: Likewise.
* sparseset.h: Likewise.
* ssa-iterators.h: Likewise.
* system.h: Likewise.
* target-globals.h: Likewise.
* target.h: Likewise.
* timevar.h: Likewise.
* tree-chrec.h: Likewise.
* tree-data-ref.h: Likewise.
* tree-iterator.h: Likewise.
* tree-outof-ssa.h: Likewise.
* tree-phinodes.h: Likewise.
* tree-scalar-evolution.h: Likewise.
* tree-sra.h: Likewise.
* tree-ssa-alias.h: Likewise.
* tree-ssa-live.h: Likewise.
* tree-ssa-loop-manip.h: Likewise.
* tree-ssa-loop.h: Likewise.
* tree-ssa-operands.h: Likewise.
* tree-ssa-propagate.h: Likewise.
* tree-ssa-sccvn.h: Likewise.
* tree-ssa.h: Likewise.
* tree-ssanames.h: Likewise.
* tree-streamer.h: Likewise.
* tree-switch-conversion.h: Likewise.
* tree-vectorizer.h: Likewise.
* tree.h: Likewise.
* wide-int.h: Likewise.

gcc/c-family/ChangeLog:

* c-common.h: Mechanically drop static from static inline
functions via s/^static inline/inline/g.

gcc/c/ChangeLog:

* c-parser.h: Mechanically drop static from static inline
functions via s/^static inline/inline/g.

gcc/cp/ChangeLog:

* cp-tree.h: Mechanically drop static from static inline
functions via s/^static inline/inline/g.

gcc/fortran/ChangeLog:

* gfortran.h: Mechanically drop static from static inline
functions via s/^static inline/inline/g.

gcc/jit/ChangeLog:

* jit-dejagnu.h: Mechanically drop static from static inline
functions via s/^static inline/inline/g.
* jit-recording.h: Likewise.

gcc/objc/ChangeLog:

* objc-act.h: Mechanically drop static from static inline
functions via s/^static inline/inline/g.
* objc-map.h: Likewise.
* objc-act.cc: Remove the redundant redeclarations of is_ivar
and lookup_category.

17 months agolibstdc++: Fix incorrect function call in -ffast-math optimization
Matthias Kretz [Fri, 3 Feb 2023 16:47:05 +0000 (17:47 +0100)]
libstdc++: Fix incorrect function call in -ffast-math optimization

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

* include/experimental/bits/simd_math.h (__hypot): Bitcasting
between scalars requires the __bit_cast helper function instead
of simd_bit_cast.

17 months agolibstdc++: Fix incorrect __builtin_is_constant_evaluated calls
Matthias Kretz [Thu, 2 Feb 2023 11:29:33 +0000 (12:29 +0100)]
libstdc++: Fix incorrect __builtin_is_constant_evaluated calls

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

* include/experimental/bits/simd_x86.h
(_SimdImplX86::_S_not_equal_to, _SimdImplX86::_S_less)
(_SimdImplX86::_S_less_equal): Do not call
__builtin_is_constant_evaluated in constexpr-if.

17 months agolibstdc++: printf format string fix in testsuite
Matthias Kretz [Thu, 2 Feb 2023 11:28:39 +0000 (12:28 +0100)]
libstdc++: printf format string fix in testsuite

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

* testsuite/experimental/simd/tests/bits/verify.h
(verify::verify): Use %zx for size_t in format string.

17 months agolibstdc++: Use a PCH to speed up check-simd
Matthias Kretz [Thu, 2 Feb 2023 11:26:35 +0000 (12:26 +0100)]
libstdc++: Use a PCH to speed up check-simd

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

* testsuite/experimental/simd/generate_makefile.sh: Generate and
pre-compile pch.h, which includes all headers that do not depend
on command-line macros.
* testsuite/experimental/simd/tests/bits/main.h: New file.
(iterate_abis, main): Moved from verify.h.
* testsuite/experimental/simd/tests/bits/verify.h
(iterate_abis, main): Moved to main.h.
* testsuite/experimental/simd/tests/bits/conversions.h: Add
include guard.
(genHalfBits): Simplify.
* testsuite/experimental/simd/tests/bits/make_vec.h: Add include
guard.
(make_alternating_mask): Moved from mask_loadstore.
* testsuite/experimental/simd/tests/bits/mathreference.h: Add
include guard.
* testsuite/experimental/simd/tests/bits/test_values.h: Ditto.
* testsuite/experimental/simd/tests/mask_loadstore.cc
(make_mask, make_alternating_mask): Removed.
* testsuite/experimental/simd/tests/mask_reductions.cc: Ditto.
* testsuite/experimental/simd/tests/operators.cc (genHalfBits):
Removed.
* testsuite/experimental/simd/tests/abs.cc: Only include
bits/main.h.
Ditto.
* testsuite/experimental/simd/tests/algorithms.cc: Ditto.
* testsuite/experimental/simd/tests/broadcast.cc: Ditto.
* testsuite/experimental/simd/tests/casts.cc: Ditto.
* testsuite/experimental/simd/tests/fpclassify.cc: Ditto.
* testsuite/experimental/simd/tests/frexp.cc: Ditto.
* testsuite/experimental/simd/tests/generator.cc: Ditto.
* testsuite/experimental/simd/tests/hypot3_fma.cc: Ditto.
* testsuite/experimental/simd/tests/integer_operators.cc: Ditto.
* testsuite/experimental/simd/tests/ldexp_scalbn_scalbln_modf.cc:
* testsuite/experimental/simd/tests/loadstore.cc: Ditto.
* testsuite/experimental/simd/tests/logarithm.cc: Ditto.
* testsuite/experimental/simd/tests/mask_broadcast.cc: Ditto.
* testsuite/experimental/simd/tests/mask_conversions.cc: Ditto.
* testsuite/experimental/simd/tests/mask_implicit_cvt.cc: Ditto.
* testsuite/experimental/simd/tests/mask_operator_cvt.cc: Ditto.
* testsuite/experimental/simd/tests/mask_operators.cc: Ditto.
* testsuite/experimental/simd/tests/math_1arg.cc: Ditto.
* testsuite/experimental/simd/tests/math_2arg.cc: Ditto.
* testsuite/experimental/simd/tests/operator_cvt.cc: Ditto.
* testsuite/experimental/simd/tests/reductions.cc: Ditto.
* testsuite/experimental/simd/tests/remqo.cc: Ditto.
* testsuite/experimental/simd/tests/simd.cc: Ditto.
* testsuite/experimental/simd/tests/sincos.cc: Ditto.
* testsuite/experimental/simd/tests/split_concat.cc: Ditto.
* testsuite/experimental/simd/tests/splits.cc: Ditto.
* testsuite/experimental/simd/tests/trigonometric.cc: Ditto.
* testsuite/experimental/simd/tests/trunc_ceil_floor.cc: Ditto.
* testsuite/experimental/simd/tests/where.cc: Ditto.

17 months agolibstdc++: Document timeout and timeout-factor of simd tests
Matthias Kretz [Thu, 2 Feb 2023 09:48:10 +0000 (10:48 +0100)]
libstdc++: Document timeout and timeout-factor of simd tests

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

* testsuite/experimental/simd/README.md: Document the timeout
and timeout-factor directives. Minor typo fixed.

17 months agolibstdc++: Annotate most lambdas with always_inline
Matthias Kretz [Sat, 14 Jan 2023 16:07:59 +0000 (17:07 +0100)]
libstdc++: Annotate most lambdas with always_inline

All of the annotated lambdas are simply a necessary means for
implementing these functions and should never result in an actual
function call. Many of these lambdas would go away if C++ had better
language support for packs.

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

PR libstdc++/108030
* include/experimental/bits/simd_detail.h: Define
_GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA.
* include/experimental/bits/simd.h: Annotate lambdas with
_GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA.
* include/experimental/bits/simd_builtin.h: Ditto.
* include/experimental/bits/simd_converter.h: Ditto.
* include/experimental/bits/simd_fixed_size.h: Ditto.
* include/experimental/bits/simd_math.h: Ditto.
* include/experimental/bits/simd_neon.h: Ditto.
* include/experimental/bits/simd_x86.h: Ditto.

17 months agolibstdc++: Ensure __builtin_constant_p isn't lost on the way
Matthias Kretz [Fri, 13 Jan 2023 15:20:36 +0000 (16:20 +0100)]
libstdc++: Ensure __builtin_constant_p isn't lost on the way

The more expensive code path should only be taken if it can be optimized
away.

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

* include/experimental/bits/simd.h
(_SimdWrapper::_M_is_constprop_none_of)
(_SimdWrapper::_M_is_constprop_all_of): Return false unless the
computed result still satisfies __builtin_constant_p.

17 months agolibstdc++: Replace non-ascii character in test
Jonathan Wakely [Thu, 16 Feb 2023 14:41:17 +0000 (14:41 +0000)]
libstdc++: Replace non-ascii character in test

This ensures the test will work with -fexec-charset=ascii.

libstdc++-v3/ChangeLog:

* testsuite/std/format/arguments/lwg3810.cc: Replace UTF-8
ellipsis character.

17 months agolibstdc++: Implement <experimental/synchronized_value> (P0290)
Jonathan Wakely [Wed, 15 Feb 2023 15:07:15 +0000 (15:07 +0000)]
libstdc++: Implement <experimental/synchronized_value> (P0290)

This was approved for the Concurrency TS v2 in Issaquah.

Although the TS is based on C++20, this enables the new header for C++17
as well. This will make it available to more users, and I hope that will
get more feedback on the feature.

libstdc++-v3/ChangeLog:

* include/Makefile.am: Add new header.
* include/Makefile.in: Regenerate.
* include/experimental/synchronized_value: New file.
* testsuite/experimental/synchronized_value.cc: New test.

17 months agolibstdc++: Fix name of <experimental/optional> in comment
Jonathan Wakely [Wed, 15 Feb 2023 13:29:56 +0000 (13:29 +0000)]
libstdc++: Fix name of <experimental/optional> in comment

libstdc++-v3/ChangeLog:

* include/experimental/optional: Fix header name in comment.

17 months agolibstdc++: Enable CTAD for std::basic_format_args (LWG 3810)
Jonathan Wakely [Mon, 13 Feb 2023 12:22:00 +0000 (12:22 +0000)]
libstdc++: Enable CTAD for std::basic_format_args (LWG 3810)

This was just approved in Issaquah.

libstdc++-v3/ChangeLog:

* include/std/format (__format::_Arg_store): New class template.
(basic_format_args): Remove nested type _Store and add deduction
guide from _Arg_store.
(basic_format_arg, make_format_args): Adjust.
* testsuite/std/format/arguments/lwg3810.cc: New test.

17 months agolibstdc++: Implement P2255R2 dangling checks for std::pair
Jonathan Wakely [Wed, 8 Feb 2023 12:58:45 +0000 (12:58 +0000)]
libstdc++: Implement P2255R2 dangling checks for std::pair

This uses the new __reference_constructs_from_temporary built-in to
identify when a std::pair constructor will bind a reference to a
temporary that goes out of scope at the end of the constructor.  For
example, std::pair<const long&, int> p(1, 2); will call the pair<const
long&, int>::pair(U1&&, U2&&) constructor with U1=int and U2=int. In the
constructor body a temporary long will be created and the p.first member
will bind to that temporary. When the constructor returns, the reference
is immediately dangling. P2255 requires the constructor to be deleted to
prevent this bug.

Although P2255 was approved for C++23, it fixes a longstanding LWG issue
in older standards, and it turns silent runtime undefined behaviour into
a compilation error. Because of that, the dangling checks are applied
all the way back to C++98.  However, if these changes cause too much
code to be rejected (e.g. in cases where the dangling reference is never
used after the constructor returns) then we can consider removing them
for C++20 and older standards.

The affected constructors are deleted for C++20 and later, when concepts
are available to simplify the constructor constraints. For C++17 and
earlier the overload sets are complicated and awkward to maintain, so
the dangling checks are done in static assertions in the constructor
bodies, instead of being SFINAE-friendly constraints. The pre-C++17
assertions are only enabled for Debug Mode, to avoid introducing a
breaking change in Stage 4. We should consider enabling them by default
in Stage 1 for GCC 14.

libstdc++-v3/ChangeLog:

* include/bits/stl_pair.h (pair) [C++20]: Add non-dangling
constraints to constructors and add deleted overloads for the
dangling cases, as per P2255R2.
(pair) [!C++20 && _GLIBCXX_DEBUG]: Add static assertions to
make dangling cases ill-formed.
* testsuite/20_util/pair/dangling_ref.cc: New test.

17 months agotree-ssa-dse: Fix up handling of lhs of internal calls [PR108657]
Jakub Jelinek [Thu, 16 Feb 2023 14:35:05 +0000 (15:35 +0100)]
tree-ssa-dse: Fix up handling of lhs of internal calls [PR108657]

The r13-1778 PR106378 tree-ssa-dse change didn't just add special support
for IFN_LEN_STORE and IFN_MASK_STORE internal function calls as I believe
was intended, but given that the function was
if (is builtin) { ... }
else if (lhs present and non-SSA_NAME) { ... }
return false;
and it added a new
else if (is internal builtin) { ... }
in between the two, the last if used to be done before on all stmts
with non-SSA_NAME lhs except for calls to builtin functions, but newly
isn't done also for calls to internal functions.  In the testcase
the important internal function is .DEFERRED_INIT, which often has
non-SSA_NAME lhs, and the change resulted in them no longer being DSEd,
so a block with nothing in it left but var = .DEFERRED_INIT () and
var = {CLOBBER} was unrolled several times.

The following patch does the lhs handling for all stmts with non-SSA_NAME lhs
unless initialize_ao_ref_for_dse handled those specially already and
returned (which is the case for various mem* builtins which don't have
such lhs, for some cases of calloc which again is fine,and since r13-1778
also for IFN_LEN_STORE call and some IFN_MASK_STORE calls.
As IFN_MASK_STORE doesn't have a lhs, the break for the !may_def_ok case
doesn't seem to change anything, and because we've handled internal fns
that way in the past, I think it is the right thing to do that again.
That said, if it is inappropriate for some new ifn, I guess it could
be added to the switch and just return false; for it instead of break;.

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

PR tree-optimization/108657
* tree-ssa-dse.cc (initialize_ao_ref_for_dse): If lhs of stmt
exists and is not a SSA_NAME, call ao_ref_init even if the stmt
is a call to internal or builtin function.

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

17 months agolibstdc++: Make names_pstl.cc require et tbb_backend
Jonathan Wakely [Thu, 16 Feb 2023 12:18:25 +0000 (12:18 +0000)]
libstdc++: Make names_pstl.cc require et tbb_backend

The https://github.com/oneapi-src/oneTBB/pull/833 fix is needed for TBB
headers to avoid an error with GCC 13. The new names_pstl.cc test needs
to check effective target tbb_backend so that it's UNSUPPORTED on
systems without fixed headers.

libstdc++-v3/ChangeLog:

* testsuite/17_intro/names_pstl.cc: Require et tbb_backend.

17 months agodoc: Suggest fix for -Woverloaded-virtual warnings
Jonathan Wakely [Wed, 15 Feb 2023 13:32:57 +0000 (13:32 +0000)]
doc: Suggest fix for -Woverloaded-virtual warnings

Users are confused about what this warning means, so add a suggested
solution to the documentation.

gcc/ChangeLog:

* doc/invoke.texi (C++ Dialect Options): Suggest adding a
using-declaration to unhide functions.

17 months agolibstdc++: Fix non-reserved names in <ext/throw_allocator.h>
Jonathan Wakely [Thu, 16 Feb 2023 11:32:00 +0000 (11:32 +0000)]
libstdc++: Fix non-reserved names in <ext/throw_allocator.h>

libstdc++-v3/ChangeLog:

* include/ext/throw_allocator.h: Use reserved names for
parameters.

17 months agolibstdc++: Add missing space after effective-target name in test
Jonathan Wakely [Thu, 16 Feb 2023 11:40:35 +0000 (11:40 +0000)]
libstdc++: Add missing space after effective-target name in test

libstdc++-v3/ChangeLog:

* testsuite/17_intro/names_pstl.cc: Add space after effective
target name.

17 months agolibstdc++: Fix non-reserved names in PSTL headers
Jonathan Wakely [Sat, 11 Feb 2023 00:24:47 +0000 (00:24 +0000)]
libstdc++: Fix non-reserved names in PSTL headers

libstdc++-v3/ChangeLog:

* include/pstl/algorithm_fwd.h (__pattern_search_n)
(__brick_unique_copy, __brick_adjacent_find)
(__brick_generate_n, __pattern_generate_n): Use reserved names
for parameters.
* include/pstl/algorithm_impl.h (__brick_unique_copy)
(__pattern_reverse, __brick_generate_n): Likewise.
* include/pstl/execution_impl.h (__prefer_unsequenced_tag)
(__prefer_parallel_tag): Likewise.
* include/pstl/glue_algorithm_impl.h (transform): Likewise.
* include/pstl/glue_numeric_defs.h (adjacent_difference):
Likewise.
* include/pstl/numeric_impl.h (__brick_adjacent_difference):
Likewise.
* include/pstl/parallel_backend_tbb.h (__merge_func): Likewise.
* include/pstl/unseq_backend_simd.h (_Combiner)
(__simd_min_element, __simd_minmax_element): Likewise.
* testsuite/17_intro/names_pstl.cc: New test.

17 months agolibgomp: Fix up some typos in libgomp.texi
Jakub Jelinek [Thu, 16 Feb 2023 11:15:03 +0000 (12:15 +0100)]
libgomp: Fix up some typos in libgomp.texi

I decided to check for repeated the the in libgomp and noticed
there are several occurrences of a typo theads rather than threads
in libgomp.texi.

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

* libgomp.texi: Fix typos - theads -> threads.

17 months agolibgomp: Fix comment typo
Jakub Jelinek [Thu, 16 Feb 2023 11:10:19 +0000 (12:10 +0100)]
libgomp: Fix comment typo

I saw
FAIL: libgomp.fortran/target-nowait-array-section.f90   -O  execution test
in my last x86_64-linux bootstrap.  From quick skimming, it might be just
unreliable test, which assumes that asynchronous execution wouldn't produce
ordered sequence, but can't it happen even with asynchronous execution?

That said, while skimming the test, I've noticed a comment typo and
this patch fixes that up.

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

* testsuite/libgomp.fortran/target-nowait-array-section.f90: Fix
comment typo and improve its wording.

17 months agolibstdc++: Fix uses of non-reserved names in headers
Jonathan Wakely [Fri, 10 Feb 2023 23:16:15 +0000 (23:16 +0000)]
libstdc++: Fix uses of non-reserved names in headers

The non-reserved names 'val' and 'dest' were being used in our headers
but haven't been added to the 17_intro/names.cc test. That's because
they are used by <asm-generic/posix_types.h> and <netinet/tcp.h>
respecitvely on glibc-based systems.

libstdc++-v3/ChangeLog:

* include/bits/fs_ops.h (create_directory): Use reserved name
for parameter.
* include/bits/ranges_algo.h (__contains_subrange_fn):
Likewise.
* include/bits/regex_automaton.h (_State_base::_M_print):
Likewise.
* include/bits/regex_automaton.tcc(_State_base::_M_print):
Likewise.
* include/bits/regex_scanner.tcc(_Scanner::_M_print): Likewise.
* include/experimental/bits/fs_ops.h (create_directory):
Likewise.
* include/std/mutex (timed_mutex::_M_clocklock): Likewise.
(recursive_timed_mutex:_M_clocklock): Likewise.
* include/std/tuple (basic_common_reference): Likewise.
* libsupc++/cxxabi_init_exception.h
(__cxa_init_primary_exception): Likewise.
* testsuite/17_intro/names.cc: Add checks.

17 months agoreassoc: Fix up (ab) handling in eliminate_redundant_comparison [PR108783]
Jakub Jelinek [Thu, 16 Feb 2023 09:41:18 +0000 (10:41 +0100)]
reassoc: Fix up (ab) handling in eliminate_redundant_comparison [PR108783]

The following testcase ICEs because eliminate_redundant_comparison sees
redundant comparisons in &&/|| where the comparison has (ab) SSA_NAME,
maybe_fold_{and,or}_comparisons optimizes them into a single comparison
and build_and_add_sum emits a new comparison close to the definition
operands, which in this case is before a returns_twice call (which is
invalid).  Generally reassoc just punts on (ab) SSA_NAMEs, declares them
non-reassociable etc., so the second half of this patch does that.

Though we can do better in this case; the function has special code
when maybe_fold_{and,or}_comparisons returns INTEGER_CST (false/true)
or when what it returns is the same as curr->op (the first of the
comparisons we are considering) - in that case we just remove the
second one and keep the first one.  The reason it doesn't match is that
curr->op is a SSA_NAME whose SSA_NAME_DEF_STMT is checked to be a
comparison, in this case _42 = a_1(ab) != 0 and the other comparison
is also like that.  maybe_fold_{and,or}_comparisons looks through the
definitions though and so returns a_1(ab) != 0 as tree.
So the first part of the patch checks whether that returned comparison
isn't the same as the curr->op comparison and if yes, it just overrides
t back to curr->op so that its SSA_NAME is reused.  In that case we can
handle even (ab) in {,new}op{1,2} because we don't create a new comparison
of that, just keep using the existing one.  And t can't be (ab) because
otherwise it wouldn't be considered a reassociable operand.

The (ab) checks are needed say when we have a_1(ab) == 42 || a_1(ab) > 42
kind of comparisons where maybe_fold_{and,or}_comparisons returns a new
comparison not existing in the IL yet.

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

PR tree-optimization/108783
* tree-ssa-reassoc.cc (eliminate_redundant_comparison): If lcode
is equal to TREE_CODE (t), op1 to newop1 and op2 to newop2, set
t to curr->op.  Otherwise, punt if either newop1 or newop2 are
SSA_NAME_OCCURS_IN_ABNORMAL_PHI SSA_NAMEs.

* gcc.c-torture/compile/pr108783.c: New test.

17 months agotree-optimization/108791 - checking ICE with sloppy ADDR_EXPR
Richard Biener [Wed, 15 Feb 2023 13:00:21 +0000 (14:00 +0100)]
tree-optimization/108791 - checking ICE with sloppy ADDR_EXPR

The following fixes a checking ICE by choosing a more appropriate
type for an ADDR_EXPR built by forwprop.

PR tree-optimization/108791
* tree-ssa-forwprop.cc (optimize_vector_load): Build
the ADDR_EXPR of a TARGET_MEM_REF using a more meaningful
type.

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

17 months agoobjs-gcc.sh: Only bootstrap if source-directory contains gcc
Hans-Peter Nilsson [Tue, 14 Feb 2023 17:29:50 +0000 (18:29 +0100)]
objs-gcc.sh: Only bootstrap if source-directory contains gcc

I use objs-gcc.sh as a preparatory step before calling
btest-gcc.sh in my scripts, for example my cris-elf
autotester.  I thought, why not use it for native builds
too.  Except that use, with binutils release-style tarballs
and a x86_64-pc-linux-gnu host, was broken.  Now that I look
at it, the script seems to have aged poorly...  Still,
there's a need for such a script to install stuff needed for
btest-gcc.sh (and to fix up stuff if needed), and this can
still be that script.  So, I prefer to fix show-stoppers for
common uses, while taking care to retain compatibility for
use that could possibly still work, with current sources.

A long time ago (before 2011, but after this script was
created in 2002, and used for a few years), the binutils
(and gdb and gcc) toplevel Makefile may have had a bootstrap
target that worked with binutils but didn't require gcc
sources to be present.  Now, you'll get an error (see
configure.ac line 1366 and on).  Let's just build the
default make-target when "bootstrap" is known to fail.
An alternative would be to fold this native
non-i686-pc-linux-gnu clause into the native
i686-pc-linux-gnu clause, as that seems to have been
originally intended as *the* single native clause, but
that'd require further edits (e.g. to remove install-dejagnu
and make gdb build conditional on gdb sources presence, to
work with binutils tarballs, and I'd also then prefer to
build not just ld, but also gas and binutils).

As it's a minimal obvious change required for current native
use with release-tarballs and git-checkout use(*), I'm
installing this as obvious.

*) Native i686-pc-linux-gnu remains broken for other use
than specially constructed combined trees where dejagnu is
included at the toplevel (i.e. historic Cygnus devo-type).

contrib/regression:
* objs-gcc.sh: Only bootstrap if source-directory contains gcc.

17 months agotestsuite: Add CRIS to check_effective_target_lra non-LRA list
Hans-Peter Nilsson [Thu, 16 Feb 2023 00:22:15 +0000 (01:22 +0100)]
testsuite: Add CRIS to check_effective_target_lra non-LRA list

gcc/testsuite:

* lib/target-supports.exp (check_effective_target_lra): Add CRIS
as a non-LRA target.

17 months agoDaily bump.
GCC Administrator [Thu, 16 Feb 2023 00:18:19 +0000 (00:18 +0000)]
Daily bump.

17 months agoFix PR target/90458
Eric Botcazou [Wed, 15 Feb 2023 22:32:12 +0000 (23:32 +0100)]
Fix PR target/90458

This is the incompatibility of -fstack-clash-protection with Windows SEH.
Now the Windows ports always enable TARGET_STACK_PROBE, which means that
the stack is always probed (out of line) so -fstack-clash-protection does
nothing more.

gcc/
PR target/90458
* config/i386/i386.cc (ix86_compute_frame_layout): Disable the
effects of -fstack-clash-protection for TARGET_STACK_PROBE.
(ix86_expand_prologue): Likewise.

17 months agoFix an accidental double space
Jan-Benedict Glaw [Wed, 15 Feb 2023 22:00:46 +0000 (23:00 +0100)]
Fix an accidental double space

gcc/
* config/bpf/bpf.cc (bpf_option_override): Fix doubled space.

17 months agoFortran: error recovery on checking procedure argument intent [PR103608]
Steve Kargl [Wed, 15 Feb 2023 21:40:37 +0000 (22:40 +0100)]
Fortran: error recovery on checking procedure argument intent [PR103608]

gcc/fortran/ChangeLog:

PR fortran/103608
* frontend-passes.cc (do_intent): Catch NULL pointer dereference on
reference to invalid formal argument.

gcc/testsuite/ChangeLog:

PR fortran/103608
* gfortran.dg/pr103608.f90: New test.

17 months agoFortran: error recovery on invalid assumed size reference [PR104554]
Steve Kargl [Wed, 15 Feb 2023 21:20:22 +0000 (22:20 +0100)]
Fortran: error recovery on invalid assumed size reference [PR104554]

gcc/fortran/ChangeLog:

PR fortran/104554
* resolve.cc (check_assumed_size_reference): Avoid NULL pointer
dereference.

gcc/testsuite/ChangeLog:

PR fortran/104554
* gfortran.dg/pr104554.f90: New test.

17 months agoi386: Relax extract location operand mode requirements
Uros Bizjak [Wed, 15 Feb 2023 20:34:59 +0000 (21:34 +0100)]
i386: Relax extract location operand mode requirements

There is no requirement on the mode of the location operand, so any
supported integer mode is valid.  We can relax extract location
operand mode requirement of other patterns involving zero_extract RTX.

2023-02-15  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:

* config/i386/i386.md (*cmpqi_ext<mode>_1): Use
int248_register_operand predicate in zero_extract sub-RTX.
(*cmpqi_ext<mode>_2): Ditto.
(*cmpqi_ext<mode>_3): Ditto.
(*cmpqi_ext<mode>_4): Ditto.
(*extzvqi_mem_rex64): Ditto.
(*extzvqi): Ditto.
(*insvqi_1_mem_rex64): Ditto.
(@insv<mode>_1): Ditto.
(*insvqi_1): Ditto.
(*insvqi_2): Ditto.
(*insvqi_3): Ditto.
(*extendqi<SWI24:mode>_ext_1): Ditto.
(*addqi_ext<mode>_1): Ditto.
(*addqi_ext<mode>_2): Ditto.
(*subqi_ext<mode>_2): Ditto.
(*testqi_ext<mode>_1): Ditto.
(*testqi_ext<mode>_2): Ditto.
(*andqi_ext<mode>_1): Ditto.
(*andqi_ext<mode>_1_cc): Ditto.
(*andqi_ext<mode>_2): Ditto.
(*<any_or:code>qi_ext<mode>_1): Ditto.
(*<any_or:code>qi_ext<mode>_2): Ditto.
(*xorqi_ext<mode>_1_cc): Ditto.
(*negqi_ext<mode>_2): Ditto.
(*ashlqi_ext<mode>_2): Ditto.
(*<any_shiftrt:insn>qi_ext<mode>_2): Ditto.

17 months agoanalyzer: fix uninit false +ves [PR108664,PR108666,PR108725]
David Malcolm [Wed, 15 Feb 2023 19:52:02 +0000 (14:52 -0500)]
analyzer: fix uninit false +ves [PR108664,PR108666,PR108725]

This patch updates poisoned_value_diagnostic so that, where possible,
it checks to see if the value is still poisoned along the execution
path seen during feasibility analysis, rather than just that seen
in the exploded graph.

Integration testing shows this reduction in the number of
false positives:
  -Wanalyzer-use-of-uninitialized-value: 191 -> 153 (-38)
where the changes happen in:
      coreutils-9.1: 34 -> 20 (-14)
         qemu-7.2.0: 78 -> 54 (-24)

gcc/analyzer/ChangeLog:
PR analyzer/108664
PR analyzer/108666
PR analyzer/108725
* diagnostic-manager.cc (epath_finder::get_best_epath): Add
"target_stmt" param.
(epath_finder::explore_feasible_paths): Likewise.
(epath_finder::process_worklist_item): Likewise.
(saved_diagnostic::calc_best_epath): Pass m_stmt to
epath_finder::get_best_epath.
* engine.cc (feasibility_state::maybe_update_for_edge): Move
per-stmt logic to...
(feasibility_state::update_for_stmt): ...this new function.
* exploded-graph.h (feasibility_state::update_for_stmt): New decl.
* feasible-graph.cc (feasible_node::get_state_at_stmt): New.
* feasible-graph.h: Include "analyzer/exploded-graph.h".
(feasible_node::get_state_at_stmt): New decl.
* infinite-recursion.cc
(infinite_recursion_diagnostic::check_valid_fpath_p): Update for
vfunc signature change.
* pending-diagnostic.h (pending_diagnostic::check_valid_fpath_p):
Convert first param to a reference.  Add stmt param.
* region-model.cc: Include "analyzer/feasible-graph.h".
(poisoned_value_diagnostic::poisoned_value_diagnostic): Add
"check_expr" param.
(poisoned_value_diagnostic::check_valid_fpath_p): New.
(poisoned_value_diagnostic::m_check_expr): New field.
(region_model::check_for_poison): Attempt to supply a check_expr
to the diagnostic
(region_model::deref_rvalue): Add NULL for new check_expr param
of poisoned_value_diagnostic.
(region_model::get_or_create_region_for_heap_alloc): Don't reuse
regions that are marked as TOUCHED.

gcc/testsuite/ChangeLog:
PR analyzer/108664
PR analyzer/108666
PR analyzer/108725
* gcc.dg/analyzer/coreutils-cksum-pr108664.c: New test.
* gcc.dg/analyzer/coreutils-sum-pr108666.c: New test.
* gcc.dg/analyzer/torture/uninit-pr108725.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
17 months agotestsuite/i386: Cleanup target selectors in i386 target directory.
Uros Bizjak [Wed, 15 Feb 2023 15:30:51 +0000 (16:30 +0100)]
testsuite/i386: Cleanup target selectors in i386 target directory.

gcc/testsuite/ChangeLog:

2023-02-15  Uroš Bizjak  <ubizjak@gmail.com>

* g++.target/i386/empty-class2.C (dg-additional-options): Remove.
* gcc.target/i386/avx512fp16-reduce-op-2.c: Ditto.
* gcc.target/i386/pr99464.c: Ditto.
* gcc.target/i386/pr103541.c (dg-do): Compile for !ia32 target.
* gcc.target/i386/pr108774.c (dg-do): Compile for lp64 target.
* gcc.target/i386/pr85593.c (dg-do): Run for *-*-linux* target.
* gcc.target/i386/pr98063.c: Ditto.
* gcc.target/i386/pr90007.c (dg-do): Remove target selector.
* gcc.target/i386/pr92841-2.c (dg-do): Remove unneeded curly braces.
* gcc.target/i386/pr95464.c: Ditto.
* gcc.target/i386/pr99530-1.c (dg-do): Compile for *-*-linux* target.
* gcc.target/i386/pr99530-2.c: Ditto.
* gcc.target/i386/pr99530-3.c: Ditto.
* gcc.target/i386/pr99530-4.c: Ditto.
* gcc.target/i386/pr99530-5.c: Ditto.
* gcc.target/i386/pr99530-6.c: Ditto.
* gcc.target/i386/pr99531.c (dg-do): Compile for !ia32 target.

17 months agoi386: Rename extr_register_operand to int248_register_operand
Uros Bizjak [Wed, 15 Feb 2023 15:24:29 +0000 (16:24 +0100)]
i386: Rename extr_register_operand to int248_register_operand

No functional changes.

gcc/ChangeLog:

2023-02-15  Uroš Bizjak  <ubizjak@gmail.com>

* config/i386/predicates.md (int248_register_operand):
Rename from extr_register_operand.
* config/i386/i386.md (*extv<mode>): Update for renamed predicate.
(*extzx<mode>): Ditto.
(*ashl<dwi>3_doubleword_mask): Use int248_register_operand predicate.
(*ashl<mode>3_mask): Ditto.
(*<any_shiftrt:insn><mode>3_mask): Ditto.
(*<any_shiftrt:insn><dwi>3_doubleword_mask): Ditto.
(*<any_rotate:insn><mode>3_mask): Ditto.
(*<btsc><mode>_mask): Ditto.
(*btr<mode>_mask): Ditto.
(*jcc_bt<mode>_mask_1): Ditto.

17 months agoSpeedup DF dataflow solver
Richard Biener [Tue, 14 Feb 2023 13:46:47 +0000 (14:46 +0100)]
Speedup DF dataflow solver

The following makes sure to process blocks that follow the current
block in the iteration order in the same iteration and only postpone
blocks that would be visited earlier to the next iteration.

For the all.i testcase in PR26854 at -O2 this shaves off 50% of
the time to solve the DF RD problem, other problems also improve
but not as drastically.

PR middle-end/26854
* df-core.cc (df_worklist_propagate_forward): Put later
blocks on worklist and only earlier blocks on pending.
(df_worklist_propagate_backward): Likewise.
(df_worklist_dataflow_doublequeue): Change the iteration
to process new blocks in the same iteration if that
maintains the iteration order.

17 months agowarn-access: wrong -Wdangling-pointer with labels [PR106080]
Marek Polacek [Tue, 14 Feb 2023 22:05:44 +0000 (17:05 -0500)]
warn-access: wrong -Wdangling-pointer with labels [PR106080]

-Wdangling-pointer warns when the address of a label escapes.  This
causes grief in OCaml (<https://github.com/ocaml/ocaml/issues/11358>) as
well as in the kernel:
<https://bugzilla.kernel.org/show_bug.cgi?id=215851> because it uses

  #define _THIS_IP_  ({ __label__ __here; __here: (unsigned long)&&__here; })

to get the PC.  -Wdangling-pointer is documented to warn about pointers
to objects.  However, it uses is_auto_decl which checks DECL_P, but DECL_P
is also true for a label/enumerator/function declaration, none of which is
an object.  Rather, it should use auto_var_p which correctly checks VAR_P
and PARM_DECL.

PR middle-end/106080

gcc/ChangeLog:

* gimple-ssa-warn-access.cc (is_auto_decl): Remove.  Use auto_var_p
instead.

gcc/testsuite/ChangeLog:

* c-c++-common/Wdangling-pointer-10.c: New test.
* c-c++-common/Wdangling-pointer-9.c: New test.