2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-03-20 06:50:26 +08:00

184122 Commits

Author SHA1 Message Date
Jakub Jelinek
9c7473688e dse: Fix up hard reg conflict checking in replace_read [PR99863]
Since PR37922 fix RTL DSE has hard register conflict checking
in replace_read, so that if the replacement sequence sets (or typically just
clobbers) some hard register (usually condition codes) we verify that
hard register is not live.
Unfortunately, it compares the hard reg set clobbered/set by the sequence
(regs_set) against the currently live hard register set, but it then
emits the insn sequence not at the current insn position, but before
store_insn->insn.
So, we should not compare against the current live hard register set,
but against the hard register live set at the point of the store insn.
Fortunately, we already have that remembered in store_insn->fixed_regs_live.

In addition to bootstrapping/regtesting this patch on x86_64-linux and
i686-linux, I've also added statistics gathering and it seems the only
place where we end up rejecting the replace_read is the newly added
testcase (the PR37922 is no longer effective at that) and fixed_regs_live
has been always non-NULL at the if (store_insn->fixed_regs_live) spot.
Rather than having there an assert, I chose to just keep regs_set
as is, which means in that hypothetical case where fixed_regs_live wouldn't
be computed for some store we'd still accept sequences that don't
clobber/set any hard registers and just punt on those that clobber/set
those.

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

	PR rtl-optimization/99863
	* dse.c (replace_read): Drop regs_live argument.  Instead of
	regs_live, use store_insn->fixed_regs_live if non-NULL,
	otherwise punt if insns sequence clobbers or sets any hard
	registers.

	* gcc.target/i386/pr99863.c: New test.
2021-04-03 10:07:09 +02:00
Jakub Jelinek
cda41ce0e8 rs6000: Fix up libgcc ABI when built with --with-long-double-format=ieee [PR97653]
__floatunditf and __fixtfdi and a couple of other libgcc{.a,_s.so}
entrypoints for backwards compatibility should mean IBM double double
handling (i.e. IFmode), gcc emits such calls for that format and
form IEEE long double emits *kf* instead.
When gcc is configured without --with-long-double-format=ieee ,
everything is fine, but when it is not, we need to compile those
libgcc sources with -mno-gnu-attribute -mabi=ibmlongdouble.
The following snippet in libgcc/config/rs6000/t-linux was attempting
to ensure that, and for some routines it works fine (e.g. for _powitf2).
But, due to 4 different types of bugs it doesn't work for most of those
functions, which means that in --with-long-double-format=ieee
configured gcc those *tf* entrypoints instead handle the long double
arguments as if they were KFmode.

The bugs are:
1) the first few objs properly use $(objext) as suffix, but
   several other contain a typo and use $(object) instead,
   which is a variable that isn't set to anything, so we don't
   add .o etc. extensions
2) while unsigned fix are properly called _fixuns*, unsigned float
   are called _floatun* (without s), but the var was using there
   the extra s and so didn't match
3) the variable didn't cover any of the TF <-> TI conversions,
   only TF <-> DI conversions
4) nothing in libgcc_s.so was handled, as those object files are
   called *_s.o rather than *.o and IBM128_SHARED_OBJS used wrong
   syntax of the GNU make substitution reference, which should be
   $(var:a=b) standing for $(patsubst a,b,$(var)) but it used
   $(var🅰️b) instead

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

	PR target/97653
	* config/rs6000/t-linux (IBM128_STATIC_OBJS): Fix spelling, use
	$(objext) instead of $(object).  Use _floatunditf instead of
	_floatunsditf.  Add tf <-> ti conversion objects.
	(IBM128_SHARED_OBJS): Use proper substitution reference syntax.
