Commit Graph

184343 Commits

Author SHA1 Message Date
Richard Sandiford a3317f7b3c c: Don't drop vector attributes that affect type identity [PR98852]
<arm_neon.h> types are distinct from GNU vector types in at least
their mangling.  However, there used to be nothing explicit in the
VECTOR_TYPE itself to indicate the difference: we simply treated them
as distinct TYPE_MAIN_VARIANTs.  This caused problems like the ones
reported in PR95726.

The fix for that PR was to add type attributes to the <arm_neon.h>
types, in order to maintain the distinction between them and GNU
vectors.  However, this in turn caused PR98852, where c_common_type
would unconditionally drop the attributes on the source types.
This meant that:

   <arm_neon.h> vector + <arm_neon.h> vector

had a GNU vector type rather than an <arm_neon.h> vector type.

See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96377#c2 for
Jakub's analysis of the history of this c_common_type code.
TBH I'm not sure which case the build_type_attribute_variant
code is handling, but I think we should at least avoid dropping
attributes that affect type identity.

I've tried to audit the C and target-specific attributes to look
for other types that might be affected by this, but I couldn't
see any.  We are only dealing with:

  gcc_assert (code1 == VECTOR_TYPE || code1 == COMPLEX_TYPE
	      || code1 == FIXED_POINT_TYPE || code1 == REAL_TYPE
	      || code1 == INTEGER_TYPE);

which excludes most affects_type_identity attributes.  The closest
was s390_vector_bool, but the handler for that attribute changes
the type node and drops the attribute itself (*no_add_attrs = true).

I put the main list handling into a separate function
(remove_attributes_matching) because a later patch will need it
for something else.

gcc/
	PR c/98852
	* attribs.h (affects_type_identity_attributes): Declare.
	* attribs.c (remove_attributes_matching): New function.
	(affects_type_identity_attributes): Likewise.

gcc/c/
	PR c/98852
	* c-typeck.c (c_common_type): Do not drop attributes that
	affect type identity.

gcc/testsuite/
	PR c/98852
	* gcc.target/aarch64/advsimd-intrinsics/pr98852.c: New test.
2021-04-15 11:37:38 +01:00
Jan Hubicka b5f644a98b Fix handling of clones in lto_wpa_write_files [PR98599]
2021-04-15  Jan Hubicka  <hubicka@ucw.cz>

	PR lto/98599
	* lto.c (lto_wpa_write_files): Fix handling of clones.
2021-04-15 11:40:40 +02:00
Thomas Schwinge 4dd9e1c541 XFAIL OpenMP/nvptx execution-time hangs for simple nested OpenMP 'target'/'parallel'/'task' constructs [PR99555]
... still awaiting proper resolution, of course.

	libgomp/
	PR target/99555
	* testsuite/lib/libgomp.exp
	(check_effective_target_offload_device_nvptx): New.
	* testsuite/libgomp.c/pr99555-1.c <nvptx offload device>: Until
	resolved, make sure that we exit quickly, with error status,
	XFAILed.
	* testsuite/libgomp.c-c++-common/task-detach-6.c: Likewise.
	* testsuite/libgomp.fortran/task-detach-6.f90: Likewise.
2021-04-15 11:13:27 +02:00
Jakub Jelinek 39d23b7960 aarch64: Fix several *<LOGICAL:optab>_ashl<mode>3 related regressions [PR100056]
Before combiner added 2 to 2 combinations, the following testcase functions
have been all compiled into 2 instructions, zero/sign extensions or and
followed by orr with lsl, e.g. for the first function
Trying 7 -> 8:
    7: r96:SI=r94:SI<<0xb
    8: r95:SI=r96:SI|r94:SI
      REG_DEAD r96:SI
      REG_DEAD r94:SI
Successfully matched this instruction:
(set (reg:SI 95)
    (ior:SI (ashift:SI (reg/v:SI 94 [ i ])
            (const_int 11 [0xb]))
        (reg/v:SI 94 [ i ])))
is the important successful try_combine and so we end up with
        and     w0, w0, 255
        orr     w0, w0, w0, lsl 11
in the body.
With 2 to 2 combination, before that can trigger, another successful
combination:
Trying 2 -> 7:
    2: r94:SI=zero_extend(x0:QI)
      REG_DEAD x0:QI
    7: r96:SI=r94:SI<<0xb
is replaced with:
(set (reg/v:SI 94 [ i ])
    (zero_extend:SI (reg:QI 0 x0 [ i ])))
and
(set (reg:SI 96)
    (and:SI (ashift:SI (reg:SI 0 x0 [ i ])
            (const_int 11 [0xb]))
        (const_int 522240 [0x7f800])))
and in the end results in 3 instructions in the body:
        and     w1, w0, 255
        ubfiz   w0, w0, 11, 8
        orr     w0, w0, w1
The following combine splitters help undo that when combiner tries to
combine 3 instructions - the zero/sign extend or and, the other insn
from the 2 to 2 combination ([us]bfiz) and the logical op, the CPUs
don't have an insn to do everything in one op, but we can split it
back into the zero/sign extend or and followed by logical with lsl.

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

	PR target/100056
	* config/aarch64/aarch64.md (*<LOGICAL:optab>_<SHIFT:optab><mode>3):
	Add combine splitters for *<LOGICAL:optab>_ashl<mode>3 with
	ZERO_EXTEND, SIGN_EXTEND or AND.

	* gcc.target/aarch64/pr100056.c: New test.
