181039 Commits

Author SHA1 Message Date
Jonathan Wakely
cbc3f0bcc0 libstdc++: Adjust whitespace in <sstream>
libstdc++-v3/ChangeLog:

	* include/std/sstream: Adjust whitespace.
2020-11-05 13:31:32 +00:00
Richard Biener
403f0dac0c Fix SLP vectorization of stores from boolean vectors
The following fixes SLP vectorization of stores that were
pattern recognized.  Since in SLP vectorization pattern analysis
happens after dataref group analysis we have to adjust the groups
with the pattern stmts.  This has some effects down the pipeline
and exposes cases where we looked at the wrong pattern/non-pattern
stmts.

2020-11-05  Richard Biener  <rguenther@suse.de>

	* tree-vect-data-refs.c (vect_slp_analyze_node_dependences):
	Use the original stmts.
	(vect_slp_analyze_node_alignment): Use the pattern stmt.
	* tree-vect-slp.c (vect_fixup_store_groups_with_patterns):
	New function.
	(vect_slp_analyze_bb_1): Call it.

	* gcc.dg/vect/bb-slp-69.c: New testcase.
2020-11-05 14:13:38 +01:00
Tamar Christina
199988774d middle-end: optimize slp simplify back to back permutes.
This optimizes sequential permutes. i.e. if there are two permutes back to back
this function applies the permute of the parent to the child and removed the
parent.

This relies on the materialization point calculation in optimize SLP.

This allows us to remove useless permutes such as

	ldr     q0, [x0, x3]
	ldr     q2, [x1, x3]
	trn1    v1.4s, v0.4s, v0.4s
	trn2    v0.4s, v0.4s, v0.4s
	trn1    v0.4s, v1.4s, v0.4s
	mov     v1.16b, v3.16b
	fcmla   v1.4s, v0.4s, v2.4s, #0
	fcmla   v1.4s, v0.4s, v2.4s, #90
	str     q1, [x2, x3]

from the sequence the vectorizer puts out and give

	ldr     q0, [x0, x3]
	ldr     q2, [x1, x3]
	mov     v1.16b, v3.16b
	fcmla   v1.4s, v0.4s, v2.4s, #0
	fcmla   v1.4s, v0.4s, v2.4s, #90
	str     q1, [x2, x3]

instead.

gcc/ChangeLog:

	* tree-vect-slp.c (vect_slp_tree_permute_noop_p): New.
	(vect_optimize_slp): Optimize permutes.
	(vectorizable_slp_permutation): Fix typo.
2020-11-05 11:46:35 +00:00
Tamar Christina
7eb6c0ad26 testsuite: disable vect tests that was accidentally enabled on x86
My previous patch accidentally enabled some tests on x86 because my target
selector foo was weak..  This now properly only runs them on AArch64.

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/slp-11b.c: Update testcase.
	* gcc.dg/vect/slp-perm-6.c: Update target selector.
2020-11-05 10:14:17 +00:00
Richard Biener
1436ef2a57 debug/97718 - fix abstract origin references after last change
The change to clear the external_die_map slot after creating
the concrete instance DIE broke abstract origin processing which
tried to make sure to have those point to the early abstract instance
and not the concrete instance.  The following restores this by
eventually following the abstract origin link in the concrete instance.

2020-11-05  Richard Biener  <rguenther@suse.de>

	PR debug/97718
	* dwarf2out.c (add_abstract_origin_attribute): Make sure to
	point to the abstract instance.
2020-11-05 10:20:30 +01:00
Tamar Christina
e3587a2d8b middle-end: Store and use the SLP instance kind when aborting load/store lanes
This patch stores the SLP instance kind in the SLP instance so that we can use
it later when detecting load/store lanes support.

This also changes the load/store lane support check to only check if the SLP
kind is a store.  This means that in order for the load/lanes to work all
instances must be of kind store.

gcc/ChangeLog:

	* tree-vect-loop.c (vect_analyze_loop_2): Check kind.
	* tree-vect-slp.c (vect_build_slp_instance): New.
	(enum slp_instance_kind): Move to...
	* tree-vectorizer.h (enum slp_instance_kind): .. Here
	(SLP_INSTANCE_KIND): New.
2020-11-05 09:02:29 +00:00
Kewen Lin
025f434a87 rs6000: Use direct move for char/short vector CTOR [PR96933]
This patch is to make vector CTOR with char/short leverage direct
move instructions when they are available.  With one constructed
test case, it can speed up 145% for char and 190% for short on P9.