2021-04-03 10:05:32 +02:00
Jakub Jelinek
b680b90497 rs6000: Avoid -fpatchable-function-entry* regressions on powerpc64 be [PR98125]
The SECTION_LINK_ORDER changes broke powerpc64-linux ELFv1.  Seems
that the assembler/linker relies on the symbol mentioned for the
"awo" section to be in the same section as the symbols mentioned in
the relocations in that section (i.e. labels for the patchable area
in this case).  That is the case for most targets, including powerpc-linux
32-bit or powerpc64 ELFv2 (that one has -fpatchable-function-entry*
support broken for other reasons and it doesn't seem to be a regression).
But it doesn't work on powerpc64-linux ELFv1.
We emit:
        .section        ".opd","aw"
        .align 3
_Z3foov:
        .quad   .L._Z3foov,.TOC.@tocbase,0
        .previous
        .type   _Z3foov, @function
.L._Z3foov:
        .section        __patchable_function_entries,"awo",@progbits,_Z3foov
        .align 3
        .8byte  .LPFE1
        .section        .text._Z3foov,"axG",@progbits,_Z3foov,comdat
.LPFE1:
        nop
.LFB0:
        .cfi_startproc
and because _Z3foov is in the .opd section rather than the function text
section, it doesn't work.

I'm afraid I don't know what exactly should be done, whether e.g.
it could use
        .section        __patchable_function_entries,"awo",@progbits,.L._Z3foov
instead, or whether the linker should be changed to handle it as is, or
something else.

But because we have a P1 regression that didn't see useful progress over the
4 months since it has been filed and we don't really have much time, below
is an attempt to do a targetted reversion of H.J's patch, basically act as
if HAVE_GAS_SECTION_LINK_ORDER is never true for powerpc64-linux ELFv1,
but for 32-bit or 64-bit ELFv2 keep working as is.
This would give us time to resolve it for GCC 12 properly.

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

	PR testsuite/98125
	* targhooks.h (default_print_patchable_function_entry_1): Declare.
	* targhooks.c (default_print_patchable_function_entry_1): New function,
	copied from default_print_patchable_function_entry with an added flags
	argument.
	(default_print_patchable_function_entry): Rewritten into a small
	wrapper around default_print_patchable_function_entry_1.
	* config/rs6000/rs6000.c (TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY):
	Redefine.
	(rs6000_print_patchable_function_entry): New function.

	* g++.dg/pr93195a.C: Skip on powerpc*-*-* 64-bit.
2021-04-03 10:03:15 +02:00
Jason Merrill
04771106cd c++: NRV in lambda in template [PR91217]
tsubst_lambda_expr was producing a function with two blocks that claimed to
be the outermost block in the function body, one from the call to
start_lambda_function in tsubst_lambda_expr, and one from tsubsting the
block added by start_lambda_function when we first parsed the lambda.  This
messed with the named return value optimization, which only works for
variables in the outermost block.

gcc/cp/ChangeLog:

	PR c++/91217
	* pt.c (tsubst_lambda_expr): Skip the body block from
	DECL_SAVED_TREE.

gcc/testsuite/ChangeLog:

	PR c++/91217
	* g++.dg/opt/nrv20.C: New test.
2021-04-03 01:54:03 -04:00
Jason Merrill
7c3ba2145c c++: PMF template parm and noexcept [PR90664]
The constexpr code only wants to preserve PTRMEM_CST in conversions if the
conversions are only qualification conversions; dropping noexcept counts as
a qualification adjustment in overload resolution, so let's include it here.

gcc/cp/ChangeLog:

	PR c++/90664
	* cvt.c (can_convert_qual): Check fnptr_conv_p.

gcc/testsuite/ChangeLog:

	PR c++/90664
	* g++.dg/cpp1z/noexcept-type24.C: New test.
2021-04-03 01:54:03 -04:00
Jason Merrill
23be03a0f2 c++: dependent attribute on parameter [PR97900]
We were copying attributes from the template to the instantiation without
considering that they might be dependent.  To make sure that the new parms
have the appropriate properties for the code pattern, let's just regenerate
them.

gcc/cp/ChangeLog:

	PR c++/97900
	* pt.c (regenerate_decl_from_template): tsubst_decl
	the parms.

gcc/testsuite/ChangeLog:

	PR c++/97900
	* g++.dg/ext/vector40.C: New test.
2021-04-03 01:54:03 -04:00
GCC Administrator
b7c1f3d66c Daily bump. 2021-04-03 00:16:28 +00:00
Patrick Palka
260caabe10 c++: placeholder type constraint inside range-for [PR99869]
In the testcase below, during ahead-of-time deduction of a constrained
auto inside a range-based for loop, we trip over an assert within
do_auto_deduction which expects the deduction context to be
adc_return_type or adc_variable_type, but do_range_for_auto_deduction
calls do_auto_deduction with the context defaulted to adc_unspecified.

We could safely relax the assert to also accept adc_unspecified, but it
seems the deduction context should really be adc_variable_type here.

gcc/cp/ChangeLog:

	PR c++/99869
	* parser.c (do_range_for_auto_deduction): Pass adc_variable_type
	to do_auto_deduction.

gcc/testsuite/ChangeLog:

	PR c++/99869
	* g++.dg/cpp2a/concepts-placeholder6.C: New test.
2021-04-02 19:47:19 -04:00
Patrick Palka
cf25e27fae c++: Refine check for CTAD placeholder [PR99586]
In the below testcase, during finish_compound_literal for A<B{V}>{},
type_uses_auto finds and returns the CTAD placeholder for B{V}, which
tricks us into attempting CTAD on A<B{V}>{} and leads to bogus errors.

AFAICT 'type' will always be a bare 'auto' in the CTAD case so we don't
need to look deeply to find it; checking template_placeholder_p instead
should suffice here.

gcc/cp/ChangeLog:

	PR c++/99586
	* semantics.c (finish_compound_literal): Check
	template_placeholder_p instead of type_uses_auto.

gcc/testsuite/ChangeLog:

	PR c++/99586
	* g++.dg/cpp2a/nontype-class42.C: New test.
2021-04-02 19:47:09 -04:00
Jason Merrill
2a26351b59 c++: lambda pack init-capture within generic lambda
We represent the type of a pack init-capture as auto... with packs from the
initializer stuck into PACK_EXPANSION_PARAMETER_PACKS so that expanding it
produces the right number of elements.  But when partially instantiating the
auto..., we were changing PACK_EXPANSION_PARAMETER_PACKS to refer to only
the auto itself.  Fixed thus.

gcc/cp/ChangeLog:

	PR c++/97938
	* cp-tree.h (PACK_EXPANSION_AUTO_P): New.
	* lambda.c (add_capture): Set it.
	* pt.c (tsubst_pack_expansion): Handle it.

gcc/testsuite/ChangeLog:

	PR c++/97938
	* g++.dg/cpp2a/lambda-pack-init6.C: New test.
2021-04-02 12:46:54 -04:00
Nathan Sidwell
f4e05eebd6 c++: header unit purview [PR 99283]
This case occurs due to some equivocation about module_purview.
Header-unit building is treated as a module-purview, but we should not
treat entities imported from that as module purview.  (header units
were not a thing when I started).  The testcase didn't understand we
had a local textual definition, but it was (incorrectly) marked as
module-purview, because we'd read in a declaration from a header unit
too.

	gcc/cp/
	* cp-tree.h (lang_decl_base): Correct module flag comment.
	* module.cc (trees_in::assert_definition): Break out
	not_tmpl var.
	(trees_out::lang_decl_bools): Do not write purview for header units.
	gcc/testsuite/
	* g++.dg/modules/pr99283-6_d.H: New.
	* g++.dg/modules/pr99283-7-swap.h: New.
	* g++.dg/modules/pr99283-7-traits.h: New.
	* g++.dg/modules/pr99283-7_a.H: New.
	* g++.dg/modules/pr99283-7_b.H: New.
	* g++.dg/modules/pr99283-7_c.C: New.
	* g++.dg/modules/pr99283-7_d.H: New.
2021-04-02 09:08:28 -07:00
Eric Botcazou
c844918279 Minor tweak to description of fdelete-dead-exceptions
gcc/
	* doc/invoke.texi (fdelete-dead-exceptions): Minor tweak.
2021-04-02 10:47:07 +02:00
Eric Botcazou
f1f7e54fb3 Skip couple of Go tests on 32-bit SPARC
Since they are already skipped on other 32-bit architectures.

gcc/testsuite/
	* go.test/test/fixedbugs/issue6036.go: Skip on sparc.
	* go.test/test/fixedbugs/issue22200b.go: Likewise.
2021-04-02 10:47:07 +02:00
Jakub Jelinek
e53c069611 testsuite: Fix up gcc.target/i386/pr99726.c test [PR99726]
-m32 shouldn't be used in gcc.target/i386/ testcases, people do
test with -m32/-m64 to get 32-bit compilation tested.
And, -floop-nest-optimize is a graphite optimization, so might not
be enabled in all gcc builds.

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

	PR tree-optimization/99726
	* gcc.target/i386/pr99726.c: Remove -m32 from dg-options.  Move
	-floop-nest-optimize to dg-additional-options guarded on fgraphite
	effective target.
2021-04-02 10:07:50 +02:00
GCC Administrator
f1607029ae Daily bump. 2021-04-02 00:16:26 +00:00
David Malcolm
6e943d5a2e analyzer: record per-enode saved_diagnostics
Various places iterate through all of the saved_diagnostics to find
just the ones that are at a given enode.  This patch adds a per-enode
record of the diagnostics that are at each node, to save iterating
through all of the diagnostics each time.

gcc/analyzer/ChangeLog:
	* diagnostic-manager.cc (diagnostic_manager::add_diagnostic): Make
	enode param non-constant, and call add_diagnostic on it.  Add
	enode index to log message.
	(diagnostic_manager::add_diagnostic): Make enode param
	non-constant.
	* diagnostic-manager.h (diagnostic_manager::add_diagnostic):
	Likewise for both decls.
	* engine.cc
	(impl_region_model_context::impl_region_model_context): Likewise
	for enode_for_diag.
	(impl_sm_context::impl_sm_context): Likewise.
	(impl_sm_context::m_enode_for_diag): Likewise.
	(exploded_node::dump_dot): Don't pass the diagnostic manager
	to dump_saved_diagnostics.
	(exploded_node::dump_saved_diagnostics): Drop param.  Iterate
	directly through all saved diagnostics for the enode, rather
	than all saved diagnostics in the diagnostic_manager and
	filtering.
	(exploded_node::on_stmt): Make non-const.
	(exploded_node::on_edge): Likewise.
	(exploded_node::on_longjmp): Likewise.
	(exploded_node::detect_leaks): Likewise.
	(exploded_graph::get_or_create_node): Make enode_for_diag param
	non-const.
	(exploded_graph_annotator::print_enode): Iterate
	directly through all saved diagnostics for the enode, rather
	than all saved diagnostics in the diagnostic_manager and
	filtering.
	* exploded-graph.h
	(impl_region_model_context::impl_region_model_context): Make
	enode_for_diag param non-constant.
	(impl_region_model_context::m_enode_for_diag): Likewise.
	(exploded_node::dump_saved_diagnostics): Drop param.
	(exploded_node::on_stmt): Make non-const.
	(exploded_node::on_edge): Likewise.
	(exploded_node::on_longjmp): Likewise.
	(exploded_node::detect_leaks): Likewise.
	(exploded_node::add_diagnostic): New.
	(exploded_node::get_num_diagnostics): New.
	(exploded_node::get_saved_diagnostic): New.
	(exploded_node::m_saved_diagnostics): New.
	(exploded_graph::get_or_create_node): Make enode_for_diag param
	non-constant.
	* feasible-graph.cc (feasible_node::dump_dot): Drop
	diagnostic_manager from call to dump_saved_diagnostics.
	* program-state.cc (program_state::on_edge): Convert enode param
	to non-const pointer.
	(program_state::prune_for_point): Likewise for enode_for_diag
	param.
	* program-state.h (program_state::on_edge): Convert enode param
	to non-const pointer.
	(program_state::prune_for_point): Likewise for enode_for_diag
	param.
2021-04-01 18:22:52 -04:00
Marek Polacek
6a60ffc297 c++: GC collects live data when synthesizing operator== [PR99831]
Here we crash in reshape_init because we're accessing ggc_freed
& poisoned data: since r277865 in defaulted_late_check we call
synthesize_method here:

  if (kind == sfk_comparison)
    {
      /* If the function was declared constexpr, check that the definition
         qualifies.  Otherwise we can define the function lazily.  */
      if (DECL_DECLARED_CONSTEXPR_P (fn) && !DECL_INITIAL (fn))
        synthesize_method (fn);
      return;
    }

which in this test triggers when we're processing the string<"a">{} in
the static_assert.  First, we create a CONSTRUCTOR for the "{}" in
cp_parser_functional_cast, then we call finish_compound_literal which
calls complete_type and that results in garbage collection, which then
frees the CONSTRUCTOR {} we created when parsing the braced-list in
string<"a">{} -- at this point, it's not referenced by anything.
(That's not the case for 'type' in finish_compound_literal: the symbol
table contains a node for operator==, so ggc_mark_roots goes and marks
the fn decl, its type, its arguments etc., as used, so we don't collect
it.)

We could just bump function_depth around the new call to synthesize_method
to prevent GC.

gcc/cp/ChangeLog:

	PR c++/99831
	* method.c (defaulted_late_check): ++ and -- function_depth around
	the call to synthesize_method.
	* pt.c: Remove the saved_trees global.

gcc/testsuite/ChangeLog:

	PR c++/99831
	* g++.dg/other/gc6.C: New test.
2021-04-01 17:04:15 -04:00
Jason Merrill
0cf4813202 c++: variadic lambda noexcept-specifier [PR99583]
The tree-walk looking for parameter packs didn't find this one because we
weren't stepping into TYPE_RAISES_EXCEPTIONS.

gcc/cp/ChangeLog:

	PR c++/99583
	PR c++/99584
	* tree.c (cp_walk_subtrees) [FUNCTION_TYPE]: Walk into
	TYPE_RAISES_EXCEPTIONS.

gcc/testsuite/ChangeLog:

	PR c++/99583
	* g++.dg/cpp0x/lambda/lambda-variadic12.C: New test.
2021-04-01 16:04:54 -04:00
Iain Sandoe
af78514a18 modules : Make sure we include <map> in system.h.
It appears that many targets include the map header transitively in
other std headers included from system.h.  However there are some
editions of clang/libc++ in Xcode that do not, which results in a
bootstrap fail - since when resolver.h is included  there is then a
conflict in declaring abort().

The fix is to ensure that map is pulled in by system.h and before
resolver.h is included.  As a precautionary measure and to alert
anyone perhaps adding another header to resolver.h this patch also
gates the direct includes there on !IN_GCC.

c++tools/ChangeLog:

	* resolver.h: Do not include std headers directly when
	building in GCC.

gcc/cp/ChangeLog:

	* mapper-client.cc (INCLUDE_MAP): New; require map to be
	included from system.h.
	* mapper-resolver.cc (INCLUDE_MAP): Likewise.
2021-04-01 19:32:16 +01:00
Jason Merrill
5f00df5925 c++: Add ABI version for PR98481 fix
The PR98481 fix corrects an ABI regression in GCC 10, but we don't want to
introduce an ABI change in the middle of the GCC 10 cycle.  This patch
introduces ABI v15 for the fix, which will be available but not default in
GCC 10.3; the broken behavior remains in ABI v14.  Compatibility aliases
will not be generated for this change.

gcc/ChangeLog:

	PR c++/98481
	* common.opt: Document v15 and v16.

gcc/c-family/ChangeLog:

	PR c++/98481
	* c-opts.c (c_common_post_options): Bump latest_abi_version.

gcc/cp/ChangeLog:

	PR c++/98481
	* mangle.c (write_expression): Adjust.
	* class.c (find_abi_tags_r): Disable PR98481 fix for ABI v14.
	(mark_abi_tags_r): Likewise.

gcc/testsuite/ChangeLog:

	PR c++/98481
	* g++.dg/abi/abi-tag24a.C: New test.
	* g++.dg/abi/macro0.C: Adjust expected value.
2021-04-01 10:04:38 -04:00
Nathan Sidwell
584731eced c++: inter-cluster import order [PR 99283]
I finally managed to reduce the testcase without hitting other bugs.
This problem is caused by discovering a duplicate in the middle of
reading in the entity in question.  I had thougt the import seeding at
the beginning of a cluster prevented that, but it is insufficient.
Specifically an earlier cluster in the same module can cause the
import of a duplicate.  Although clusters within a module are
well-ordered, there is no ordering between clusters of one module and
clusters of another module.  And thus we can get duplicate declaration
loops.  This prevents the problem by also seeding references to
earlier clusters in the same module.  As the FIXME notes, it is
sufficient to reference a single entity in any particular earlier
cluster, plus, we also could determine the implicit dependencies and
prune that seeding even further.  I do not do that -- it decrease the
loading that will happen, but would reduce the serialization size.  As
ever, let's get correctness first.

	PR c++/99283
	gcc/cp/
	* module.cc (trees_out::decl_node): Adjust importedness reference
	assert.
	(module_state::intercluster_seed): New.  Seed both imports and
	inter-cluster references.  Broken out of ...
	(module_state::write_cluster): ... here.  Call it.
	gcc/testsuite/
	* g++.dg/modules/pr99283-6.h: New.
	* g++.dg/modules/pr99283-6_a.H: New.
	* g++.dg/modules/pr99283-6_b.H: New.
	* g++.dg/modules/pr99283-6_c.C: New.
	* g++.dg/modules/hdr-init-1_c.C: Adjust scan.
	* g++.dg/modules/indirect-3_c.C: Adjust scan.
	* g++.dg/modules/indirect-4_c.C: Adjust scan.
	* g++.dg/modules/lambda-3_b.C: Adjust scan.
	* g++.dg/modules/late-ret-3_c.C: Adjust scan.
	* g++.dg/modules/pr99425-1_b.H: Adjust scan.
	* g++.dg/modules/pr99425-1_c.C: Adjust scan.
2021-04-01 05:37:51 -07:00
Richard Biener
512429a885 tree-optimization/99863 - clear vector CTOR TREE_SIDE_EFFECTS
When we gimplify a vector CTOR the original CONSTRUCTOR tree remains
but we fail to recompute flags such as TREE_SIDE_EFFECTS.  This causes
later GENERIC folding of them in vector lowering to give up since
the match.pd machinery is careful about TREE_SIDE_EFFECTS.

Fixing this makes vector lowering produce much less garbage and
thus following the IL for PR99793 easier.

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

	PR tree-optimization/99863
	* gimplify.c (gimplify_init_constructor): Recompute vector
	constructor flags.
2021-04-01 12:46:48 +02:00
Jan Hubicka
3064fc21aa Add testcase for PR98265
gcc/testsuite/ChangeLog:

2021-04-01  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/98265
	* gcc.dg/tree-ssa/pr98265.C: New test.
2021-04-01 12:11:39 +02:00
Jakub Jelinek
7b478ede2a doc: Fix up symver attribute documentation
When looking at the symver documentation, I've noticed a couple of
syntax errors in it.

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

	* doc/extend.texi (symver attribute): Fix up syntax errors
	in the examples.
2021-04-01 11:04:12 +02:00
Jakub Jelinek
5b9a65ecbe bswap: Handle bswapping of pointers [PR96573]
In GCC8/9 we used to optimize this into a bswap, but we no longer do.
Handling byteswapping of pointers is easy, all we need is to allow them,
for the __builtin_bswap* we already use TYPE_PRECISION to determine
the precision and we cast the operand and result to the correct type
if they aren't uselessly convertible to what the builtin expects.

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

	PR tree-optimization/96573
	* gimple-ssa-store-merging.c (init_symbolic_number): Handle
	also pointer types.

	* gcc.dg/pr96573.c: New test.
2021-04-01 10:51:03 +02:00
Richard Biener
b75c4e1384 tree-optimization/99856 - fix overwideing pattern creation
This fixes an omission of promoting a bit-precision required precision
to a vector element precision.

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

	PR tree-optimization/99856
	* tree-vect-patterns.c (vect_recog_over_widening_pattern): Promote
	precision to vector element precision.

	* gcc.dg/vect/pr99856.c: New testcase.
2021-04-01 10:23:25 +02:00
Martin Jambor
19d7167461 sra: Fix bug in grp_write propagation (PR 97009)
SRA represents parts of aggregates which are arrays accessed with
unknown index as "unscalarizable regions."  When there are two such
regions one within another and the outer is only read whereas the
inner is written to, SRA fails to propagate that write information
across assignments.  This means that a second aggregate can contain
data while SRA thinks it does not and the pass can wrongly eliminate
big chunks of assignment from that second aggregate into a third
aggregate, which is what happens in PR 97009.

Fixed by checking all children of unscalariable accesses for the
grp_write flag.

gcc/ChangeLog:

2021-03-31  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/97009
	* tree-sra.c (access_or_its_child_written): New function.
	(propagate_subaccesses_from_rhs): Use it instead of a simple grp_write
	test.

gcc/testsuite/ChangeLog:

2021-03-31  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/97009
	* gcc.dg/tree-ssa/pr97009.c: New test.
2021-04-01 10:12:23 +02:00
Harald Anlauf
d7cef070bf PR fortran/99840 - ICE in gfc_simplify_matmul, at fortran/simplify.c:4777
The simplification of the transposition of a constant array shall properly
initialize and set the shape of the result.

gcc/fortran/ChangeLog:

	PR fortran/99840
	* simplify.c (gfc_simplify_transpose): Properly initialize
	resulting shape.

gcc/testsuite/ChangeLog:

	PR fortran/99840
	* gfortran.dg/transpose_5.f90: New test.
2021-04-01 07:49:32 +02:00
GCC Administrator
95d217ab52 Daily bump. 2021-04-01 00:16:39 +00:00
David Malcolm
e4bb1bd60a analyzer: avoid printing '<unknown>' for SSA names [PR99771]
We don't want to print '<unknown>' in our diagnostics, but
PR analyzer/99771 lists various cases where -fanalyzer does, due to
using the SSA_NAME for a temporary when determining the best tree to
use.

This can happen in two ways:

(a) ...when a better expression than the SSA_NAME could be built, but
finding it requires traversing the relationships in the region_model
in a graph-like way, rather than by considering individual svalues and
regions.

(b) ...when the only remaining user of the underlying svalue is the
SSA_NAME, typically due to the diagnostic referring to a temporary.

I've been experimenting with fixing (a), but don't have a good fix yet.
In the meantime, this patch addresses (b) by detecting if we have
the SSA_NAME for a temporary, and, for the cases where it's possible,
reconstructing a tree by walking the def-stmts.  This fixes various
cases of (b) and ameliorates some cases of (a).

gcc/analyzer/ChangeLog:
	PR analyzer/99771
	* analyzer.cc (maybe_reconstruct_from_def_stmt): New.
	(fixup_tree_for_diagnostic_1): New.
	(fixup_tree_for_diagnostic): New.
	* analyzer.h (fixup_tree_for_diagnostic): New decl.
	* checker-path.cc (call_event::get_desc): Call
	fixup_tree_for_diagnostic and use it for the call_with_state call.
	(warning_event::get_desc): Likewise for the final_event and
	make_label_text calls.
	* engine.cc (impl_region_model_context::on_state_leak): Likewise
	for the on_leak and add_diagnostic calls.
	* region-model.cc (region_model::get_representative_tree):
	Likewise for the result.

gcc/testsuite/ChangeLog:
	PR analyzer/99771
	* gcc.dg/analyzer/data-model-10.c: Update expected output.
	* gcc.dg/analyzer/malloc-ipa-13.c: Likewise.
	* gcc.dg/analyzer/malloc-ipa-13a.c: New test.
	* gcc.dg/analyzer/pr99771-1.c: New test.
2021-03-31 19:16:48 -04:00
Jan Hubicka
e7fd3b7832 Make USES_COMDAT_LOCAL CIF_FINAL_NORMAL
USES_COMDAT_LOCAL is incorrectly defined as CIF_FINAL_ERROR which makes inliner
to mis some inlines of functions in comdat section that was previously split.

2021-03-31  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/98265
	* cif-code.def (USES_COMDAT_LOCAL): Make CIF_FINAL_NORMAL.
2021-03-31 22:44:20 +02:00
Pat Haugen
ea9a39e63e Update prefixed attribute for Power10.
This patch creates a new attribute, "maybe_prefixed", which is used to mark
those instructions that may have a prefixed form. The existing "prefixed"
attribute is now used to mark all instructions that are prefixed form.

2021-03-31  Pat Haugen  <pthaugen@linux.ibm.com>

gcc/
	PR target/99133
	* config/rs6000/altivec.md (xxspltiw_v4si, xxspltiw_v4sf_inst,
	xxspltidp_v2df_inst, xxsplti32dx_v4si_inst, xxsplti32dx_v4sf_inst,
	xxblend_<mode>, xxpermx_inst, xxeval): Mark prefixed.
	* config/rs6000/mma.md (mma_<vvi4i4i8>, mma_<avvi4i4i8>,
	mma_<vvi4i4i2>, mma_<avvi4i4i2>, mma_<vvi4i4>, mma_<avvi4i4>,
	mma_<pvi4i2>, mma_<apvi4i2>, mma_<vvi4i4i4>, mma_<avvi4i4i4>):
	Likewise.
	* config/rs6000/rs6000.c (rs6000_final_prescan_insn): Adjust test.
	* config/rs6000/rs6000.md (define_attr "maybe_prefixed"): New.
	(define_attr "prefixed"): Update initializer.
2021-03-31 14:37:24 -05:00
Jakub Jelinek
4b33c5aaab dwarf2out: Fix up ranges for -gdwarf-5 -gsplit-dwarf [PR99490]
For -gdwarf-4 -gsplit-dwarf we used to emit .debug_ranges section
(so in the binaries/shared libraries) with DW_AT_ranges from skeleton
units as well as .debug_info.dwo pointing to it through DW_FORM_sec_offset
(and DW_AT_GNU_ranges_base pointing into section, not sure for what
reason exactly).
When DWARF5 support was being added, we've started using .debug_rnglists
section, added DW_AT_rnglists_base to the DW_TAG_skeleton_unit, kept
DW_AT_ranges with DW_FORM_sec_offset in the skeleton and switched
over to DW_FORM_rnglistx for DW_AT_ranges in .debug_info.dwo.
But the DWARF5 spec actually means for the ranges section (at least
everything for those DW_AT_ranges in .debug_info.dwo) to sit
in .debug_rnglists.dwo section next to the .debug_info.dwo, rather than
having consumers look it up in the binary/shared library instead.
Based on some discussions in the DWARF discuss mailing list:
http://lists.dwarfstd.org/pipermail/dwarf-discuss-dwarfstd.org/2021-March/thread.html#4765
this patch mostly follows what LLVM emits for that right now:
1) small .debug_rnglists section (when needed) just to cover the
   skeleton DW_AT_ranges (if present); the content of the section
   uses the Split DWARFy DW_RLE_* codes with addrx encodings where
   possible