2021-04-15 10:45:09 +02:00
Paul Thomas 9a0e09f3dd Fortran: Fix class reallocate on assignment [PR99307].
2021-04-15  Paul Thomas  <pault@gcc.gnu.org>

gcc/fortran
	PR fortran/99307
	* symbol.c: Remove trailing white space.
	* trans-array.c (gfc_trans_create_temp_array): Create a class
	temporary for class expressions and assign the new descriptor
	to the data field.
	(build_class_array_ref): If the class expr can be extracted,
	then use that for 'decl'. Class function results are reliably
	handled this way. Call gfc_find_and_cut_at_last_class_ref to
	eliminate largely redundant code. Remove dead code and recast
	the rest of the code to extract 'decl' for remaining cases.
	Call gfc_build_spanned_array_ref.
	(gfc_alloc_allocatable_for_assignment): Use class descriptor
	element length for 'elemsize1'. Eliminate repeat set of dtype
	for class expressions.
	* trans-expr.c (gfc_find_and_cut_at_last_class_ref): Include
	additional code from build_class_array_ref, and use optional
	gfc_typespec pointer argument.
	(gfc_trans_scalar_assign): Make use of pre and post blocks for
	all class expressions.
	* trans.c (get_array_span): For unlimited polymorphic exprs
	multiply the span by the value of the _len field.
	(gfc_build_spanned_array_ref): New function.
	(gfc_build_array_ref): Call gfc_build_spanned_array_ref and
	eliminate repeated code.
	* trans.h: Add arg to gfc_find_and_cut_at_last_class_ref and
	add prototype for gfc_build_spanned_array_ref.
2021-04-15 07:34:26 +01:00
Stefan Schulze Frielinghaus 417c36cfd6 re PR tree-optimization/93210 (Sub-optimal code optimization on struct/combound constexpr (gcc vs. clang))
Regarding test gcc.dg/pr93210.c, on different targets GIMPLE code may
slightly differ which is why the scan-tree-dump-times directive may
fail.  For example, for a RETURN_EXPR on x86_64 we have

  return 0x11100f0e0d0c0a090807060504030201;

whereas on IBM Z the first operand is a RESULT_DECL like

  <retval> = 0x102030405060708090a0c0d0e0f1011;
  return <retval>;

gcc/testsuite/ChangeLog:

	* gcc.dg/pr93210.c: Adapt regex in order to also support a
	RESULT_DECL as an operand for a RETURN_EXPR.
2021-04-15 08:04:46 +02:00
GCC Administrator df3b128952 Daily bump. 2021-04-15 00:16:47 +00:00
Richard Sandiford a87d3f964d Check for matching CONST_VECTOR encodings [PR99929]
PR99929 is one of those “how did we get away with this for so long”
bugs: the equality routines weren't checking whether two variable-length
CONST_VECTORs had the same encoding.  This meant that:

   { 1, 0, 0, 0, 0, 0, ... }

would appear to be equal to:

   { 1, 0, 1, 0, 1, 0, ... }

since both are represented using the elements { 1, 0 }.

gcc/
	PR rtl-optimization/99929
	* rtl.h (same_vector_encodings_p): New function.
	* cse.c (exp_equiv_p): Check that CONST_VECTORs have the same encoding.
	* cselib.c (rtx_equal_for_cselib_1): Likewise.
	* jump.c (rtx_renumbered_equal_p): Likewise.
	* lra-constraints.c (operands_match_p): Likewise.
	* reload.c (operands_match_p): Likewise.
	* rtl.c (rtx_equal_p_cb, rtx_equal_p): Likewise.

gcc/testsuite/
	* gcc.target/aarch64/sve/pr99929_1.c: New file.
	* gcc.target/aarch64/sve/pr99929_2.c: Likewise.
2021-04-14 20:06:45 +01:00
Richard Sandiford 1fce5932a3 Better const_vector printing
Looking at PR99929 showed that we weren't dumping enough information
about variable-length CONST_VECTORs.  Something like:

  (const_vector:VNx4SI [(const_int 1) (const_int 0)])

could be either:

(a) 1, 0, 1, 0, repeating
(b) 1 followed by all zeros

This patch adds more information to the dumps.  There are four cases:

(a) above:

    (const_vector:VNx4SI repeat [
      (const_int 1)
      (const_int 0)
    ])

(b) above:

    (const_vector:VNx4SI [
      (const_int 1)
      repeat [
        (const_int 0)
      ]
    ])

a single stepped sequence:

    (const_vector:VNx4SI [
      (const_int 0)
      stepped [
        (const_int 1)
        (const_int 2)
      ]
    ])

interleaved stepped sequences:

    (const_vector:VNx4SI [
      (const_int 0)
      (const_int 40)
      stepped (interleave 2) [
        (const_int 1)
        (const_int 41)
        (const_int 2)
        (const_int 42)
      ]
    ])

There are probably better syntaxes, but hopefully this is at least
an improvement on the status quo.

gcc/
	* print-rtl.c (rtx_writer::print_rtx_operand_codes_E_and_V): Print
	more information about variable-length CONST_VECTORs.
2021-04-14 20:06:44 +01:00
Jason Merrill 00a2774923 c++: premature overload resolution redux [PR100078]
My patch for PR93085 didn't consider that a default template argument can
also make a template dependent.

gcc/cp/ChangeLog:

	PR c++/100078
	PR c++/93085
	* pt.c (uses_outer_template_parms): Also look at default
	template argument.

gcc/testsuite/ChangeLog:

	PR c++/100078
	* g++.dg/template/dependent-tmpl2.C: New test.
