Commit Graph

178595 Commits

Author SHA1 Message Date
Iain Buclaw 7508a7e958 d: Fix associative array literals that don't have alignment holes filled
Associative array literal keys with alignment holes are now filled using
memset() prior to usage, with LTR evaluation of side-effects enforced.

gcc/d/ChangeLog:

	PR d/96152
	* d-codegen.cc (build_array_from_exprs): New function.
	* d-tree.h (build_array_from_exprs): Declare.
	* expr.cc (ExprVisitor::visit (AssocArrayLiteralExp *)): Use
	build_array_from_exprs to generate key and value arrays.

gcc/testsuite/ChangeLog:

	PR d/96152
	* gdc.dg/pr96152.d: New test.
2020-07-30 23:44:31 +02:00
Iain Buclaw 873b45d39c d: Add -Wvarargs warning flag to the D front-end
The D front-end has C-style variadic functions and va_start/va_arg, so
it is right to also have warnings for inproper use.

gcc/d/ChangeLog:

	PR d/96154
	* gdc.texi (Warnings): Document -Wvarargs.
	* lang.opt: Add -Wvarargs

gcc/testsuite/ChangeLog:

	PR d/96154
	* gdc.dg/pr96154a.d: New test.
	* gdc.dg/pr96154b.d: New test.
2020-07-30 23:44:31 +02:00
Iain Buclaw dfc420f8d4 d: Fix ICE in expand_intrinsic_vaarg
Both intrinsics did not handle the case where the va_list object comes
from a ref parameter.

gcc/d/ChangeLog:

	PR d/96140
	* intrinsics.cc (expand_intrinsic_vaarg): Handle ref parameters as
	arguments to va_arg().
	(expand_intrinsic_vastart): Handle ref parameters as arguments to
	va_start().

gcc/testsuite/ChangeLog:

	PR d/96140
	* gdc.dg/pr96140.d: New test.
2020-07-30 23:44:31 +02:00
Jonathan Wakely 684d6ee140 libstdc++: Make COW string use allocator_traits for nested types
When compiled as C++20 the COW std::string fails due to assuming that
the allocator always defines size_type and difference_type. That has
been incorrect since C++11, but we got away with it for specializations
using std::allocator until those members were removed in C++20.

libstdc++-v3/ChangeLog:

	* include/bits/basic_string.h (size_type, difference_type):
	Use allocator_traits to obtain the allocator's size_type and
	difference_type.
2020-07-30 20:58:09 +01:00
Jonathan Wakely e513e9aa53 libstdc++: Check _GLIBCXX_USE_C99_STDLIB for strtof and strtold
On broken systems we only have strtod, not strtof and strtold. Just use
strtod for all types, even though that will produce incorrect results in
some cases.

Similarly, if _GLIBCXX_USE_C99_MATH is not defined then std::isinf won't
be declared. Just refer to it unqualified, which should find the C
library's isinf macro if that hasn't been #undef'd by <cmath>.

libstdc++-v3/ChangeLog:

	* src/c++17/floating_from_chars.cc (from_chars_impl): Use
	isinf unqualified.
	[!_GLIBCXX_USE_C99_STDLIB]: Use strtod for float and long
	double.
2020-07-30 20:55:56 +01:00
Jonathan Wakely 357beca8bc libstdc++: Fix tests using wrong allocator type
libstdc++-v3/ChangeLog:

	* testsuite/23_containers/unordered_multiset/cons/noexcept_default_construct.cc:
	Use allocator with the correct value type.
	* testsuite/23_containers/unordered_set/cons/noexcept_default_construct.cc:
	Likewise.
2020-07-30 18:41:59 +01:00
Will Schmidt cf5d0fc2d1 [PATCH] RS6000 Add testlsbb by Byte operations
Add support for new instructions to test LSB by Byte.

2020-07-29  Will Schmidt  <will_schmidt@vnet.ibm.com>

gcc/ChangeLog:

	* config/rs6000/altivec.h (vec_test_lsbb_all_ones): New define.
	(vec_test_lsbb_all_zeros): New define.
	* config/rs6000/rs6000-builtin.def (BU_P10_VSX_1): New built-in
	handling macro.
	(XVTLSBB_ZEROS, XVTLSBB_ONES): New builtin defines.
	(xvtlsbb_all_zeros, xvtlsbb_all_ones): New builtin overloads.
	* config/rs6000/rs6000-call.c (P10_BUILTIN_VEC_XVTLSBB_ZEROS,
	P10_BUILTIN_VEC_XVTLSBB_ONES): New altivec_builtin_types entries.
	* config/rs6000/rs6000.md (UNSPEC_XVTLSBB):  New unspec.
	* config/rs6000/vsx.md (*xvtlsbb_internal): New instruction define.
	(xvtlsbbo, xvtlsbbz): New instruction expands.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/lsbb-runnable.c: New test.
	* gcc.target/powerpc/lsbb.c: New test.
