- 21 Apr, 2020 13 commits
-
-
-Wpadded warnings aren't really useful for the artificial types that GCC lays out for ubsan. 2020-04-21 Jakub Jelinek <jakub@redhat.com> PR c/94641 * stor-layout.c (place_field, finalize_record_size): Don't emit -Wpadded warning on TYPE_ARTIFICIAL rli->t. * ubsan.c (ubsan_get_type_descriptor_type, ubsan_get_source_location_type, ubsan_create_data): Set TYPE_ARTIFICIAL. * asan.c (asan_global_struct): Likewise. * c-c++-common/ubsan/pr94641.c: New test.
Jakub Jelinek committed -
When building the parameter mapping for an atomic constraint, find_template_parameters does not spot the template parameter within the conversion-type-id of a dependent conversion operator, which later leads to an ICE during substitution when looking up the missing template argument for this unnoticed template parameter. gcc/cp/ChangeLog: PR c++/94597 * pt.c (any_template_parm_r) <case IDENTIFIER_NODE>: New case. If this is a conversion operator, visit its TREE_TYPE. gcc/testsuite/ChangeLog: PR c++/94597 * g++.dg/cpp2a/concepts-conv2.C: New test.
Patrick Palka committed -
The option -mabi=ilp32 should not be used in large code model. An error message is added for the option conflict. 2020-04-21 Duan bo <duanbo3@huawei.com> gcc/ PR target/94577 * config/aarch64/aarch64.c: Add an error message for option conflict. * doc/invoke.texi (-mcmodel=large): Mention that -mcmodel=large is incompatible with -fpic, -fPIC and -mabi=ilp32. gcc/testsuite/ PR target/94577 * gcc.target/aarch64/pr94577.c: New test.
XieZhiheng committed -
An ICE on darwin, when a SFINAE-context substitution produced error_mark_node foo an operand of a POINTER_PLUS_EXPR. fold_build_pointer_plus is unprepared to deal with that, so we need to check earlier. We had no luck reducing the testcase to something manageable. * pt.c (tsubst_copy_and_build) [POINTER_PLUS_EXPR]: Check for error_mark_node.
Nathan Sidwell committed -
The PR noticed that omp-low.c contains a self-assignment in the function new_omp_context: if (outer_ctx) { ... ctx->outer_reduction_clauses = ctx->outer_reduction_clauses; This is obviously useless. The original intention might have been to copy the field from the outer_ctx to ctx. Since this is done (properly) in the only function where this field is actually used (in function scan_omp_for) and the field is being initialized to zero during the struct allocation, there is no need to attempt to do anything to this field in new_omp_context. Thus this commit removes any assignment to the field from new_omp_context. 2020-04-21 Frederik Harwath <frederik@codesourcery.com> PR other/94629 * gcc/omp-low.c (new_omp_context): Remove assignments to ctx->outer_reduction_clauses and ctx->local_reduction_clauses. Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>
Frederik Harwath committed -
libphobos/ChangeLog: * configure: Regenerate. * configure.ac: Call DRUNTIME_LIBRARIES_UCONTEXT. * m4/druntime/libraries.m4 (DRUNTIME_LIBRARIES_UCONTEXT): Define to search libraries for swapcontext. * libdruntime/gcc/sections/elf_shared.d (getTLSRange): Always use __tls_get_addr on Musl. Co-Authored-By: Mathias Lang <pro.mathias.lang@gmail.com>
Iain Buclaw committed -
This has been fixed by the PR71311 r7-1170-g4618c453 change. 2020-04-21 Jakub Jelinek <jakub@redhat.com> PR c/94686 * gcc.c-torture/compile/pr94686.c: New test.
Jakub Jelinek committed -
Coroutine ramp functions have synthesised return values (the user-authored function body cannot have an explicit 'return'). The current implementation attempts to optimise by building the return in-place, in the manner of C++17 code. Clearly, that was too ambitious and the fix builds a target expr for the constructed version and passes that to finish_return_stmt. This also means that we now get the same error messages for implicit use of deleted CTORs etc. gcc/cp/ChangeLog: 2020-04-21 Iain Sandoe <iain@sandoe.co.uk> PR c++/94661 * coroutines.cc (morph_fn_to_coro): Simplify return value computation. gcc/testsuite/ChangeLog: 2020-04-21 Iain Sandoe <iain@sandoe.co.uk> PR c++/94661 * g++.dg/coroutines/ramp-return-a.C: New test. * g++.dg/coroutines/ramp-return-b.C: New test. * g++.dg/coroutines/ramp-return-c.C: New test.
Iain Sandoe committed -
Since the pdp11-aout target does not support gdb, gdbserver or gprof these should be excluded in configure. PR 25830 * configure.ac (noconfigdirs): Exclude gdb & gprof for pdp11. * configure: Rebuild.
Stephen Casner committed -
* testsuite/lib/libstdc++.exp: Add additional_flags= -DTBB_SUPRESS_DEPRECATED_MESSAGES=1 to suppress warnings when compiling with a newer Thread Building Blocks.
Thomas Rodgers committed -
Adjusts the hardcoded index of Error.bypassException. Fixes: PR d/94623 Reviewed-on: https://github.com/dlang/dmd/pull/11052
Iain Buclaw committed -
si_code in siginfo_t is a macro on NetBSD, not a member of the struct itself, so add a C trampoline for receiving its value. Also replace references to mos.waitsemacount with the replacement and add some helpers from os_netbsd.go in the GC repository. Update golang/go#38538. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/228918
Benny Siegert committed -
GCC Administrator committed
-
- 20 Apr, 2020 27 commits
-
-
As an extension (there should be a CWG about this though), we support braced-init-list as a template argument, but convert_nontype_argument had trouble digesting them. We ICEd because of the double coercion we perform for template arguments: convert_nontype_argument called from finish_template_type got a { }, and since a class type was involved and we were in a template, convert_like created an IMPLICIT_CONV_EXPR. Then the second conversion of the same argument crashed in constexpr.c because the IMPLICIT_CONV_EXPR had gotten wrapped in a TARGET_EXPR. Another issue was that an IMPLICIT_CONV_EXPR leaked to constexpr.c when building an aggregate init. We should have instantiated the IMPLICIT_CONV_EXPR in the first call to convert_nontype_argument, but we didn't, because the call to is_nondependent_constant_expression returned false because it checks !BRACE_ENCLOSED_INITIALIZER_P. Then non_dep was false even though the expression didn't contain anything dependent and we didn't instantiate it in convert_nontype_argument. To fix this, check BRACE_ENCLOSED_INITIALIZER_P in cxx_eval_outermost_constant_expr rather than in is_nondependent_*. PR c++/94592 * constexpr.c (cxx_eval_outermost_constant_expr): Return when T is a BRACE_ENCLOSED_INITIALIZER_P. (is_nondependent_constant_expression): Don't check BRACE_ENCLOSED_INITIALIZER_P. (is_nondependent_static_init_expression): Likewise. * g++.dg/cpp2a/nontype-class34.C: New test. * g++.dg/cpp2a/nontype-class35.C: New test.
Marek Polacek committed -
This PR seems to be similar to PR c++/43382, except that the recursive call to the variadic function with trailing return type in this testcase is additionally given some explicit template arguments. In the first testcase below, when resolving the recursive call to 'select', fn_type_unification first substitutes in the call's explicit template arguments before doing unification, and so during this substitution the template argument pack for Args is incomplete. Since the pack is incomplete, the substitution of 'args...' in the trailing return type decltype(f(args...)) is handled by the unsubstituted_packs case of tsubst_pack_expansion. But the handling of this case happens _before_ we reset local_specializations, and so the substitution ends up reusing the old binding for 'args' from local_specializations rather than building a new one. This patch fixes this issue by setting up local_specializations sooner in tsubst_pack_expansion, before the handling of the unsubstituted_packs case. It also adds a new policy to local_specialization_stack so that we could use the class here to conditionally replace local_specializations. gcc/cp/ChangeLog: PR c++/94628 * cp-tree.h (lss_policy::lss_nop): New enumerator. * pt.c (local_specialization_stack::local_specialization_stack): Handle an lss_nop policy. (local_specialization_stack::~local_specialization_stack): Likewise. (tsubst_pack_expansion): Use a local_specialization_stack instead of manually saving and restoring local_specializations. Conditionally replace local_specializations sooner, before the handling of the unsubstituted_packs case. gcc/testsuite/ChangeLog: PR c++/94628 * g++.dg/cpp0x/variadic179.C: New test. * g++.dg/cpp0x/variadic180.C: New test.
Patrick Palka committed -
* sv.po: Update.
Joseph Myers committed -
Fix-up for commit af557050 "[OpenMP] Fix 'omp exit data' for Fortran arrays (PR 94635)". libgomp/ PR middle-end/94635 * testsuite/libgomp.fortran/target-enter-data-2.F90: Add 'dg-do run'.
Thomas Schwinge committed -
This test was supposed to be added two months ago as part of commit 120e8734 but was omitted by mistake. * testsuite/24_iterators/istreambuf_iterator/sentinel.cc: New test.
Jonathan Wakely committed -
* testsuite/20_util/is_constructible/51185.cc: Make test class a non-aggregate so that the test verifies the same thing in all -std modes. * testsuite/20_util/is_constructible/value-2.cc: Adjust expected results for some types when paren-init for aggregates is supported.
Jonathan Wakely committed -
We issue bogus -Wparentheses warnings (3 of them!) for this fold expression: ((B && true) || ...) Firstly, issuing a warning for a compiler-generated expression is wrong and secondly, B && true must be wrapped in ( ) otherwise you'll get error: binary expression in operand of fold-expression. PR c++/94505 - bogus -Wparentheses warning with fold-expression. * pt.c (fold_expression): Add warning_sentinel for -Wparentheses before calling build_x_binary_op. * g++.dg/cpp1z/fold11.C: New test.
Marek Polacek committed -
parm = STRIP_NOPS (parm); is unnecessary and generates warning: operation on 'parm' may be undefined [-Wsequence-point] when cp/coroutines.cc is compiled with -std=c++11. * coroutines.cc (captures_temporary): Don't assign the result of STRIP_NOPS to the same variable.
Marek Polacek committed -
The vector popcount expanders use a hardcoded subreg. This might lead to double subregs being generated which then fail to match. With this patch simplify_gen_subreg is used instead to fold the subregs. gcc/ChangeLog: 2020-04-20 Andreas Krebbel <krebbel@linux.ibm.com> * config/s390/vector.md ("popcountv8hi2_vx", "popcountv4si2_vx") ("popcountv2di2_vx"): Use simplify_gen_subreg. gcc/testsuite/ChangeLog: 2020-04-20 Andreas Krebbel <krebbel@linux.ibm.com> * g++.dg/pr94666.C: New test.
Andreas Krebbel committed -
The vsel instruction is a bit-wise select instruction. Using an IF_THEN_ELSE to express it in RTL is wrong and leads to wrong code being generated in the combine pass. With the patch the pattern is written using bit operations. However, I've just noticed that the manual still demands a fixed point mode for AND/IOR and friends although several targets emit bit ops on floating point vectors (including i386, Power, and s390). So I assume this is a safe thing to do?! gcc/ChangeLog: 2020-04-20 Andreas Krebbel <krebbel@linux.ibm.com> PR target/94613 * config/s390/s390-builtin-types.def: Add 3 new function modes. * config/s390/s390-builtins.def: Add mode dependent low-level builtin and map the overloaded builtins to these. * config/s390/vx-builtins.md ("vec_selV_HW"): Rename to ... ("vsel<V_HW"): ... this and rewrite the pattern with bitops. gcc/testsuite/ChangeLog: 2020-04-20 Andreas Krebbel <krebbel@linux.ibm.com> PR target/94613 * gcc.target/s390/zvector/pr94613.c: New test. * gcc.target/s390/zvector/vec_sel-1.c: New test.
Andreas Krebbel committed -
2020-04-20 Thomas Koenig <tkoenig@gcc.gnu.org> * dump-parse-tree.c (show_attr): Add numerous flags, some cleanup.
Thomas König committed -
After committing it I noticed I'd also accidentally added a change to __synth3way as well, which I meant to do in a separate commit. I've updated the changelog entry to reflect that additional change. * libsupc++/compare (__detail::__synth3way): Add noexcept-specifier.
Jonathan Wakely committed -
libphobos/ChangeLog: * configure: Regenerate. * configure.ac: Fix option name for --with-libphobos-druntime-only.
Iain Buclaw committed -
With P1614R2 fully implemented (except for the <chrono> types which we don't support at all) we can define the feature test macro to the new value. * include/std/version (__cpp_lib_three_way_comparison): Update value. * libsupc++/compare (__cpp_lib_three_way_comparison): Likewise.
Jonathan Wakely committed -
The last C++20 changes from P1614R2, "The Mothership has Landed" * include/bits/stl_map.h (map): Define operator<=> and remove operator< for C++20. * include/bits/stl_multimap.h (multimap): Likewise. * include/bits/stl_multiset.h (multiset): Likewise. * include/bits/stl_set.h (set): Likewise. * include/bits/stl_tree.h (_Rb_tree): Likewise. (_Rb_tree_iterator, _Rb_tree_const_iterator): Remove redundant operator!= for C++20. * include/debug/map.h (__gnu_debug::map): Define operator<=> for C++20. * include/debug/multimap.h (__gnu_debug::multimap): Likewise. * include/debug/multiset.h (__gnu_debug::multiset): Likewise. * include/debug/set.h (__gnu_debug::set): Likewise. * testsuite/23_containers/map/operators/cmp_c++20.cc: New test. * testsuite/23_containers/multimap/operators/cmp_c++20.cc: New test. * testsuite/23_containers/multiset/operators/cmp_c++20.cc: New test. * testsuite/23_containers/set/operators/cmp_c++20.cc: New test.
Jonathan Wakely committed -
libphobos/ChangeLog: * configure: Regenerate. * configure.ac: Remove DRUNTIME_GC.
Iain Buclaw committed -
This patch fixes a large lmbench performance regression with 128-bit SVE, compiled in length-agnostic mode. vect_better_loop_vinfo_p (new in GCC 10) tries to estimate whether a new loop_vinfo is cheaper than a previous one, with an in-built preference for the old one. For variable VF it prefers the old loop_vinfo if it is cheaper for at least one VF. However, we have no idea how likely that VF is in practice. Another extreme would be to do what most of the rest of the vectoriser does, and rely solely on the constant estimated VF. But as noted in the comment, this means that a one-unit cost difference would be enough to pick the new loop_vinfo, despite the target generally preferring the old loop_vinfo where possible. The cost model just isn't accurate enough for that to produce good results as things stand: there might not be any practical benefit to the new loop_vinfo at the estimated VF, and it would be significantly worse for higher VFs. The patch instead goes for a hacky compromise: make sure that the new loop_vinfo is also no worse than the old loop_vinfo at double the estimated VF. For all but trivial loops, this ensures that the new loop_vinfo is only chosen if it is better than the old one by a non-trivial amount at the estimated VF. It also avoids putting too much faith in the VF estimate. I realise this isn't great, but it's supposed to be a conservative fix suitable for stage 4. The only affected testcases are the ones for pr89007-*.c, where Advanced SIMD is indeed preferred for 128-bit SVE and is no worse for 256-bit SVE. Part of the problem here is that if the new loop_vinfo is better, we discard the old one and never consider using it even as an epilogue loop. This means that if we choose Advanced SIMD over SVE, we're much more likely to have left-over scalar elements. Another is that the estimate provided by estimated_poly_value might have different probabilities attached. E.g. when tuning for a particular core, the estimate is probably accurate, but when tuning for generic code, the estimate is more of a guess. Relying solely on the estimate is probably correct for the former but not for the latter. Hopefully those are things that we could tackle in GCC 11. 2020-04-20 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-loop.c (vect_better_loop_vinfo_p): If old_loop_vinfo has a variable VF, prefer new_loop_vinfo if it is cheaper for the estimated VF and is no worse at double the estimated VF. gcc/testsuite/ * gcc.target/aarch64/sve/cost_model_8.c: New test. * gcc.target/aarch64/sve/cost_model_9.c: Likewise. * gcc.target/aarch64/sve/pr89007-1.c: Add -msve-vector-bits=512. * gcc.target/aarch64/sve/pr89007-2.c: Likewise.
Richard Sandiford committed -
This testcase triggered an ICE in rtx_vector_builder::step because we were trying to use a stepped representation for floating-point constants. The underlying problem was that the arguments to rtx_vector_builder were the wrong way around, meaning that some variations were likely to be incorrectly encoded for integers (but probably as a silent failure). Also, aarch64_sve_expand_vector_init_handle_trailing_constants tries to extend the trailing constant elements to a full vector by following the "natural" pattern of the original vector, which should generally lead to nicer constants. However, for the testcase, we'd then end up picking a variable for some elements. Fixed by stubbing out all variable elements with zeros. That fix involved testing valid_for_const_vector_p. For consistency, the patch uses the same test when finding trailing constants, instead of the previous aarch64_legitimate_constant_p. 2020-04-20 Richard Sandiford <richard.sandiford@arm.com> gcc/ PR target/94668 * config/aarch64/aarch64.c (aarch64_sve_expand_vector_init): Fix order of arguments to rtx_vector_builder. (aarch64_sve_expand_vector_init_handle_trailing_constants): Likewise. When extending the trailing constants to a full vector, replace any variables with zeros. gcc/testsuite/ PR target/94668 * gcc.target/aarch64/sve/pr94668.c: New test.
Richard Sandiford committed -
If extra_tool_flags starts with a dash, an error like 'ERROR: verbose: illegal argument: -march=native -O2 -std=c++17' is printed. This is easily fixed by inserting a double dash before the variable. 2020-04-20 Matthias Kretz <kretz@kde.org> * testsuite/lib/libstdc++.exp: Avoid illegal argument to verbose.
Matthias Kretz committed -
We treat tpl-tpl-parms as types. They're not; bound-tpl-tpl-parms are. We can get away with them being type-like. Unfortunately we give the original level==orig_level case a canonical type, but the reduced cases of level<orig_level get structural equality. This patch gives them structural type always. * pt.c (canonical_type_parameter): Assert not a tpl-tpl-parm. (process_template_parm): tpl-tpl-parms are structural. (rewrite_template_parm): Propagate structuralness.
Nathan Sidwell committed -
We were not comparing expression pack expansions correctly. We could consider distinct expansions equal and creating two, apparently equal, specializations that would sometimes collide. cp_tree_operand_length says a pack has 1 operand (for mangling), whereas it actually has 3, but only two of which are significant for equality. We must special case that in cp_tree_equal. That new code matches the hasher and the type_pack_expansion case in structural_comp_types. * tree.c (cp_tree_equal): [TEMPLATE_ID_EXPR, default] Refactor. [EXPR_PACK_EXPANSION]: Add.
Nathan Sidwell committed -
One of the problems hit by pr94454 was that the argument hasher was not skipping nodes that template_args_equal would. Fixed by replacing the STRIP_NOPS invocation by a bespoke loop. We also confuse the canonical type machinery by treating tpl-tpl-parms as types. They're not; bound-tpl-tpl-parms are. We can get away with them being type-like. Unfortunately we give the original level==orig_level case a canonical type, but the reduced cases of level<orig_level get structural equality. That breaks the hasher because we'll use TYPE_HASH (CANONICAL_TYPE ()) when we can. There's a note in tsubst[TEMPLATE_TEMPLATE_PARM] about why the reduced ones cannot have a canonical type. (I didn't feel like questioning that assertion at this point.) * pt.c (iterative_hash_template_arg): Strip nodes as template_args_equal does. [ARGUMENT_PACK_SELECT, TREE_VEC, CONSTRUCTOR]: Refactor. [node_class:TEMPLATE_TEMPLATE_PARM]: Hash by level & index. [node_class:default]: Refactor.
Nathan Sidwell committed -
PR ipa/94582 * tree-inline.c (optimize_inline_calls): Recompute calls_comdat_local flag. * g++.dg/torture/pr94582.C: New test.
Jan Hubicka committed -
Add missing check in gfc_set_array_spec for sum of rank and corank to not exceed GFC_MAX_DIMENSIONS. 2020-04-20 Harald Anlauf <anlauf@gmx.de> PR fortran/93364 * array.c (gfc_set_array_spec): Check for sum of rank and corank not exceeding GFC_MAX_DIMENSIONS. 2020-04-20 Harald Anlauf <anlauf@gmx.de> PR fortran/93364 * gfortran.dg/pr93364.f90: New test.
Harald Anlauf committed -
* symtab.c (symtab_node::dump_references): Add space after one entry. (symtab_node::dump_referring): Likewise.
Martin Liska committed -
2020-04-20 Steve Kargl <kargl@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/91800 * decl.c (variable_decl): Reject Hollerith constants as type initializer. 2020-04-20 Steve Kargl <kargl@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/91800 * gfortran.dg/hollerith_9.f90: New test.
Steve Kargl committed -
Testing on the host does not make sense for 'declare copyout' for a same-scope stack-allocated variable. Once the copyout is done, the variable is gone. Hence, test the variable on the device. This can be revisit after the OpenACC semantic has been fixed; but with that fix, the test PASSes again with devices. PR middle-end/94120 * testsuite/libgomp.oacc-c++/declare-pr94120.C: Fix 'declare copy(out)' test case.
Tobias Burnus committed
-