Tested SPEC2017 x264_r at -Ofast on P9, it gets 1.61% speedup
(but based on unexpected SLP see PR96789).

Bootstrapped/regtested on powerpc64{,le}-linux-gnu P8 and
powerpc64le-linux-gnu P9.

gcc/ChangeLog:

	PR target/96933
	* config/rs6000/rs6000.c (rs6000_expand_vector_init): Use direct move
	instructions for vector construction with char/short types.
	* config/rs6000/rs6000.md (p8_mtvsrwz_v16qisi2): New define_insn.
	(p8_mtvsrd_v16qidi2): Likewise.

gcc/testsuite/ChangeLog:

	PR target/96933
	* gcc.target/powerpc/pr96933-1.c: New test.
	* gcc.target/powerpc/pr96933-2.c: New test.
	* gcc.target/powerpc/pr96933-3.c: New test.
	* gcc.target/powerpc/pr96933-4.c: New test.
	* gcc.target/powerpc/pr96933.h: New test.
	* gcc.target/powerpc/pr96933-run.h: New test.
2020-11-05 00:28:28 -06:00
GCC Administrator
35c125cb6a Daily bump. 2020-11-05 00:16:36 +00:00
Jonathan Wakely
8f565d255a libstdc++: Fix default mode of new basic_stringstream constructor [PR 97719]
libstdc++-v3/ChangeLog:

	PR libstdc++/97719
	* include/std/sstream (basic_stringstream(string_type&&, openmode)):
	Fix default argument.
	* testsuite/27_io/basic_stringstream/cons/char/97719.cc: New test.
2020-11-04 23:41:02 +00:00
Tamar Christina
4d76079fdf middle-end: Move load/store-lanes check till late.
This moves the code that checks for load/store lanes further in the pipeline and
places it after slp_optimize.  This would allow us to perform optimizations on
the SLP tree and only bail out if we really have a permute.

With this change it allows us to handle permutes such as {1,1,1,1} which should
be handled by a load and replicate.

This change however makes it all or nothing. Either all instances can be handled
or none at all.  This is why some of the test cases have been adjusted.

gcc/ChangeLog:

	* tree-vect-slp.c (vect_analyze_slp_instance): Moved load/store lanes
	check to ...
	* tree-vect-loop.c (vect_analyze_loop_2): ..Here

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/slp-11b.c: Update output scan.
	* gcc.dg/vect/slp-perm-6.c: Likewise.
2020-11-04 22:33:11 +00:00
Ilya Leoshkevich
6682ef4363 IBM Z: Unhardcode NR_C_MODES
gcc/ChangeLog:

2020-11-03  Ilya Leoshkevich  <iii@linux.ibm.com>

	* config/s390/s390.c (NR_C_MODES): Unhardcode.
	(s390_alloc_pool): Use size_t for iterating from 0 to
	NR_C_MODES.
	(s390_add_constant): Likewise.
	(s390_find_constant): Likewise.
	(s390_dump_pool): Likewise.
	(s390_free_pool): Likewise.
2020-11-04 22:33:30 +01:00
Ilya Leoshkevich
88ea64e941 IBM Z: Remove unused RRe and RXe mode_attrs
gcc/ChangeLog:

2020-11-03  Ilya Leoshkevich  <iii@linux.ibm.com>

	* config/s390/s390.md (RRe): Remove.
	(RXe): Remove.
2020-11-04 22:33:30 +01:00
Ian Lance Taylor
9a02d31baa go: disable -fipa-icf-functions by default in Go frontend
Go programs expect to be able to get reliable backtrace information
with correct file/line information, but -fipa-icf-functions breaks
that because it merges together distinct functions which should have
distinct file/line info.

	* go-lang.c (go_langhook_post_options): Disable
	-fipa-icf-functions if it was not explicitly enabled.