2020-07-30 12:40:12 -05:00
Cooper Qu c931e8d5a9 RISC-V: Add support for TLS stack protector canary access
gcc/
	* config/riscv/riscv-opts.h (stack_protector_guard): New enum.
	* config/riscv/riscv.c (riscv_option_override): Handle
	the new options.
	* config/riscv/riscv.md (stack_protect_set): New pattern to handle
	flexible stack protector guard settings.
	(stack_protect_set_<mode>): Ditto.
	(stack_protect_test): Ditto.
	(stack_protect_test_<mode>): Ditto.
	* config/riscv/riscv.opt (mstack-protector-guard=,
	mstack-protector-guard-reg=, mstack-protector-guard-offset=): New
	options.
	* doc/invoke.texi (Option Summary) [RISC-V Options]:
	Add -mstack-protector-guard=, -mstack-protector-guard-reg=, and
	-mstack-protector-guard-offset=.
	(RISC-V Options): Ditto.

Signed-off-by: cooper <cooper.qu@linux.alibaba.com>
Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
2020-07-31 00:25:52 +08:00
Iain Buclaw febd7c43bc d: Inline bounds checking for simple array assignments.
This optimizes the code generation of simple array assignments, inlining
the array bounds checking code so there is no reliance on the library
routine _d_arraycopy(), which also deals with postblit and copy
constructors for non-trivial arrays.

gcc/d/ChangeLog:

	* expr.cc (ExprVisitor::visit (AssignExp *)): Inline bounds checking
	for simple array assignments.

gcc/testsuite/ChangeLog:

	* gdc.dg/array1.d: New test.
2020-07-30 18:02:59 +02:00
Iain Buclaw ab0edbcb37 d: Refactor use of built-in memcmp/memcpy/memset into helper functions.
Generating calls to memset, memcpy, and memcmp is frequent enough that
it becomes beneficial to put them into their own routine.  All parts of
the front-end have been updated to call the new helper functions instead
of doing it themselves.

gcc/d/ChangeLog:

	* d-codegen.cc (build_memcmp_call): New function.
	(build_memcpy_call): New function.
	(build_memset_call): New function.
	(build_float_identity): Call build_memcmp_call.
	(lower_struct_comparison): Likewise.
	(build_struct_comparison): Likewise.
	* d-tree.h (build_memcmp_call): Declare.
	(build_memcpy_call): Declare.
	(build_memset_call): Declare.
	* expr.cc (ExprVisitor::visit (EqualExp *)): Call build_memcmp_call.
	(ExprVisitor::visit (AssignExp *)): Call build_memset_call.
	(ExprVisitor::visit (ArrayLiteralExp *)): Call build_memcpy_call.
	(ExprVisitor::visit (StructLiteralExp *)): Call build_memset_call.
2020-07-30 18:01:33 +02:00
Iain Buclaw dc60d67674 d: Move private functions out of ExprVisitor into local statics
None of these functions need access to the context pointer of the
visitor class, so have been made free standing.

gcc/d/ChangeLog:

	* expr.cc (needs_postblit): Move out of ExprVisitor as a static
	function.  Update all callers.
	(needs_dtor): Likewise.
	(lvalue_p): Likewise.
	(binary_op): Likewise.
	(binop_assignment): Likewise.
2020-07-30 18:00:35 +02:00
Jonathan Wakely 561a19c301 libstdc++: Fix test for old string ABI
The COW string doesn't accept const_iterator arguments in insert and
related member functions. Pass a mutable iterator instead.

libstdc++-v3/ChangeLog:

	* testsuite/20_util/from_chars/4.cc: Pass non-const iterator
	to string::insert.
2020-07-30 16:04:59 +01:00
Joe Ramsay 4451035492 MAINTAINERS: Add myself for write after approval
2020-07-30  Joe Ramsay  <joe.ramsay@arm.com>

	* MAINTAINERS (Write After Approval): Add myself.
2020-07-30 13:17:06 +00:00
H.J. Lu 4712bde3ca Require CET support only for the final GCC build
With --enable-cet, require CET support only for the final GCC build.
Don't enable CET without CET support for non-bootstrap build, in stage1
nor for build support.

config/

	PR bootstrap/96202
	* cet.m4 (GCC_CET_HOST_FLAGS): Don't enable CET without CET
	support in stage1 nor for build support.

gcc/

	PR bootstrap/96202
	* configure: Regenerated.

libbacktrace/

	PR bootstrap/96202
	* configure: Regenerated.

libcc1/

	PR bootstrap/96202
	* configure: Regenerated.

libcpp/

	PR bootstrap/96202
	* configure: Regenerated.

libdecnumber/

	PR bootstrap/96202
	* configure: Regenerated.

libiberty/

	PR bootstrap/96202
	* configure: Regenerated.

lto-plugin/

	PR bootstrap/96202
	* configure: Regenerated.
2020-07-30 05:36:24 -07:00
Jonathan Wakely 9e67b4356e libstdc++: cv bool can't be an integer-like type (LWG 3467)
libstdc++-v3/ChangeLog:

	* include/bits/iterator_concepts.h (__detail::__cv_bool): New
	helper concept.
	(__detail::__integral_nonbool): Likewise.
	(__detail::__is_integer_like): Use __integral_nonbool.
	* testsuite/std/ranges/access/lwg3467.cc: New test.
2020-07-30 13:09:18 +01:00
Jonathan Wakely eeb45f8a41 libstdc++: Add options for ieee float to relevant tests
libstdc++-v3/ChangeLog:

	* testsuite/20_util/from_chars/4.cc: Use dg-add-options ieee.
	* testsuite/29_atomics/atomic_float/1.cc: Likewise.