2) DW_AT_ranges in the skeleton uses DW_FORM_sec_offset (difference
   from LLVM which uses DW_FORM_rnglistx, which makes it larger
   and ambiguous)
3) DW_AT_rnglists_base attribute is gone from the skeleton (again,
   unlike LLVM where it is just confusing what exactly it means because
   it is inherited; it would make sense if we emitted DW_FORM_rnglistx
   in non-split DWARF, but unless ranges are shared, I'm afraid we'd
   make DWARF larger with fewer relocations by that)
4) usually big .debug_rnglists.dwo section again with using DW_RLE_*x*
   where possible
5) DW_AT_ranges with DW_FORM_rnglistx from .debug_info.dwo referring to
   that .debug_rnglists.dwo ranges

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

	PR debug/99490
	* dwarf2out.c (debug_ranges_dwo_section): New variable.
	(DW_RANGES_IDX_SKELETON): Define.
	(struct dw_ranges): Add begin_entry and end_entry members.
	(DEBUG_DWO_RNGLISTS_SECTION): Define.
	(add_ranges_num): Adjust r initializer for addition of *_entry
	members.
	(add_ranges_by_labels): For -gsplit-dwarf and force_direct,
	set idx to DW_RANGES_IDX_SKELETON.
	(use_distinct_base_address_for_range): New function.
	(index_rnglists): Don't set r->idx if it is equal to
	DW_RANGES_IDX_SKELETON.  Initialize r->begin_entry and
	r->end_entry for -gsplit-dwarf if those will be needed by
	output_rnglists.
	(output_rnglists): Add DWO argument.  If true, switch to
	debug_ranges_dwo_section rather than debug_ranges_section.
	Adjust l1/l2 label indexes.  Only output the offset table when
	dwo is true and don't include in there the skeleton range
	entry if present.  For -gsplit-dwarf, skip ranges that belong
	to the other rnglists section.  Change return type from void
	to bool and return true if there are any range entries for
	the other section.  For dwarf_split_debug_info use
	DW_RLE_startx_endx, DW_RLE_startx_length and DW_RLE_base_addressx
	entries instead of DW_RLE_start_end, DW_RLE_start_length and
	DW_RLE_base_address.  Use use_distinct_base_address_for_range.
	(init_sections_and_labels): Initialize debug_ranges_dwo_section
	if -gsplit-dwarf and DWARF >= 5.  Adjust ranges_section_label
	and range_base_label indexes.
	(dwarf2out_finish): Call index_rnglists earlier before finalizing
	.debug_addr.  Never emit DW_AT_rnglists_base attribute.  For
	-gsplit-dwarf and DWARF >= 5 call output_rnglists up to twice
	with different dwo arguments.
	(dwarf2out_c_finalize): Clear debug_ranges_dwo_section.
