Commit Graph

176556 Commits

Author SHA1 Message Date
Iain Buclaw
3f30a27491 libiberty: Update D symbol demangling for latest ABI spec.
Some small improvements and clarifications have been done in the D ABI
specification to remove all ambiguities found in the current grammar,
this implementation now more closely resembles the spec, whilst
maintaining compatibility with the old ABI.

Three new rules have been added to the ABI.

1. Back references using 'Q', analogous to C++ substitutions, compresses
   repeated identifiers, types, and template symbol and value parameters.

2. Template aliases to externally mangled symbols are prefixed with 'X'.
   This includes any symbol that isn't extern(D), or has its name
   overriden with pragma(mangle).  This fixes an ambiguity where it was
   not clear whether 'V' was an encoded calling convention, or the next
   template value parameter.

3. Alias parameters, templates, and tuple symbols no longer encode the
   symbol length of its subpart.  Tuples are now terminated with 'Z'.
   This fixes another ambiguity where the first character of the mangled
   name can be a digit as well, so the demangler had to figure out where
   to split the two adjacent numbers by trying out each combination.

libiberty/ChangeLog:

	* d-demangle.c (enum dlang_symbol_kinds): Remove enum.
	(struct dlang_info): New struct
	(dlang_decode_backref): New function.
	(dlang_backref): New function.
	(dlang_symbol_backref): New function.
	(dlang_type_backref): New function.
	(dlang_symbol_name_p): New function.
	(dlang_function_type_noreturn): New function.
	(dlang_function_type): Add 'info' parameter.  Decode function type
	with dlang_function_type_noreturn.
	(dlang_function_args): Add 'info' parameter.
	(dlang_type): Add 'info' parameter.  Handle back referenced types.
	(dlang_identifier): Replace 'kind' parameter with 'info'.  Handle back
	referenced symbols.  Split off decoding of plain identifiers to...
	(dlang_lname): ...here.
	(dlang_parse_mangle): Replace 'kind' parameter with 'info'.  Decode
	function type and return with dlang_type.
	(dlang_parse_qualified): Replace 'kind' parameter with 'info', add
	'suffix_modifier' parameter.  Decode function type with
	dlang_function_type_noreturn.
	(dlang_parse_tuple): Add 'info' parameter.
	(dlang_template_symbol_param): New function.
	(dlang_template_args): Add 'info' parameter.  Decode symbol parameter
	with dlang_template_symbol_param.  Handle back referenced values, and
	externally mangled parameters.
	(dlang_parse_template): Add 'info' parameter.
	(dlang_demangle_init_info): New function.
	(dlang_demangle): Initialize and pass 'info' parameter.
	* testsuite/d-demangle-expected: Add new tests.

Co-Authored-By: Rainer Schuetze <r.sagitario@gmx.de>
2020-05-14 23:43:17 +02:00
Jason Merrill
4e1592f8e1 c++: Fix deferred noexcept on constructor [PR93901].
My change in r10-4394 to only update clones when we actually instantiate a
deferred noexcept-spec broke this because deferred parsing updates the
primary function but not the clones.  For GCC 10 I just reverted that
change; this patch adjusts maybe_instantiate_noexcept to update only the
clone passed as the argument.

gcc/cp/ChangeLog
2020-05-14  Jason Merrill  <jason@redhat.com>

	PR c++/93901
	* pt.c (maybe_instantiate_noexcept): Change clone handling.
2020-05-14 16:38:30 -04:00
Ian Lance Taylor
3a36428b5f libgo: only build syscall test with -static on GNU/Linux
For PR go/95061

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/234019
2020-05-14 13:37:12 -07:00
Andrew Stubbs
75d0b3d728 amdgcn: fix vcc clobber in vector load/store
This switches the code that expands scalar addresses to vectors of addresses
from using VCC to using CC_SAVE_REG, for the lo-part to hi-part carry values.
These were fine in code expanded in earlier passes, but addresses expanded
late, such as for stack spills or reloads, could clobber live VCC values,
causing execution failures.

This is the first target-specific testcase for GCN, so the new .exp file is
included.

2020-05-14  Andrew Stubbs  <ams@codesourcery.com>

	gcc/
	* config/gcn/gcn-valu.md (add<mode>3_zext_dup): Change to a
	define_expand, and rename the original to ...
	(add<mode>3_vcc_zext_dup): ... this, and add a custom VCC operand.
	(add<mode>3_zext_dup_exec): Likewise, with ...
	(add<mode>3_vcc_zext_dup_exec): ... this.
	(add<mode>3_zext_dup2): Likewise, with ...
	(add<mode>3_zext_dup_exec): ... this.
	(add<mode>3_zext_dup2_exec): Likewise, with ...
	(add<mode>3_zext_dup2): ... this.
	* config/gcn/gcn.c (gcn_expand_scalar_to_vector_address): Switch
	addv64di3_zext* calls to use addv64di3_vcc_zext*.

	gcc/testsuite/
	* testsuite/gcc.target/gcn/gcn.exp: New file.
	* testsuite/gcc.target/gcn/vcc-clobber.c: New file.
