Commit Graph

168058 Commits

Author SHA1 Message Date
Jonathan Wakely 7c3e085e44 Update C++17 library status tables
* doc/xml/manual/status_cxx2017.xml: Document P0024R2 status.
	* doc/html/*: Regenerate.

From-SVN: r270559
2019-04-24 23:16:45 +01:00
Jonathan Wakely f90b16c429 Make filesystem::path comparison operators hidden friends (LWG 3065)
This change revealed two testsuite bugs where some string comparisons
only compiled by converting the strings to filesystem::path objects.

	* include/bits/fs_path.h (operator<, operator<=, operator>)
	(operator>=, operator==, operator!=): Make hidden friends, as per
	LWG 3065.
	* testsuite/27_io/filesystem/path/native/string-char8_t.cc: Fix
	string type in test.
	* testsuite/27_io/filesystem/path/native/string.cc: Likewise.

From-SVN: r270558
2019-04-24 22:35:26 +01:00
Marek Polacek 7f8aaa1ae9 re PR c++/90236 (bogus error with auto non-type template argument)
PR c++/90236
	* g++.dg/cpp1z/nontype-auto16.C: New test.

From-SVN: r270557
2019-04-24 21:28:04 +00:00
Jason Merrill fd177738f3 PR c++/90227 - error with template parameter packs.
If require_all_args, we aren't waiting for more args to be deduced later.

	* pt.c (coerce_template_parms): Do add empty pack when
	require_all_args.

From-SVN: r270556
2019-04-24 16:37:30 -04:00
Iain Buclaw 58990c4d3a libphobos: Fix FAIL phobos.exp/core.time on CentOS 5.11, Linux 2.6.18
Merges upstream druntime e03164b5.

Reviewed-on: https://github.com/dlang/druntime/pull/2581

libphobos/ChangeLog:

2019-04-24  Iain Buclaw  <ibuclaw@gdcproject.org>

	PR d/89432
	* testsuite/lib/libphobos.exp (check_effective_target_linux_pre_2639):
	New proc.
	* testsuite/libphobos.druntime/druntime.exp: Add compiler flag
	-fversion=Linux_Pre_2639 if target is linux_pre_2639.
	* testsuite/libphobos.druntime_shared/druntime_shared.exp: Likewise.

From-SVN: r270554
2019-04-24 18:57:36 +00:00
Clement Chigot 265e6a0ae0 aix71.h (SUBTARGET_OVERRIDE_OPTIONS): Disable OPTION_MASK_VSX and OPTION_MASK_ALTIVEC from rs6000_isa_flags for Go on...
2019-04-24  Clement Chigot  <clement.chigot@atos.net>

        * config/rs6000/aix71.h (SUBTARGET_OVERRIDE_OPTIONS): Disable
        OPTION_MASK_VSX and OPTION_MASK_ALTIVEC from rs6000_isa_flags
        for Go on 32 bit AIX.
        * config/rs6000/aix72.h: Likewise.

From-SVN: r270553
2019-04-24 14:03:47 -04:00
Jonathan Wakely 303b226457 Use __and_v<...> instead of __and_<...>::value
* include/std/any (any::any(ValueType&&)): Use __and_v.
	* include/std/numeric (midpoint(T, T, T), midpoint(T*, T*, T*)):
	Likewise.

From-SVN: r270552
2019-04-24 17:25:21 +01:00
Jonathan Wakely 81c7cf71bf Finish implementing "Treating Unnecessary decay" (P0777R1)
* include/std/tuple (apply): Use remove_reference_t instead of decay_t
	as per P0777R1.
	* include/std/type_traits (__result_of_memfun): Use remove_reference
	instead of __remove_cvref_t and remove redundant is_same check.
	(__inv_unwrap): Use __remove_cvref_t instead of decay_t.

From-SVN: r270551
2019-04-24 17:25:17 +01:00
Jakub Jelinek 73f1289e49 re PR target/90193 (asm goto with TLS "m" input operand generates incorrect assembler in O1 and O2)
PR target/90193
	* rtl.c (classify_insn): Return JUMP_INSN for asm goto.
	* emit-rtl.c (try_split): Copy over REG_LABEL_TARGET.

	* gcc.target/i386/pr90193.c: New test.

From-SVN: r270550
2019-04-24 17:49:36 +02:00
Jonathan Wakely fb8b3e2993 Fix basic_string_view typedefs and enforce preconditions
The basic_string_view::pointer and basic_string_view::reference typedefs
are supposed to refer to the non-const value type.

In previous standards having traits_type::char_type different to
value_type was simply undefined, but in the C++2a draft it's ill-formed,
as changed by P1148R0. For std::basic_string and iostreams we might
want to only enforce this conditionally for __cplusplus > 201703L but
for std::basic_string_view we don't have backwards compatibility
concerns. Also add assertions to verify the _CharT argument is a
"char-like" type (non-array, trivial, standard layout type).

Also remove the non-standard basic_string_view::_M_check and
basic_string_view::_M_limit member functions, replacing them with
non-member functions that will still exist even if basic_string_view is
specialized by the program.

	* include/experimental/string_view (basic_string_view::pointer)
	(basic_string_view::reference): Fix to refer to non-const value_type.
	* include/bits/basic_string.h (basic_string): Use __sv_check and
	__sv_limit instead of basic_string_view::_M_check and
	basic_string_view::_M_limit.
	* include/std/string_view (__sv_check, __sv_limit): New
	helper functions to replace basic_string_view::_M_check and
	basic_string_view::_M_limit.
	(basic_string_view): Add static assertions to enforce ill-formed
	requirement for traits_type::char_type from P1148R0, and to enforce
	required properties of char-like types.
	(basic_string_view::pointer, basic_string_view::reference): Fix to
	refer to non-const value_type.
	(basic_string_view::operator[], basic_string_view::at)
	(basic_string_view::front, basic_string_view::back)
	(basic_string_view::data): Use const_reference and const_pointer
	typedefs for return types.
	(basic_string_view::_M_check, basic_string_view::_M_limit): Remove.
	(hash<wstring_view>): Fix argument_type typedef.
	* testsuite/21_strings/basic_string_view/modifiers/remove_prefix/
	char/1.cc: Fix expected return type of basic_string_view::data().
	* testsuite/21_strings/basic_string_view/modifiers/remove_prefix/
	wchar_t/1.cc: Likewise.
	* testsuite/21_strings/basic_string_view/modifiers/remove_suffix/
	char/1.cc: Likewise.
	* testsuite/21_strings/basic_string_view/modifiers/remove_suffix/
	wchar_t/1.cc: Likewise.
	* testsuite/21_strings/basic_string_view/requirements/traits_neg.cc:
	New test.
	* testsuite/21_strings/basic_string_view/requirements/typedefs.cc:
	Check reference and pointer typedefs.
	* testsuite/experimental/string_view/requirements/typedefs.cc:
	Likewise.
	* testsuite/experimental/string_view/modifiers/remove_prefix/char/1.cc:
	Fix expected return type of basic_string_view::data().
	* testsuite/experimental/string_view/modifiers/remove_prefix/wchar_t/
	1.cc: Likewise.
	* testsuite/experimental/string_view/modifiers/remove_suffix/char/1.cc:
	Likewise.
	* testsuite/experimental/string_view/modifiers/remove_suffix/wchar_t/
	1.cc: Likewise.

From-SVN: r270548
2019-04-24 16:17:53 +01:00
Jonathan Wakely 92750002ef PR libstdc++/90220 Fix std::any_cast for array types
Although the std::any constructors use decay_t to determine the type of
the contained value, std::any_cast should use the un-decayed type (and
so always fail for function and array types that decay to pointers).

Using remove_cv_t is correct, because the condition for std::any_cast
to return non-null is operand.type() == typeid(T) and typeid ignores
top-level cv-qualifiers.

	PR libstdc++/90220
	* include/std/any (__any_caster): Use remove_cv_t instead of decay_t.
	Avoid a runtime check for types that can never be stored in std::any.
	* testsuite/20_util/any/misc/any_cast.cc: Test std::any_cast with
	array types.

From-SVN: r270547
2019-04-24 16:17:43 +01:00
Iain Buclaw 540bc8a8b1 libphobos: Skip curl tests if libcurl is not installed on the target.
libphobos/ChangeLog:

2019-04-24  Iain Buclaw  <ibuclaw@gdcproject.org>

	PR d/88654
	* testsuite/lib/libphobos.exp (libphobos-dg-test): Check
	libphobos_skipped_test_p before running test.
	(libphobos-dg-prune): New proc.
	(libphobos_init): Set libphobos_skip_tests.
	(libphobos_skipped_test_p): New proc.
	(check_effective_target_libcurl_available): New proc.
	* testsuite/libphobos.phobos/phobos.exp: Skip curl tests if library
	not found.
	* testsuite/libphobos.phobos_shared/phobos_shared.exp: Likewise.

From-SVN: r270545
2019-04-24 14:17:34 +00:00
Andreas Krebbel 9fe1940081 S/390: Fix PR89952 incorrect CFI
This patch fixes a cases where inconsistent CFI is generated.

After restoring the hard frame pointer (r11) from an FPR we have to
set the CFA register.  In order to be able to set it back to the stack
pointer (r15) we have to make sure that r15 has been restored already.

The patch also adds a scheduler dependency to prevent the instruction
scheduler from swapping the r11 and r15 restore again.

gcc/ChangeLog:

2019-04-24  Andreas Krebbel  <krebbel@linux.ibm.com>

	PR target/89952
	* config/s390/s390.c (s390_restore_gprs_from_fprs): Restore GPRs
    	from FPRs in reverse order.  Generate REG_CFA_DEF_CFA note also
    	for restored hard frame pointer.
	(s390_sched_dependencies_evaluation): Implement new target hook.
	(TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK): New macro definition.

gcc/testsuite/ChangeLog:

2019-04-24  Andreas Krebbel  <krebbel@linux.ibm.com>

	PR target/89952
	* gcc.target/s390/pr89952.c: New test.

From-SVN: r270544
2019-04-24 13:40:38 +00:00
Ian Lance Taylor 972206e0c2 re PR target/89093 (C++ exception handling clobbers d8 VFP register)
PR target/89093
    runtime: mark unwind functions general-regs-only on ARM
    
    For https://gcc.gnu.org/PR89093.
    
    Change-Id: Ic426b43d633c77104bda01d4e7835bc9ab4695ef
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/173657
    Reviewed-by: Ian Lance Taylor <iant@golang.org>

From-SVN: r270542
2019-04-24 12:45:45 +00:00
Iain Buclaw 9e1558d322 libphobos: Fix assert in core.sys.posix.sys.stat for aarch64/ilp32.
Merges upstream druntime 51365217.

Reviewed-on: https://github.com/dlang/druntime/pull/2579

From-SVN: r270541
2019-04-24 11:04:22 +00:00
Claudiu Zissulescu fe3ddee943 [ARC][COMMITTED] Fix typos.
gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

	* config/arc/arc-options.def: Fix typos and spelling mistakes.
	* config/arc/arc.c (arc_init): Cleanup warning message.
	(arc_override_options): Likewise.

From-SVN: r270540
2019-04-24 12:15:47 +02:00
Richard Biener be39d6f037 call.c (null_ptr_cst_p): Order checks according to expensiveness.
2019-04-24  Richard Biener  <rguenther@suse.de>

	cp/
	* call.c (null_ptr_cst_p): Order checks according to expensiveness.
	(conversion_null_warnings): Likewise.
	* typeck.c (same_type_ignoring_top_level_qualifiers_p): Return
	early if type1 == type2.

From-SVN: r270539
2019-04-24 10:08:07 +00:00
Jonathan Wakely f9bfdfa202 PR libstdc++/90220 Fix std::any_cast for function pointers
PR libstdc++/90220 (partial)
	* include/std/any (any_cast<T>(any*), any_cast<T>(const any*)): Do
	not attempt ill-formed static_cast to pointers to non-object types.
	* testsuite/20_util/any/misc/any_cast.cc: Test std::any_cast with
	function types.

From-SVN: r270538
2019-04-24 10:46:07 +01:00
Jakub Jelinek de6ae2ce07 re PR target/90187 (ICE in extract_insn, at recog.c:2304 x86_64)
PR target/90187
	* config/i386/i386.c (ix86_expand_sse_fp_minmax): Force if_true into
	a register if both if_true and if_false are MEMs.

	* g++.target/i386/pr90187.C: New test.

From-SVN: r270537
2019-04-24 11:27:14 +02:00
Iain Buclaw 4a475b3fbb d/dmd: Merge upstream dmd 423758078
Fixes another failing test to pass on BigEndian.

Initial patch by Robin Dapp.

Reviewed-on: https://github.com/dlang/dmd/pull/9684

gcc/testsuite/ChangeLog:

2019-04-24  Iain Buclaw  <ibuclaw@gdcproject.org>

	* gdc.test/README.gcc: New file.

From-SVN: r270536
2019-04-24 09:15:59 +00:00
Ramana Radhakrishnan 0f7e4fe2e3 re PR target/89093 (C++ exception handling clobbers d8 VFP register)
PR target/89093
	* raise-gcc.c (TARGET_ATTRIBUTE): Define.
	(continue_unwind, personality_body, PERSONALITY_FUNCTION): Add
	TARGET_ATTRIBUTE.

Co-Authored-By: Bernd Edlinger <bernd.edlinger@hotmail.de>
Co-Authored-By: Jakub Jelinek <jakub@redhat.com>

From-SVN: r270535
2019-04-24 10:16:07 +02:00
Jakub Jelinek 3795b582ac re PR tree-optimization/90208 (error: EH landing pad label)
PR tree-optimization/90208
	* tree-cfg.c (remove_bb): Move forced labels from removed bbs
	after labels of new_bb, not before them.

	* gcc.dg/tsan/pr90208-1.c: New test.
	* gcc.dg/tsan/pr90208-2.c: New test.

From-SVN: r270534
2019-04-24 10:14:50 +02:00
Jakub Jelinek 2bd49e6b64 re PR tree-optimization/90211 (ICE: tree check: expected ssa_name, have real_cst in first_readonly_imm_use, at ssa-iterators.h:351)
PR tree-optimization/90211
	* tree-parloops.c (try_create_reduction_list): Ignore phi arguments
	which are not SSA_NAMEs.

	* gcc.dg/autopar/pr90211.c: New test.

From-SVN: r270533
2019-04-24 10:13:29 +02:00
Iain Buclaw 9bedfe1899 libphobos: Fix link build errors when compiling with unsupported options
The first compilation test to get baseline warnings was getting more
messages due to a missing object.d file, compared to later configure
tests where libphobos is in the include paths.

Because there must always be an object module during compilation, let
the tests themselves be an empty object module instead.

libphobos/ChangeLog:

2019-04-24  Iain Buclaw  <ibuclaw@gdcproject.org>

	PR d/88431
	* configure: Regenerate.
	* m4/libtool.m4 (lt_simple_compile_test_code): Update to not have
	dependencies on libphobos.
	(lt_simple_link_test_code): Likewise.
	(GDCFLAGS): Don't override for D compiler tests.

From-SVN: r270531
2019-04-24 02:04:04 +00:00
GCC Administrator 0c1eb9639d Daily bump.
From-SVN: r270530
2019-04-24 00:16:17 +00:00
Jonathan Wakely e0657c24ae Avoid -Wcatch-value warning in testsuite
* testsuite/20_util/variant/run.cc: Catch exception by reference to
	prevent -Wcatch-value warning.

From-SVN: r270527
2019-04-24 00:17:52 +01:00
Jonathan Wakely 9588a07c96 Fix whitespace in ChangeLog
From-SVN: r270526
2019-04-24 00:01:35 +01:00
Jonathan Wakely 86a57ce103 Implement LWG 2904 for std::variant assignment
* include/std/variant (__variant_construct): Use template parameter
	type instead of equivalent decltype-specifier.
	(_Move_ctor_base<false, Types...>::_Move_ctor_base(_Move_ctor_base&&)):
	Replace forward with move.
	(_Move_ctor_base<false, Types...>::_M_destructive_move)
	(_Move_ctor_base<false, Types...>::_M_destructive_copy)
	(_Move_ctor_base<true, Types...>::_M_destructive_move)
	(_Move_ctor_base<true, Types...>::_M_destructive_copy): Only set the
	index after construction succeeds.
	(_Copy_assign_base<false, Types...>::operator=): Remove redundant
	if-constexpr checks that are always true. Use __remove_cvref_t instead
	of remove_reference so that is_nothrow_move_constructible check
	doesn't use a const rvalue parameter. In the potentially-throwing case
	construct a temporary and move assign it, as per LWG 2904.
	(_Move_assign_base<false, Types...>::operator=): Remove redundant
	if-constexpr checks that are always true. Use emplace as per LWG 2904.
	(variant::operator=(T&&)): Only use emplace conditionally, otherwise
	construct a temporary and move assign from it, as per LWG 2904.
	* testsuite/20_util/variant/exception_safety.cc: Check that
	assignment operators have strong exception safety guarantee.

From-SVN: r270525
2019-04-24 00:01:12 +01:00
Iain Buclaw a012806011 libphobos: Add AArch64 Linux as a supported target.
libphobos/ChangeLog:

2019-04-24  Iain Buclaw  <ibuclaw@gdcproject.org>

	* configure.tgt: Add aarch64*-*-linux* as a supported target.

From-SVN: r270524
2019-04-23 22:53:35 +00:00
Iain Buclaw 130cc10e21 libphobos: Add D support for S/390 Linux
gcc/d/ChangeLog:

2019-04-23  Iain Buclaw  <ibuclaw@gdcproject.org>
	    Robin Dapp  <rdapp@linux.ibm.com>

	* typeinfo.cc (create_typeinfo): Write typeinfo flags as uint.

gcc/testsuite/ChangeLog:

2019-04-23  Iain Buclaw  <ibuclaw@gdcproject.org>
	    Robin Dapp  <rdapp@linux.ibm.com>

	* gdc.dg/link.d: Test if target d_runtime.
	* gdc.dg/runnable.d: Fix tests to work on BigEndian.
	* gdc.dg/simd.d: Likewise.

libphobos/ChangeLog:

2019-04-23  Iain Buclaw  <ibuclaw@gdcproject.org>
	    Robin Dapp  <rdapp@linux.ibm.com>

	* configure.tgt: Add s390*-linux* as a supported target.
	* libdruntime/gcc/sections/elf_shared.d: import gcc.builtins.
	(__tls_get_addr_internal): Declare.
	(TLS_DTV_OFFSET): Define as zero on SystemZ.
	(getTLSRange): Support getting TLS on SystemZ.
	* testsuite/libphobos.typeinfo/struct-align.d: New test.

Co-Authored-By: Robin Dapp <rdapp@linux.ibm.com>

From-SVN: r270523
2019-04-23 22:53:25 +00:00
Iain Buclaw d9392bfa03 libphobos: Add D support for RISC-V Linux
2019-04-23  Iain Buclaw  <ibuclaw@gdcproject.org>

	* configure.tgt: Add riscv*-*-linux* as supported target.
	* libdruntime/gcc/sections/elf_shared.d (getDependencies): Adjust
	dlpi_addr on RISCV32 and RISCV64.
	* src/std/math.d: Add IEEE FPU control support for RISCV.

From-SVN: r270522
2019-04-23 22:53:12 +00:00
Thomas Rodgers 1bacd25b0c Document PSTL linker flags
* doc/xml/manual/using.xml: Add PSTL linker flags to table
        3.1.

From-SVN: r270521
2019-04-23 21:03:24 +00:00
Joseph Myers 451bbd9c40 Update .po files.
* be.po, da.po, de.po, el.po, fi.po, fr.po, hr.po, id.po, ja.po,
	nl.po, ru.po, sr.po, sv.po, tr.po, uk.po, vi.po, zh_CN.po,
	zh_TW.po: Update.

From-SVN: r270520
2019-04-23 22:03:01 +01:00
Iain Buclaw c0aebc60b2 d: Add support for compiling without libphobos library.
Merges upstream dmd 3b3dca8be

Reviewed-on: https://github.com/dlang/dmd/pull/9678

gcc/d/ChangeLog:

2019-04-23  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-builtins.cc (d_init_versions): Add D_BetterC, D_ModuleInfo,
	D_Exceptions, D_TypeInfo as predefined version conditions.
	* d-codegen.cc (build_bounds_condition): Generate trap if D asserts
	are turned off.
	* d-frontend.cc (getTypeInfoType): Add error when -fno-rtti is set.
	* d-lang.cc (d_init_options): Initialize new front-end options.
	(d_handle_option): Handle -fdruntime, -fexceptions, and -frtti.
	(d_post_options): Turn off D runtime features if -fno-druntime is set.
	* d-spec.cc (lang_specific_driver): Handle -fdruntime.
	* d-tree.h (have_typeinfo_p): Add prototype.
	(build_typeinfo): Update prototype.
	* decl.cc (DeclVisitor::visit(StructDeclaration)): Create typeinfo
	only if TypeInfo exists.
	(DeclVisitor::visit(ClassDeclaration)): Likewise.
	(DeclVisitor::visit(InterfaceDeclaration)): Likewise.
	(DeclVisitor::visit(EnumDeclaration)): Likewise.
	* expr.cc: Update all calls to build_typeinfo.
	* gdc.texi (Runtime Options): Document -fdruntime and -frtti.
	* lang.opt: Add -fdruntime and -frtti.
	* modules.cc (build_module_tree): Create module info only if
	ModuleInfo exists.
	* toir.cc (IRVisitor::visit(ThrowStatement)): Update test for
	-fno-exceptions.
	* typeinfo.cc (create_tinfo_types): Build internal typeinfo classes
	only if Object exists.
	(have_typeinfo_p): New function.
	(class TypeInfoVisitor): Update all calls to build_typeinfo.
	(build_typeinfo): Add error when -fno-rtti is set.

gcc/testsuite/ChangeLog:

2019-04-23  Iain Buclaw  <ibuclaw@gdcproject.org>

	* gdc.test/fail_compilation/fail2456.d: New test.
	* gdc.test/fail_compilation/test18312.d: New test.
	* gdc.test/gdc-test.exp (gdc-convert-args): Handle -betterC.

From-SVN: r270518
2019-04-23 20:08:46 +00:00
Sudakshina Das 32efff9f94 [GCC, AARCH64] Add GNU note section with BTI and PAC.
This patch adds the GNU NOTE section to the BTI and/or PAC
enabled objects for linux targets.

The patches for needed for these in binutils are already approved
and committed.
https://sourceware.org/ml/binutils/2019-03/msg00072.html

*** gcc/ChangeLog ***

2018-04-23  Sudakshina Das  <sudi.das@arm.com>

	* config/aarch64/aarch64-linux.h (TARGET_ASM_FILE_END): Define for
	AArch64.
	(aarch64_file_end_indicate_exec_stack): Add gnu note section.

gcc/testsuite/ChangeLog:

2018-04-23  Sudakshina Das  <sudi.das@arm.com>

	* gcc.target/aarch64/bti-1.c: Add scan directive for gnu note section
	for linux targets.
	* gcc.target/aarch64/va_arg_1.c: Update scan directive to not clash
	with GNU note section.

From-SVN: r270515
2019-04-23 15:51:25 +00:00
Iain Buclaw c7bfed18df re PR d/90079 (SEGV in _aaKeys, _aaValues on 32-bit SPARC)
PR d/90079
libphobos: Fix SEGV in _aaKeys, _aaValues on 32-bit SPARC

Merges upstream druntime b43203a1

Reviewed-on: https://github.com/dlang/druntime/pull/2572

From-SVN: r270514
2019-04-23 15:19:55 +00:00
Jeff Law d86bc962ae * lib/target-supports.exp
(check_effective_target_keeps_null_pointer_checks): Add cr16.

From-SVN: r270513
2019-04-23 08:39:50 -06:00
Roman Zhuykov 9fe3064bc6 modulo-sched: prevent division by zero (PR87979)
PR rtl-optimization/87979
	* modulo-sched.c (sms_schedule): Start ii value "mii" should
	not equal zero.

testsuite:

	PR rtl-optimization/87979
	* gcc.dg/pr87979.c: New test.

From-SVN: r270512
2019-04-23 13:14:57 +00:00
Roman Zhuykov 8d64622fce modulo-sched: fix branch scheduling issue (PR84032)
PR rtl-optimization/84032
	* modulo-sched.c (ps_insn_find_column): Change condition so that
	branch will always be the last insn in a row inside partial
	schedule.

testsuite:

	PR rtl-optimization/84032
	* gcc.dg/pr84032.c: New test.

From-SVN: r270511
2019-04-23 12:53:43 +00:00
Jonathan Wakely 038bc9bfd6 Implement correct std::variant triviality rules from P0602R4
The std::variant move assignment operator should not be trivial if the
variant is not trivially move constructible.

	* include/std/variant (__detail::__variant::_Traits): Make
	_S_trivial_copy_assign depend on _S_trivial_copy_ctor and make
	_S_trivial_move_assign depend on _S_trivial_move_ctor, as per
	P0602R4.
	(__detail::__variant::_Copy_assign_alias): Only depend on
	_S_trivial_copy_assign, which subsumes _S_trivial_copy_ctor now.
	* testsuite/20_util/variant/compile.cc: Correct checks for trivial
	move assignment operators.

From-SVN: r270510
2019-04-23 13:48:28 +01:00
Jonathan Wakely 06715e1cfb PR libstdc++/90165 constrain variant(T&&) constructor
Also refactor some constraints slightly to be more readable.

	PR libstdc++/90165
	* include/std/variant (variant::__not_self): New helper for the
	is_same_v<remove_cvref_t<T>, variant>==false constraints.
	(variant::__to_type_impl): Remove.
	(variant::__to_type): Add default argument to check pack size, instead
	of using __to_type_impl.
	(variant::__accepted_type): Add default argument using __not_self.
	(variant::__is_in_place_tag, variant::__not_in_place_tag): New helpers
	for variant(T&&) constructor constraint.
	(variant::variant(T&&)): Use __not_in_place_tag in constraints.
	Extract __accepted_type into a named template parameter for reuse in
	other constraints and in the exception specification.
	(variant::variant(in_place_type_t<T>, Args&&...))
	(variant::variant(in_place_type_t<T>, initializer_list<U>, Args&&...))
	(variant::variant(in_place_index_t<T>, Args&&...))
	(variant::variant(in_place_index_t<T>, initializer_list<U>, Args&&...))
	(variant::operator=T&&)): Remove redundant && from trait arguments.
	* testsuite/20_util/variant/compile.cc: Check variant(T&&) constructor
	isn't used for in_place_type or in_place_index arguments.

From-SVN: r270509
2019-04-23 13:48:18 +01:00
Jonathan Wakely 82e8c3da74 Corrections for C++2a std::unwrap_reference traits
The P0318R1 paper added to the C++2a draft recently was not the latest
version of the paper, and should have included these changes. These
changes will be made to the working draft via a Defect Report, so I'm
applying them to libstdc++ now.

	* include/std/type_traits (unwrap_reference_t): Define for C++2a.
	(unwrap_ref_decay): Remove inheritance from unwrap_reference.
	* testsuite/20_util/unwrap_reference/1.cc: Adjust test to use alias.

From-SVN: r270506
2019-04-23 11:27:14 +01:00
Richard Biener 6e27100979 re PR debug/90131 (wrong debug info at -O3)
2019-04-23  Richard Biener  <rguenther@suse.de>

	PR debug/90131
	* tree-cfgcleanup.c (move_debug_stmts_from_forwarder): Add
	dest_single_pred_p argument.
	(remove_forwarder_block): Adjust.
	(remove_forwarder_block_with_phi): Likewise.

From-SVN: r270505
2019-04-23 10:10:10 +00:00
Ramana Radhakrishnan 48528842bd re PR target/89093 (C++ exception handling clobbers d8 VFP register)
PR target/89093
	* config/arm/arm.c (aapcs_vfp_is_call_or_return_candidate): Diagnose
	if used with general-regs-only.
	(arm_conditional_register_usage): Don't add non-general regs if
	general-regs-only.
	(arm_valid_target_attribute_rec): Handle general-regs-only.
	* config/arm/arm.h (TARGET_HARD_FLOAT): Return false if
	general-regs-only.
	(TARGET_HARD_FLOAT_SUB): Define.
	(TARGET_SOFT_FLOAT): Define as negation of TARGET_HARD_FLOAT_SUB.
	(TARGET_REALLY_IWMMXT): Add && !TARGET_GENERAL_REGS_ONLY.
	(TARGET_REALLY_IWMMXT2): Likewise.
	* config/arm/arm.opt: Add -mgeneral-regs-only.
	* doc/extend.texi: Document ARM general-regs-only target.
	* doc/invoke.texi: Document ARM -mgeneral-regs-only.
libgcc/
	* config/arm/pr-support.c: Add #pragma GCC target("general-regs-only").
	* config/arm/unwind-arm.c: Likewise.
	* unwind-c.c (PERSONALITY_FUNCTION): Add general-regs-only target
	attribute for ARM.
libobjc/
	* exception.c (PERSONALITY_FUNCTION): Add general-regs-only target
	attribute for ARM.
libphobos/
	* libdruntime/gcc/deh.d: Import gcc.attribute.
	(personality_fn_attributes): New enum.
	(scanLSDA, CONTINUE_UNWINDING, gdc_personality, __gdc_personality):
	Add @personality_fn_attributes.
libstdc++-v3/
	* libsupc++/eh_personality.cc (PERSONALITY_FUNCTION): Add
	general-regs-only target attribute for ARM.

Co-Authored-By: Bernd Edlinger <bernd.edlinger@hotmail.de>
Co-Authored-By: Jakub Jelinek <jakub@redhat.com>

From-SVN: r270504
2019-04-23 12:03:41 +02:00
Jonathan Wakely 70265a0c5b Fix whitespace in ChangeLog
From-SVN: r270503
2019-04-23 10:55:36 +01:00
Jonathan Wakely 47a468bdbe Fix std::variant regression caused by never-valueless optimization
A regression was introduced by the recent changes to provide the strong
exception safety guarantee for "never valueless" types that have O(1),
non-throwing move assignment. The problematic code is:

  else if constexpr (__detail::__variant::_Never_valueless_alt<type>())
    {
      // This construction might throw:
      variant __tmp(in_place_index<_Np>, __il,
                    std::forward<_Args>(__args)...);
      // But _Never_valueless_alt<type> means this won't:
      *this = std::move(__tmp);
    }

When the variant is not assignable, the assignment is ill-formed, so
should not be attempted. When the variant has a copy assignment operator
but not a move assignment operator, the assignment performs a copy
assignment and that could throw, so should not be attempted.

The solution is to only take that branch when the variant has a move
assignment operator, which is determined by the _Traits::_S_move_assign
constant. When that is false the strong exception safety guarantee is
not possible, and so the __never_valueless function should also depend
on _S_move_assign.

While testing the fixes for this I noticed that the partial
specialization _Never_valueless_alt<basic_string<C,T,A>> incorrectly
assumed that is_nothrow_move_constructible<basic_string<C,T,A>> is
always true, but that's wrong for fully-dynamic COW strings. Fix the
partial specialization, and improve the comment describing
_Never_valueless_alt to be clear it depends on move construction as well
as move assignment.

Finally, I also observed that _Variant_storage<false, T...>::_M_valid()
was not taking advantage of the __never_valueless<T...>() function to
avoid a runtime check. Only the _Variant_storage<true, T...>::_M_valid()
function was using __never_valueless. That is also fixed.

	PR libstdc++/87431
	* include/bits/basic_string.h (_Never_valueless_alt): Make partial
	specialization also depend on is_nothrow_move_constructible.
	* include/std/variant (__detail::__variant::__never_valueless()):
	Only true if the variant would have a move assignment operator.
	(__detail::__variant::_Variant_storage<false, T...>::_M_valid()):
	Check __never_valueless<T...>().
	(variant::emplace): Only perform non-throwing move assignments
	for never-valueless alternatives if the variant has a move assignment
	operator.
	* testsuite/20_util/variant/compile.cc: Check that never-valueless
	types can be emplaced into non-assignable variants.
	* testsuite/20_util/variant/run.cc: Check that never-valueless types
	don't get copied when emplaced into non-assignable variants.

From-SVN: r270502
2019-04-23 10:55:33 +01:00
Jonathan Wakely be46043e07 Make some std::variant helper functions noexcept
* include/std/variant (__detail::__variant::__ref_cast): Remove
	unused function.
	(__detail::__variant::_Uninitialized::_M_get)
	(__detail::__variant::__get)
	(__gen_vtable_impl::__element_by_index_or_cookie): Add noexcept.

From-SVN: r270501
2019-04-23 10:55:28 +01:00
Bin Cheng 4b5689aa6c re PR tree-optimization/90078 (ICE with deep templates caused by overflow)
PR tree-optimization/90078
	* tree-ssa-loop-ivopts.c (comp_cost::operator +,-,+=,-+,/=,*=): Add
	checks for infinite_cost overflow.

	gcc/testsuite
	* gcc/testsuite/g++.dg/tree-ssa/pr90078.C: New test.

	Also fix typo in ChangeLog entry for revision 270499.

From-SVN: r270500
2019-04-23 04:07:46 +00:00
Bin Cheng 9e14603dfe re PR tree-optimization/90021 (ICE in index_in_loop_nest, at tree-data-ref.h:587 since r270203)
PR tree-optimization/92001
	* tree-chrec.c (evolution_function_is_univariate_p): New parameter
	and check univariate against it.
	* tree-chrec.h (evolution_function_is_univariate_p): New parameter.
	* tree-data-ref.c (add_other_self_distances): Pass new argument.

	gcc/testsuite
	* gcc/testsuite/gfortran.dg/pr90021.f90: New test.

From-SVN: r270499
2019-04-23 03:54:59 +00:00
GCC Administrator 6e8fc175bd Daily bump.
From-SVN: r270498
2019-04-23 00:16:13 +00:00