2021-03-31 21:25:58 +02:00
Alexandre Oliva
eadf009b22 improve future::poll calibration loop
The calibration loop I've recently added to the libstdc++
future/members/poll.cc tests could still select iteration counts that
might yield zero-time measurements for the wait_for when ready loop.

Waiting for a future that has already had a value set is presumably
uniformly faster than a zero-timed wait for a result, so I've changed
the calibration loop to use the former.

We might still be unlucky and get nonzero from the initial loop, so
that the calibration is skipped altogether, but then get zero from the
later when-ready loop.  I'm not dealing with this case in this patch.


for  libstdc++-v3/ChangeLog

	* testsuite/30_threads/future/members/poll.cc: Use faster
	after-ready call in the calibration loop.
2021-03-31 15:45:56 -03:00
Richard Sandiford
c778968339 gimple-fold: Recompute ADDR_EXPR flags after folding a TMR [PR98268]
The gimple verifier picked up that an ADDR_EXPR of a MEM_REF was not
marked TREE_CONSTANT even though the address was in fact invariant.
This came from folding a &TARGET_MEM_REF with constant operands to
a &MEM_REF; &TARGET_MEM_REF is never treated as TREE_CONSTANT
but &MEM_REF can be.

gcc/
	PR tree-optimization/98268
	* gimple-fold.c (maybe_canonicalize_mem_ref_addr): Call
	recompute_tree_invariant_for_addr_expr after successfully
	folding a TARGET_MEM_REF that occurs inside an ADDR_EXPR.