2021-04-14 14:14:31 -04:00
Jason Merrill 9b53edc796 c++: non-static member, array bound, sizeof [PR93314]
N2253 allowed referring to non-static data members without an object in
unevaluated operands like that of sizeof, but in a constant-expression
context like an array bound or template argument within such an unevaluated
operand we do actually need a value, so that permission cannot apply.

gcc/cp/ChangeLog:

	PR c++/93314
	* semantics.c (finish_id_expression_1): Clear cp_unevaluated_operand
	for a non-static data member in a constant-expression.

gcc/testsuite/ChangeLog:

	PR c++/93314
	* g++.dg/parse/uneval1.C: New test.
2021-04-14 13:47:46 -04:00
Vladimir N. Makarov f99f64f69d [PR100066] Check paradoxical subreg when splitting hard reg live range
When splitting live range of a hard reg, LRA actually split multi-register
containing the hard reg.  So we need to check the biggest used mode of the hard reg on
paradoxical subregister when the natural and the biggest
mode are ordered.

gcc/ChangeLog:

	PR rtl-optimization/100066
	* lra-constraints.c (split_reg): Check paradoxical_subreg_p for
	ordered modes when choosing splitting mode for hard reg.

gcc/testsuite/ChangeLog:

	PR rtl-optimization/100066
	* gcc.target/i386/pr100066.c: New.
2021-04-14 13:22:41 -04:00
Martin Sebor 785209fc46 PR testsuite/100073 - test case gcc.dg/pr86058.c fails on arm, powerpc64
gcc/testsuite/ChangeLog:
	* gcc.dg/pr86058.c: Limit to just x86_64.
2021-04-14 10:43:22 -06:00
Richard Sandiford a065e0bb09 aarch64: Handle more SVE vector constants [PR99246]
PR99246 is about a case in which we failed to handle a CONST_VECTOR
with NELTS_PER_PATTERN==2, i.e. a vector with a “foreground” sequence
of N vectors followed by a repeating “background” sequence of N vectors.

At the moment, it's difficult to produce these vectors directly,
but I'm hoping that for GCC 12 we'll do more folding, which will
in turn make this easier to test and easier to optimise.  Until then,
the patch simply relies on the testcase in the PR.

gcc/
	PR target/99246
	* config/aarch64/aarch64.c (aarch64_expand_sve_const_vector_sel):
	New function.
	(aarch64_expand_sve_const_vector): Use it for nelts_per_pattern==2.

gcc/testsuite/
	PR target/99246
	* gcc.target/aarch64/sve/acle/general/pr99246.c: New test.
2021-04-14 16:19:46 +01:00
Andreas Krebbel 3191c1f448 IBM Z: Fix error checking for immediate builtin operands
This fixes the error checking for two of the vector builtins which
accept irregular (e.g. non-contigiuous) ranges of values.

gcc/ChangeLog:

	* config/s390/s390-builtins.def (O_M5, O_M12, ...): Add new macros
	for mask operand types.
	(s390_vec_permi_s64, s390_vec_permi_b64, s390_vec_permi_u64)
	(s390_vec_permi_dbl, s390_vpdi): Use the M5 type for the immediate
	operand.
	(s390_vec_msum_u128, s390_vmslg): Use the M12 type for the
	immediate operand.
	* config/s390/s390.c (s390_const_operand_ok): Check the new
	operand types and generate a list of valid values.

gcc/testsuite/ChangeLog:

	* gcc.target/s390/zvector/imm-range-error-1.c: New test.
	* gcc.target/s390/zvector/vec_msum_u128-1.c: New test.
2021-04-14 16:14:16 +02:00
Iain Buclaw 527bc0181d d: Add TARGET_D_REGISTER_OS_TARGET_INFO
This allows target platforms that have D support files to defined their
own target-specific information keys.

gcc/ChangeLog:

	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in (D language and ABI): Add @hook for
	TARGET_D_REGISTER_OS_TARGET_INFO.

gcc/d/ChangeLog:

	* d-target.cc (Target::_init): Call new targetdm hook to register OS
	specific target info keys.
	* d-target.def (d_register_os_target_info): New hook.
2021-04-14 15:33:32 +02:00
Patrick Palka 2ccc05a514 c++: Fix deduction with reference NTTP [PR83476]
In the testcase ref11.C below, during deduction for the call f(a),
uses_deducible_template_parms returns false for the dependent
specialization A<V> because the generic template argument V here is
wrapped in an implicit INDIRECT_REF (formed from template_parm_to_arg).
Since uses_deducible_template_parms returns false, unify_one_argument
exits early without ever attempting to deduce 'n' for 'V'.  This patch
fixes this by making deducible_expression look through such implicit
INDIRECT_REFs.

gcc/cp/ChangeLog:

	PR c++/83476
	PR c++/99885
	* pt.c (deducible_expression): Look through implicit
	INDIRECT_REFs as well.

gcc/testsuite/ChangeLog:

	PR c++/83476
	PR c++/99885
	* g++.dg/cpp1z/class-deduction85.C: New test.
	* g++.dg/template/ref11.C: New test.
2021-04-14 08:54:30 -04:00
Iain Buclaw a5e4abac26 d: Remove setting of target-specific global.params flags from front-end
Now that all dependencies on these flags have been removed, there's no
need to test and set them.

gcc/d/ChangeLog:

	* d-builtins.cc (d_add_builtin_version): Remove all setting of
	target-specific global.params.
	* typeinfo.cc (create_typeinfo): Don't add argType fields to
	TypeInfo_Struct.