2020-11-04 12:05:22 -08:00
Andrew MacLeod
e86fd6a17c Add Ranger temporal cache
Add a timestamp to supplement the global range cache to detect when a value
may become stale.

	gcc/
	PR tree-optimization/97515
	* gimple-range-cache.h (class ranger_cache): New prototypes plus
	temporal cache pointer.
	* gimple-range-cache.cc (struct range_timestamp): New.
	(class temporal_cache): New.
	(temporal_cache::temporal_cache): New.
	(temporal_cache::~temporal_cache): New.
	(temporal_cache::get_timestamp): New.
	(temporal_cache::set_dependency): New.
	(temporal_cache::temporal_value): New.
	(temporal_cache::current_p): New.
	(temporal_cache::set_timestamp): New.
	(temporal_cache::set_always_current): New.
	(ranger_cache::ranger_cache): Allocate the temporal cache.
	(ranger_cache::~ranger_cache): Free temporal cache.
	(ranger_cache::get_non_stale_global_range): New.
	(ranger_cache::set_global_range): Add a timestamp.
	(ranger_cache::register_dependency): New.  Add timestamp dependency.
	* gimple-range.cc (gimple_ranger::range_of_range_op): Add operand
	dependencies.
	(gimple_ranger::range_of_phi): Ditto.
	(gimple_ranger::range_of_stmt): Check if global range is stale, and
	recalculate if so.
	gcc/testsuite/
	* gcc.dg/pr97515.c: Check listing for folding of entire function.
2020-11-04 13:07:53 -05:00
Jonathan Wakely
9c1125c121 libstdc++: Fix test failure with --disable-linux-futex
As noted in PR 96817 this new test fails if the library is built without
futexes. That's expected of course, but we might as well fail more
obviously than a deadlock that eventually times out.

libstdc++-v3/ChangeLog:

	* testsuite/18_support/96817.cc: Fail fail if the library is
	configured to not use futexes.