2020-05-14 20:45:09 +01:00
Uros Bizjak
9056cd8035 i386: Add V2DFmode float trunc/extend functions [PR95046]
gcc/ChangeLog:

	PR target/95046
	* config/i386/sse.md (truncv2dfv2df2): New insn pattern.
	(extendv2sfv2df2): Ditto.

testsuite/ChangeLog:

	PR target/95046
	* gcc.target/i386/pr95046-7.c: New test.
2020-05-14 19:51:40 +02:00
Patrick Palka
098cf31aa2 c++: Missing SFINAE with lookup_fnfields [PR78446]
Here we're failing to do SFINAE in build_op_call when looking up the
class's operator() via lookup_fnfields, which calls lookup_member always
with complain=tf_warning_or_error; from there we would complain
about an ambiguous lookup for operator().

This patch fixes this by adding a tsubst_flags_t parameter to
lookup_fnfields and adjusting all its callers appropriately.

gcc/cp/ChangeLog:

	PR c++/78446
	* call.c (build_op_call): Pass complain to lookup_fnfields.
	(build_special_member_call): Likewise.
	* class.c (type_requires_array_cookie): Pass tf_warning_or_error
	to lookup_fnfields.
	* cp-tree.h (lookup_fnfields): Add tsubst_flags_t parameter.
	* except.c (build_throw): Pass tf_warning_or_error to
	lookup_fnfields.
	* init.c (build_new_1): Pass complain to lookup_fnfields.
	* method.c (locate_fn_flags): Likewise.
	* name-lookup.c (lookup_name_real_1): Pass tf_warning_or_error
	to lookup_fnfields.
	* pt.c (tsubst_baselink): Pass complain to lookup_fnfields.
	* search.c (lookup_fnfields): New 'complain' parameter.  Pass it
	to lookup_member.

gcc/testsuite/ChangeLog:

	PR c++/78446
	* g++.dg/template/sfinae31.C: New test.
2020-05-14 12:56:18 -04:00
Thomas Koenig
d975519ad1 Removed double ChangeLog entries from previous commit. 2020-05-14 18:37:18 +02:00
Thomas Koenig
cdc34b5057 Add early return for invalid STATUS for close.
2020-05-14  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR libfortran/95119
	* io/close.c (close_status): Add CLOSE_INVALID.
	(st_close): Return early on invalid STATUS parameter.

2020-05-14  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR libfortran/95119
	* testsuite/libgomp.fortran/close_errors_1.f90: New test.
2020-05-14 18:33:24 +02:00
H.J. Lu
8d286dd118 x86: Default CET run-time support to auto
CET has been added since GCC 8.  This patch defaults CET run-time support
to auto.  It enables CET run-time support if asssembler supports CET
instructions and multi-byte NOPs are enabled via SSE2.

config/

	* cet.m4 (GCC_CET_FLAGS): Change default to auto.

gcc/

	* configure: Regenerated.

libatomic/

	* configure: Regenerated.

libbacktrace/

	* configure: Regenerated.

libcc1/

	* configure: Regenerated.

libcpp/

	* configure: Regenerated.

libdecnumber/

	* configure: Regenerated.

libgcc/

	* configure: Regenerated.

libgfortran/

	* configure: Regenerated.

libgomp/

	* configure: Regenerated.

libitm/

	* configure: Regenerated.

libobjc/

	* configure: Regenerated.

libquadmath/

	* configure: Regenerated.

libsanitizer/

	* configure: Regenerated.

libssp/

	* configure: Regenerated.

libstdc++-v3/

	* configure: Regenerated.

libvtv/

	* configure: Regenerated.

zlib/

	* configure: Regenerated.
2020-05-14 09:05:02 -07:00
Christophe Lyon
4036327e4c arm: Factorize several occurrences of the same code into reg_needs_saving_p
The same code pattern occurs in several functions, so it seems cleaner
to move it into a dedicated function.

2020-05-14  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	* config/arm/arm.c (reg_needs_saving_p): New function.
	(use_return_insn): Use reg_needs_saving_p.
	(arm_get_vfp_saved_size): Likewise.
	(arm_compute_frame_layout): Likewise.
	(arm_save_coproc_regs): Likewise.
	(thumb1_expand_epilogue): Likewise.
	(arm_expand_epilogue_apcs_frame): Likewise.
	(arm_expand_epilogue): Likewise.
2020-05-14 15:38:24 +00:00
Christophe Lyon
f664bd07f0 arm.c: Clarify error message in thumb1_expand_prologue
While running the tests with -march=armv5t -mthumb, I came across this
error message which I think could be clearer.

2020-05-14  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	* config/arm/arm.c (thumb1_expand_prologue): Update error message.
2020-05-14 15:34:30 +00:00
Nathan Sidwell
68f1d74ff9 c++: Missed c++2a->20 change
Jason missed a c++2a mention.  I couldn't resist changing the loop
following to place the initializers inside the fors.

	* parser.c (cp_parser_diagnose_invalid_typename): Mention
	std=c++20 not 2a, reformat dependent binfo inform loops.