2021-04-14 14:43:38 +02:00
Iain Buclaw 5b63eb17d8 d: Move call to set_linkage_for_decl to declare_extern_var.
This both prevents against it being called twice for declarations that
are defined, and fixes an issue where variables defined in the
compilation get one kind of linkage (weak), and the same variables
declared via declare_extern_var get another (extern).

gcc/d/ChangeLog:

	PR d/99914
	* decl.cc (DeclVisitor::visit (StructDeclaration *)): Don't set
	DECL_INSTANTIATED on static initializer declarations.
	(DeclVisitor::visit (ClassDeclaration *)): Likewise.
	(DeclVisitor::visit (EnumDeclaration *)): Likewise.
	(d_finish_decl): Move call to set_linkage_for_decl to...
	(declare_extern_var): ...here.
2021-04-14 14:43:38 +02:00
Iain Buclaw 3785d2b207 d: Add TARGET_D_REGISTER_CPU_TARGET_INFO
This implements `__traits(getTargetInfo, "floatAbi")' for all targets
that have D support files.

gcc/ChangeLog:

	* config/aarch64/aarch64-d.c (aarch64_d_handle_target_float_abi): New
	function.
	(aarch64_d_register_target_info): New function.
	* config/aarch64/aarch64-protos.h (aarch64_d_register_target_info):
	Declare.
	* config/aarch64/aarch64.h (TARGET_D_REGISTER_CPU_TARGET_INFO):
	Define.
	* config/arm/arm-d.c (arm_d_handle_target_float_abi): New function.
	(arm_d_register_target_info): New function.
	* config/arm/arm-protos.h (arm_d_register_target_info): Declare.
	* config/arm/arm.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
	* config/i386/i386-d.c (ix86_d_handle_target_float_abi): New function.
	(ix86_d_register_target_info): New function.
	* config/i386/i386-protos.h (ix86_d_register_target_info): Declare.
	* config/i386/i386.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
	* config/mips/mips-d.c (mips_d_handle_target_float_abi): New function.
	(mips_d_register_target_info): New function.
	* config/mips/mips-protos.h (mips_d_register_target_info): Declare.
	* config/mips/mips.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
	* config/pa/pa-d.c (pa_d_handle_target_float_abi): New function.
	(pa_d_register_target_info): New function.
	* config/pa/pa-protos.h (pa_d_register_target_info): Declare.
	* config/pa/pa.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
	* config/riscv/riscv-d.c (riscv_d_handle_target_float_abi): New
	function.
	(riscv_d_register_target_info): New function.
	* config/riscv/riscv-protos.h (riscv_d_register_target_info): Declare.
	* config/riscv/riscv.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
	* config/rs6000/rs6000-d.c (rs6000_d_handle_target_float_abi): New
	function.
	(rs6000_d_register_target_info): New function.
	* config/rs6000/rs6000-protos.h (rs6000_d_register_target_info):
	Declare.
	* config/rs6000/rs6000.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
	* config/s390/s390-d.c (s390_d_handle_target_float_abi): New function.
	(s390_d_register_target_info): New function.
	* config/s390/s390-protos.h (s390_d_register_target_info): Declare.
	* config/s390/s390.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
	* config/sparc/sparc-d.c (sparc_d_handle_target_float_abi): New
	function.
	(sparc_d_register_target_info): New function.
	* config/sparc/sparc-protos.h (sparc_d_register_target_info): Declare.
	* config/sparc/sparc.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in (D language and ABI): Add @hook for
	TARGET_D_REGISTER_CPU_TARGET_INFO.

gcc/d/ChangeLog:

	* d-target.cc (Target::_init): Call new targetdm hook to register CPU
	specific target info keys.
	* d-target.def (d_register_cpu_target_info): New hook.
2021-04-14 14:43:38 +02:00
Iain Buclaw d253a6f7bb d: Add TARGET_D_HAS_STDCALL_CONVENTION
This replaces the use of the D front-end `is64bit' parameter in
determining whether to insert the "stdcall" function attribute.

It is also used to determine whether `extern(System)' should be the same
as `extern(Windows)' in the implementation of Target::systemLinkage.

gcc/ChangeLog:

	* config/i386/i386-d.c (ix86_d_has_stdcall_convention): New function.
	* config/i386/i386-protos.h (ix86_d_has_stdcall_convention): Declare.
	* config/i386/i386.h (TARGET_D_HAS_STDCALL_CONVENTION): Define.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in (D language and ABI): Add @hook for
	TARGET_D_HAS_STDCALL_CONVENTION.

gcc/d/ChangeLog:

	* d-target.cc (Target::systemLinkage): Return LINKwindows if
	d_has_stdcall_convention applies to LINKsystem.
	* d-target.def (d_has_stdcall_convention): New hook.
	* types.cc (TypeVisitor::visit (TypeFunction *)): Insert "stdcall"
	function attribute if d_has_stdcall_convention applies to LINKwindows.
2021-04-14 14:43:37 +02:00
Richard Biener 3330e67395 VEC_COND_EXPR verification adjustment
This adjusts GIMPLE verification with respect to the VEC_COND_EXPR
changes forcing a split out condition.

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

	* tree-cfg.c (verify_gimple_assign_ternary): Verify that
	VEC_COND_EXPRs have a gimple_val condition.
	* tree-ssa-propagate.c (valid_gimple_rhs_p): VEC_COND_EXPR
	can no longer have a GENERIC condition.
