aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-06-29testsuite: Make char4-subscript.f90 regex endian neutral.David Edelsohn1-4/+4
The testcase tests for little endian results. This patch updates the regex to accept either endianness. gcc/testsuite/ChangeLog 2020-06-29 David Edelsohn <dje.gcc@gmail.com> * gfortran.dg/char4-subscript.f90: Simplify regex. Accept big endian or little endian output.
2020-06-29rs6000: Rename isa attribute "fut" to "p10"Segher Boessenkool1-5/+5
I missed this when grepping for "future". 2020-06-29 Segher Boessenkool <segher@kernel.crashing.org> * config/rs6000/rs6000.md (isa): Rename "fut" to "p10".
2020-06-29middle-end: Optimize (A&C)^(B&C) to (A^B)&C in simplify_rtx (take 3).Roger Sayle1-0/+169
2020-06-29 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog: * simplify-rtx.c (simplify_distributive_operation): New function to un-distribute a binary operation of two binary operations. (X & C) ^ (Y & C) to (X ^ Y) & C, when C is simple (i.e. a constant). (simplify_binary_operation_1) <IOR, XOR, AND>: Call it from here when appropriate. (test_scalar_int_ops): New function for unit self-testing scalar integer transformations in simplify-rtx.c. (test_scalar_ops): Call test_scalar_int_ops for each integer mode. (simplify_rtx_c_tests): Call test_scalar_ops.
2020-06-29c++: Check uniqueness of concepts/variable templates [PR94553]Marek Polacek4-2/+26
This patch wraps up PR94553. Variable template names have no C compatibility implications so they should be unique in their declarative region. It occurred to me that this applies to concepts as well. This is not specified in [basic.scope.declarative]/4.2 but that seems like a bug in the standard. I couldn't use variable_template_p because that uses PRIMARY_TEMPLATE_P which uses DECL_PRIMARY_TEMPLATE and that might not have been set up yet (push_template_decl hasn't yet been called). PRIMARY_TEMPLATE_P is important to distinguish between a variable template and a variable in a function template. But I think we don't have to worry about that in duplicate_decls: a template declaration cannot appear at block scope, and additional checks in duplicate_decls suggest that it won't ever see a TEMPLATE_DECL for a variable in a function template. So checking that the DECL_TEMPLATE_RESULT is a VAR_DECL seems to be fine. I could have added a default argument to variable_template_p too to avoid checking PRIMARY_TEMPLATE_P but it didn't seem worth the effort. gcc/cp/ChangeLog: PR c++/94553 * decl.c (duplicate_decls): Make sure a concept or a variable template is unique in its declarative region. gcc/testsuite/ChangeLog: PR c++/94553 * g++.dg/cpp1y/pr68578.C: Adjust dg-error. * g++.dg/cpp1y/var-templ66.C: New test. * g++.dg/cpp2a/concepts-redecl1.C: New test.
2020-06-29c++: Fix CTAD for aggregates in template [PR95568]Marek Polacek3-1/+56
95568 complains that CTAD for aggregates doesn't work within requires-clause and it turned out that it doesn't work when we try the deduction in a template. The reason is that maybe_aggr_guide creates a guide that can look like this template<class T> X(decltype (X<T>::x))-> X<T> where the parameter is a decltype, which is a non-deduced context. So the subsequent build_new_function_call fails because unify_one_argument can't deduce anything from it ([temp.deduct.type]: "If a template parameter is used only in non-deduced contexts and is not explicitly specified, template argument deduction fails.") Those decltypes come from finish_decltype_type. We can just use TREE_TYPE instead. I pondered using unlowered_expr_type, but that didn't make any difference for the FIELD_DECLs I saw in class-deduction-aggr6.C. gcc/cp/ChangeLog: PR c++/95568 * pt.c (collect_ctor_idx_types): Use TREE_TYPE. gcc/testsuite/ChangeLog: PR c++/95568 * g++.dg/cpp2a/class-deduction-aggr5.C: New test. * g++.dg/cpp2a/class-deduction-aggr6.C: New test.
2020-06-29PR fortran/71706 - ICE on using sync images with -fcheck=boundsHarald Anlauf2-3/+13
The run-time checking code did not properly convert the kind of the argument to SYNC IMAGES, leading to an error in verify_gimple. Fix that. gcc/fortran/ PR fortran/71706 * trans-stmt.c (gfc_trans_sync): Do proper kind conversion in bounds-checking code.
2020-06-29testsuite: Fix coding style.Martin Liska1-2/+2
2020-06-29 Martin Liska <mliska@suse.cz> PR c++/86568 * c-c++-common/builtin-arith-overflow-1.c (generic_3, typed_3_null): Fix coding style.
2020-06-29tree-optimization/95916 - treat scalar ops explicitelyRichard Biener2-0/+28
This explicitely treats the case of scalar operands for SLP when computing insert locations. 2020-06-29 Richard Biener <rguenther@suse.de> PR tree-optimization/95916 * tree-vect-slp.c (vect_schedule_slp_instance): Explicitely handle the case of not vectorized externals. * gcc.dg/vect/pr95916.c: New testcase.
2020-06-29do not include <utility> from tree-vectorizer.hRichard Biener1-1/+1
This removes the duplicate <utility> include from tree-vectorizer.h. 2020-06-29 Richard Biener <rguenther@suse.de> * tree-vectorizer.h: Do not include <utility>.
2020-06-29testsuite: Adjust testcase for recent -Wnonnull changesJakub Jelinek1-2/+1
2020-06-29 Jakub Jelinek <jakub@redhat.com> PR c++/86568 * c-c++-common/builtin-arith-overflow-1.c (generic_3, typed_3_null): Adjust dg-warning.
2020-06-29testsuite: Adjust testcase for recent -Wnonnull changesJakub Jelinek1-32/+32
2020-06-29 Jakub Jelinek <jakub@redhat.com> PR c++/86568 gcc/testsuite/ * c-c++-common/builtin-arith-overflow-1.c (generic_3, typed_3_null): Adjust dg-warning.
2020-06-29Use gsi_bb instead of iterator->bb.Martin Liska3-3/+3
gcc/ChangeLog: * tree-ssa-ccp.c (gsi_prev_dom_bb_nondebug): Use gsi_bb instead of gimple_stmt_iterator::bb. * tree-ssa-math-opts.c (insert_reciprocals): Likewise. * tree-vectorizer.h: Likewise.
2020-06-29amdgcn: Support basic DWARFAndrew Stubbs3-8/+120
This is enough DWARF support for "-O0 -g" to work OK, within a single frame, using the new rocgdb debugger from AMD. Debugging with optimization enabled also works when the values are located in SGPRs or memory. Scalars in VGPRs are problematic, EXEC_HI and VCC_HI are unmappable, and CFI remains unimplemented. gcc/ChangeLog: * config/gcn/gcn-hsa.h (DBX_REGISTER_NUMBER): New macro. * config/gcn/gcn-protos.h (gcn_dwarf_register_number): New prototype. * config/gcn/gcn.c (gcn_expand_prologue): Add RTX_FRAME_RELATED_P and REG_FRAME_RELATED_EXPR to stack and frame pointer adjustments. (gcn_dwarf_register_number): New function. (gcn_dwarf_register_span): New function. (TARGET_DWARF_REGISTER_SPAN): New hook macro.
2020-06-29store-merging: ICE in find_bswap_or_nop_1 PR95854.Kaipeng Zhou2-0/+24
The patch add a judgement in find_bswap_or_nop_1 to make sure both operand1 and operand2 cannot be converted to unsigned HOST_WIDE_INT. If not, return NULL. gcc/ChangeLog: 2020-06-24 Kaipeng Zhou <zhoukaipeng3@huawei.com> PR tree-optimization/95854 * gimple-ssa-store-merging.c (find_bswap_or_nop_1): Return NULL if operand 1 or 2 of a BIT_FIELD_REF cannot be converted to unsigned HOST_WIDE_INT. gcc/testsuite/ChangeLog: 2020-06-24 Kaipeng Zhou <zhoukaipeng3@huawei.com> PR tree-optimization/95854 * gcc.dg/pr95854.c: New test.
2020-06-29sparc: Remove register storage class in sparc.cRainer Orth1-11/+11
The switch to C++17 broke SPARC bootstrap: /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:8887:34: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register] 8887 | epilogue_renumber (register rtx *where, int test) | ^~~~~ /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c: In function 'int epilogue_renumber(rtx_def**, int)': /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:8889:24: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register] 8889 | register const char *fmt; | ^~~ /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:8890:16: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register] 8890 | register int i; | ^ /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:8891:26: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register] 8891 | register enum rtx_code code; | ^~~~ /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:8948:17: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register] 8948 | register int j; | ^ /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c: In function 'void sparc_print_operand_address(std::FILE*, machine_mode, rtx)': /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:9671:16: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register] 9671 | register rtx base, index = 0; | ^~~~ /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:9671:22: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register] 9671 | register rtx base, index = 0; | ^~~~~ /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:9673:16: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register] 9673 | register rtx addr = x; | ^~~~ /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c: At global scope: /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:9807:32: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register] 9807 | sparc_type_code (register tree type) | ^~~~ /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c: In function 'long unsigned int sparc_type_code(tree)': /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:9809:26: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register] 9809 | register unsigned long qualifiers = 0; | ^~~~~~~~~~ /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:9810:21: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register] 9810 | register unsigned shift; | ^~~~~ /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c: In function 'int set_extends(rtx_insn*)': /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc.c:10306:16: error: ISO C++17 does not allow 'register' storage class specifier [-Werror=register] 10306 | register rtx pat = PATTERN (insn); | ^~~ Fixed by removing the register keyword. Bootstrapped on sparc-sun-solaris2.11. * config/sparc/sparc.c (epilogue_renumber): Remove register. (sparc_print_operand_address): Likewise. (sparc_type_code): Likewise. (set_extends): Likewise.
2020-06-29arc: add exceptions for PR92860.Martin Liska1-0/+4
gcc/ChangeLog: PR tree-optimization/92860 * optc-save-gen.awk: Add exceptions for arc target.
2020-06-29testsuite: clarify scan-dump file globbing behaviorFrederik Harwath2-11/+56
The test commands for scanning optimization dump files perform globbing on the argument that specifies the suffix of the dump files to be scanned. This behavior is currently undocumented. Furthermore, the current implementation of "scan-dump" and similar procedures yields an error whenever the file name globbing matches more than one file (due to an attempt to call "open" on multiple files) while a failure to match any file results in an unresolved test. This commit documents the globbing behavior. The dump scanning procedures are changed to make the test unresolved if globbing matches more than one file. gcc/ChangeLog: 2020-06-29 Frederik Harwath <frederik@codesourcery.com> * doc/sourcebuild.texi: Describe globbing of the dump file scanning commands "suffix" argument. gcc/testsuite/ChangeLog: 2020-06-29 Frederik Harwath <frederik@codesourcery.com> * lib/scandump.exp (glob-dump-file): New proc. (scan-dump): Use glob-dump-file for file name expansion. (scan-dump-times): Likewise. (scan-dump-dem): Likewise. (scan-dump-dem-not): Likewise. Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>
2020-06-29Daily bump.GCC Administrator8-1/+133
2020-06-29Add a __nonnnull__ attribute to std::string's _CharT* constructorVille Voutilainen3-0/+59
Add a __nonnnull__ attribute to std::string's _CharT* constructor * include/bits/basic_string.h (string(_CharT*, const _Alloc&)): Add a __nonnull__ attribute. * testsuite/21_strings/basic_string/cons/char/nonnull.cc: New. * testsuite/21_strings/basic_string/cons/wchar_t/nonnull.cc: Likewise.
2020-06-29PR libstdc++/95915Ville Voutilainen15-18/+92
PR libstdc++/95915 * include/std/type_traits (is_literal_type, is_literal_type_v): Deprecate in C++17. * include/std/variant (_Uninitialized): Adjust the condition and the comment. * testsuite/20_util/is_literal_type/deprecated-1z.cc: New. * testsuite/20_util/is_literal_type/requirements/explicit_instantiation.cc: Adjust. * testsuite/20_util/is_literal_type/requirements/typedefs.cc: Likewise. * testsuite/20_util/is_literal_type/value.cc: Likewise. * testsuite/20_util/optional/constexpr/nullopt.cc: Use __is_literal_type directly. * testsuite/20_util/optional/nullopt.cc: Likewise. * testsuite/20_util/variable_templates_for_traits.cc: Adjust. * testsuite/20_util/variant/95915.cc: New. * testsuite/20_util/variant/compile.cc: Add new test. * testsuite/experimental/optional/constexpr/nullopt.cc: Use __is_literal_type directly. * testsuite/experimental/optional/nullopt.cc: Likewise. * testsuite/experimental/type_traits/value.cc: Adjust. * testsuite/util/testsuite_common_types.h: Use __is_literal_type directly.
2020-06-28Underline argument in -Wnonnull and in C++ extend warning to the this ↵Martin Sebor16-91/+273
pointer [PR c++/86568]. Resolves: PR c++/86568 - -Wnonnull warnings should highlight the relevant argument not the closing parenthesis gcc/c-family/ChangeLog: PR c++/86568 * c-common.c (struct nonnull_arg_ctx): Add members. (check_function_nonnull): Use nonnull_arg_ctx as argument. Handle C++ member functions specially. Consider the this pointer implicitly nonnull. (check_nonnull_arg): Use location of argument when available. (check_function_arguments): Use nonnull_arg_ctx as argument. gcc/ChangeLog: PR c++/86568 * calls.c (maybe_warn_rdwr_sizes): Use location of argument if available. * tree-ssa-ccp.c (pass_post_ipa_warn::execute): Same. Adjust indentation. * tree.c (get_nonnull_args): Consider the this pointer implicitly nonnull. * var-tracking.c (deps_vec): New type. (var_loc_dep_vec): New function. (VAR_LOC_DEP_VEC): Use it. gcc/testsuite/ChangeLog: PR c++/86568 * g++.dg/warn/Wnonnull5.C: New test. * c-c++-common/pr28656.c: Adjust text of expected warning. * c-c++-common/pr66208.c: Same. * g++.dg/cpp0x/nullptr22.C: Same. * g++.dg/ext/attr-nonnull.C: Same. * g++.dg/ext/attrib49.C: Same. * g++.dg/pr71973-2.C: Same. * g++.dg/warn/Wnonnull3.C: Same. * g++.dg/warn/Wnonnull4.C: Same. * obj-c++.dg/attributes/method-nonnull-1.mm: Same. * objc.dg/attributes/method-nonnull-1.m: Same.
2020-06-28d: Merge upstream dmd 8508c4e68.Iain Buclaw2-14/+61
Fixes a performance bug where 'static foreach' would take an exponentially long time to expand during CTFE. In the following example: static foreach (i; 0..30000) {} Compilation time had been reduced from around 40 to 0.08 seconds. Memory consumption is also reduced from 3.5GB to 55MB. Reviewed-on: https://github.com/dlang/dmd/pull/11335 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 8508c4e68.
2020-06-28PR fortran/95340 - ICE in gfc_match_select_rank, at fortran/match.c:6690Harald Anlauf2-1/+12
Do not dereference NULL pointer when querying array shape of possibly improperly delared variable. gcc/fortran/ PR fortran/95340 * match.c (gfc_match_select_rank): Do not dereference NULL pointer.
2020-06-28coroutines: Handle namespaces while scanning local vars [PR95711].Iain Sandoe2-1/+81
We need to skip past namespace decls when scanning the bind expression var lists checking for local vars. gcc/cp/ChangeLog: PR c++/95711 * coroutines.cc (register_local_var_uses): Skip past namespace decls. gcc/testsuite/ChangeLog: PR c++/95711 * g++.dg/coroutines/pr95711.C: New test.
2020-06-28PR fortran/95880 - ICE in gfc_add_type, at fortran/symbol.c:2030Harald Anlauf2-1/+12
The fix for PR39695 did not properly distinguish between procedure names and other symbols names in errors emitted for invalid code. Fix that. gcc/fortran/ PR fortran/95880 * symbol.c (gfc_add_type): If sym->ns->proc_name is set, use it, otherwise fall back to sym->name.
2020-06-28coroutines, testsuite: Update log messages. [NFC, PR95519]Iain Sandoe4-5/+5
This does not affect the test functionality, but only user- facing debug messages when the tests are run outside the test-suite. gcc/testsuite/ChangeLog: PR c++/95519 * g++.dg/coroutines/torture/pr95519-02-final_suspend.C: Amend log messages. * g++.dg/coroutines/torture/pr95519-03-return-value.C: Likewise. * g++.dg/coroutines/torture/pr95519-04-yield-value.C: Likewise. * g++.dg/coroutines/torture/pr95519-05-gro.C: Likewise.
2020-06-27IFN: Fix mask_{load,store} optab support macrosKewen Lin1-2/+2
When I am working on IFNs for vector with length, I noticed that the current optab support query for mask_load/mask_store looks unexpected. The mask_load/mask_store requires two modes for convert_optab query, but the macros direct_mask_{load,store}_optab_supported_p uses direct_optab_supported_p which asserts type pair should have the same mode. I'm not sure whether we have some special reason here or just a typo, since everything goes well now, mask_{load,store} optab check is mainly handled by can_vec_mask_load_store_p. But if we have some codes as below (eg: one checking for all IFNs finally) tree_pair types = direct_internal_fn_types (ifn, call); if(direct_internal_fn_supported_p (ifn, types, OPTIMIZE_FOR_SPEED) ... It will cause ICE. gcc/ChangeLog: * internal-fn.c (direct_mask_load_optab_supported_p): Use convert_optab_supported_p instead of direct_optab_supported_p. (direct_mask_store_optab_supported_p): Likewise.
2020-06-27rs6000: Correct prefix testsuite failures on AIX.David Edelsohn6-0/+6
gcc/testsuite/ChangeLog 2020-06-27 David Edelsohn <dje.gcc@gmail.com> * gcc.target/powerpc/prefix-large-dd.c: Require DFP. * gcc.target/powerpc/prefix-large-sd.c: Require DFP. * gcc.target/powerpc/prefix-large-kf.c: Require float128. * gcc.target/powerpc/prefix-pcrel-dd.c: Require DFP. * gcc.target/powerpc/prefix-pcrel-sd.c: Require DFP. * gcc.target/powerpc/prefix-pcrel-kf.c: Require float128.
2020-06-28Daily bump.GCC Administrator7-1/+173
2020-06-27PR fortran/95881 - ICE in resolve_symbol, at fortran/resolve.c:15175Harald Anlauf2-0/+12
Avoid NULL pointer dereference. gcc/fortran/ PR fortran/95881 * resolve.c (resolve_symbol): Avoid NULL pointer dereference.
2020-06-27Move simplification of statements using ranges into its own class.Aldy Hernandez6-143/+190
This moves all the simplification code from vr_values into a separate class (simplify_using_ranges). In doing so, we get rid of a bunch of dependencies on the internals of vr_values. The goal is to (a) remove unnecessary interdependendcies (b) be able to use this engine with any range infrastructure, as all it needs is a method to get the range for an SSA name (get_value_range). I also removed as many dependencies on value_range_equiv as possible, preferring value_range. A few value_range_equiv uses remain, but for cases where equivalences are actually used (folding conditionals, etc). gcc/ChangeLog: * gimple-ssa-evrp-analyze.h (vrp_visit_cond_stmt): Use simplify_using_ranges class. * gimple-ssa-evrp.c (class evrp_folder): New simplify_using_ranges field. Adjust all methods to use new field. * tree-ssa-dom.c (simplify_stmt_for_jump_threading): Use simplify_using_ranges class. * tree-vrp.c (class vrp_folder): New simplify_using_ranges field. Adjust all methods to use new field. (simplify_stmt_for_jump_threading): Use simplify_using_ranges class. (vrp_prop::vrp_finalize): New vrp_folder argument. (execute_vrp): Pass folder to vrp_finalize. Use simplify_using_ranges class. Remove cleanup_edges_and_switches call. * vr-values.c (vr_values::op_with_boolean_value_range_p): Change value_range_equiv uses to value_range. (simplify_using_ranges::op_with_boolean_value_range_p): Use simplify_using_ranges class. (check_for_binary_op_overflow): Make static. (vr_values::extract_range_basic): Pass this to check_for_binary_op_overflow. (compare_range_with_value): Change value_range_equiv uses to value_range. (vr_values::vr_values): Initialize simplifier field. Remove uses of to_remove_edges and to_update_switch_stmts. (vr_values::~vr_values): Remove uses of to_remove_edges and to_update_switch_stmts. (vr_values::get_vr_for_comparison): Move to simplify_using_ranges class. (vr_values::compare_name_with_value): Same. (vr_values::compare_names): Same. (vr_values::vrp_evaluate_conditional_warnv_with_ops): Same. (vr_values::vrp_evaluate_conditional): Same. (vr_values::vrp_visit_cond_stmt): Same. (find_case_label_ranges): Change value_range_equiv uses to value_range. (vr_values::extract_range_from_stmt): Use simplify_using_ranges class. (vr_values::simplify_truth_ops_using_ranges): Move to simplify_using_ranges class. (vr_values::simplify_div_or_mod_using_ranges): Same. (vr_values::simplify_min_or_max_using_ranges): Same. (vr_values::simplify_abs_using_ranges): Same. (vr_values::simplify_bit_ops_using_ranges): Same. (test_for_singularity): Change value_range_equiv uses to value_range. (range_fits_type_p): Same. (vr_values::simplify_cond_using_ranges_1): Same. (vr_values::simplify_cond_using_ranges_2): Make extern. (vr_values::fold_cond): Move to simplify_using_ranges class. (vr_values::simplify_switch_using_ranges): Same. (vr_values::cleanup_edges_and_switches): Same. (vr_values::simplify_float_conversion_using_ranges): Same. (vr_values::simplify_internal_call_using_ranges): Same. (vr_values::two_valued_val_range_p): Same. (vr_values::simplify_stmt_using_ranges): Move to... (simplify_using_ranges::simplify): ...here. * vr-values.h (class vr_values): Move all the simplification of statements using ranges methods and code from here... (class simplify_using_ranges): ...to here. (simplify_cond_using_ranges_2): New extern prototype.
2020-06-27openmp: Non-rectangular loop support for non-composite worksharing loops and ↵Jakub Jelinek5-47/+1116
distribute This implements the fallback mentioned in https://gcc.gnu.org/pipermail/gcc/2020-June/232874.html Special cases for triangular loops etc. to follow later, also composite constructs not supported yet (need to check the passing of temporaries around) and lastprivate might not give the same answers as serial loop if the last innermost body iteration isn't the last one for some of the outer loops (that will need to be solved separately together with rectangular loops that have no innermost body iterations, but some of the outer loops actually iterate). Also, simd needs work. 2020-06-27 Jakub Jelinek <jakub@redhat.com> * omp-general.h (struct omp_for_data_loop): Add non_rect_referenced member, move outer member. (struct omp_for_data): Add first_nonrect and last_nonrect members. * omp-general.c (omp_extract_for_data): Initialize first_nonrect, last_nonrect and non_rect_referenced members. * omp-expand.c (expand_omp_for_init_counts): Handle non-rectangular loops. (expand_omp_for_init_vars): Add nonrect_bounds parameter. Handle non-rectangular loops. (extract_omp_for_update_vars): Likewise. (expand_omp_for_generic, expand_omp_for_static_nochunk, expand_omp_for_static_chunk, expand_omp_simd, expand_omp_taskloop_for_outer, expand_omp_taskloop_for_inner): Adjust expand_omp_for_init_vars and extract_omp_for_update_vars callers. (expand_omp_for): Don't sorry on non-composite worksharing-loop or distribute. * testsuite/libgomp.c/loop-17.c: New test. * testsuite/libgomp.c/loop-18.c: New test.
2020-06-27c-family: Use TYPE_OVERFLOW_UNDEFINED instead of !TYPE_UNSIGNED in ↵Jakub Jelinek2-1/+20
pointer_sum [PR95903] For lp64 targets and int off ... ptr[off + 1] is lowered in pointer_sum to *(ptr + ((sizetype) off + (sizetype) 1)). That is fine when signed integer wrapping is undefined (and is not done already if off has unsigned type), but changes behavior for -fwrapv, where overflow is well defined. Runtime test could be: int main () { char *p = __builtin_malloc (0x100000000UL); if (!p) return 0; char *q = p + 0x80000000UL; int o = __INT_MAX__; q[o + 1] = 1; if (q[-__INT_MAX__ - 1] != 1) __builtin_abort (); return 0; } with -fwrapv or so, not included in the testsuite because it requires 4GB allocation (with some other test it would be enough to have something slightly above 2GB, but still...). 2020-06-27 Jakub Jelinek <jakub@redhat.com> PR middle-end/95903 gcc/c-family/ * c-common.c (pointer_int_sum): Use TYPE_OVERFLOW_UNDEFINED instead of !TYPE_UNSIGNED check to see if we can apply distributive law and handle smaller precision intop operands separately. gcc/testsuite/ * c-c++-common/pr95903.c: New test.
2020-06-27coroutines: Handle awaiters that are sub-objects [PR95736]Iain Sandoe2-30/+166
Move deciding on initializers for awaitables to the build of the co_await, this allows us to analyse cases that do not need a temporary at that point. As the PR shows, the late analysis meant that we were not checking properly for the case that an awaiter is a sub-object of an existing variable outside the current function scope (and therefore does not need to be duplicated in the frame). gcc/cp/ChangeLog: PR c++/95736 * coroutines.cc (get_awaitable_var): New helper. (build_co_await): Check more carefully before copying an awaitable. (expand_one_await_expression): No initializer is required when the awaitable is not a temp. (register_awaits): Remove handling that is now completed when the await expression is built. gcc/testsuite/ChangeLog: PR c++/95736 * g++.dg/coroutines/pr95736.C: New test.
2020-06-27coroutines: Improve diagnostics for one allocator case.Iain Sandoe2-0/+18
If the user provides operator new and that is noexcept, this implies that it can fail with a null return. At that point, we expect to be able to call get_return_object_on_allocation_failure(). This diagnoses the case where such an operator new has been provided, but the g-r-o-o-a-f is either missing or unusable. gcc/cp/ChangeLog: * coroutines.cc (morph_fn_to_coro): Diagnose unavailable get_return_object_on_allocation_failure. gcc/testsuite/ChangeLog: * g++.dg/coroutines/coro-bad-grooaf-01-grooaf-expected.C: New test.
2020-06-27Add PowerPC tests for power10.Michael Meissner36-0/+729
2020-06-27 Michael Meissner <meissner@linux.ibm.com> * gcc.target/powerpc/prefix-add.c: New test. * gcc.target/powerpc/prefix-si-constant.c: New test. * gcc.target/powerpc/prefix-di-constant.c: New test. * gcc.target/powerpc/prefix-ds-dq.c: New test. * gcc.target/powerpc/prefix-no-update.c: New test. * gcc.target/powerpc/prefix-large-dd.c: New test. * gcc.target/powerpc/prefix-large-df.c: New test. * gcc.target/powerpc/prefix-large-di.c: New test. * gcc.target/powerpc/prefix-large-hi.c: New test. * gcc.target/powerpc/prefix-large-kf.c: New test. * gcc.target/powerpc/prefix-large-qi.c: New test. * gcc.target/powerpc/prefix-large-sd.c: New test. * gcc.target/powerpc/prefix-large-sf.c: New test. * gcc.target/powerpc/prefix-large-si.c: New test. * gcc.target/powerpc/prefix-large-udi.c: New test. * gcc.target/powerpc/prefix-large-uhi.c: New test. * gcc.target/powerpc/prefix-large-uqi.c: New test. * gcc.target/powerpc/prefix-large-usi.c: New test. * gcc.target/powerpc/prefix-large-v2df.c: New test. * gcc.target/powerpc/prefix-large.h: Include file for new tests. * gcc.target/powerpc/prefix-pcrel-dd.c: New test. * gcc.target/powerpc/prefix-pcrel-df.c: New test. * gcc.target/powerpc/prefix-pcrel-di.c: New test. * gcc.target/powerpc/prefix-pcrel-hi.c: New test. * gcc.target/powerpc/prefix-pcrel-kf.c: New test. * gcc.target/powerpc/prefix-pcrel-qi.c: New test. * gcc.target/powerpc/prefix-pcrel-sd.c: New test. * gcc.target/powerpc/prefix-pcrel-sf.c: New test. * gcc.target/powerpc/prefix-pcrel-si.c: New test. * gcc.target/powerpc/prefix-pcrel-udi.c: New test. * gcc.target/powerpc/prefix-pcrel-uhi.c: New test. * gcc.target/powerpc/prefix-pcrel-uqi.c: New test. * gcc.target/powerpc/prefix-pcrel-usi.c: New test. * gcc.target/powerpc/prefix-pcrel-v2df.c: New test. * gcc.target/powerpc/prefix-pcrel.h: Include file for new tests. * gcc.target/powerpc/prefix-stack-protect.c: New test.
2020-06-27Daily bump.GCC Administrator9-1/+153
2020-06-26Linux/i386: Remove SUBTARGET_FRAME_POINTER_REQUIREDH.J. Lu2-6/+2
config/i386/gnu-user.h has #define SUBTARGET_FRAME_POINTER_REQUIRED crtl->profile ix86_frame_pointer_required() has /* Several x86 os'es need a frame pointer for other reasons, usually pertaining to setjmp. */ if (SUBTARGET_FRAME_POINTER_REQUIRED) return true; ... if (crtl->profile && !flag_fentry) return true; A frame pointer is needed only for -pg, not for -mfentry -pg. Remove SUBTARGET_FRAME_POINTER_REQUIRED from gnu-user.h to make i386 GCC behave the same as x86-64 GCC. This fixes FAIL: gcc.target/i386/pr93492-3.c scan-assembler \t.cfi_startproc\n\tendbr(32|64)\n.*.LPFE1:\n\tnop\n1:\tcall\t__fentry__\n\tret\n FAIL: gcc.target/i386/pr93492-5.c scan-assembler \t.cfi_startproc\n.*.LPFE1:\n\tnop\n1:\tcall\t__fentry__\n\tret\n on Linux/i386. PR target/95655 * config/i386/gnu-user.h (SUBTARGET_FRAME_POINTER_REQUIRED): Removed. * config/i386/i386.c (ix86_frame_pointer_required): Update comments.
2020-06-26Fix target clone indirection eliminationYichao Yu3-2/+46
The current logic seems to be comparing the whole attribute tree between the callee and caller (or at least the tree starting from the target attribute). This is unnecessary and causes strange dependency of the indirection elimination on unrelated properties like `noinline`(PR95780) and `visibility`(PR95778). This changes the comparison to be only on the `target` attribute which should be the intent of the code. gcc * multiple_target.c (redirect_to_specific_clone): Fix tests to check individual attribute rather than an attribute list. gcc/testsuite * gcc.target/i386/pr95778-1.c: New test. * gcc.target/i386/pr95778-2.c: New test.
2020-06-26rs6000: Add support for __builtin_cpu_is ("power10")Peter Bergner3-0/+10
Add support for __builtin_cpu_is ("power10"). Also add documentation for the recently added "arch_3_1" and "mma" __builtin_cpu_supports arguments. 2020-06-25 Peter Bergner <bergner@linux.ibm.com> gcc/ * config/rs6000/rs6000-call.c (cpu_is_info) <power10>: New. * doc/extend.texi (PowerPC Built-in Functions): Document power10, arch_3_1 and mma. gcc/testsuite/ * gcc.target/powerpc/cpu-builtin-1.c: Add tests for power10, arch_3_1 and mma.
2020-06-26c++: Change the default dialect to C++17.Marek Polacek15-21/+36
Since GCC 9, C++17 support is no longer experimental. It was too late to change the default C++ dialect to C++17 in GCC 10, but I think now it's time to pull the trigger (C++14 was made the default in GCC 6.1). We're still missing two C++17 library features, but that shouldn't stop us. See <https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017> and <https://gcc.gnu.org/projects/cxx-status.html#cxx17> for the C++17 status. I won't list all C++17 features here, but just a few heads-up: - trigraphs were removed (hardly anyone cares, unless your keyboard is missing the # key), - operator++(bool) was removed (so some tests now run in C++14 and down only), - the keyword register was removed (some legacy code might trip on this), - noexcept specification is now part of the type system and C++17 does not allow dynamic exception specifications anymore (the empty throw specification is still available, but it is deprecated), - the evaluation order rules are different in C++17, - static constexpr data members are now implicitly inline (which makes them definitions), - C++17 requires guaranteed copy elision, meaning that a copy/move constructor call might be elided completely. That means that if something relied on a constructor being instantiated via e.g. copying a function parameter, it might now fail. I'll post an update for cxx-status.html and add a new caveat to changes.html once this is in. gcc/ChangeLog: * doc/invoke.texi (C Dialect Options): Adjust -std default for C++. * doc/standards.texi (C Language): Correct the default dialect. (C++ Language): Update the default for C++ to gnu++17. gcc/c-family/ChangeLog: * c-opts.c (c_common_init_options): Default to gnu++17. gcc/testsuite/ChangeLog: * c-c++-common/torture/vector-subscript-3.c: In C++17, define away the keyword register. * g++.dg/cpp1z/attributes-enum-1a.C: Only run pre-C++17. * g++.dg/cpp1z/fold7a.C: Likewise. * g++.dg/cpp1z/nontype3a.C: Likewise. * g++.dg/cpp1z/utf8-2a.C: Likewise. * g++.dg/parse/error11.C: Update expected diagnostics for C++17. * g++.dg/torture/pr34850.C: Add -Wno-attribute-warning. * g++.dg/torture/pr49394.C: In C++17, use noexcept(false). * g++.dg/torture/pr82154.C: Use -std=c++14. * lib/target-supports.exp: Set to C++17. * obj-c++.dg/try-catch-9.mm: Use -Wno-register. libgomp/ChangeLog: * testsuite/libgomp.c++/atomic-3.C: Use -std=gnu++14.
2020-06-26Fix failure in gfortran.dg/gomp/combined-if.f90 testKwok Cheung Yeung2-2/+11
Enabling nvptx offloading results in extra '#pragma omp simd' statements in the tree dump with an extra '_simt_'. 2020-06-26 Kwok Cheung Yeung <kcy@codesourcery.com> gcc/testsuite/ * gfortran.dg/gomp/combined-if.f90: Adjust expected number of matches depending on whether nvptx offloading is supported. * lib/target-supports.exp (check_effective_target_offload_nvptx): New.
2020-06-26Take into account range info to optimize range tests into bit testsEric Botcazou6-35/+212
The patch is aimed at addressing the following two issues: 1. In order to protect the shift operation from undefinedness, the new bit test is guarded with a new test, but this new test uses the range of the bit test values, not that of the shift operation so, if the input is in the range of the shift operation but not of the bit test values, then the subsequent VRP pass cannot eliminate the new test. Moreover changing the new test to use the range of the shift operation, instead of that of the bit test values, in the general case would pessimize the cases which are in between. 2. If the new test can be eliminated, then it becomes profitable to do the optimization into a bit test for one fewer comparison in the source code. Therefore the patch changes optimize_range_tests_to_bit_test to use the range info of the input in order to eliminate the new test. gcc/ChangeLog: * tree-ssa-reassoc.c (dump_range_entry): New function. (debug_range_entry): New debug function. (update_range_test): Invoke dump_range_entry for dumping. (optimize_range_tests_to_bit_test): Merge the entry test in the bit test when possible and lower the profitability threshold. gcc/ada/ChangeLog: * exp_ch4.adb (Expand_Set_Membership): Expand the membership test using left associativity instead of right associativity. gcc/testsuite/ChangeLog: * gnat.dg/opt86_pkg.ads: New helper. * gnat.dg/opt86a.adb: New test. * gnat.dg/opt86b.adb: Likewise. * gnat.dg/opt86c.adb: Likewise.
2020-06-26d/testsuite: Amend test to actually trigger the ICE being fixedIain Buclaw1-1/+1
gcc/testsuite/ChangeLog: * gdc.dg/pr95250.d: Updated.
2020-06-26coroutines: Handle non-method promise expressions [PR95519]Iain Sandoe9-86/+656
The PR points out that the standard does not restrict promise expressions to methods, but the current implementation does. The patch factors out the building of a general promise expression, and then uses it in a fairly mechanical replacement of each case that we need such an expressions. This extends the handling for p.xxxxxx() expressions to cover the cases where the promise member is some form callable. Tests are added for each of the promise expressions. It's somewhat tortuous to find good uses for this for the get-return-object and get-return-object-on-allocation-failure cases, but they are included anyway. gcc/cp/ChangeLog: PR c++/95519 * coroutines.cc (struct coroutine_info):Add a field to hold computed p.return_void expressions. (coro_build_promise_expression): New. (get_coroutine_return_void_expr): New. (finish_co_yield_expr): Build the promise expression using coro_build_promise_expression. (finish_co_return_stmt): Likewise. (build_init_or_final_await): Likewise. (morph_fn_to_coro): Likewise, for several cases. gcc/testsuite/ChangeLog: PR c++/95519 * g++.dg/coroutines/torture/pr95519-00-return_void.C: New test. * g++.dg/coroutines/torture/pr95519-01-initial-suspend.C: New test. * g++.dg/coroutines/torture/pr95519-02-final_suspend.C: New test. * g++.dg/coroutines/torture/pr95519-03-return-value.C: New test. * g++.dg/coroutines/torture/pr95519-04-yield-value.C: New test. * g++.dg/coroutines/torture/pr95519-05-gro.C: New test. * g++.dg/coroutines/torture/pr95519-06-grooaf.C: New test. * g++.dg/coroutines/torture/pr95519-07-unhandled-exception.C: New test.
2020-06-26coroutines: Handle bad g-r-o-o-a-f cases.Iain Sandoe3-1/+24
If we see a get_return_object_on_allocation_failure in the promise, we expect to be able to use it. If this isn't possible (because of some error in the declaration) then we need to handle the erroneous return to allow following code to complete. gcc/cp/ChangeLog: * coroutines.cc (morph_fn_to_coro): Handle error returns in building g-r-o-o-a-f expressions. gcc/testsuite/ChangeLog: * g++.dg/coroutines/coro1-allocators.h (BAD_GROOAF_STATIC): New. * g++.dg/coroutines/coro-bad-grooaf-00-static.C: New test.
2020-06-26tree-optimization/95897 - fix fold-left SLP reduction insert placeRichard Biener5-7/+39
This fixes computation of the insertion place for fold-left SLP reductions where the PHIs do not have vectorized stmts. The SLP representation isn't perfect here thus the following. 2020-06-26 Richard Biener <rguenther@suse.de> PR tree-optimization/95897 * tree-vectorizer.h (vectorizable_induction): Remove unused gimple_stmt_iterator * parameter. * tree-vect-loop.c (vectorizable_induction): Likewise. (vect_analyze_loop_operations): Adjust. * tree-vect-stmts.c (vect_analyze_stmt): Likewise. (vect_transform_stmt): Likewise. * tree-vect-slp.c (vect_schedule_slp_instance): Adjust for fold-left reductions, clarify existing reduction case. * gcc.dg/vect/pr95897.c: New testcase.
2020-06-26This patch removes the use of the "register" keyword from the bsearch() and ↵Nick Clifton3-15/+15
bsearch_r() functions supplied by libiberty. The register keyword is deprecated in C++17. 2020-06-25 Nick Clifton <nickc@redhat.com> include/ * libiberty.h (bsearch_r): Remove use of the register keyword from the prototype. libiberty/ * bsearch.c (bsearch): Remove use of register keyword. * bsearch_r.c (bsearch_r): Likewise.
2020-06-26Daily bump.GCC Administrator7-1/+213
2020-06-25c++: Add test for c++/91104Marek Polacek1-0/+26
Fixed by r271705. gcc/testsuite/ChangeLog: PR c++/91104 * g++.dg/cpp1y/lambda-generic-variadic21.C: New test.