2020-05-14 08:06:35 -07:00
Nathan Sidwell
f497e36ae5 c++: Simplify tsubst_template_decl
tsubst_template_decl's control flow was also confusing.  This reorders
and flattens some of the conditionals.

	* pt.c (tsubst_template_decl): Reorder and commonize some control
	paths.
2020-05-14 07:33:13 -07:00
Nathan Sidwell
ddbaab134c c++: Simplify tsubst_friend_function
tsubst_friend_function's control flow was a little complicated.  This
simplifies it, primarily by using more RAII.

	* pt.c (tsubst_friend_function): Simplify control flow.
2020-05-14 07:22:54 -07:00
Nathan Sidwell
ea5a33d453 c++: simplify lookup_template_class_1
We were checking TYPE_NAME and then copying it if not null.  Just copy
it, and then see if we got null.

	* pt.c (lookup_template_class_1): Remove unnecessary else by
	simply grabbing TYPE_NAME earlier.
2020-05-14 07:20:35 -07:00
Nathan Sidwell
5adbd09075 c++: Adjust push_template_decl_real
Push_template_decl_real's friend-pushing logic was confusing me.  This
is more understandable.  Fix a latent type bug I disovered.

	* pt.c (push_template_decl_real): Adjust friend pushing logic.
	Reinit template type.
2020-05-14 07:18:04 -07:00
Nathan Sidwell
c4bff4c230 c++: Improve build_template_decl
I discovered all the users of build_template_decl were explicitly
setting the RESULT and TYPE fields of the built decl.  Let's just have
build_template_decl do that in the first place.

	* pt.c (build_template_decl): Init DECL_TEMPLATE_RESULT &
	TREE_TYPE here ...
	(process_partial_specialization): ... not here ...
	(push_template_decl_real, add_inherited_template_parms)
	(build_deduction_guide): ... or here.
2020-05-14 06:39:29 -07:00
Martin Liska
941c947470
Add tests for gcc-changelog.
* gcc-changelog/test_email.py: New file.
	* gcc-changelog/test_patches.txt: New file.
2020-05-14 13:59:36 +02:00
Uros Bizjak
365e3cde49 i386: Add V2DFmode conversion functions [PR95046]
gcc/ChangeLog:

	PR target/95046
	* config/i386/sse.md (sse2_cvtpi2pd): Add memory to alternative 1.

	(floatv2siv2df2): New expander.
	(floatunsv2siv2df2): New insn pattern.

	(fix_truncv2dfv2si2): New expander.
	(fixuns_truncv2dfv2si2): New insn pattern.

testsuite/ChangeLog:

	PR target/95046
	* gcc.target/i386/pr95046-6.c: New test.
2020-05-14 13:47:33 +02:00
Richard Sandiford
2c814af65e aarch64: Fix arm_sve_vector_bits on typedefs [PR95105]
Compiling this testcase with -march=armv8.2-a+sve
-msve-vector-bits=512:

----------------------------------------------------------
typedef __SVFloat32_t foo;
typedef foo bar __attribute__((arm_sve_vector_bits(512)));
template<typename T> struct s { T x; };
extern s<bar> a;
bar &b = a.x;
----------------------------------------------------------

gave the bogus error:

  cannot bind non-const lvalue reference of type ‘bar&’ to an rvalue
  of type ‘bar’

The testcase works if the attribute is applied directly
to __SVFloat32_t instead of via foo.

This shows a more general problem with the way that we were handling
the arm_sve_vector_bits attribute: we started by building a distinct
copy of the type to which the attribute was applied, instead of starting
with its main variant.  This new type then became its own main variant,
meaning that the relationship between types that have the attribute
could be different from the relationship between types that don't have
the attribute.

This patch instead copies the main variant of the original type and then
reapplies all the differences.

2020-05-14  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	PR target/95105
	* config/aarch64/aarch64-sve-builtins.cc
	(handle_arm_sve_vector_bits_attribute): Create a copy of the
	original type's TYPE_MAIN_VARIANT, then reapply all the differences
	between the original type and its main variant.

gcc/testsuite/
	PR target/95105
	* gcc.target/aarch64/sve/acle/general/attributes_8.c: New test.
	* g++.target/aarch64/sve/acle/general-c++/attributes_1.C: Likewise.
2020-05-14 12:20:32 +01:00
Richard Biener
0d1ccfd0cc testsuite/94703 - skip gcc.dg/tree-ssa/pr94703.c on strict-align targets
The specific dump scanning doesn't work on strict-align targets,
the following simply skips the testcase for those.

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

	PR testsuite/94703
	* gcc.dg/tree-ssa/pr94703.c: Skip for strict-align targets.
2020-05-14 11:58:10 +02:00
Richard Biener
568c985113 middle-end/95118 - fix printing of denormal zero
This fixes printing a REAL_CST generated from value-numbering
punning some bits to a real which turns out as zero with big
negative exponent.  This causes the loop in real_to_decimal_for_mode to
never terminate.

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

	PR middle-end/95118
	* real.c (real_to_decimal_for_mode): Make sure we handle
	a zero with nonzero exponent.

	* gcc.dg/pr95118.c: New testcase.