2020-07-30 12:50:03 +01:00
Jonathan Wakely 4c27c6584d libstdc++: Make testsuite usable with -fno-exceptions
Previously it was not possible to add -fno-exceptions to the testsuite
flags, because some files that are compiled by the v3-build_support
procedure failed with exceptions disabled.

This adjusts those files to still compile without exceptions (with
degraded functionality in some cases).

The sole testcase that explicitly checks for -fno-exceptions has also
been adjusted to use the more robust exceptions_enabled effective-target
keyword from gcc/testsuite/lib/target-supports.exp.

libstdc++-v3/ChangeLog:

	* testsuite/23_containers/vector/bool/72847.cc: Use the
	exceptions_enabled effective-target keyword instead of
	checking for an explicit -fno-exceptions option.
	* testsuite/util/testsuite_abi.cc (examine_symbol): Remove
	redundant try-catch.
	* testsuite/util/testsuite_allocator.h [!__cpp_exceptions]:
	Do not define check_allocate_max_size and memory_resource.
	* testsuite/util/testsuite_containers.h: Replace comment with
	#error if wrong standard dialect used.
	* testsuite/util/testsuite_shared.cc: Likewise.
2020-07-30 12:50:02 +01:00
Iain Buclaw 7d4ee8bc58 d: Implement core.bitop.rol() and core.bitop.ror() as intrinsics.
gcc/d/ChangeLog:

	* intrinsics.cc (expand_intrinsic_rotate): Add function.
	(maybe_expand_intrinsic): Handle rol and ror intrinsics.
	* intrinsics.def (ROL): Add intrinsic.
	(ROL_TIARG): Add intrinsic.
	(ROR): Add intrinsic.
	(ROR_TIARG): Add intrinsic.

gcc/testsuite/ChangeLog:

	* gdc.dg/intrinsics.d: Add ror and rol tests.
2020-07-30 12:03:58 +02:00
Iain Buclaw 6ee874f135 d: Refactor matching and lowering of intrinsic functions.
Intrinsics are now matched explicitly, rather than through a common
alias where there are multiple overrides for a common intrinsic.
Where there is a corresponding DECL_FUNCTION_CODE, that is now stored in
the D intrinsic array.  All run-time std.math intrinsics have been
removed, as the library implementation already forwards to core.math.

gcc/d/ChangeLog:

	* d-tree.h (DEF_D_INTRINSIC): Rename second argument from A to B.
	* intrinsics.cc (intrinsic_decl): Add built_in field.
	(DEF_D_INTRINSIC): Rename second argument from ALIAS to BUILTIN.
	(maybe_set_intrinsic): Handle new intrinsic codes.
	(expand_intrinsic_bt): Likewise.
	(expand_intrinsic_checkedint): Likewise.
	(expand_intrinsic_bswap): Remove.
	(expand_intrinsic_sqrt): Remove.
	(maybe_expand_intrinsic): Group together intrinsic cases that map
	directly to gcc built-ins.
	* intrinsics.def (DEF_D_BUILTIN): Rename second argument from A to B.
	Update all callers to pass equivalent DECL_FUNCTION_CODE.
	(DEF_CTFE_BUILTIN): Likewise.
	(STD_COS): Remove intrinsic.
	(STD_FABS): Remove intrinsic.
	(STD_LDEXP): Remove intrinsic.
	(STD_RINT): Remove intrinsic.
	(STD_RNDTOL): Remove intrinsic.
	(STD_SIN): Remove intrinsic.
	(STD_SQRTF): Remove intrinsic.
	(STD_SQRT): Remove intrinsic.
	(STD_SQRTL): Remove intrinsic.

gcc/testsuite/ChangeLog:

	* gdc.dg/intrinsics.d: New test.
2020-07-30 12:03:58 +02:00
Richard Biener 2c558d2655 tree-optimization/96370 - make reassoc expr rewrite more robust
In the face of the more complex tricks in reassoc with respect
to negate processing it can happen that the expression rewrite
is fooled to recurse on a leaf and pick up a bogus expression
code.  The following patch makes the expression rewrite more
robust in providing the expression code to it directly since
it is the same for all operations in a chain.

2020-07-30  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/96370
	* tree-ssa-reassoc.c (rewrite_expr_tree): Add operation
	code parameter and use it instead of picking it up from
	the stmt that is being rewritten.
	(reassociate_bb): Pass down the operation code.

	* gcc.dg/pr96370.c: New testcase.
2020-07-30 11:36:20 +02:00
Roger Sayle 8240f2f498 nvptx: Provide vec_set<mode> and vec_extract<vmode><mode> patterns
This patch provides standard vec_extract and vec_set patterns to the
nvptx backend, to extract an element from a PTX vector and set an
element of a PTX vector respectively.  PTX vectors (I hesitate to
call them SIMD vectors) may contain up to four elements, so vector
modes up to size four are supported by this patch even though the
nvptx backend currently only allows V2SI and V2DI, i.e. two out
of the ten possible vector modes.

As an example of the improvement, the following C function:

typedef int __v2si __attribute__((__vector_size__(8)));
int foo (__v2si arg) { return arg[0]+arg[1]; }