gcc/testsuite/
	PR tree-optimization/98268
	* gcc.target/aarch64/sve/pr98268-1.c: New test.
	* gcc.target/aarch64/sve/pr98268-2.c: Likewise.
2021-03-31 19:34:01 +01:00
Richard Sandiford
b5c7accfb5 data-ref: Tighten index-based alias checks [PR99726]
create_intersect_range_checks_index tries to create a runtime
alias check based on index comparisons.  It looks through the
access functions for the two DRs to find a SCEV for the loop
that is being versioned and converts a DR_STEP-based check
into an index-based check.

However, there isn't any reliable sign information in the types,
so the code expects the value of the IV step (when interpreted as
signed) to be negative iff the DR_STEP (when interpreted as signed)
is negative.

r10-4762 added another assert related to this assumption and the
assert fired for the testcase in the PR.  The sign of the IV step
didn't match the sign of the DR_STEP.

I think this is actually showing what was previously a wrong-code bug.
The signs didn't match because the DRs contained *two* access function
SCEVs for the loop being versioned.  It doesn't look like the code
is set up to deal with this, since it checks each access function
independently and treats it as the sole source of DR_STEP.

The patch therefore moves the main condition out of the loop.
This also has the advantage of not building a tree for one access
function only to throw it away if we find an inner function that
makes the comparison invalid.

