1. 24 Apr, 2019 12 commits
  2. 23 Apr, 2019 25 commits
    • Avoid -Wcatch-value warning in testsuite · e0657c24
      	* testsuite/20_util/variant/run.cc: Catch exception by reference to
      	prevent -Wcatch-value warning.
      
      From-SVN: r270527
      Jonathan Wakely committed
    • Fix whitespace in ChangeLog · 9588a07c
      From-SVN: r270526
      Jonathan Wakely committed
    • Implement LWG 2904 for std::variant assignment · 86a57ce1
      	* 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
      Jonathan Wakely committed
    • libphobos: Add AArch64 Linux as a supported target. · a0128060
      libphobos/ChangeLog:
      
      2019-04-24  Iain Buclaw  <ibuclaw@gdcproject.org>
      
      	* configure.tgt: Add aarch64*-*-linux* as a supported target.
      
      From-SVN: r270524
      Iain Buclaw committed
    • libphobos: Add D support for S/390 Linux · 130cc10e
      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
      Iain Buclaw committed
    • libphobos: Add D support for RISC-V Linux · d9392bfa
      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
      Iain Buclaw committed
    • Document PSTL linker flags · 1bacd25b
      	* doc/xml/manual/using.xml: Add PSTL linker flags to table
              3.1.
      
      From-SVN: r270521
      Thomas Rodgers committed
    • Update .po files. · 451bbd9c
      	* 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
      Joseph Myers committed
    • d: Add support for compiling without libphobos library. · c0aebc60
      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
      Iain Buclaw committed
    • [GCC, AARCH64] Add GNU note section with BTI and PAC. · 32efff9f
      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
      Sudakshina Das committed
    • re PR d/90079 (SEGV in _aaKeys, _aaValues on 32-bit SPARC) · c7bfed18
      	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
      Iain Buclaw committed
    • * lib/target-supports.exp · d86bc962
      	(check_effective_target_keeps_null_pointer_checks): Add cr16.
      
      From-SVN: r270513
      Jeff Law committed
    • modulo-sched: prevent division by zero (PR87979) · 9fe3064b
      	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
      Roman Zhuykov committed
    • modulo-sched: fix branch scheduling issue (PR84032) · 8d64622f
      	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
      Roman Zhuykov committed
    • Implement correct std::variant triviality rules from P0602R4 · 038bc9bf
      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
      Jonathan Wakely committed
    • PR libstdc++/90165 constrain variant(T&&) constructor · 06715e1c
      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
      Jonathan Wakely committed
    • Corrections for C++2a std::unwrap_reference traits · 82e8c3da
      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
      Jonathan Wakely committed
    • re PR debug/90131 (wrong debug info at -O3) · 6e271009
      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
      Richard Biener committed
    • re PR target/89093 (C++ exception handling clobbers d8 VFP register) · 48528842
      	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
      Ramana Radhakrishnan committed
    • Fix whitespace in ChangeLog · 70265a0c
      From-SVN: r270503
      Jonathan Wakely committed
    • Fix std::variant regression caused by never-valueless optimization · 47a468bd
      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
      Jonathan Wakely committed
    • Make some std::variant helper functions noexcept · be46043e
      	* 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
      Jonathan Wakely committed
    • re PR tree-optimization/90078 (ICE with deep templates caused by overflow) · 4b5689aa
      	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
      Bin Cheng committed
    • re PR tree-optimization/90021 (ICE in index_in_loop_nest, at tree-data-ref.h:587 since r270203) · 9e14603d
      	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
      Bin Cheng committed
    • Daily bump. · 6e8fc175
      From-SVN: r270498
      GCC Administrator committed
  3. 22 Apr, 2019 3 commits
    • re PR fortran/90166 (Compiler Fails at Assembler) · 2810dfab
      2019-04-19  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/90166
      	* decl.c (in_module_or_interface): New function to check that the
      	current state is in a module, submodule, or interface.
      	(gfc_match_prefix): Use it.
      
      2019-04-19  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/90166
      	* gfortran.dg/submodule_22.f08: Add additional dg-error comments.
      
      From-SVN: r270495
      Steven G. Kargl committed
    • PR c++/87366 - wrong error with alias template. · f2b6aeea
      With this testcase the code in template_args_equal to treat aliases as
      distinct wasn't sufficient, because it only looked at the top level, whereas
      here we have a reference to the alias.  So let's also handle treating them
      as distinct in structural_comptypes.  For GCC 10 I have a more comprehensive
      patch, but for GCC 9 let's go with this smaller change.
      
      	* typeck.c (structural_comptypes): When comparing_specializations,
      	aliases are unequal.
      	(comptypes): When comparing_specializations, do structural
      	comparison.
      
      From-SVN: r270494
      Jason Merrill committed
    • Add myself to MAINTAINERS · 1e8dac32
      2019-04-22  Roman Zhuykov  <zhroma@ispras.ru>
      
      	* MAINTAINERS (Various Maintainers): Remove Ayal Zaks and add myself
      	as modulo-scheduler maintainer.
      
      From-SVN: r270492
      Roman Zhuykov committed