2021-04-14 13:39:33 +02:00
Martin Liska e4fd26d647 docs: Remove empty table column.
gcc/fortran/ChangeLog:

	* intrinsic.texi: The table has first column empty and it makes
	trouble when processing makeinfo --xml output.
2021-04-14 12:28:07 +02:00
Richard Earnshaw d1e4368ddb arm: fix warning when -mcpu=neoverse-n1 is used with -mfpu=neon [PR100067]
If the compiler is configured with --with-fpu=<!auto> (or invoked
with, say, -mfpu=neon), then specifying -mcpu=neoverse-n1 can lead to
an unexpected warning: cc1: warning: switch ‘-mcpu=neoverse-n1’
conflicts with ‘-march=armv8.2-a’ switch

The fix for this is to correctly remove all the feature bits relating
to simd/fp units when -mfpu is used, not just those bits that form
part of the -mfpu specification (which is a subset).

gcc:
	PR target/100067
	* config/arm/arm.c (arm_configure_build_target): Strip isa_all_fpbits
	from the isa_delta when -mfpu has been used.
	(arm_options_perform_arch_sanity_checks): It's the architecture that
	lacks an FPU not the processor.
2021-04-14 10:56:36 +01:00
Jakub Jelinek 287be7f7a5 testsuite: Fix up libgomp.fortran/alloc-1.F90 testcase [PR100071]
As can be seen under valgrind, the testcase didn't bind in the last part
the fortran pointers properly to the c pointers.

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

	PR testsuite/100071
	* testsuite/libgomp.fortran/alloc-1.F90: Call c_f_pointer after last
	cp = omp_alloc with cp, p arguments instead of cq, q and call
	c_f_pointer after last cq = omp_alloc with cq, q.
2021-04-14 10:48:56 +02:00
Jason Merrill e1666ebd9a c++: lambda in non-type template parm type [PR99478]
In this testcase, the non-type template parameter has the type of a
lambda-expression.  This makes no sense because a lambda in template context
is specified to be distinct between different specializations of the
template, even if the lambda is non-dependent, but here which specialization
we are dealing with depends on which lambda we have, and vice versa.

gcc/cp/ChangeLog:

	PR c++/99478
	* parser.c (cp_parser_lambda_expression): Reject lambda
	in template parameter type.

gcc/testsuite/ChangeLog:

	PR c++/99478
	* g++.dg/cpp2a/lambda-uneval14.C: New test.
2021-04-13 22:35:14 -04:00
Jason Merrill 0589be0c59 c++: DWARF ICE with defaulted specialization [PR90674]
Here when we merged the specialization with the implicit instantiation
declaration, we wrongly kept the value of DECL_INITIALIZED_IN_CLASS_P from
the latter.

gcc/cp/ChangeLog:

	PR c++/90674
	* decl.c (duplicate_decls): Don't propagate
	DECL_INITIALIZED_IN_CLASS_P to a specialization.

gcc/testsuite/ChangeLog:

	PR c++/90674
	* g++.dg/debug/defaulted1.C: New test.
2021-04-13 20:32:13 -04:00
Jason Merrill 006783f4b1 c++: debug location of variable cleanups [PR88742]
PR49951 complained about the debugger jumping back to the declaration of a
local variable when we run its destructor.  That was fixed in 4.7, but broke
again in 4.8.  PR58123 fixed an inconsistency in the behavior, but not the
jumping around.  This patch addresses the issue by setting EXPR_LOCATION on
a cleanup destructor call to the location of the closing brace of the
compound-statement, or whatever token ends the scope of the variable.

The change to cp_parser_compound_statement is so input_location is the }
rather than the ; of the last substatement.

gcc/cp/ChangeLog:

	PR c++/88742
	PR c++/49951
	PR c++/58123
	* semantics.c (set_cleanup_locs): New.
	(do_poplevel): Call it.
	* parser.c (cp_parser_compound_statement): Consume the }
	before finish_compound_stmt.

gcc/testsuite/ChangeLog:

	PR c++/88742
	* g++.dg/debug/cleanup1.C: New test.
	* c-c++-common/Wimplicit-fallthrough-6.c: Adjust diagnostic line.
	* c-c++-common/Wimplicit-fallthrough-7.c: Likewise.
	* g++.dg/cpp2a/constexpr-dtor3.C: Likewise.
	* g++.dg/ext/constexpr-attr-cleanup1.C: Likewise.
	* g++.dg/tm/inherit2.C: Likewise.
	* g++.dg/tm/unsafe1.C: Likewise.
	* g++.dg/warn/Wimplicit-fallthrough-1.C: Likewise.
	* g++.dg/gcov/gcov-2.C: Adjust coverage counts.
2021-04-13 20:17:58 -04:00
GCC Administrator 6d0d35d518 Daily bump. 2021-04-14 00:16:24 +00:00
Martin Sebor af7128621e PR tree-optimization/82800 - Incorrect warning on "may be used uninitialized in variadic template code
gcc/testsuite/ChangeLog:
	PR tree-optimization/82800
	* g++.dg/warn/uninit-pr82800.C: New test.
2021-04-13 14:53:26 -06:00
Martin Sebor 8084ab15a3 PR middle-end/86058 - TARGET_MEM_REF causing incorrect message for -Wmaybe-uninitialized warning
gcc/testsuite/ChangeLog:
	PR middle-end/86058
	* gcc.dg/pr86058.c: New test.