gcc/
	PR tree-optimization/99726
	* tree-data-ref.c (create_intersect_range_checks_index): Bail
	out if there is more than one access function SCEV for the loop
	being versioned.

gcc/testsuite/
	PR tree-optimization/99726
	* gcc.target/i386/pr99726.c: New test.
2021-03-31 19:34:01 +01:00
Richard Sandiford
1b5f74e8be Handle CONST_POLY_INTs in CONST_VECTORs [PR97141, PR98726]
This PR is caused by POLY_INT_CSTs being (necessarily) valid
in tree-level VECTOR_CSTs but CONST_POLY_INTs not being valid
in RTL CONST_VECTORs.  I can't tell/remember how deliberate
that was, but I'm guessing not very.  In particular,
valid_for_const_vector_p was added to guard against symbolic
constants rather than CONST_POLY_INTs.

I did briefly consider whether we should maintain the current
status anyway.  However, that would then require a way of
constructing variable-length vectors from individiual elements
if, say, we have:

   { [2, 2], [3, 2], [4, 2], … }

So I'm chalking this up to an oversight.  I think the intention
(and certainly the natural thing) is to have the same rules for
both trees and RTL.

The SVE CONST_VECTOR code should already be set up to handle
CONST_POLY_INTs.  However, we need to add support for Advanced SIMD
CONST_VECTORs that happen to contain SVE-based values.  The patch does
that by expanding such CONST_VECTORs in the same way as variable vectors.

gcc/
	PR rtl-optimization/97141
	PR rtl-optimization/98726
	* emit-rtl.c (valid_for_const_vector_p): Return true for
	CONST_POLY_INT_P.
	* rtx-vector-builder.h (rtx_vector_builder::step): Return a
	poly_wide_int instead of a wide_int.
	(rtx_vector_builder::apply_set): Take a poly_wide_int instead
	of a wide_int.
	* rtx-vector-builder.c (rtx_vector_builder::apply_set): Likewise.
	* config/aarch64/aarch64.c (aarch64_legitimate_constant_p): Return
	false for CONST_VECTORs that cannot be forced to memory.
	* config/aarch64/aarch64-simd.md (mov<mode>): If a CONST_VECTOR
	is too complex to force to memory, build it up from individual
	elements instead.

gcc/testsuite/
	PR rtl-optimization/97141
	PR rtl-optimization/98726
	* gcc.c-torture/compile/pr97141.c: New test.
	* gcc.c-torture/compile/pr98726.c: Likewise.
	* gcc.target/aarch64/sve/pr97141.c: Likewise.
	* gcc.target/aarch64/sve/pr98726.c: Likewise.
2021-03-31 19:34:00 +01:00
Jan Hubicka
23ce9945d5 Fix overvactive check in cgraph_node::release_body
gcc/ChangeLog:

	PR lto/99447
	* cgraph.c (cgraph_node::release_body): Fix overactive check.
2021-03-31 20:10:31 +02:00
Martin Sebor
31199d95de PR middle-end/65182 - -Wuninitialized fails when pointer to variable later passed to function
gcc/testsuite:
	PR middle-end/65182
	* gcc.dg/uninit-pr65182.c: New test.
2021-03-31 10:39:24 -06:00
Jason Merrill
a2531859bf c++: Alias template in pack expansion [PR99445]
In this testcase, iterative_hash_template_arg checks
alias_template_specialization_p to determine whether to treat a type as a
dependent alias, and structural_comptypes checks
dependent_alias_template_spec_p.  Normally that difference isn't a problem
because canonicalizing template arguments strips non-dependent aliases, but
that wasn't happening for the pack expansion.  Fixed thus.