2020-05-14 10:50:05 +02:00
Jakub Jelinek
7a50e70875 openmp: cgraph support for late declare variant resolution
This is a new version of the
https://gcc.gnu.org/legacy-ml/gcc-patches/2019-11/msg01493.html
patch.  Unlike the previous version, this one actually works properly
except for LTO, bootstrapped/regtested on x86_64-linux and i686-linux
too.

In short, #pragma omp declare variant is a directive which allows
redirection of direct calls to certain function to other calls with a
scoring system and some of those decisions need to be deferred until after
IPA.  The patch represents them with calls to an artificial FUNCTION_DECL
with declare_variant_alt in the cgraph_node set.

For LTO, the patch only saves/restores the two cgraph_node bits added in the
patch, but doesn't yet stream out and back in the on the side info for the
declare_variant_alt.  For the LTO partitioning, I believe those artificial
FUNCTION_DECLs with declare_variant_alt need to go into partition together
with anything that calls them (possibly duplicated), any way how to achieve
that?  Say if declare variant artificial fn foobar is directly
called from all of foo, bar and baz and not from qux and we want 4
partitions, one for each of foo, bar, baz, qux, then foobar is needed in the
first 3 partitions, and the IPA_REF_ADDRs recorded for foobar that right
after IPA the foobar call will be replaced with calls to foobar1, foobar2,
foobar3 or foobar (non-artificial) can of course stay in different
partitions if needed.

2020-05-14  Jakub Jelinek  <jakub@redhat.com>

	* Makefile.in (GTFILES): Add omp-general.c.
	* cgraph.h (struct cgraph_node): Add declare_variant_alt and
	calls_declare_variant_alt members and initialize them in the
	ctor.
	* ipa.c (symbol_table::remove_unreachable_nodes): Handle direct
	calls to declare_variant_alt nodes.
	* lto-cgraph.c (lto_output_node): Write declare_variant_alt
	and calls_declare_variant_alt.
	(input_overwrite_node): Read them back.
	* omp-simd-clone.c (simd_clone_create): Copy calls_declare_variant_alt
	bit.
	* tree-inline.c (expand_call_inline): Or in calls_declare_variant_alt
	bit.
	(tree_function_versioning): Copy calls_declare_variant_alt bit.
	* omp-offload.c (execute_omp_device_lower): Call
	omp_resolve_declare_variant on direct function calls.
	(pass_omp_device_lower::gate): Also enable for
	calls_declare_variant_alt functions.
	* omp-general.c (omp_maybe_offloaded): Return false after inlining.
	(omp_context_selector_matches): Handle the case when
	cfun->curr_properties has PROP_gimple_any bit set.
	(struct omp_declare_variant_entry): New type.
	(struct omp_declare_variant_base_entry): New type.
	(struct omp_declare_variant_hasher): New type.
	(omp_declare_variant_hasher::hash, omp_declare_variant_hasher::equal):
	New methods.
	(omp_declare_variants): New variable.
	(struct omp_declare_variant_alt_hasher): New type.
	(omp_declare_variant_alt_hasher::hash,
	omp_declare_variant_alt_hasher::equal): New methods.
	(omp_declare_variant_alt): New variables.
	(omp_resolve_late_declare_variant): New function.
	(omp_resolve_declare_variant): Call omp_resolve_late_declare_variant
	when called late.  Create a magic declare_variant_alt fndecl and
	cgraph node and return that if decision needs to be deferred until
	after gimplification.
	* cgraph.c (symbol_table::create_edge): Or in calls_declare_variant_alt
	bit.

	* c-c++-common/gomp/declare-variant-14.c: New test.
2020-05-14 09:58:53 +02:00
Jakub Jelinek
d0fb9ffc1b openmp: Fix placement of 2nd+ preparation statement for PHIs in simd clone lowering [PR95108]
For normal stmts, preparation statements are inserted before the stmt, so if we need multiple,
they are in the correct order, but for PHIs we emit them after labels in the entry successor
bb, and we used to emit them in the reverse order that way.

2020-05-14  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/95108
	* omp-simd-clone.c (struct modify_stmt_info): Add after_stmt member.
	(ipa_simd_modify_stmt_ops): For PHIs, only add before first stmt in
	entry block if info->after_stmt is NULL, otherwise add after that stmt
	and update it after adding each stmt.
	(ipa_simd_modify_function_body): Initialize info.after_stmt.

	* gcc.dg/gomp/pr95108.c: New test.
2020-05-14 09:51:05 +02:00
Jakub Jelinek
49ddde69fc openmp: Also implicitly mark as declare target to functions mentioned in target regions
OpenMP 5.0 also specifies that functions referenced from target regions
(except for target regions with device(ancestor:)) are also implicitly declare target to.

This patch implements that.