previously generated this code using a shift:

  mov.u64     %r25, %ar0;
  ld.v2.u32   %r26, [%r25];
  mov.b64     %r28, %r26;
  shr.s64     %r30, %r28, 32;
  cvt.u32.u32 %r31, %r26.x;
  cvt.u32.u64 %r32, %r30;
  add.u32     %value, %r31, %r32;

but with this patch now generates:

  mov.u64   %r25, %ar0;
  ld.v2.u32 %r26, [%r25];
  mov.u32   %r28, %r26.x;
  mov.u32   %r29, %r26.y;
  add.u32   %value, %r28, %r29;

I've implemented these getters and setters as their own instructions
instead of attempting the much more intrusive patch of changing the
backend's definition of register_operand.  Given the limited utility
of PTX vectors, I'm not convinced that attempting to support them as
operands in every instruction would be worth the effort involved.

This patch has been tested on nvptx-none hosted on x86_64-pc-linux-gnu
with "make" and "make check" with no new regressions.

2020-07-15  Roger Sayle  <roger@nextmovesoftware.com>
	    Tom de Vries  <tdevries@suse.de>

gcc/ChangeLog:

	* config/nvptx/nvptx.md (nvptx_vector_index_operand): New predicate.
	(VECELEM): New mode attribute for a vector's uppercase element mode.
	(Vecelem): New mode attribute for a vector's lowercase element mode.
	(*vec_set<mode>_0, *vec_set<mode>_1, *vec_set<mode>_2)
	(*vec_set<mode>_3): New instructions.
	(vec_set<mode>): New expander to generate one of the above insns.
	(vec_extract<mode><Vecelem>): New instruction.

gcc/testsuite/ChangeLog:

	* gcc.target/nvptx/v2si-vec-set-extract.c: New test.
2020-07-30 10:42:01 +02:00
Martin Liska dc65aba7a4
Tune memcpy and memset for Zen cores.
Based on the collected numbers in PR95435, I suggest the following
tuning changes:

gcc/ChangeLog:

	PR target/95435
	* config/i386/x86-tune-costs.h: Use libcall for large sizes for
	-m32. Start using libcall from 128+ bytes.
2020-07-30 10:31:36 +02:00
Martin Liska da346efd27
Re-format zen memcpy/memset costs.
The patch improves readability of the memcpy and memset
expansion strategies.

gcc/ChangeLog:

	* config/i386/x86-tune-costs.h: Change code formatting.
2020-07-30 10:31:30 +02:00
Patrick Palka 2c58f5cadf c++: overload sets and placeholder return type [PR64194]
In the testcase below, template argument deduction for the call
g(id<int>) goes wrong because the functions in the overload set id<int>
each have a yet-undeduced auto return type, and this undeduced return
type makes try_one_overload fail to match up any of the overloads with
g's parameter type, leading to g's template argument going undeduced and
to the overload set going unresolved.

This patch fixes this issue by performing return type deduction via
instantiation before doing try_one_overload, in a manner similar to what
resolve_address_of_overloaded_function does.

gcc/cp/ChangeLog:

	PR c++/64194
	* pt.c (resolve_overloaded_unification): If the function
	template specialization has a placeholder return type,
	then instantiate it before attempting unification.

gcc/testsuite/ChangeLog:

	PR c++/64194
	* g++.dg/cpp1y/auto-fn60.C: New test.
2020-07-29 22:06:44 -04:00
Patrick Palka 71141b1bd5 c++: alias_ctad_tweaks and constrained dguide [PR95486]
In the below testcase, we're ICEing from alias_ctad_tweaks ultimately
because the implied deduction guide for X's user-defined constructor
already has constraints associated with it.  We then carry over these
constraints to 'fprime', the overlying deduction guide for the alias
template Y, via tsubst_decl from alias_ctad_tweaks.  Later in
alias_ctad_tweaks we call get_constraints followed by set_constraints
without doing remove_constraints in between, which triggers the !found
assert in set_constraints.

This patch fixes this issue by adding an intervening call to
remove_constraints.

gcc/cp/ChangeLog:

	PR c++/95486
	* pt.c (alias_ctad_tweaks): Call remove_constraints before
	calling set_constraints.

gcc/testsuite/ChangeLog:

	PR c++/95486
	* g++.dg/cpp2a/class-deduction-alias3.C: New test.
2020-07-29 22:06:41 -04:00
Patrick Palka f31dd9beb9 c++: abbreviated function template friend matching [PR96106]
In the below testcase, duplicate_decls wasn't merging the tsubsted
friend declaration for 'void add(auto)' with its definition, because
reduce_template_parm_level (during tsubst_friend_function) lost the
DECL_VIRTUAL_P flag on the auto's invented template parameter, which
caused template_heads_equivalent_p to deem the two template heads as not
equivalent in C++20 mode.

This patch makes reduce_template_parm_level carry over the
DECL_VIRTUAL_P flag from the original TEMPLATE_PARM_DECL.

gcc/cp/ChangeLog:

	PR c++/96106
	* pt.c (reduce_template_parm_level): Propagate DECL_VIRTUAL_P
	from the original TEMPLATE_PARM_DECL to the new lowered one.

gcc/testsuite/ChangeLog:

	PR c++/96106
	* g++.dg/concepts/abbrev7.C: New test.