2020-11-04 15:30:54 +00:00
Jonathan Wakely
e0af865ab9 libstdc++: Define new C++17 std::search overload for Parallel Mode [PR 94971]
libstdc++-v3/ChangeLog:

	PR libstdc++/94971
	* include/bits/stl_algo.h (search(FIter, FIter, const Searcher):
	Adjust #if condition.
	* include/parallel/algo.h (search(FIter, FIter, const Searcher&):
	Define new overload for C++17.
2020-11-04 13:36:32 +00:00
Tobias Burnus
243492e2c6 targhooks.c: Fix -fzero-call-used-regs 'sorry' typo
gcc/ChangeLog:

	* targhooks.c (default_zero_call_used_regs): Fix flag-name typo
	in sorry.
2020-11-04 14:33:36 +01:00
Jonathan Wakely
3ef33e756a libstdc++: Document istreambuf_iterator base class change [PR 92285]
libstdc++-v3/ChangeLog:

	PR libstdc++/92285
	* doc/xml/manual/evolution.xml: Document change to base class.
	* doc/html/manual/api.html: Regenerate.
2020-11-04 12:46:52 +00:00
Richard Biener
1272573a6b add costing to SLP vectorized PHIs
I forgot to cost vectorized PHIs.  Scalar PHIs are just costed
as scalar_stmt so the following costs vector PHIs as vector_stmt.

2020-11-04  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.h (vectorizable_phi): Adjust prototype.
	* tree-vect-stmts.c (vect_transform_stmt): Adjust.
	(vect_analyze_stmt): Pass cost_vec to vectorizable_phi.
	* tree-vect-loop.c (vectorizable_phi): Do costing.
2020-11-04 12:41:25 +01:00
Richard Biener
1e9f339d94 tree-optimization/97709 - set abnormal flag when vectorizing live lanes
This properly sets the abnormal flag when vectorizing live lanes
when the original scalar was live across an abnormal edge.

2020-11-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97709
	* tree-vect-loop.c (vectorizable_live_operation): Set
	SSA_NAME_OCCURS_IN_ABNORMAL_PHI when necessary.

	* gcc.dg/vect/bb-slp-pr97709.c: New testcase.
2020-11-04 12:41:14 +01:00
Jakub Jelinek
3e190757fa phiopt: Optimize x ? 1024 : 0 to (int) x << 10 [PR97690]
The following patch generalizes the x ? 1 : 0 -> (int) x optimization
to handle also left shifts by constant.

During x86_64-linux and i686-linux bootstraps + regtests it triggered
in 1514 unique non-LTO -m64 cases (sort -u on log mentioning
filename, function name and shift count) and 1866 -m32 cases.

Unfortunately, the patch regresses (before the tests have been adjusted):
+FAIL: gcc.dg/tree-ssa/ssa-ccp-11.c scan-tree-dump-times optimized "if " 0
+FAIL: gcc.dg/vect/bb-slp-pattern-2.c -flto -ffat-lto-objects  scan-tree-dump-times slp1 "optimized: basic block" 1
+FAIL: gcc.dg/vect/bb-slp-pattern-2.c scan-tree-dump-times slp1 "optimized: basic block" 1
and in both cases it actually results in worse code.

> > We'd need some optimization that would go through all PHI edges and
> > compute if some use of the phi results don't actually compute a constant
> > across all the PHI edges - 1 & 0 and 0 & 1 is always 0.

> PRE should do this, IMHO only optimizing it at -O2 is fine.

> > Similarly, in the slp vectorization test there is:
> >      a[0] = b[0] ? 1 : 7;

> note this, carefully avoiding the already "optimized" b[0] ? 1 : 0 ...

> So the option is to put : 7 in the 2, 4 an 8 case as well.  The testcase
> wasn't added for any real-world case but is artificial I guess for
> COND_EXPR handling of invariants.

> But yeah, for things like SLP it means we eventually have to
> implement reverse transforms for all of this to make the lanes
> matching.  But that's true anyway for things like x + 1 vs. x + 0
> or x / 3 vs. x / 2 or other simplifications we do.

2020-11-04  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/97690
	* tree-ssa-phiopt.c (conditional_replacement): Also optimize
	cond ? pow2p_cst : 0 as ((type) cond) << cst.

	* gcc.dg/tree-ssa/phi-opt-22.c: New test.
	* gcc.dg/tree-ssa/ssa-ccp-11.c: Use -O2 instead of -O1.
	* gcc.dg/vect/bb-slp-pattern-2.c (foo): Use ? 2 : 7, ? 4 : 7 and
	? 8 : 7 instead of ? 2 : 0, ? 4 : 0, ? 8 : 0.
2020-11-04 12:15:28 +01:00
Jonathan Wakely
24366207b7 libstdc++: Fix constant expressions in std::uniform_int_distribution
Clang and EDG say the class member access expressions __urng.min() and
__urng.max() are not constant expressions, because the object expression
__urng is not usable in a constant expresion. Use a qualified-id to call
those static member functions instead.

Co-authored-by: Stephan Bergmann <sbergman@redhat.com>

libstdc++-v3/ChangeLog:

	* include/bits/uniform_int_dist.h (uniform_int_distribution::_S_nd):
	Use qualified-id to refer to static member functions.
2020-11-04 10:36:45 +00:00
Martin Liska
10a50d261e gcc-changelog: Change parse_git_revisions strict argument to True.
Change the default that is used by GIT server hook and also
by git_update_version.py. Both should use True now.

contrib/ChangeLog:

	* gcc-changelog/git_repository.py: Set strict=True
	for parse_git_revisions as a default.
2020-11-04 11:01:58 +01:00
Richard Biener
092cdbd919 Re-instantiate SLP induction IV CSE
This re-instantiates the previously removed CSE, fixing the
FAIL of gcc.dg/vect/costmodel/x86_64/costmodel-pr30843.c
It turns out the previous approach still works.

2020-11-04  Richard Biener  <rguenther@suse.de>

	* tree-vect-loop.c (vectorizable_induction): Re-instantiate
	previously removed CSE of SLP IVs.
2020-11-04 10:59:55 +01:00
Christophe Lyon
14ddf41acb testsuite: fix arm/pure-code/no-literal-pool-* tests
Add -mfloat-abi=soft and skip the tests if -mfloat-abi=hard is
supplied.

This avoids failures when testing with overridden flags such as
mthumb/-mcpu=cortex-m4/-mfloat-abi=hard

2020-11-04  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/testsuite/
	* gcc.target/arm/pure-code/no-literal-pool-m0.c: Add dg-skip-if
	and -mfloat-abi=soft option.
	* gcc.target/arm/pure-code/no-literal-pool-m23.c: Likewise.
2020-11-04 09:39:14 +00:00
Tobias Burnus
619039de36 gcc-changelog/git_commit.py: Check for missing description
Especially when using mklog.py, it is simply to forget to fill in
the entries after the '\t* file.c (section):' or '\t(section):'.

contrib/ChangeLog:

	* gcc-changelog/git_commit.py (item_parenthesis_empty_regex,
	item_parenthesis_regex): Add.
	(check_for_empty_description): Use them.
	* gcc-changelog/test_email.py (test_emptry_entry_desc,
	test_emptry_entry_desc_2): Add.
	* gcc-changelog/test_patches.txt: Add two testcases for it.
2020-11-04 10:35:54 +01:00
Uros Bizjak
c4f6330722 i386: Fix Intel MCU psABI comment w.r.t DEFAULT_PCC_STRUCT_RETURN
2020-11-04  Uroš Bizjak  <ubizjak@gmail.com>

gcc/

	* config/i386/i386-options.c (ix86_recompute_optlev_based_flags):
	Fix Intel MCU psABI comment w.r.t DEFAULT_PCC_STRUCT_RETURN.
2020-11-04 10:11:22 +01:00
Jakub Jelinek
9649031577 openmp: allocate clause vs. *reduction array sections [PR97670]
This patch finds the base expression of reduction array sections and uses it
in checks whether allocate clause lists only variables that have been privatized.
Also fixes a pasto that caused an ICE.

2020-11-04  Jakub Jelinek  <jakub@redhat.com>

	PR c++/97670
gcc/c-family/
	* c-omp.c (c_omp_split_clauses): Look through array reductions to find
	underlying decl to clear in the allocate_head bitmap.
gcc/c/
	* c-typeck.c (c_finish_omp_clauses): Look through array reductions to
	find underlying decl to clear in the aligned_head bitmap.
gcc/cp/
	* semantics.c (finish_omp_clauses): Look through array reductions to
	find underlying decl to clear in the aligned_head bitmap.  Use
	DECL_UID (t) instead of DECL_UID (OMP_CLAUSE_DECL (c)) when clearing
	in the bitmap.  Only diagnose errors about allocate vars not being
	privatized on the same construct on allocate clause if it has
	a DECL_P OMP_CLAUSE_DECL.
gcc/testsuite/
	* c-c++-common/gomp/allocate-4.c: New test.
	* g++.dg/gomp/allocate-2.C: New test.
	* g++.dg/gomp/allocate-3.C: New test.
2020-11-04 10:02:01 +01:00
Martin Liska
7988c76eba Fix duplicate ChangeLog entries. 2020-11-04 09:42:39 +01:00
Richard Biener
8d887367a7 bootstrap/97666 - really fix sizeof (bool) issue
Pastoed the previous fix too quickly, the following fixes the
correct spot - the memset, not the allocation.

2020-11-04  Richard Biener  <rguenther@suse.de>

	PR bootstrap/97666
	* tree-vect-slp.c (vect_build_slp_tree_2): Revert previous
	fix and instead adjust the memset.
2020-11-04 09:37:43 +01:00
Pat Bernardi
7526923d77 i386: Cleanup i386/i386elf.h and align it's return convention with the SVR4 ABI
While i386elf.h was originally derived from sysv4.h it has not been kept
up to date with the development of the compiler. Two changes are made:

* The return convention now follows the i386 and x86_64 SVR4 ABIs again.

* The more efficient default version of ASM_OUTPUT_ASCII in elfos.h is used.

2020-11-04  Pat Bernardi  <bernardi@adacore.com>

gcc/ChangeLog

	* config/i386/i386elf.h (SUBTARGET_RETURN_IN_MEMORY): Remove.
	(ASM_OUTPUT_ASCII): Likewise.
	(DEFAULT_PCC_STRUCT_RETURN): Define.
	* config/i386/i386.c (ix86_return_in_memory): Remove
	SUBTARGET_RETURN_IN_MEMORY.
2020-11-04 09:15:42 +01:00
Iain Sandoe
878cffbd9e Objective-C++ : Fix ICE in potential_constant_expression_1.
We cannot, as things stand, handle Objective-C tree codes in
the switch and deal with this by calling out to a function that
has a dummy version when Objective-C is not enabled.

Because of the way the logic works (with a fall through to a
'sorry' in case of unhandled expressions), the function reports
cases that are known to be unsuitable for constant exprs. The
dummy function always reports 'false' and thus will fall through
to the 'sorry'.

gcc/c-family/ChangeLog:

	* c-objc.h (objc_non_constant_expr_p): New.
	* stub-objc.c (objc_non_constant_expr_p): New.

gcc/cp/ChangeLog:

	* constexpr.c (potential_constant_expression_1): Handle
	expressions known to be non-constant for Objective-C.

gcc/objc/ChangeLog:

	* objc-act.c (objc_non_constant_expr_p): New.
2020-11-04 08:06:13 +00:00
Joseph Myers
c19e44ac8d c: Implement C2x nodiscard attribute
C2x adds the nodiscard standard attribute, with an optional string
argument, as in C++; implement it for C.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/c/
2020-11-04  Joseph Myers  <joseph@codesourcery.com>

	* c-decl.c (handle_nodiscard_attribute): New.
	(std_attribute_table): Add nodiscard.
	* c-parser.c (c_parser_std_attribute): Expect argument to
	nodiscard attribute to be a string.  Do not special-case ignoring
	nodiscard.
	* c-typeck.c (maybe_warn_nodiscard): New.
	(build_compound_expr, emit_side_effect_warnings): Call
	maybe_warn_nodiscard.
	(c_process_expr_stmt, c_finish_stmt_expr): Also call
	emit_side_effect_warnings if warn_unused_result.

gcc/testsuite/
2020-11-04  Joseph Myers  <joseph@codesourcery.com>

	* gcc.dg/c2x-attr-nodiscard-1.c, gcc.dg/c2x-attr-nodiscard-2.c,
	gcc.dg/c2x-attr-nodiscard-3.c, gcc.dg/c2x-attr-nodiscard-4.c: New
	tests.
	* gcc.dg/c2x-attr-syntax-5.c: Remove nodiscard test.
2020-11-04 06:48:46 +00:00
liuhongt
2e0aa43fc6 Don't extract memory from operand for normal memory constraint.
gcc/ChangeLog
	PR target/97540
	* ira.c: (ira_setup_alts): Extract memory from operand only
	for special memory constraint.
	* recog.c (asm_operand_ok): Ditto.
	* lra-constraints.c (process_alt_operands): MEM_P is
	required for normal memory constraint.

gcc/testsuite/ChangeLog
	* gcc.target/i386/pr97540.c: New test.
2020-11-04 13:06:32 +08:00
liuhongt
db8b3e148d Fix invalid address for special_memory_constraint.
gcc/ChangeLog
	PR target/97532
	* lra-constraints.c (valid_address_p): Handle operand of
	special memory constraint.
	(process_address_1): Ditto.
2020-11-04 13:06:08 +08:00
GCC Administrator
fd2325ea60 Daily bump. 2020-11-04 00:16:41 +00:00
Jan Hubicka
2e391ceb77 Add testcase for pr97695
* gcc.c-torture/execute/pr97695.c: New test.
2020-11-04 00:21:40 +01:00
Jan Hubicka
ab4664eb73 Fix copying of clone_info while reshaping clone tree.
2020-11-04  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/97695
	* cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Fix ICE with
	in dumping code.
	(cgraph_node::remove): Save clone info before releasing it and pass it
	to unregister.
	* cgraph.h (symtab_node::unregister): Add clone_info parameter.
	(cgraph_clone::unregister): Likewise.
	* cgraphclones.c (cgraph_node::find_replacement): Copy clone info
	* symtab-clones.cc (clone_infos_t::duplicate): Remove.
	(clone_info::get_create): Simplify.
	* symtab.c (symtab_node::unregister): Pass around clone info.
	* varpool.c (varpool_node::remove): Update.
2020-11-04 00:19:59 +01:00
Jason Merrill
e7144372e0 c++: Not all character types are byte-access types.
The patch for 94923 that introduced is_byte_access_type wrongly changed
build_cplus_array_type to treat even arrays of char16_t as typeless storage,
which is wrong; only arrays of char and unsigned char have the special alias
semantics in C++.

G++ used to treat signed char the same way, as C does, but C++ has always
omitted it.

gcc/cp/ChangeLog:

	* tree.c (is_byte_access_type): Don't use char_type_p.

gcc/testsuite/ChangeLog:

	* g++.dg/Wclass-memaccess.C: Check that signed char and
	char16_t aren't treated as byte-access types.
2020-11-03 17:15:30 -05:00
Jonathan Wakely
e1276e3342 libstdc++: Ensure std::lock_guard is declared
libstdc++-v3/ChangeLog:

	* include/std/syncstream: Include <bits/std_mutex.h>
	unconditionally.
2020-11-03 21:56:44 +00:00
Thomas Schwinge
fab72592d8 [OpenACC] Use proper location to 'inform' of enclosing parent compute construct
Bug fix for recent commit beddd1762ad2bbe84dd776c54489153f83f21e56 "[OpenACC]
More precise diagnostics for 'gang', 'worker', 'vector' clauses with arguments
on 'loop' only allowed in 'kernels' regions":

> [...], and 'inform' at the location of the enclosing parent
> compute construct/[...].

Now really.

	gcc/
	* omp-low.c (scan_omp_for) <OpenACC>: Use proper location to
	'inform' of enclosing parent compute construct.
	gcc/testsuite/
	* c-c++-common/goacc/pr92793-1.c: Extend.
	* gfortran.dg/goacc/pr92793-1.f90: Likewise.
2020-11-03 22:26:02 +01:00
François Dumont
12d0512305 libstdc++: Add mising gnu-versioned-namespace symbols
libstdc++-v3/ChangeLog:

	* config/abi/pre/gnu-versioned-namespace.ver:
	Add __istream_extract and _Safe_local_iterator_base::_M_attach_single
	symbols.
2020-11-03 22:01:55 +01:00
Jakub Jelinek
875225301e c++: Don't try to parse a function declaration as deduction guide [PR97663]
While these function declarations have NULL decl_specifiers->type,
they have still type specifiers specified from which the default int
in the return type is added, so we shouldn't try to parse those as
deduction guides.

2020-11-03  Jakub Jelinek  <jakub@redhat.com>

	PR c++/97663
	* parser.c (cp_parser_init_declarator): Don't try to parse
	C++17 deduction guides if there are any type specifiers even when
	type is NULL.

	* g++.dg/cpp1z/class-deduction75.C: New test.
2020-11-03 21:42:51 +01:00
Jonathan Wakely
9f925f3b19 libstdc++: Refactor std::call_once internals
This separates the definition of std::__call_proxy into two funcions,
one for TLS and one for non-TLS, to make them easier to read. It also
replaces the __get_once_functor_lock_ptr() internal helper with a new
set_lock_ptr(unique_lock<mutex>*) function so that __once_proxy doesn't
need to call it twice.

libstdc++-v3/ChangeLog:

	* src/c++11/mutex.cc [_GLIBCXX_HAVE_TLS] (__once_proxy): Define
	separately for TLS targets.
	[!_GLIBCXX_HAVE_TLS] (__get_once_functor_lock_ptr): Replace with ...
	(set_lock_ptr): ... this. Set new value and return previous
	value.
	[!_GLIBCXX_HAVE_TLS] (__set_once_functor_lock_ptr): Adjust to
	use set_lock_ptr.
	[!_GLIBCXX_HAVE_TLS] (__once_proxy): Likewise.
2020-11-03 20:03:16 +00:00
kamlesh kumar
ed7f9957bb c++: DR2303, ambiguous base deduction [PR97453]
When there are two possible matches and one is a base of the other, choose
the derived class rather than fail.

gcc/cp/ChangeLog

2020-10-21  Kamlesh Kumar  <kamleshbhalui@gmail.com>
	    Jason Merrill  <jason@redhat.com>

	PR c++/97453
	DR2303
	* pt.c (get_template_base): Consider closest base in template
	deduction when base of base also matches.

gcc/testsuite/ChangeLog

2020-10-21  Kamlesh Kumar  <kamleshbhalui@gmail.com>

	* g++.dg/DRs/dr2303.C: New test.
2020-11-03 14:36:24 -05:00
Jan Hubicka
a2058f5812 Add missing non-NULL check in cgraphclones
2020-11-03  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/97698
	* cgraphclones.c (duplicate_thunk_for_node): Check that info is
	non-NULL.
2020-11-03 20:31:23 +01:00
Jonathan Wakely
93e79ed391 libstdc++: Rewrite std::call_once to use futexes [PR 66146]
The current implementation of std::call_once uses pthread_once, which
only meets the C++ requirements when compiled with support for
exceptions. For most glibc targets and all non-glibc targets,
pthread_once does not work correctly if the init_routine exits via an
exception. The pthread_once_t object is left in the "active" state, and
any later attempts to run another init_routine will block forever.

This change makes std::call_once work correctly for Linux targets, by
replacing the use of pthread_once with a futex, based on the code from
__cxa_guard_acquire. For both glibc and musl, the Linux implementation
of pthread_once is already based on futexes, and pthread_once_t is just
a typedef for int, so this change does not alter the layout of
std::once_flag. By choosing the values for the int appropriately, the
new code is even ABI compatible. Code that calls the old implementation
of std::call_once will use pthread_once to manipulate the int, while new
code will use the new std::once_flag members to manipulate it, but they
should interoperate correctly. In both cases, the int is initially zero,
has the lowest bit set when there is an active execution, and equals 2
after a successful returning execution. The difference with the new code
is that exceptional exceptions are correctly detected and the int is
reset to zero.

The __cxa_guard_acquire code (and musl's pthread_once) use an additional
state to say there are other threads waiting. This allows the futex wake
syscall to be skipped if there is no contention. Glibc doesn't use a
waiter bit, so we have to unconditionally issue the wake in order to be
compatible with code calling the old std::call_once that uses Glibc's
pthread_once. If we know that we're using musl (and musl's pthread_once
doesn't change) it would be possible to set a waiting state and check
for it in std::once_flag::_M_finish(bool), but this patch doesn't do
that.

This doesn't fix the bug for non-linux targets. A similar approach could
be used for targets where we know the definition of pthread_once_t is a
mutex and an integer. We could make once_flag._M_activate() use
pthread_mutex_lock on the mutex member within the pthread_once_t, and
then only set the integer if the execution finishes, and then unlock the
mutex. That would require careful study of each target's pthread_once
implementation and that work is left for a later date.

This also fixes PR 55394 because pthread_once is no longer needed, and
PR 84323 because the fast path is now just an atomic load.

As a consequence of the new implementation that doesn't use
pthread_once, we can also make std::call_once work for targets with no
gthreads support. The code for the single-threaded implementation
follows the same methods as on Linux, but with no need for atomics or
futexes.

libstdc++-v3/ChangeLog:

	PR libstdc++/55394
	PR libstdc++/66146
	PR libstdc++/84323
	* config/abi/pre/gnu.ver (GLIBCXX_3.4.29): Add new symbols.
	* include/std/mutex [!_GLIBCXX_HAS_GTHREADS] (once_flag): Define
	even when gthreads is not supported.
	(once_flag::_M_once) [_GLIBCXX_HAVE_LINUX_FUTEX]: Change type
	from __gthread_once_t to int.
	(once_flag::_M_passive(), once_flag::_M_activate())
	(once_flag::_M_finish(bool), once_flag::_Active_execution):
	Define new members for futex and non-threaded implementation.
	[_GLIBCXX_HAS_GTHREADS] (once_flag::_Prepare_execution): New
	RAII helper type.
	(call_once): Use new members of once_flag.
	* src/c++11/mutex.cc (std::once_flag::_M_activate): Define.
	(std::once_flag::_M_finish): Define.
	* testsuite/30_threads/call_once/39909.cc: Do not require
	gthreads.
	* testsuite/30_threads/call_once/49668.cc: Likewise.
	* testsuite/30_threads/call_once/60497.cc: Likewise.
	* testsuite/30_threads/call_once/call_once1.cc: Likewise.
	* testsuite/30_threads/call_once/dr2442.cc: Likewise.
	* testsuite/30_threads/call_once/once_flag.cc: Add test for
	constexpr constructor.
	* testsuite/30_threads/call_once/66146.cc: New test.
	* testsuite/30_threads/call_once/constexpr.cc: Removed.
	* testsuite/30_threads/once_flag/cons/constexpr.cc: Removed.
2020-11-03 18:44:49 +00:00
Nathan Sidwell
a52bf01643 c++: using-decl instantiation
In streaming using decls I needed to check some assumptions.  This
adds those checks to the instantiation machinery.

	gcc/cp/
	* pt.c (tsubst_expr): Simplify using decl instantiation, add
	asserts.
2020-11-03 10:23:44 -08:00
Nathan Sidwell
78f2f08ac8 c++: Refactor clone copying
This patch sets copy_fndecl_with_name to always inform
rest_of_decl_compilation that it is not a top-level decl (it's a
member function).  I also refactor build_cdtor_clones to conditionally
do the method vector updating.  That happens to be a better interface
for modules to use.

	gcc/cp/
	* class.c (copy_fndecl_with_name):  Always not top level.
	(build_cdtor_clones): Add update_methods parm, use it to
	conditionally update the method vec.  Return void
	(clone_cdtor): Adjust.
	(clone_constructors_and_destructors): Adjust comment.
2020-11-03 10:23:44 -08:00
Uros Bizjak
f4a0e873be i386: Fix ix86_function_arg_regno_p to return correct SSE regno for 32bit TARGET_MACHO
Use up to SSE_REGPARM_MAX registers to pass function parameters
for 32bit Mach-O targets.  Also, define X86_32_MMX_REGPARM_MAX
to return 0 for 32bit Mach-O targets.

2020-11-03  Uroš Bizjak  <ubizjak@gmail.com>

gcc/

	* config/i386/i386.c (ix86_function_arg_regno_p): Use up to
	SSE_REGPARM_MAX registers to pass function parameters
	for 32bit Mach-O targets.
	* config/i386/i386.h (X86_32_MMX_REGPARM_MAX): New macro.
	(MMX_REGPARM_MAX): Use it.
2020-11-03 19:15:03 +01:00