2020-05-14  Jakub Jelinek  <jakub@redhat.com>

	* function.h (struct function): Add has_omp_target bit.
	* omp-offload.c (omp_discover_declare_target_fn_r): New function,
	old renamed to ...
	(omp_discover_declare_target_tgt_fn_r): ... this.
	(omp_discover_declare_target_var_r): Call
	omp_discover_declare_target_tgt_fn_r instead of
	omp_discover_declare_target_fn_r.
	(omp_discover_implicit_declare_target): Also queue functions with
	has_omp_target bit set, for those walk with
	omp_discover_declare_target_fn_r, for declare target to functions
	walk with omp_discover_declare_target_tgt_fn_r.
gcc/c/
	* c-parser.c (c_parser_omp_target): Set cfun->has_omp_target.
gcc/cp/
	* cp-gimplify.c (cp_genericize_r): Set cfun->has_omp_target.
gcc/fortran/
	* trans-openmp.c: Include function.h.
	(gfc_trans_omp_target): Set cfun->has_omp_target.
libgomp/
	* testsuite/libgomp.c-c++-common/target-40.c: New test.
2020-05-14 09:48:32 +02:00
Uros Bizjak
42ef8a5e66 i386: Add V2SFmode conversion functions [PR95046]
gcc/ChangeLog:

	PR target/95046
	* config/i386/mmx.md (mmx_fix_truncv2sfv2si2): rename from mmx_pf2id.
	Add SSE/AVX alternative.  Change operand predicates from
	nonimmediate_operand to register_mmxmem_operand.
	Enable instruction pattern for TARGET_MMX_WITH_SSE.
	(fix_truncv2sfv2si2): New expander.
	(fixuns_truncv2sfv2si2): Ditto.

	(mmx_floatv2siv2sf2): rename from mmx_floatv2si2.
	Add SSE/AVX alternative.  Change operand predicates from
	nonimmediate_operand to register_mmxmem_operand.
	Enable instruction pattern for TARGET_MMX_WITH_SSE.
	(floatv2siv2sf2): New expander.
	(floatunsv2siv2sf2): Ditto.

	* config/i386/i386-builtin.def (IX86_BUILTIN_PF2ID):
	Update for rename.
	(IX86_BUILTIN_PI2FD): Ditto.

testsuite/ChangeLog:

	PR target/95046
	* gcc.target/i386/pr95046-5.c: New test.
2020-05-14 09:15:23 +02:00
Andreas Krebbel
0473885be8 IBM Z: Define probe_stack expander
Probes emitted by the common code routines still use a store.  Define
the "probe_stack" pattern to use a compare instead.

gcc/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

	* config/s390/s390.c (s390_emit_stack_probe): Call the probe_stack
	expander.
	* config/s390/s390.md ("@probe_stack2<mode>", "probe_stack"): New
	expanders.

gcc/testsuite/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

	* gcc.target/s390/stack-clash-2.c: New test.
2020-05-14 08:16:27 +02:00
Andreas Krebbel
868d351e23 IBM Z: stack clash prot: add missing updates of last_probe_offset
After emitting probes in a loop last_probe_offset needs to be updated.
Not doing this usually assumes a too low distance to the last access
when emitting the remainder leading to stack probes being omitted.

gcc/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

	* config/s390/s390.c (allocate_stack_space): Add missing updates
	of last_probe_offset.

gcc/testsuite/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

	* gcc.target/s390/stack-clash-1.c: New test.
2020-05-14 08:16:27 +02:00
Andreas Krebbel
d3e5bae174 Make anti_adjust_stack_and_probe_stack_clash extern and use it for Z
When compiling with -mbackchain -fstack-clash-protection currently no
probes are emitted.  This patch adjusts the "allocate_stack" expander
to call anti_adjust_stack_and_probe_stack_clash when needed. In order
to do this I had to export that function from explow.c.

Ok for mainline?

gcc/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

	* config/s390/s390.md ("allocate_stack"): Call
	anti_adjust_stack_and_probe_stack_clash when stack clash
	protection is enabled.
	* explow.c (anti_adjust_stack_and_probe_stack_clash): Remove
	prototype. Remove static.
	* explow.h (anti_adjust_stack_and_probe_stack_clash): Add
	prototype.

gcc/testsuite/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

	* gcc.target/s390/stack-clash-3.c: New test.
2020-05-14 08:16:27 +02:00
GCC Administrator
f806a768e1 Daily bump. 2020-05-14 00:16:22 +00:00
Kelvin Nilsen
c21d2b6661 rs6000: Add vec_extracth and vec_extractl
Add new insns vextdu[bhw]vlx, vextddvlx, vextdu[bhw]vhx, and
vextddvhx, along with built-in access and overloaded built-in
access to these insns.

[gcc]