2021-04-13 13:46:21 -06:00
Patrick Palka 96d73645c7 c++: Adjust expected diagnostics for old-deja tests [PR99008]
I missed adjusting these tests in the recently committed r11-8155.

gcc/testsuite/ChangeLog:

	PR c++/99008
	* g++.old-deja/g++.ns/crash3.C: Adjust expected diagnostic.
	* g++.old-deja/g++.ns/template7.C: Likewise.
	* g++.old-deja/g++.pt/crash8.C: Likewise.
2021-04-13 15:40:08 -04:00
Jason Merrill 34ec63f1b5 c++: alias template equivalence and cv-quals [PR100032]
We also need to check that the cv-qualifiers are the same.

gcc/cp/ChangeLog:

	PR c++/100032
	* pt.c (get_underlying_template): Compare TYPE_QUALS.

gcc/testsuite/ChangeLog:

	PR c++/100032
	* g++.dg/cpp0x/alias-decl-equiv1.C: New test.
2021-04-13 15:20:09 -04:00
Jakub Jelinek 4df918798b testsuite: Add testcase for already fixed PR97121
This was fixed by r11-5866 aka PR96299 fix.

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

	PR c++/97121
	* g++.dg/cpp2a/spaceship-err6.C: New test.
2021-04-13 20:42:07 +02:00
Jason Merrill 6173f713a3 c++: generic lambda in template fn with DMI [PR100054]
get_nsdmi instantiates default member initializers on demand.  It tries to
push into the context of the class before doing so, so access checking works
properly, but since my patch for 90479 not for local classes.  We should
only be doing this when any template parameters have arguments.  But in this
case, we get here while regenerating a generic lambda, so
processing_template_decl is true, even though the class and its DMI are
non-dependent at this point.  And so we crashed.  So let's do more of the
pushing into the context of the class even for local classes.

gcc/cp/ChangeLog:

	PR c++/100054
	PR c++/90479
	* init.c (get_nsdmi): Do more context adjustment for local classes.

gcc/testsuite/ChangeLog:

	PR c++/100054
	* g++.dg/cpp1y/lambda-generic-local-class1.C: New test.
2021-04-13 14:01:50 -04:00
Jonathan Wakely 474cb5a0a4 libstdc++: Fix <bit> to work freestanding [PR 100060]
libstdc++-v3/ChangeLog:

	PR libstdc++/100060
	* include/std/bit: Only include <ext/numeric_traits.h> for
	hosted build, use <limits> otherwise.
2021-04-13 17:54:03 +01:00
Patrick Palka 8913b2c2bc c++: Reject alias CTAD in C++17 [PR99008]
Here, in C++17 mode, we only pedwarn about the use of alias CTAD and
then later ICE from alias_ctad_tweaks when attempting to constrain
the guides.  Since the construction of the guides of an alias template
effectively relies on concepts, we shouldn't be permissive about alias
CTAD in C++17 mode, so this patch turns the pertinent pedwarn in
do_class_deduction into an error.

In order to get a consistent diagnostic for B() vs the other forms in
the added testcase, I had to remove the special handling of CTAD with
empty initializer in build_functional_cast_1 so that we always pass
'complain' to do_auto_deduction.

gcc/cp/ChangeLog:

	PR c++/99008
	* pt.c (do_class_deduction): Reject alias CTAD in C++17 mode
	rather than issuing a pedwarn.
	* typeck2.c (build_functional_cast_1): Handle CTAD uniformly
	for consistent diagnostics.

gcc/testsuite/ChangeLog:

	PR c++/99008
	* g++.dg/parse/template2.C: Adjust expected diagnostic.
	* g++.dg/template/error8.C: Likewise.
	* g++.dg/cpp1z/class-deduction84.C: New test.
2021-04-13 12:35:33 -04:00
Jonathan Wakely 989e512f71 libstdc++: Remove outdated docs on libg++ and libstdc++-v2
The libstdc++-v3 manual doesn't need to document how to use its
predecessors.