gcc/cp/ChangeLog:

	PR c++/99445
	* tree.c (strip_typedefs): Handle TYPE_PACK_EXPANSION.

gcc/testsuite/ChangeLog:

	PR c++/99445
	* g++.dg/cpp0x/alias-decl-variadic1.C: New test.
2021-03-31 09:58:37 -04:00
Christophe Lyon
05de07136a testsuite/aarch64: Skip SLP diagnostic under ILP32 (PR target/96974)
The vectorizer has a very different effect with -mabi=ilp32, and
doesn't emit the expecte diagnostic, so this patch expects it only
under lp64.

2021-03-29  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/testsuite/
	PR target/96974
	* g++.target/aarch64/sve/pr96974.C: Expect SLP diagnostic only
	under lp64.
2021-03-31 13:57:14 +00:00
Christophe Lyon
7c1d6e8999 arm: Fix mult autovectorization patterm for iwmmxt (PR target/99786)
Similarly to other recently-added autovectorization patterns, mult has
been erroneously enabled for iwmmxt. However, V4HI and V2SI modes are
supported, so we make an exception for them.

The new testcase is derived from gcc.dg/ubsan/pr79904.c, with
additional modes added.

I kept dg-do compile because 'assemble' results in error messages from
the assembler, which are not related to this PR:

Error: selected processor does not support `tmcrr wr0,r4,r5' in ARM mode
Error: selected processor does not support `wstrd wr0,[r0]' in ARM mode
Error: selected processor does not support `wldrd wr0,[r0]' in ARM mode
Error: selected processor does not support `wldrd wr2,.L5' in ARM mode
Error: selected processor does not support `wmulul wr0,wr0,wr2' in ARM mode
Error: selected processor does not support `wstrd wr0,[r0]' in ARM mode
Error: selected processor does not support `wldrd wr0,[r0]' in ARM mode
Error: selected processor does not support `wldrd wr2,.L8' in ARM mode
Error: selected processor does not support `wmulwl wr0,wr0,wr2' in ARM mode
Error: selected processor does not support `wstrd wr0,[r0]' in ARM mode

2021-03-29  Christophe Lyon  <christophe.lyon@linaro.org>

	PR target/99786

	gcc/
	* config/arm/vec-common.md (mul<mode>3): Disable on iwMMXT, expect
	for V4HI and V2SI.

	gcc/testsuite/
	* gcc.target/arm/pr99786.c: New test.
2021-03-31 13:50:22 +00:00
H.J. Lu
bf24f4ec73 x86: Update memcpy/memset inline strategies for Ice Lake
Simply memcpy and memset inline strategies to avoid branches for
-mtune=icelake:

1. With MOVE_RATIO and CLEAR_RATIO == 17, GCC will use integer/vector
   load and store for up to 16 * 16 (256) bytes when the data size is
   fixed and known.
2. Inline only if data size is known to be <= 256.
   a. Use "rep movsb/stosb" with simple code sequence if the data size
      is a constant.
   b. Use loop if data size is not a constant.
3. Use memcpy/memset libray function if data size is unknown or > 256.

On Ice Lake processor with -march=native -Ofast -flto,

1.  Performance impacts of SPEC CPU 2017 rate are:

500.perlbench_r -0.93%
502.gcc_r        0.36%
505.mcf_r        0.31%
520.omnetpp_r   -0.07%
523.xalancbmk_r -0.53%
525.x264_r      -0.09%
531.deepsjeng_r -0.19%
541.leela_r      0.16%
548.exchange2_r  0.22%
557.xz_r        -1.64%
Geomean         -0.24%

503.bwaves_r    -0.01%
507.cactuBSSN_r  0.00%
508.namd_r       0.12%
510.parest_r     0.07%
511.povray_r     0.29%
519.lbm_r        0.00%
521.wrf_r       -0.38%
526.blender_r    0.16%
527.cam4_r       0.18%
538.imagick_r    0.76%
544.nab_r       -0.84%
549.fotonik3d_r -0.07%
554.roms_r      -0.01%
Geomean          0.02%

2. Significant impacts on eembc benchmarks are:

eembc/nnet_test      9.90%
eembc/mp2decoddata2  16.42%
eembc/textv2data3   -4.86%
eembc/qos            12.90%

gcc/

	* config/i386/i386-expand.c (expand_set_or_cpymem_via_rep):
	For TARGET_PREFER_KNOWN_REP_MOVSB_STOSB, don't convert QImode
	to SImode.
	(decide_alg): For TARGET_PREFER_KNOWN_REP_MOVSB_STOSB, use
	"rep movsb/stosb" only for known sizes.
	* config/i386/i386-options.c (processor_cost_table): Use Ice
	Lake cost for Cannon Lake, Ice Lake, Tiger Lake, Sapphire
	Rapids and Alder Lake.
	* config/i386/i386.h (TARGET_PREFER_KNOWN_REP_MOVSB_STOSB): New.
	* config/i386/x86-tune-costs.h (icelake_memcpy): New.
	(icelake_memset): Likewise.
	(icelake_cost): Likewise.
	* config/i386/x86-tune.def (X86_TUNE_PREFER_KNOWN_REP_MOVSB_STOSB):
	New.

gcc/testsuite/

	* gcc.target/i386/memcpy-strategy-5.c: New test.
	* gcc.target/i386/memcpy-strategy-6.c: Likewise.
	* gcc.target/i386/memcpy-strategy-7.c: Likewise.
	* gcc.target/i386/memcpy-strategy-8.c: Likewise.
	* gcc.target/i386/memset-strategy-3.c: Likewise.
	* gcc.target/i386/memset-strategy-4.c: Likewise.
	* gcc.target/i386/memset-strategy-5.c: Likewise.
	* gcc.target/i386/memset-strategy-6.c: Likewise.
2021-03-31 05:28:32 -07:00
Richard Sandiford
1393938e4c aarch64: Fix target alignment for SVE [PR98119]
The vectoriser supports peeling for alignment using predication:
we move back to the previous aligned boundary and make the skipped
elements inactive in the first loop iteration.  As it happens,
the costs for existing CPUs give an equal cost to aligned and
unaligned accesses, so this feature is rarely used.

However, the PR shows that when the feature was forced on, we were
still trying to align to a full-vector boundary even when using
partial vectors.

gcc/
	PR target/98119
	* config/aarch64/aarch64.c
	(aarch64_vectorize_preferred_vector_alignment): Query the size
	of the provided SVE vector; do not assume that all SVE vectors
	have the same size.

gcc/testsuite/
	PR target/98119
	* gcc.target/aarch64/sve/pr98119.c: New test.