2020-05-13  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* config/rs6000/altivec.h (vec_extractl): New #define.
	(vec_extracth): Likewise.
	* config/rs6000/altivec.md (UNSPEC_EXTRACTL): New constant.
	(UNSPEC_EXTRACTR): Likewise.
	(vextractl<mode>): New expansion.
	(vextractl<mode>_internal): New insn.
	(vextractr<mode>): New expansion.
	(vextractr<mode>_internal): New insn.
	* config/rs6000/rs6000-builtin.def (__builtin_altivec_vextdubvlx):
	New built-in function.
	(__builtin_altivec_vextduhvlx): Likewise.
	(__builtin_altivec_vextduwvlx): Likewise.
	(__builtin_altivec_vextddvlx): Likewise.
	(__builtin_altivec_vextdubvhx): Likewise.
	(__builtin_altivec_vextduhvhx): Likewise.
	(__builtin_altivec_vextduwvhx): Likewise.
	(__builtin_altivec_vextddvhx): Likewise.
	(__builtin_vec_extractl): New overloaded built-in function.
	(__builtin_vec_extracth): Likewise.
	* config/rs6000/rs6000-call.c (altivec_overloaded_builtins):
	Define overloaded forms of __builtin_vec_extractl and
	__builtin_vec_extracth.
	(builtin_function_type): Add cases to mark arguments of new
	built-in functions as unsigned.
	(rs6000_common_init_builtins): Add
	opaque_ftype_opaque_opaque_opaque_opaque.
	* config/rs6000/rs6000.md (du_or_d): New mode attribute.
	* doc/extend.texi (PowerPC AltiVec Built-in Functions Available
	for a Future Architecture): Add description of vec_extractl and
	vec_extractr built-in functions.

[gcc/testsuite]

2020-05-13  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* gcc.target/powerpc/vec-extracth-0.c: New.
	* gcc.target/powerpc/vec-extracth-1.c: New.
	* gcc.target/powerpc/vec-extracth-2.c: New.
	* gcc.target/powerpc/vec-extracth-3.c: New.
	* gcc.target/powerpc/vec-extracth-4.c: New.
	* gcc.target/powerpc/vec-extracth-5.c: New.
	* gcc.target/powerpc/vec-extracth-6.c: New.
	* gcc.target/powerpc/vec-extracth-7.c: New.
	* gcc.target/powerpc/vec-extracth-be-0.c: New.
	* gcc.target/powerpc/vec-extracth-be-1.c: New.
	* gcc.target/powerpc/vec-extracth-be-2.c: New.
	* gcc.target/powerpc/vec-extracth-be-3.c: New.
	* gcc.target/powerpc/vec-extractl-0.c: New.
	* gcc.target/powerpc/vec-extractl-1.c: New.
	* gcc.target/powerpc/vec-extractl-2.c: New.
	* gcc.target/powerpc/vec-extractl-3.c: New.
	* gcc.target/powerpc/vec-extractl-4.c: New.
	* gcc.target/powerpc/vec-extractl-5.c: New.
	* gcc.target/powerpc/vec-extractl-6.c: New.
	* gcc.target/powerpc/vec-extractl-7.c: New.
	* gcc.target/powerpc/vec-extractl-be-0.c: New.
	* gcc.target/powerpc/vec-extractl-be-1.c: New.
	* gcc.target/powerpc/vec-extractl-be-2.c: New.
	* gcc.target/powerpc/vec-extractl-be-3.c: New.
2020-05-13 16:09:17 -05:00
Patrick Palka
4924293a62 c++: SFINAE for invalid delete-expression [PR79706]
This fixes SFINAE when substitution yields an invalid delete-expression
due to the pertinent deallocation function being marked deleted or
otherwise inaccessible.

We need to check for an erroneous result from build_op_delete_call and
exit early in that case, so that we don't build a COND_EXPR around the
erroneous result which finish_decltype_type would then quietly accept.

gcc/cp/ChangeLog:

	PR c++/79706
	* init.c (build_vec_delete_1): Just return error_mark_node if
	deallocate_expr is error_mark_node.
	(build_delete): Just return error_mark_node if do_delete is
	error_mark_node.

gcc/testsuite/ChangeLog:

	PR c++/79706
	* g++.dg/template/sfinae30.C: New test.
2020-05-13 16:40:23 -04:00
Patrick Palka
7e52f8b1e0 c++: premature requires-expression folding [PR95020]
In the testcase below we're prematurely folding away the
requires-expression to 'true' after substituting in the function's
template arguments, but before substituting in the lambda's deduced
template arguments.

This patch removes the uses_template_parms check when deciding in
tsubst_requires_expr whether to keep around a new requires-expression.
Regardless of whether the template arguments are dependent, there still
might be more template parameters to later substitute in (as in the
below testcase) and even if not, tsubst_expr doesn't perform full
semantic processing unless !processing_template_decl, so we should still
wait until then to fold away the requires-expression.

gcc/cp/ChangeLog:

	PR c++/95020
	* constraint.c (tsubst_requires_expr): Produce a new
	requires-expression when processing_template_decl, even if
	template arguments are not dependent.

gcc/testsuite/ChangeLog:

	PR c++/95020
	* g++/cpp2a/concepts-lambda7.C: New test.
2020-05-13 16:40:10 -04:00
Marek Polacek
661232da72 c++: explicit(bool) malfunction with dependent expression [PR95066]
I forgot to set DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P when merging two
function declarations and as a sad consequence, we never tsubsted
the dependent explicit-specifier in tsubst_function_decl, leading to
disregarding the explicit-specifier altogether, and wrongly accepting
this test.

	PR c++/95066
	* decl.c (duplicate_decls): Set DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P.

	* g++.dg/cpp2a/explicit16.C: New test.