libstdc++-v3/ChangeLog:

	* doc/xml/manual/backwards_compatibility.xml: Remove porting
	notes for libg++ and libstdc++-v2, and bibliography.
	* doc/html/*: Regenerated.
2021-04-13 16:34:15 +01:00
Eric Botcazou 39fa0de599 Further increase the limit on the size of accepted Ada files
It turns out that the limit on the size of accepted Ada files had been
already lowered earlier, namely when location ranges had been introduced.
Now we do not make use of location ranges in Ada so we can recoup the loss.

gcc/ada/
	* gcc-interface/misc.c (gnat_init): Set default range bits to 0.
	* gcc-interface/trans.c (extract_encoding): Delete.
	(decode_name): Likewise.
	(File_Name_to_gnu): New function.
	(gigi): Call it to translate file names.  Replace assertion on
	1-1 mapping between files and line maps with conditional error.
2021-04-13 17:11:15 +02:00
Richard Biener f9810422f6 tree-optimization/100053 - fix predication in VN
This avoids doing optimistic dominance queries involving
non-executable backedges when validating recorded predicated values
in VN because we have no way to force re-evaluating validity when
optimistically not executable edges become executable later.

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

	PR tree-optimization/100053
	* tree-ssa-sccvn.c (vn_nary_op_get_predicated_value): Do
	not use optimistic dominance queries for backedges to validate
	predicated values.
	(dominated_by_p_w_unex): Add parameter to ignore executable
	state on backedges.
	(rpo_elim::eliminate_avail): Adjust.

	* gcc.dg/torture/pr100053.c: New testcase.
	* gcc.dg/tree-ssa/ssa-fre-93.c: Likewise.
2021-04-13 14:30:57 +02:00
Jason Merrill 0851ac6df0 c++: constexpr, inheritance, and local class [PR91933]
Here we complained about referring to nm3 from the local class member
function because referring to the base class subobject involved taking the
variable's address.  Let's shortcut this case to avoid that.

gcc/cp/ChangeLog:

	PR c++/91933
	* class.c (build_base_path): Shortcut simple non-pointer case.

gcc/testsuite/ChangeLog:

	PR c++/91933
	* g++.dg/cpp0x/constexpr-base7.C: New test.
2021-04-13 08:25:16 -04:00
Nathan Sidwell 4acb3af366 preprocessor: Fix column adjustment [PR 99446]
This ICE was because when adjusting a column offset we could advance
into a linemap for a different file.  We only checked the next line
map was not for a line further advanced in any file, forgetting that
it could be for an earlier line in a different file.  The testcase
needed adjusting as column 512 was unrepresentable, once that was
taken into consideration.

	PR preprocessor/99446
	libcpp/
	* line-map.c (line-map.c): Do not advance to linemaps for
	different files.
	gcc/testsuite/
	* g++.dg/diagnostic/pr72803.C: Adjust expected column.
2021-04-13 05:07:23 -07:00
Jakub Jelinek f6ba5d039f aarch64: Restore bfxil optimization [PR100028]
Similarly to PR87763 for bfi, the GCC 9 combiner changes to not combine
moves from hard registers regressed the following testcase where we no
longer recognize bfxil and emit 3 instructions instead.

The following patch adds define_insn patterns that match what the combiner
is trying to match in these cases.  I haven't been able to see patterns
with the other order of the IOR operands, seems the IL is canonicalized this
way no matter what is written in the source.

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

	PR target/100028
	* config/aarch64/aarch64.md (*aarch64_bfxil<mode>_extr,
	*aarch64_bfxilsi_extrdi): New define_insn patterns.

	* gcc.target/aarch64/pr100028.c: New test.
2021-04-13 12:43:39 +02:00
Eric Botcazou 1174314811 Fix thinko in libcpp preparation patch for modules
The problem is that the new IS_MACRO_LOC macro:

inline bool
IS_MACRO_LOC (location_t loc)
{
  return !IS_ORDINARY_LOC (loc) && !IS_ADHOC_LOC (loc);
}

is not fully correct since the position of the macro lines is not fixed:

/* Returns the lowest location [of a token resulting from macro
   expansion] encoded in this line table.  */
inline location_t
LINEMAPS_MACRO_LOWEST_LOCATION (const line_maps *set)
{
  return LINEMAPS_MACRO_USED (set)
         ? MAP_START_LOCATION (LINEMAPS_LAST_MACRO_MAP (set))
         : MAX_LOCATION_T + 1;
}

In Ada, LINEMAPS_MACRO_USED is false so LINEMAPS_MACRO_LOWEST_LOCATION is
MAX_LOCATION_T + 1, but IS_MACRO_LOC nevertheless returns true for anything
in the range [LINE_MAP_MAX_LOCATION; MAX_LOCATION_T], thus yielding an ICE
in linemap_macro_map_lookup for very large files.

libcpp/
	* include/line-map.h (IS_MACRO_LOC): Delete.
	* line-map.c (linemap_location_from_macro_expansion_p): Test
	LINEMAPS_MACRO_LOWEST_LOCATION of the linemap.
gcc/cp/
	* module.cc (ordinary_loc_of): Test LINEMAPS_MACRO_LOWEST_LOCATION
	of the linemap.
	(module_state::write_location): Likewise.
2021-04-13 11:57:55 +02:00
Martin Storsjö 89e95ad2e7 mh-mingw: Set __USE_MINGW_ACCESS in missed C++ flags variables
This is similar to what was done in
eea4e2ff0a (where it was added to
STAGE*_CXXFLAGS), but this adds the flag to the CXXFLAGS and
BOOT_CXXFLAGS variables too (as it's already added to CFLAGS and
BOOT_CFLAGS).

2021-04-09  Martin Storsjö  <martin@martin.st>

config/ChangeLog:
	* mh-mingw: Set __USE_MINGW_ACCESS in missed C++ flags
	variables
2021-04-13 09:19:34 +00:00
Jakub Jelinek c0f772894b simplify-rtx: Punt on simplify_{,gen_}subreg to IBM double double if bits are lost [PR99648]
Similarly to PR95450 done on GIMPLE, this patch punts if we try to
simplify_{gen_,}subreg from some constant into the IBM double double
IFmode (or sometimes TFmode) if the double double format wouldn't preserve
the bits.  Not all values are valid in IBM double double, e.g. the format
requires that the upper double is the whole value rounded to double, and
if in some cases such as in the pr71522.c testcase with -m32 -Os -mcpu=power7
some non-floating data is copied through long double variable, we can
simplify a subreg into something that has different value.

Fixed by punting if the planned simplify_immed_subreg result doesn't
encode to bitwise identical values compared to what we were decoding.

As for the simplify_gen_subreg change, I think it would be desirable
to just avoid creating SUBREGs of constants on all targets and for all
constants, if simplify_immed_subreg simplified, fine, otherwise punt,
but as we are late in GCC11 development, the patch instead guards this
behavior on MODE_COMPOSITE_P (outermode) - i.e. only conversions to
powerpc{,64,64le} double double long double - and only for the cases where
simplify_immed_subreg was called.

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

	PR target/99648
	* simplify-rtx.c (simplify_immed_subreg): For MODE_COMPOSITE_P
	outermode, return NULL if the result doesn't encode back to the
	original byte sequence.
	(simplify_gen_subreg): Don't create SUBREGs from constants to
	MODE_COMPOSITE_P outermode.