2020-07-29 22:06:36 -04:00
Patrick Palka dc3d1e1814 c++: constraints and explicit instantiation [PR96164]
When considering to instantiate a member of a class template as part of
an explicit instantiation of the class template, we need to first check
the member's constraints before proceeding with the instantiation of the
member.

gcc/cp/ChangeLog:

	PR c++/96164
	* constraint.cc (constraints_satisfied_p): Return true if
	!flags_concepts.
	* pt.c (do_type_instantiation): Update a paragraph taken from
	[temp.explicit] to reflect the latest specification.  Don't
	instantiate a member with unsatisfied constraints.

gcc/testsuite/ChangeLog:

	PR c++/96164
	* g++.dg/cpp2a/concepts-explicit-inst5.C: New test.
2020-07-29 22:06:33 -04:00
GCC Administrator bea7a39103 Daily bump. 2020-07-30 00:16:24 +00:00
Roger Sayle a0d007d67c nvptx: Support floating point reciprocal instructions
The following patch addds support for PTX's rcp.rn.f32 and rcp.rn.f64
instructions.  Note that the "rcp.rn" forms of this instruction
calculate the fully IEEE compliant result for the reciprocal, unlike
the rcp.approx variants that just provide fast approximations.

This patch has been tested on nvptx-none hosted on x86_64-pc-linux-gnu
with "make" and "make check" with no new regressions.

2020-07-12  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog:

	* config/nvptx/nvptx.md (recip<mode>2): New instruction.

gcc/testsuite/ChangeLog:

	* gcc.target/nvptx/recip-1.c: New test.
2020-07-29 23:05:46 +02:00
Joseph Myers 0f4a54ccb8 Update gcc ja.po, sv.po.
* ja.po, sv.po: Update.
2020-07-29 19:32:40 +00:00
François Dumont acc1d1a954 libstdc++: Review _Local_iterator/_Local_const_iterator implementations.
_Local_iterator_base inherits _Node_iterator_base and so share the same
comparison operators. It avoids to expose special method _M_curr for debug
mode to compare such iterators.

libstdc++-v3/ChangeLog:

	* include/bits/hashtable_policy.h (_Node_iterator_base()): New.
	(operator==(const _Node_iterator_base&, const _Node_iterator_base&)):
	Make hidden friend.
	(operator!=(const _Node_iterator_base&, const _Node_iterator_base&)):
	Make hidden friend.
	(_Local_iterator_base<>): Inherits _Node_iterator_base.
	(_Local_iterator_base<>::_M_cur): Remove.
	(_Local_iterator_base<>::_M_curr()): Remove.
	(operator==(const _Local_iterator_base&, const _Local_iterator_base&)):
	Remove.
	(operator!=(const _Local_iterator_base&, const _Local_iterator_base&)):
	Remove.
	* include/debug/unordered_map (unordered_map<>::_M_invalidate): Adapt.
	(unordered_multimap<>::_M_invalidate): Adapt.
	* include/debug/unordered_set (unordered_set<>::_M_invalidate): Adapt.
	(unordered_multiset<>::_M_invalidate): Adapt.
2020-07-29 20:46:09 +02:00
Jason Merrill 1722e2013f c++: Implement C++20 implicit move changes. [PR91427]
P1825R0 extends the C++11 implicit move on return by removing the
constraints on the called constructor: previously, it needed to take an
rvalue reference to the type of the returned variable.  The paper also
allows move on throw of parameters and implicit move of rvalue references.

Discussion on the CWG reflector about how to avoid breaking the PR91212 test
in the new model settled on the model of doing only a single overload
resolution, with the variable treated as an xvalue that can bind to
non-const lvalue references.  So this patch implements that approach.  The
implementation does not use the existing LOOKUP_PREFER_RVALUE flag, but
instead sets a flag on the representation of the static_cast turning the
variable into an xvalue.

For the time being I'm limiting the new semantics to C++20 mode; since it
was moved as a DR, we will probably want to apply the change to other
standard modes as well once we have a better sense of the impact on existing
code, probably in GCC 12.

gcc/cp/ChangeLog:

	PR c++/91427
	* cp-tree.h (IMPLICIT_RVALUE_P): New.
	(enum cp_lvalue_kind_flags): Add clk_implicit_rval.
	(implicit_rvalue_p, set_implicit_rvalue_p): New.
	* call.c (reference_binding): Check clk_implicit_rval.
	(build_over_call): Adjust C++20 implicit move.
	* coroutines.cc (finish_co_return_stmt): Simplify implicit move.
	* except.c (build_throw): Adjust C++20 implicit move.
	* pt.c (tsubst_copy_and_build) [STATIC_CAST_EXPR]: Propagate
	IMPLICIT_RVALUE_P.
	* tree.c (lvalue_kind): Set clk_implicit_rval.
	* typeck.c (treat_lvalue_as_rvalue_p): Overhaul.
	(maybe_warn_pessimizing_move): Adjust.
	(check_return_expr): Adjust C++20 implicit move.