2020-05-13 16:25:39 -04:00
Nathan Sidwell
7040894c44 c++: Template arg comparison
When fixing up the template specialization hasher I was confused by
the control flow through template_args_equal.  This reorders the
category checking, so it is clearer as to what kind of node can reach
which point.

	* pt.c (template_args_equal): Reorder category checking for
	clarity.
2020-05-13 13:22:02 -07:00
Nathan Sidwell
2bb30de62f c++: Simplify typedef access checking
I discovered that the template typedef access check was rather more
expensive than needed.  The call of get_types_needed_access_check in
the FOR_EACH_VEC_SAFE_ELT is the moral equivalent of 'for (size_t pos
= 0; pos != strlen (string); pos++)'.  Let's not do that.

	* pt.c (perform_typedefs_access_check): Cache expensively
	calculated object references.
	(check_auto_in_tmpl_args): Just assert we do not get unexpected
	nodes, rather than silently do nothing.
	(append_type_to_template_for_access): Likewise, cache expensie
	object reference.
2020-05-13 13:17:25 -07:00
Nathan Sidwell
833c7b4b5e c++: Simplify canonical_type_parameter
Use a single vec_safe_grow_cleared, rather than that or a vec_alloc.
Use a for loop that returns early.

	* pt.c (canonical_type_parameter): Simplify.
2020-05-13 13:11:36 -07:00
Nathan Sidwell
7e6a72cb2e c++: Formatting fixups & some simplifications.
A bunch of minor reformatting, simplifications or change to checking_asserts.

	* pt.c (spec_hash_table): New typedef.
	(decl_specializations, type_specializations): Use it.
	(retrieve_specialization): Likewise.
	(register_specialization): Remove unnecessary casts.
	(push_template_decl_real): Reformat.
	(instantiate_class_template_1): Use more RAII.
	(make_argument_pack): Simplify.
	(instantiate_template_1): Use gcc_checking_assert for expensive
	asserts.
	(instantiate_decl): Likewise.
	(resolve_typename_type): Reformat comment.
	* semantics.c (struct deferred_access): Remove unnecessary GTY on
	member.
	(begin_class_definition): Fix formatting.
2020-05-13 13:03:55 -07:00
Jason Merrill
b04445d4a8 c++: Replace "C++2a" with "C++20".
C++20 isn't final quite yet, but all that remains is formalities, so let's
go ahead and change all the references.

I think for the next C++ standard we can just call it C++23 rather than
C++2b, since the committee has been consistent about time-based releases
rather than feature-based.

gcc/c-family/ChangeLog
2020-05-13  Jason Merrill  <jason@redhat.com>

	* c.opt (std=c++20): Make c++2a the alias.
	(std=gnu++20): Likewise.
	* c-common.h (cxx_dialect): Change cxx2a to cxx20.
	* c-opts.c: Adjust.
	* c-cppbuiltin.c: Adjust.
	* c-ubsan.c: Adjust.
	* c-warn.c: Adjust.

gcc/cp/ChangeLog
2020-05-13  Jason Merrill  <jason@redhat.com>

	* call.c, class.c, constexpr.c, constraint.cc, decl.c, init.c,
	lambda.c, lex.c, method.c, name-lookup.c, parser.c, pt.c, tree.c,
	typeck2.c: Change cxx2a to cxx20.

libcpp/ChangeLog
2020-05-13  Jason Merrill  <jason@redhat.com>

	* include/cpplib.h (enum c_lang): Change CXX2A to CXX20.
	* init.c, lex.c: Adjust.
2020-05-13 15:16:49 -04:00
Jason Merrill
c3cb34c632 testsuite: Support { target c++20 } in tests.
I'm not sure why I didn't check this in along with adding -std=c++20, since
I wrote this patch at the same time.  The testsuite should support both
{ target c++2a } and { target c++20 }.

gcc/testsuite/ChangeLog
2020-05-13  Jason Merrill  <jason@redhat.com>

	* lib/target-supports.exp (check_effective_target_c++20_only)
	(check_effective_target_c++20): New.
2020-05-13 15:16:49 -04:00
Ian Lance Taylor
0d5d880994 libgo: build syscall test with -static
This avoids problems finding libgo.so when running the test as root,
which invokes the test as a child process in various limited environments.

Fixes PR go/95061

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/233897
2020-05-13 11:45:55 -07:00
Ian Lance Taylor
d2ec278682 libbacktrace: mark test_large parameter unused in ztest.c
libbacktrace/
	* ztest.c (test_large): Mark state ATTRIBUTE_UNUSED.
2020-05-13 11:09:53 -07:00
Ian Lance Taylor
702adbb2ff libbacktrace: treat EACCESS like ENOENT
libbacktrace/
	PR go/95061
	* posix.c (backtrace_open): Treat EACCESS like ENOENT.