2021-04-13 09:41:20 +02:00
Patrick Palka c755e1b3ea c++: variadic class template placeholder deduction [PR97134]
do_class_deduction handles specially the case where we're deducing one
placeholder from another equivalent one, but here the initializer passed
to do_class_deduction is wrapped in an EXPR_PACK_EXPANSION (we're being
called from unify during get_partial_spec_bindings).  This patch makes
do_class_deduction look through EXPR_PACK_EXPANSIONs so that we detect
this case as well.

gcc/cp/ChangeLog:

	PR c++/97134
	* pt.c (do_class_deduction): Look through EXPR_PACK_EXPANSION
	when checking if the initializer is an equivalent class
	placeholder template parameter.

gcc/testsuite/ChangeLog:

	PR c++/97134
	* g++.dg/cpp2a/nontype-class43.C: New test.
2021-04-12 23:22:03 -04:00
Patrick Palka 59d9aa6d2e c++: constraints are unevaluated operands [PR99961]
According to [temp.concept]/6 and [temp.pre]/9, a concept definition and
a requires clause are both unevaluated contexts, and hence satisfaction
deals only with unevaluated operands, so we should set cp_unevaluated in
these three situations.

gcc/cp/ChangeLog:

	PR c++/99961
	PR c++/99994
	* constraint.cc (satisfy_normalized_constraints): Set
	cp_unevaluated.
	* parser.c (cp_parser_concept_definition): Likewise.
	(cp_parser_requires_clause_opt): Likewise.

gcc/testsuite/ChangeLog:

	PR c++/99961
	PR c++/99994
	* g++.dg/cpp2a/concepts-uneval1.C: New test.
	* g++.dg/cpp2a/concepts-uneval2.C: New test.
2021-04-12 22:54:55 -04:00
Hans-Peter Nilsson 07b27384de gcc.dg/analyzer/data-model-1.c: Inverse xfail for cris-*-*, PR99212
See PR99212.  Now, cris-elf isn't the only target for which this line
shows a failure; pru-unknown-elf and m68k-unknown-linux-gnu are two
others.  I'll leave adjustments to the respective maintainers, but
trivially appending more triplets should work: no extra bracketing needed.
A specific effective_target specifier would as always be perferable, but I
couldn't without accountable effort find out what was the common factor.

Besides cris-elf, sanity-checked for native x86_64-*-linux*.

gcc/testsuite:
	PR analyzer/99212
	* gcc.dg/analyzer/data-model-1.c (test_45): Inverse xfail at
	line 971 for cris-*-*.
2021-04-13 04:21:01 +02:00
David Malcolm 17f3c2b8ac gimple UIDs, LTO and -fanalyzer [PR98599]
gimple.h has this comment for gimple's uid field:

  /* UID of this statement.  This is used by passes that want to
     assign IDs to statements.  It must be assigned and used by each
     pass.  By default it should be assumed to contain garbage.  */
  unsigned uid;

and gimple_set_uid has:

   Please note that this UID property is supposed to be undefined at
   pass boundaries.  This means that a given pass should not assume it
   contains any useful value when the pass starts and thus can set it
   to any value it sees fit.

which suggests that any pass can use the uid field as an arbitrary
scratch space.

PR analyzer/98599 reports a case where this error occurs in LTO mode:
  fatal error: Cgraph edge statement index out of range
on certain inputs with -fanalyzer.

The error occurs in the LTRANS phase after -fanalyzer runs in the
WPA phase.  The analyzer pass writes to the uid fields of all stmts.

The error occurs when LTRANS is streaming callgraph edges back in.
The LTO format uses stmt uids to associate call stmts with callgraph
edges between WPA and LTRANS.
For example, in lto-cgraph.c, lto_output_edge writes out the
gimple_uid, and input_edge reads it back in.

lto_prepare_function_for_streaming has code to renumber the stmt UIDs
when the code is streamed back out, but for some reason this isn't
called for clones:
    307	  /* Do body modifications needed for streaming before we fork out
    308	     worker processes.  */
    309	  FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
    310	    if (!node->clone_of && gimple_has_body_p (node->decl))
    311	      lto_prepare_function_for_streaming (node);

Hence the combination of -fanalyzer and -flto will fail in LTRANS's
stream-in if any function clones are encountered.

It's not fully clear to me why this isn't done for clones, and what the
correct fix should be to allow arbitrary changes to uids within WPA
passes.

In the meantime, this patch works around the issue by updating the
analyzer to save and restore the UIDs, fixing the error.

gcc/analyzer/ChangeLog:
	PR analyzer/98599
	* supergraph.cc (saved_uids::make_uid_unique): New.
	(saved_uids::restore_uids): New.
	(supergraph::supergraph): Replace assignments to stmt->uid with
	calls to m_stmt_uids.make_uid_unique.
	(supergraph::~supergraph): New.
	* supergraph.h (class saved_uids): New.
	(supergraph::~supergraph): New decl.
	(supergraph::m_stmt_uids): New field.

gcc/testsuite/ChangeLog:
	PR analyzer/98599
	* gcc.dg/analyzer/pr98599-a.c: New test.
	* gcc.dg/analyzer/pr98599-b.c: New test.
2021-04-12 21:13:40 -04:00