gcc/testsuite/ChangeLog:

	PR c++/91427
	* g++.dg/coroutines/co-return-syntax-10-movable.C: Extend.
	* g++.dg/cpp0x/Wredundant-move1.C: Adjust for C++20.
	* g++.dg/cpp0x/Wredundant-move7.C: Adjust for C++20.
	* g++.dg/cpp0x/Wredundant-move9.C: Adjust for C++20.
	* g++.dg/cpp0x/elision_neg.C: Adjust for C++20.
	* g++.dg/cpp0x/move-return2.C: Adjust for C++20.
	* g++.dg/cpp0x/ref-qual20.C: Adjust for C++20.
	* g++.dg/cpp2a/implicit-move1.C: New test.
	* g++.dg/cpp2a/implicit-move2.C: New test.
	* g++.dg/cpp2a/implicit-move3.C: New test.
2020-07-29 14:24:59 -04:00
Jason Merrill 81bc0ec3e9 c++: Avoid calling const copy ctor on implicit move. [PR91212]
Our implementation of C++11 implicit move was wrong for return; we didn't
actually hit the check for the type of the first parameter of the selected
constructor, because we didn't see LOOKUP_PREFER_RVALUE set properly.

Fixing that to look at the right flags fixed the issue for this testcase,
but broke implicit move for a by-value converting constructor (PR58051).  I
think this was not allowed in C++17, but it is allowed under the implicit
move changes from C++20, and those changes were voted to apply as a DR to
earlier standards as well, so I don't want to break it now.

So after fixing the flags check I changed the test to allow value
parameters.

gcc/cp/ChangeLog:

	PR c++/91212
	* call.c (build_over_call): Don't call a const ref
	overload for implicit move.

gcc/testsuite/ChangeLog:

	PR c++/91212
	* g++.dg/cpp0x/move-return3.C: New test.
2020-07-29 14:24:15 -04:00
Tobias Burnus d8140b9ed3 OpenMP: Handle order(concurrent) clause in gfortran
gcc/fortran/ChangeLog:

	* dump-parse-tree.c (show_omp_clauses): Handle order(concurrent).
	* gfortran.h (struct gfc_omp_clauses): Add order_concurrent.
	* openmp.c (enum omp_mask1, OMP_DO_CLAUSES, OMP_SIMD_CLAUSES):
	Add OMP_CLAUSE_ORDER.
	* trans-openmp.c (gfc_trans_omp_clauses, gfc_split_omp_clauses):
	Handle order(concurrent) clause.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/order-3.f90: New test.
	* gfortran.dg/gomp/order-4.f90: New test.
2020-07-29 18:37:13 +02:00
Tiziano Müller f6fe3bbf9f preprocessor: Teach traditional about has_include [PR95889]
Traditional cpp (used by fortran) didn;t know about the new
__has_include__ implementation.  Hey, since when did traditional cpp
grow __has_include__? That wasn't in knr!

	libcpp/
	* init.c (builtin_array): Add xref comment.
	* traditional.c (fun_like_macro): Add HAS_INCLUDE codes.
	gcc/testsuite/
	* c-c++-common/cpp/has-include-1-traditional.c: New.
2020-07-29 07:47:21 -07:00
David Edelsohn 55ede0bb87 testsuite: libstdc++ atomic_float/value_init.cc requires libatomic
atomic_float/value_init.cc requires libatomic for some targets, i.e., when
it tries to perform an atomic operation with a 64 bit floating point
double type on a 32 bit target.  This patch adds AIX and Darwin to the
list of targets that require the libatomic option and adds the option to
the atomic_float/value_init.cc testcase.

libstdc++-v3/ChangeLog:

2020-07-28  David Edelsohn  <dje.gcc@gmail.com>
	    Jonathan Wakely  <jwakely@redhat.com>
	    Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	* testsuite/lib/dg-options.exp (add_options_for_libatomic): Add
	target powerpc-ibm-aix* and powerpc*-*-darwin*.
	* testsuite/29_atomics/atomic_float/value_init.cc: Add options
	for libatomic.
2020-07-29 10:00:05 -04:00
Fangrui Song c8d3f2b6d1 Don't make -gsplit-dwarf imply -g
-gsplit-dwarf introduces order dependency: it overrides previous -g0 and -g1.

Don't imply -g so that it can be plugged into a build without worrying
that unnecessary debugging information may be generated.

2020-05-13  Fangrui Song  <maskray@google.com>

	PR debug/95096
	* opts.c (common_handle_option): Don't make -gsplit-dwarf imply -g.
	* doc/invoke.texi (-gsplit-dwarf): Update documentation.
2020-07-29 15:35:43 +02:00
Tobias Burnus d6cd139c17 OpenMP: Permit in Fortran omp target data without map
gcc/fortran/ChangeLog:

	* openmp.c (resolve_omp_clauses): Permit 'omp target data' without
	map if use_device_{addr,ptr} is present.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/map-3.f90: New test.
	* gfortran.dg/gomp/map-4.f90: New test.
2020-07-29 15:09:55 +02:00
Joe Ramsay 9f6abd2db9 arm: Enable no-writeback vldr.16/vstr.16.
There was previously no way to specify that a register operand cannot
have any writeback modifiers, and as a result the argument to vldr.16
and vstr.16 could be erroneously output with post-increment. This
change adds a constraint which forbids all writeback, and
selects it in the relevant case for vldr.16 and vstr.16

Bootstrapped on arm-linux, gcc and CMSIS-DSP testsuites are clean.
Is this patch OK for trunk? If yes, please commit on my behalf as I
don't
have commit rights.