2020-05-13 10:19:58 -07:00
Jakub Jelinek
287552950d testsuite: Fix up tree-ssa/pr94969.c testcase [PR95110]
2020-05-13  Jakub Jelinek  <jakub@redhat.com>

	PR testsuite/95110
	* gcc.dg/tree-ssa/pr94969.c: Swap scan-tree-dump-not arguments.
2020-05-13 19:16:06 +02:00
Marek Polacek
be99b308d0 c++: Fix g++.dg/parse/attr4.C test.
I noticed this test failing in C++11 mode.

	* g++.dg/parse/attr4.C: Use c++11 in a target selector.
2020-05-13 12:06:04 -04:00
Richard Biener
78db0e093e add vectype parameter to add_stmt_cost hook
This adds a vectype parameter to add_stmt_cost which avoids the need
to pass down a (wrong) stmt_info just to carry this information.
Useful for invariants which do not have a stmt_info associated.

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

	* target.def (add_stmt_cost): Add new vectype parameter.
	* targhooks.c (default_add_stmt_cost): Adjust.
	* targhooks.h (default_add_stmt_cost): Likewise.
	* config/aarch64/aarch64.c (aarch64_add_stmt_cost): Take new
	vectype parameter.
	* config/arm/arm.c (arm_add_stmt_cost): Likewise.
	* config/i386/i386.c (ix86_add_stmt_cost): Likewise.
	* config/rs6000/rs6000.c (rs6000_add_stmt_cost): Likewise.

	* tree-vectorizer.h (stmt_info_for_cost::vectype): Add.
	(dump_stmt_cost): Add new vectype parameter.
	(add_stmt_cost): Likewise.
	(record_stmt_cost): Likewise.
	(record_stmt_cost): Add overload with old signature.
	* tree-vect-loop.c (vect_compute_single_scalar_iteration_cost):
	Adjust.
	(vect_get_known_peeling_cost): Likewise.
	(vect_estimate_min_profitable_iters): Likewise.
	* tree-vectorizer.c (dump_stmt_cost): Add new vectype parameter.
	* tree-vect-stmts.c (record_stmt_cost): Likewise.
	(vect_prologue_cost_for_slp_op): Remove stmt_vec_info parameter
	and pass down correct vectype and NULL stmt_info.
	(vect_model_simple_cost): Adjust.
	(vect_model_store_cost): Likewise.
2020-05-13 17:19:38 +02:00
Mark Eggleston
f9f98e59a7 Fortran : ICE in gfc_conv_array_constructor_expr PR93497
Invalid expressions, such as those involving array constructors,
used for the length of character types will cause an ICE.

2020-05-13  Steven G. Kargl  <kargl@gcc.gnu.org>

gcc/fortran/

	PR fortran/93497
	* decl.c (char_len_param_value): Check whether character
	length expression is of type EXPR_OP and if so simplify it.
	* resolve.c (resolve_charlen): Reject length if it has a
	rank.

2020-05-13  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

	PR fortran/93497
	* gfortran.dg/pr88025.f90: Change in wording of error.
	* gfortran.dg/pr93497.f90: New test.
	* gfortran.dg/pr93714_1.f90: Change in wording of errors.
	* gfortran.dg/pr93714_2.f90: Change in wording of errors.
2020-05-13 14:51:53 +01:00
Patrick Palka
6cc6b087c8 c++: Add testcase for already-fixed PR [PR70642]
We correctly reject the testcase in this PR ever since commit r9-7046.

gcc/testsuite/ChangeLog:

	PR c++/70642
	* g++.dg/cpp0x/alias-decl-70.C: New test.
2020-05-13 09:42:55 -04:00
Richard Biener
ab5934a8fe Remove SLP_INSTANCE_GROUP_SIZE
This removes the SLP_INSTANCE_GROUP_SIZE member since the number of
lanes throughout a SLP subgraph is not necessarily constant.

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

	* tree-vectorizer.h (SLP_INSTANCE_GROUP_SIZE): Remove.
	(_slp_instance::group_size): Likewise.
	* tree-vect-loop.c (vectorizable_reduction): The group size
	is the number of lanes in the node.
	* tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Likewise.
	(vect_analyze_slp_instance): Do not set SLP_INSTANCE_GROUP_SIZE,
	verify it matches the instance trees number of lanes.
	(vect_slp_analyze_node_operations_1): Use the numer of lanes
	in the node as group size.
	(vect_bb_vectorization_profitable_p): Use the instance root
	number of lanes for the size of life.
	(vect_schedule_slp_instance): Use the number of lanes as
	group_size.
	* tree-vect-stmts.c (vectorizable_load): Remove SLP instance
	parameter.  Use the number of lanes of the load for the group
	size in the gap adjustment code.
	(vect_analyze_stmt): Adjust.
	(vect_transform_stmt): Likewise.
2020-05-13 15:26:45 +02:00
Patrick Palka
9b56828c57
contrib/vimrc: Reduce textwidth for commit messages
* vimrc: Reduce textwidth to 72 for Git commit messages.
2020-05-13 14:58:50 +02:00