aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-07-30libstdc++: Make testsuite usable with -fno-exceptionsJonathan Wakely5-14/+15
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-30d: Implement core.bitop.rol() and core.bitop.ror() as intrinsics.Iain Buclaw3-0/+67
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-30d: Refactor matching and lowering of intrinsic functions.Iain Buclaw4-273/+358
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-30tree-optimization/96370 - make reassoc expr rewrite more robustRichard Biener2-5/+13
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-30nvptx: Provide vec_set<mode> and vec_extract<vmode><mode> patternsRoger Sayle2-0/+105
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-30Tune memcpy and memset for Zen cores.Martin Liska1-6/+6
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-30Re-format zen memcpy/memset costs.Martin Liska1-10/+28
The patch improves readability of the memcpy and memset expansion strategies. gcc/ChangeLog: * config/i386/x86-tune-costs.h: Change code formatting.
2020-07-29c++: overload sets and placeholder return type [PR64194]Patrick Palka2-1/+21
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-29c++: alias_ctad_tweaks and constrained dguide [PR95486]Patrick Palka2-1/+15
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-29c++: abbreviated function template friend matching [PR96106]Patrick Palka2-0/+15
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-29c++: constraints and explicit instantiation [PR96164]Patrick Palka3-12/+31
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-30Daily bump.GCC Administrator9-1/+300
2020-07-29nvptx: Support floating point reciprocal instructionsRoger Sayle2-0/+27
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-29Update gcc ja.po, sv.po.Joseph Myers2-7703/+509
* ja.po, sv.po: Update.
2020-07-29libstdc++: Review _Local_iterator/_Local_const_iterator implementations.François Dumont3-61/+39
_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-29c++: Implement C++20 implicit move changes. [PR91427]Jason Merrill17-74/+279
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-29c++: Avoid calling const copy ctor on implicit move. [PR91212]Jason Merrill2-3/+29
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-29OpenMP: Handle order(concurrent) clause in gfortranTobias Burnus6-3/+286
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-29preprocessor: Teach traditional about has_include [PR95889]Tiziano Müller3-1/+44
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-29testsuite: libstdc++ atomic_float/value_init.cc requires libatomicDavid Edelsohn2-1/+5
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-29Don't make -gsplit-dwarf imply -gFangrui Song2-10/+5
-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-29OpenMP: Permit in Fortran omp target data without mapTobias Burnus3-3/+54
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-29arm: Enable no-writeback vldr.16/vstr.16.Joe Ramsay5-22/+105
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-29gcc-changelog: fix combining of arguments.Martin Liska1-1/+1
contrib/ChangeLog: 2020-07-29 Martin Liska <mliska@suse.cz> * git-backport.py: fix how are ChangeLog paths combined.
2020-07-29Fortran : Don't warn for LOGICAL kind conversion PR96319Mark Eggleston2-2/+16
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-29tree-optimization/96349 - avoid abnormal coalescing issues in loop splitRichard Biener2-0/+35
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-29more SCEV cache clearingRichard Biener2-1/+7
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-29tree-optimization/95679 - properly signal changes from propagate_into_phi_argsRichard Biener2-5/+12
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-29gcc/fortran/module.c: Fix indentationTobias Burnus1-4/+4
gcc/fortran/ChangeLog: * module.c (mio_symbol_attribute): Fix indent of previous commit.
2020-07-29Fortran : ICE in gfc_conv_scalarized_array_ref PR53298Mark Eggleston2-1/+16
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-29libstdc++: Fix unordered containers move constructors noexcept qualificationFrançois Dumont16-27/+812
_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-29vect: Fix infinite loop while determining peeling amountStefan Schulze Frielinghaus1-1/+1
This is a follow up to commit 5c9669a0e6c 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-29OpenMP: Add 'omp requires' to Fortran (mostly parsing)Tobias Burnus15-10/+648
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-29config/mmix/mmix.h (NO_FUNCTION_CSE): Define to 1.Hans-Peter Nilsson1-0/+3
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-29mmix.h (ASM_OUTPUT_EXTERNAL): Define to default_elf_asm_output_external.Hans-Peter Nilsson1-0/+5
Whoops. When un-disabling visibility support for mmix, I missed that some of the newly enabled tests were FAILs, for not emitting .hidden for references to external declarations. This takes care of gcc.dg/visibility-14.c .. -19.c, and gcc.dg/visibility-23.c. gcc: * config/mmix/mmix.h (ASM_OUTPUT_EXTERNAL): Define to default_elf_asm_output_external.
2020-07-29Daily bump.GCC Administrator6-1/+146
2020-07-28ipa/96291: don't crash on unoptimized lto functionsSergei Trofimovich5-2/+28
In PR ipa/96291 the test contained an SCC with one unoptimized function. This tricked ipa-cp into NULL dereference. has_undead_caller_from_outside_scc_p() did not take into account that unoptimized funtions don't have IPA summary analysis. And dereferenced NULL pointer causing an ICE. gcc/ PR ipa/96291 * ipa-cp.c (has_undead_caller_from_outside_scc_p): Consider unoptimized callers as undead. gcc/testsuite/ PR ipa/96291 * gcc.dg/lto/pr96291_0.c: New testcase. * gcc.dg/lto/pr96291_1.c: Support file. * gcc.dg/lto/pr96291_2.c: Likewise. * gcc.dg/lto/pr96291.h: Likewise.
2020-07-28middle-end: Parity and popcount folding optimizations.Roger Sayle7-13/+196
This patch implements several constant folding optimizations for __builtin_parity and friends. We canonicalize popcount(x)&1 as parity(x) in gimple, and potentially convert back again when we expand to RTL. parity(~x) is simplified to parity(x), which is true for all integer modes with an even number of bits. But probably most usefully, parity(x)^parity(y) can be simplified to a parity(x^y), requiring only a single libcall or popcount. This patch optimizes popcount and parity of an argument known to have at most a single bit set, to be that single bit. Hence, popcount(x&8) is simplified to (x>>3)&1. This generalizes the existing optimization of popcount(x&1) being simplified to x&1, which is cleaned up with this patch. 2020-07-28 Roger Sayle <roger@nextmovesoftware.com> Richard Biener <rguenther@suse.de> gcc/ChangeLog * match.pd (popcount(x)&1 -> parity(x)): New simplification. (parity(~x) -> parity(x)): New simplification. (parity(x)^parity(y) -> parity(x^y)): New simplification. (parity(x&1) -> x&1): New simplification. (popcount(x) -> x>>C): New simplification. gcc/testsuite/ChangeLog * gcc.dg/fold-popcount-5.c: New test. * gcc.dg/fold-parity-1.c: Likewise. * gcc.dg/fold-parity-2.c: Likewise. * gcc.dg/fold-parity-3.c: Likewise. * gcc.dg/fold-parity-4.c: Likewise. * gcc.dg/fold-parity-5.c: Likewise.
2020-07-28c++: Set more DECL_CONTEXTsNathan Sidwell3-8/+8
I discovered we were not setting DECL_CONTEXT in a few cases, and grokfndecl's control flow wasn't making it clear that we were doing it in all cases. gcc/cp/ * cp-gimplify.c (cp_genericize_r): Set IMPORTED_DECL's context. * cp-objcp-common.c (cp_pushdecl): Set decl's context. * decl.c (grokfndecl): Make DECL_CONTEXT setting clearer.
2020-07-28c++: better fixup_type_variantsNathan Sidwell1-6/+4
fixup_type_variants was almost doing all that finish_struct needs. May as well make it do it all. gcc/cp/ * class.c (fixup_type_variants): Copy TYPE_SIZE and TYPE_SIZE_UINIT. (finish_struct): Call it.
2020-07-28c++: tree dump indentationNathan Sidwell1-6/+24
We were always forcing an indent, even if there was nothing to indent. Fixed thusly. gcc/cp/ * ptree.c (cxx_print_decl): Better indentation.
2020-07-28testsuite: Fix spelloNathan Sidwell1-2/+2
'Patterns' has one 'r'. gcc/testsuite/ * lib/options.exp: Fix spello
2020-07-28c++: Fix up cp_lexer_safe_previous_token [PR96328]Jakub Jelinek2-33/+49
The following testcase ICEs, because cp_lexer_safe_previous_token calls cp_lexer_previous_token and that ICEs, because all tokens in the lexer buffer before the current one (CPP_EOF) have been purged. cp_lexer_safe_previous_token is used in the context where it is ok if it punts, so the patch changes the function so that it doesn't assert there is some previous token, but instead returns NULL like in other cases where it punts. In addition to this, in the last hunk it does a micro-optimization, don't call the potentially expensive function if it will not need the result, instead check the least expensive condition first. And the middle hunk is a similar change from Mark's version of the patch, to use the safe variant in there because it is again just about a hint and it is better not to provide the hint than to ICE, though we don't have a testcase that would ICE. 2020-07-28 Jakub Jelinek <jakub@redhat.com> Mark Wielaard <mark@klomp.org> PR c++/96328 * parser.c (cp_lexer_safe_previous_token): Don't call cp_lexer_previous_token, instead inline it by hand and return NULL instead of failing assertion if all previous tokens until the first one are purged. (cp_parser_error_1): Optimize - only call cp_lexer_safe_previous_token if token->type is CPP_NAME. Use cp_lexer_safe_previous_token instead of cp_lexer_previous_token for the missing_token_desc != RT_NONE case too. * g++.dg/diagnostic/pr96328.C: New test. Co-Authored-By: Mark Wielaard <mark@klomp.org>
2020-07-28libcpp: Fix up raw string literal parsing error-recovery [PR96323]Jakub Jelinek2-1/+10
For (invalid) newline inside of the raw string literal delimiter, doing continue means we skip the needed processing of newlines. Instead of duplicating that, this patch just doesn't continue for those. 2020-07-28 Jakub Jelinek <jakub@redhat.com> PR preprocessor/96323 * lex.c (lex_raw_string): For c == '\n' don't continue after reporting an prefix delimiter error. * c-c++-common/cpp/pr96323.c: New test.
2020-07-28nvptx: Support 16-bit shifts and extendqihi2Tom de Vries3-9/+59
Add support for 16-bits shifts and for sign extension from 8 bits to 16 bits. This patch has been tested on nvptx-none with no new regressions. 2020-07-28 Roger Sayle <roger@nextmovesoftware.com> Tom de Vries <tdevries@suse.de> gcc/ChangeLog: * config/nvptx/nvptx.md (extendqihi2): New instruction. (ashl<mode>3, ashr<mode>3, lshr<mode>3): Support HImode. gcc/testsuite/ChangeLog: * gcc.target/nvptx/cvt.c: New test. * gcc.target/nvptx/shift16.c: New test.
2020-07-28preprocessor: Simplify read_mainNathan Sidwell1-6/+3
We can always use the final map to get the return value, rather than conditionally only when there was an immediate line directive. libcpp/ * init.c (cpp_read_main_file): Always use the last map for the return value.
2020-07-28libstdc++: Do not over-size hashtable buckets on range insertionFrançois Dumont4-45/+210
We used to consider range size on insertion but on unique keys container not all range values might be inserted resulting in over-sizing. In this case we just consider user reservation and if none then the container will adapt to actually inserted elements. libstdc++-v3/ChangeLog: * include/bits/hashtable.h (_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&, const _H2&, const _Hash&, const _Equal&, const _ExtractKey&, const allocator_type&, true_type)): New. (_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&, const _H2&, const _Hash&, const _Equal&, const _ExtractKey&, const allocator_type&, false_type)): New. (_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&, const _H2&, const _Hash&, const _Equal&, const _ExtractKey&, const allocator_type&)): Delegate to latters. (operator=(initializer_list<value_type>)): Rehash if too small. (_M_insert(_Arg&&, const _NodeGenerator&, true_type)): Remove size_t len parameter. * include/bits/hashtable_policy.h (_Insert_base<>::_M_insert_range): Do not try to get input range distance. * testsuite/23_containers/unordered_set/cons/bucket_hint.cc: New test. * testsuite/23_containers/unordered_set/modifiers/insert.cc: New test.
2020-07-28testsuite: Fix up nontype-subob1.C for targets with short int, int or long ↵Jakub Jelinek1-1/+1
long ssize_t 2020-07-28 Jakub Jelinek <jakub@redhat.com> * g++.dg/cpp2a/nontype-subob1.C: Allow s1, i1 or x1 instead of l1 for targets with short, int or long long ssize_t.
2020-07-28expander: Fix ICE in maybe_warn_rdwr_sizes [PR96335]Jakub Jelinek2-18/+14
The following testcase ICEs in maybe_warn_rdwr_sizes. The problem is that the caller uses its fndecl and fntype variables to fill up rdwr_map, and the fntype in that case is a prototype with the access attribute and all the checks needed for that performed. But the maybe_warn_rdwr_sizes function tries to rediscover fndecl/fntype itself and does it differently from how the caller did (for fndecl get_callee_fndecl and fntype from that FUNCTION_DECL, otherwise sets fntype to CALL_EXPR_FN's type). On the testcase, get_callee_fndecl does find a FUNCTION_DECL because it does STRIP_NOPS in between. Instead of trying to rediscover those, this patch just passes them down, like is done in several other functions. 2020-07-28 Jakub Jelinek <jakub@redhat.com> PR middle-end/96335 * calls.c (maybe_warn_rdwr_sizes): Add FNDECL and FNTYPE arguments, instead of trying to rediscover them in the body. (initialize_argument_information): Adjust caller. * gcc.dg/pr96335.c: New test.
2020-07-27vect: Refactor peel_iters_{pro,epi}logue cost modelingKewen Lin1-125/+142
This patch is to refactor the existing peel_iters_prologue and peel_iters_epilogue cost model handlings, by following the structure below suggested by Richard Sandiford: - calculate peel_iters_prologue - calculate peel_iters_epilogue - add costs associated with peel_iters_prologue - add costs associated with peel_iters_epilogue - add costs related to branch taken/not_taken. Bootstrapped/regtested on aarch64-linux-gnu. gcc/ChangeLog: * tree-vect-loop.c (vect_get_known_peeling_cost): Factor out some code to determine peel_iters_epilogue to... (vect_get_peel_iters_epilogue): ...this new function. (vect_estimate_min_profitable_iters): Refactor cost calculation on peel_iters_prologue and peel_iters_epilogue.