gcc/ChangeLog:

	* config/arm/arm-protos.h (arm_coproc_mem_operand_no_writeback):
	Declare prototype.
	(arm_mve_mode_and_operands_type_check): Declare prototype.
	* config/arm/arm.c (arm_coproc_mem_operand): Refactor to use
	_arm_coproc_mem_operand.
	(arm_coproc_mem_operand_wb): New function to cover full, limited
	and no writeback.
	(arm_coproc_mem_operand_no_writeback): New constraint for memory
	operand with no writeback.
	(arm_print_operand): Extend 'E' specifier for memory operand
	that does not support writeback.
	(arm_mve_mode_and_operands_type_check): New constraint check for
	MVE memory operands.
	* config/arm/constraints.md: Add Uj constraint for VFP vldr.16
	and vstr.16.
	* config/arm/vfp.md (*mov_load_vfp_hf16): New pattern for
	vldr.16.
	(*mov_store_vfp_hf16): New pattern for vstr.16.
	(*mov<mode>_vfp_<mode>16): Remove MVE moves.
2020-07-29 14:04:28 +01:00
Martin Liska 5175857714
gcc-changelog: fix combining of arguments.
contrib/ChangeLog:

2020-07-29  Martin Liska  <mliska@suse.cz>

	* git-backport.py: fix how are ChangeLog paths combined.
2020-07-29 14:17:43 +02:00
Mark Eggleston 6af8284719 Fortran : Don't warn for LOGICAL kind conversion PR96319
LOGICAL values will always fit regardless of kind so there
is no need for warnings.

2020-07-29  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/fortran/

	PR fortran/96319
	* intrinsic.c (gfc_convert_type_warn):  Add check for
	LOGICAL type so that warnings are not output.

2020-07-29  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

	PR fortran/96319
	* gfortran.dg/pr96319.f90: New test.
2020-07-29 12:55:17 +01:00
Richard Biener 2b2f3867c0 tree-optimization/96349 - avoid abnormal coalescing issues in loop split
This avoids splitting a loop when the entry value of a loop PHI is
involved with abnormal coalescing.

2020-07-28  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/96349
	* tree-ssa-loop-split.c (stmt_semi_invariant_p_1): When the
	condition runs into a loop PHI with an abnormal entry value give up.

	* gcc.dg/torture/pr96349.c: New testcase.
2020-07-29 13:30:14 +02:00
Richard Biener 883eec6653 more SCEV cache clearing
This fixes two more places, in loop interchange and in the
vectorizer where the SCEV verifier sees stale entries.

2020-07-29  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.c (vectorize_loops): Reset the SCEV
	cache if we removed any SIMD UID SSA defs.
	* gimple-loop-interchange.cc (pass_linterchange::execute):
	Reset the scev cache if we interchanged a loop.
2020-07-29 12:35:56 +02:00
Richard Biener 8e8792a347 tree-optimization/95679 - properly signal changes from propagate_into_phi_args
This restores a lost setting of something_changed with the
recent refactoring of the substitute and fold engine.  The
reported ICE in the PR was meanwhile mitigated in other ways
but the issue can still result in missed optimizations via
failed runs of CFG cleanup.

2020-07-29  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95679
	* tree-ssa-propagate.h
	(substitute_and_fold_engine::propagate_into_phi_args): Return
	whether anything changed.
	* tree-ssa-propagate.c
	(substitute_and_fold_engine::propagate_into_phi_args): Likewise.
	(substitute_and_fold_dom_walker::before_dom_children): Update
	something_changed.
2020-07-29 12:34:29 +02:00
Tobias Burnus 6de5600a8b gcc/fortran/module.c: Fix indentation
gcc/fortran/ChangeLog:

	* module.c (mio_symbol_attribute): Fix indent of previous
	commit.
2020-07-29 12:27:45 +02:00
Mark Eggleston c2e99836a2 Fortran : ICE in gfc_conv_scalarized_array_ref PR53298
When an array of characters is an argument to a subroutine and
is accessed using (:)(1:) an ICE occurs.  The upper bound of the
substring does not have an expression and such should not have
a Scalarization State structure added to the Scalarization State
chain.

2020-07-29  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/fortran/

	PR fortran/53298
	* trans-array.c (gfc_walk_array_ref): If ref->ss.end is set
	call gfc_get_scalar_ss.

2020-07-29  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

	PR fortran/53298
	* gfortran.dg/pr53298.f90: New test.
2020-07-29 11:16:38 +01:00
François Dumont 12324b9a93 libstdc++: Fix unordered containers move constructors noexcept qualification
_Hashtable move constructor is wrongly qualified as noexcept(true) regardless of
_Equal and _H1 copy constructor qualifications.
_Hashtable allocator-aware move constructor is missing its noexcept
qualification like the depending unordered containers ones.