2021-03-31 11:26:06 +01:00
Jan Hubicka
d7145b4bb6 Small refactoring of cgraph_node::release_body
PR lto/99447
	* cgraph.c (cgraph_node::release_body): Remove all callers and
	references.
	* cgraphclones.c (cgraph_node::materialize_clone): Do not do it here.
	* cgraphunit.c (cgraph_node::expand): And here.
2021-03-31 11:35:29 +02:00
Martin Liska
c3c616747a Fix coding style in IPA modref.
gcc/ChangeLog:

	* ipa-modref.c (analyze_ssa_name_flags): Fix coding style
	and one negated condition.
2021-03-31 10:52:22 +02:00
Jakub Jelinek
c001c194a2 aarch64: Fix up *add<mode>3_poly_1 [PR99813]
As mentioned in the PR, Uai constraint stands for
aarch64_sve_scalar_inc_dec_immediate
while Uav for
aarch64_sve_addvl_addpl_immediate.
Both *add<mode>3_aarch64 and *add<mode>3_poly_1 patterns use
  * return aarch64_output_sve_scalar_inc_dec (operands[2]);
  * return aarch64_output_sve_addvl_addpl (operands[2]);
in that order, but the former with Uai,Uav order, while the
latter with Uav,Uai instead.  This patch swaps the constraints
so that they match the output.

Co-authored-by: Richard Sandiford <richard.sandiford@arm.com>

2021-03-31  Jakub Jelinek  <jakub@redhat.com>
	    Richard Sandiford  <richard.sandiford@arm.com>

	PR target/99813
	* config/aarch64/aarch64.md (*add<mode>3_poly_1): Swap Uai and Uav
	constraints on operands[2] and similarly 0 and rk constraints
	on operands[1] corresponding to that.

	* g++.target/aarch64/sve/pr99813.C: New test.
2021-03-31 10:46:01 +02:00
Jakub Jelinek
a49a96f681 i386, debug: Default to -gdwarf-4 on Windows targets with broken ld.bfd [PR98860]
As mentioned in the PR, before the
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=ba6eb62ff0ea9843a018cfd7cd06777bd66ae0a0
fix from March 1st, PECOFF ld.bfd didn't know about .debug_loclists,
.debug_rnglists and other debug sections new in DWARF 5.  Unfortunately,
unlike for ELF linkers, that means the sections were placed in wrong
ordering with wrong VMA/LMA, so the resulting executables are apparently
unusable.

As that is pretty new change, newer than 2.35.2 or 2.36 binutils releases,
the following patch adds a workaround that turns -gdwarf-4 by default
instead of -gdwarf-5 if a broken linker is found at configure time.
Users can still explicitly play with -gdwarf-5 and either use a non-broken
linker or use custom linker scripts for the broken one, but at least
by default it should work.

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

	PR bootstrap/98860
	* configure.ac (HAVE_LD_BROKEN_PE_DWARF5): New AC_DEFINE if PECOFF
	linker doesn't support DWARF sections new in DWARF5.
	* config/i386/i386-options.c (ix86_option_override_internal): Default
	to dwarf_version 4 if HAVE_LD_BROKEN_PE_DWARF5 for TARGET_PECOFF
	targets.
	* config.in: Regenerated.
	* configure: Regenerated.
2021-03-31 09:11:29 +02:00
Jakub Jelinek
0989e99470 testsuite: Disable zero-scratch-regs-{8, 9, 10, 11}.c on all but ... [PR97680]
Seems the target hook is only defined on
config/i386/i386.c:#undef TARGET_ZERO_CALL_USED_REGS
config/i386/i386.c:#define TARGET_ZERO_CALL_USED_REGS ix86_zero_call_used_regs
config/sparc/sparc.c:#undef TARGET_ZERO_CALL_USED_REGS
config/sparc/sparc.c:#define TARGET_ZERO_CALL_USED_REGS sparc_zero_call_used_regs
but apparently many of the tests actually succeed on various targets that
don't define those hooks.  E.g. I haven't seen them to fail on aarch64,
on arm only the -10.c fails, on powerpc*/s390* all {8,9,10,11} fail (plus
5 is skipped on power*-aix*).
On ia64 according to testresults {6,7,8,9,10,11} fail, some with ICEs.
On mipsel according to testresults {9,10,11} fail, some with ICEs.
On nvptx at least 1-9 succeed, 10-11 don't know, don't have assert.h around.

I've kept {5,6,7} with aix,ia64,ia64 skipped because those seems like
outliers, it works pretty much everywhere but on those.
The rest have known good targets.

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

	PR testsuite/97680
	* c-c++-common/zero-scratch-regs-6.c: Skip on ia64.
	* c-c++-common/zero-scratch-regs-7.c: Likewise.
	* c-c++-common/zero-scratch-regs-8.c: Change from dg-skip-if of
	selected unsupported triplets to all targets but selected triplets
	of supported targets.
	* c-c++-common/zero-scratch-regs-9.c: Likewise.
	* c-c++-common/zero-scratch-regs-10.c: Likewise.
	* c-c++-common/zero-scratch-regs-11.c: Likewise.
2021-03-31 08:55:38 +02:00
Patrick Palka
a3bf6ce7f2 c++: Adjust mangling of __alignof__ [PR88115]
r11-4926 made __alignof__ get mangled differently from alignof,
encoding __alignof__ as a vendor extended operator.  But this
mangling is problematic for the reasons mentioned in
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88115#c6.

This patch changes our mangling of __alignof__ to instead use the
new "vendor extended expression" syntax that's proposed in
https://github.com/itanium-cxx-abi/cxx-abi/issues/112.  Clang does
the same thing already, so after this patch Clang and GCC agree
about the mangling of __alignof__(type) and __alignof__(expr).

gcc/cp/ChangeLog:

	PR c++/88115
	* mangle.c (write_expression): Adjust the mangling of
	__alignof__.

include/ChangeLog:

	PR c++/88115
	* demangle.h (enum demangle_component_type): Add
	DEMANGLE_COMPONENT_VENDOR_EXPR.

libiberty/ChangeLog:

	PR c++/88115
	* cp-demangle.c (d_dump, d_make_comp, d_expression_1)
	(d_count_templates_scopes): Handle DEMANGLE_COMPONENT_VENDOR_EXPR.
	(d_print_comp_inner): Likewise.
	<case DEMANGLE_COMPONENT_EXTENDED_OPERATOR>: Revert r11-4926
	change.
	<case DEMANGLE_COMPONENT_UNARY>: Likewise.
	* testsuite/demangle-expected: Adjust __alignof__ tests.

gcc/testsuite/ChangeLog:

	PR c++/88115
	* g++.dg/cpp0x/alignof7.C: Adjust expected mangling.
2021-03-30 22:57:11 -04:00