libstdc++-v3/ChangeLog:

	* include/bits/hashtable.h
	(_Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a, true_type)):
	Add noexcept qualification.
	(_Hashtable(_Hashtable&&)): Fix noexcept qualification.
	(_Hashtable(_Hashtable&&, const allocator_type&)): Add noexcept
	qualification.
	* include/bits/unordered_map.h
	(unordered_map(unordered_map&&, const allocator_type&)): Add noexcept
	qualification.
	(unordered_multimap(unordered_multimap&&, const allocator_type&)):
	Likewise.
	* include/bits/unordered_set.h
	(unordered_set(unordered_set&&, const allocator_type&)): Likewise.
	(unordered_multiset(unordered_multiset&&, const allocator_type&)):
	Likewise.
	* include/debug/unordered_map
	(unordered_map(unordered_map&&, const allocator_type&)): Likewise.
	(unordered_multimap(unordered_multimap&&, const allocator_type&)):
	Likewise.
	* include/debug/unordered_set
	(unordered_set(unordered_set&&, const allocator_type&)): Likewise.
	(unordered_multiset(unordered_multiset&&, const allocator_type&)):
	Likewise.
	* testsuite/23_containers/unordered_map/allocator/default_init.cc:
	New test.
	* testsuite/23_containers/unordered_map/cons/noexcept_default_construct.cc:
	New test.
	* testsuite/23_containers/unordered_map/cons/noexcept_move_construct.cc:
	New test.
	* testsuite/23_containers/unordered_map/modifiers/move_assign.cc:
	New test.
	* testsuite/23_containers/unordered_multimap/cons/noexcept_default_construct.cc:
	New test.
	* testsuite/23_containers/unordered_multimap/cons/noexcept_move_construct.cc:
	New test.
	* testsuite/23_containers/unordered_multiset/cons/noexcept_default_construct.cc:
	New test.
	* testsuite/23_containers/unordered_multiset/cons/noexcept_move_construct.cc:
	New test.
	* testsuite/23_containers/unordered_set/allocator/default_init.cc:
	New test.
	* testsuite/23_containers/unordered_set/cons/noexcept_default_construct.cc:
	New test.
	* testsuite/23_containers/unordered_set/cons/noexcept_move_construct.cc:
	New test.
2020-07-29 11:26:42 +02:00
Stefan Schulze Frielinghaus f1660ceb0d vect: Fix infinite loop while determining peeling amount
This is a follow up to commit 5c9669a0e6 respectively discussion
https://gcc.gnu.org/pipermail/gcc-patches/2020-June/549132.html

In case a type has a lower alignment than its size, ensure that we
advance.  For example, on s390x we have for a long double an alignment
constraint of 8 bytes whereas the size is 16 bytes.  Increasing the loop
variable only by TARGET_ALIGN / DR_SIZE which equals zero in case of a
long double results in an infinite loop.  This is fixed by ensuring that
we advance at least by one.

gcc/ChangeLog:

	* tree-vect-data-refs.c (vect_enhance_data_refs_alignment):
	Ensure that loop variable npeel_tmp advances in each iteration.
2020-07-29 10:44:12 +02:00
Tobias Burnus 269322ece1 OpenMP: Add 'omp requires' to Fortran (mostly parsing)
gcc/fortran/ChangeLog:

	* gfortran.h (enum gfc_statement): Add ST_OMP_REQUIRES.
	(enum gfc_omp_requires_kind): New.
	(enum gfc_omp_atomic_op): Add GFC_OMP_ATOMIC_ACQ_REL.
	(struct gfc_namespace): Add omp_requires and omp_target_seen.
	(gfc_omp_requires_add_clause,
	(gfc_check_omp_requires): New.
	* match.h (gfc_match_omp_requires): New.
	* module.c (enum ab_attribute, attr_bits): Add omp requires clauses.
	(mio_symbol_attribute): Read/write them.
	* openmp.c (gfc_check_omp_requires, (gfc_omp_requires_add_clause,
	gfc_match_omp_requires): New.
	(gfc_match_omp_oacc_atomic): Use requires's default mem-order.
	* parse.c (decode_omp_directive): Match requires, set omp_target_seen.
	(gfc_ascii_statement): Handle ST_OMP_REQUIRES.
	* trans-openmp.c (gfc_trans_omp_atomic): Handle GFC_OMP_ATOMIC_ACQ_REL.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/requires-1.f90: New test.
	* gfortran.dg/gomp/requires-2.f90: New test.
	* gfortran.dg/gomp/requires-3.f90: New test.
	* gfortran.dg/gomp/requires-4.f90: New test.
	* gfortran.dg/gomp/requires-5.f90: New test.
	* gfortran.dg/gomp/requires-6.f90: New test.
	* gfortran.dg/gomp/requires-7.f90: New test.
	* gfortran.dg/gomp/requires-8.f90: New test.
	* gfortran.dg/gomp/requires-9.f90: New test.
2020-07-29 10:37:44 +02:00
Hans-Peter Nilsson 5c180464b7 config/mmix/mmix.h (NO_FUNCTION_CSE): Define to 1.
The tests gcc.dg/tree-ssa/loop-1.c and gcc.dg/weak/typeof-2.c
assume this setting and are as a consequence riddled with
exceptions for targets that actually do yield better code when
calling through a register rather than repeatedly the same
symbol.  Nonetheless, defining it makes sense for MMIX.

(Even better IMHO, this macro shouldn't exist and instead rtx
costs be used or perhaps just a target-specific default of
flag_no_function_cse.)

gcc:
	* config/mmix/mmix.h (NO_FUNCTION_CSE): Define to 1.
2020-07-29 02:46:09 +02:00