- 24 Apr, 2020 16 commits
-
-
The order of precedence used by the upstream reference compiler for determining what library to link against is: - No library if -nophoboslib or -fno-druntime was seen. - The library passed to -debuglib if -g was also seen. - The library passed to -defaultlib - The in-tree libgphobos library. This aligns the D language driver to follow the same rules. gcc/d/ChangeLog: * d-spec.cc (need_phobos): Remove. (lang_specific_driver): Replace need_phobos with phobos_library. Reorder -debuglib and -defaultlib to have precedence over libphobos. (lang_specific_pre_link): Remove test for need_phobos.
Iain Buclaw committed -
2020-04-24 Andrew Stubbs <ams@codesourcery.com> gcc/ * config/gcn/gcn-valu.md (add<mode>_zext_dup2_exec): Fix merge of high-part. (add<mode>_sext_dup2_exec): Likewise.
Andrew Stubbs committed -
The PR shows the compiler crashing with -mvsx -mlittle -O0. This turns out to be caused by a failure to make of the higher bits in an index endian conversion. 2020-04-24 Segher Boessenkool <segher@kernel.crashing.org> PR target/94710 * config/rs6000/vector.md (vec_shr_<mode> for VEC_L): Correct little endian byteshift_val calculation.
Segher Boessenkool committed -
> I haven't added (yet) checks if the alternate compiler does support these > options (I think that can be done incrementally), so for now this testing is > done only if the alternate compiler is not used. This patch does that, so now when testing against not too old compiler it can do the -std=c++14 vs. -std=c++17 testing also between under test and alt compilers. 2020-04-24 Jakub Jelinek <jakub@redhat.com> PR c++/94383 * g++.dg/compat/struct-layout-1.exp: Use the -std=c++14 vs. -std=c++17 ABI compatibility testing even with ALT_CXX_UNDER_TEST, as long as that compiler accepts -std=c++14 and -std=c++17 options.
Jakub Jelinek committed -
This helps avoid spilling 64-bit constant loads to stack by simplifying the code that LRA sees. 2020-04-24 Andrew Stubbs <ams@codesourcery.com> gcc/ * config/gcn/gcn.md (*mov<mode>_insn): Only split post-reload.
Andrew Stubbs committed -
The vector size chosen here is for V64DImode. The concept of this setting is not well adapted for GCN, in which the vector size varies with the number of lanes, not the other way around, but this is ok for now. 2020-04-24 Andrew Stubbs <ams@codesourcery.com> gcc/testsuite/ * lib/target-supports.exp (available_vector_sizes): Add amdgcn. (check_effective_target_vect_cmdline_needed): Disable for amdgcn. (check_effective_target_vect_pack_trunc): Add amdgcn.
Andrew Stubbs committed -
The LWG issue I created is Tentatively Ready and proposes to declare a public default constructor, rather than the private one I added recently. * include/experimental/executor (service_already_exists): Make default constructor public (LWG 3414). * testsuite/experimental/net/execution_context/make_service.cc: Check the service_already_exists can be default constructed.
Jonathan Wakely committed -
This is a version of the reproducer in the PR, usable on multiple platforms.
Iain Sandoe committed -
Some target C libraries that aren't recognized as freestanding don't have filesystem support, so calling tmpnam, fopen/open and remove/unlink fails to link. This patch introduces a fileio effective target to the testsuite, and requires it in the tests that call tmpnam. for gcc/testsuite/ChangeLog * lib/target-supports.exp (check_effective_target_fileio): New. * gcc.c-torture/execute/fprintf-2.c: Require it. * gcc.c-torture/execute/printf-2.c: Likewise. * gcc.c-torture/execute/user-printf.c: Likewise.
Alexandre Oliva committed -
I've had a couple of conversations now in which the shortness of arm_sve.h was causing confusion, with people thinking that the types and intrinsics were missing. It seems worth adding a comment to explain what's going on. 2020-04-24 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/arm_sve.h: Add a comment.
Richard Sandiford committed -
As discussed on PR94708, it's unsafe for rtl combine to generate fp min/max under -funsafe-math-optimizations, considering NaNs. In addition to flag_unsafe_math_optimizations check, we also need to do extra mode feature testing here: && !HONOR_NANS (mode) && !HONOR_SIGNED_ZEROS (mode) 2020-04-24 Haijian Zhang <z.zhanghaijian@huawei.com> gcc/ PR rtl-optimization/94708 * combine.c (simplify_if_then_else): Add check for !HONOR_NANS (mode) && !HONOR_SIGNED_ZEROS (mode). gcc/testsuite/ PR fortran/94708 * gfortran.dg/pr94708.f90: New test.
Haijian Zhang committed -
* coroutines.cc: Fix compilation error for release checking where we miss declaration of ‘coro_body_contains_bind_expr_p’.
Martin Liska committed -
The default test timeout duration of the gc compiler is 10 minutes, and the current default timeout duration of gofrontend is 240 seconds, which is not long enough for some big tests. This CL changes it to 600s, so that all tests have enough time to complete. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/229657
eric fang committed -
Like HP/UX, AIX does not support undefined weak, so skip this test in the testsuite. * gcc.dg/torture/pr90020.c: Skip on AIX..
David Edelsohn committed -
The testcase uses the -flto option but does not ensure that LTO support is enabled. This patch adds the test to the testcase. * g++.dg/cpp0x/lambda/pr94426-1.C: Require LTO.
David Edelsohn committed -
GCC Administrator committed
-
- 23 Apr, 2020 24 commits
-
-
This removes a non-standard extension to std::any which causes errors for valid code, due to recursive instantiation of a trait that isn't supposed to be in the constraints. It also removes some incorrect constraints on the in_place_type<T> constructors and emplace members, which were preventing creating a std::any object with another std::any as the contained value. 2020-04-24 Kamlesh Kumar <kamleshbhalui@gmail.com> Jonathan Wakely <jwakely@redhat.com> PR libstdc++/90415 PR libstdc++/92156 * include/std/any (any): Rename template parameters for consistency with the standard. (any::_Decay): Rename to _Decay_if_not_any. (any::any(T&&):: Remove is_constructible from constraints. Remove non-standard overload. (any::any(in_place_type_t<T>, Args&&...)) (any::any(in_place_type_t<T>, initializer_list<U>, Args&&...)) (any::emplace(Args&&...)) (any::emplace(initializer_list<U>, Args&&...)): Use decay_t instead of _Decay. * testsuite/20_util/any/cons/90415.cc: New test. * testsuite/20_util/any/cons/92156.cc: New Test. * testsuite/20_util/any/misc/any_cast_neg.cc: Make dg-error directives more robust. * testsuite/20_util/any/modifiers/92156.cc: New test.
Jonathan Wakely committed -
gcc/ChangeLog: PR driver/90983 * common.opt (-Wno-frame-larger-than): New option. (-Wno-larger-than, -Wno-stack-usage): Same. gcc/testsuite/ChangeLog: PR driver/90983 * gcc.dg/Wframe-larger-than-3.c: New test. * gcc.dg/Wlarger-than4.c: New test. * gcc.dg/Wstack-usage.c: New test.
Martin Sebor committed -
This fixes an ICE coming from mangle.c:write_expression when building the testsuite of range-v3; the added testcase is a reduced reproducer for the ICE. gcc/cp/ChangeLog: * tree.c (zero_init_expr_p): Use uses_template_parms instead of dependent_type_p. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/dependent3.C: New test.
Patrick Palka committed -
In the testcase below, when grokfndecl processes the operator() decl for the lambda inside the friend function foo, processing_template_decl is rightly 1, but template_class_depth on the lambda's closure type incorrectly returns 0 instead of 1. Since processing_template_decl > template_class_depth, this makes grokfndecl think that the operator() has its own set of template arguments, and so we attach the innermost set of constraints -- those belonging to struct l -- to the operator() decl. We then get confused when checking constraints_satisfied_p on the operator() because it doesn't have template information and yet has constraints associated with it. This patch fixes template_class_depth to return the correct template nesting level in cases like these, in that when it hits a friend function it walks into the DECL_FRIEND_CONTEXT of the friend rather than into the CP_DECL_CONTEXT. gcc/cp/ChangeLog: PR c++/94645 * pt.c (template_class_depth): Walk into the DECL_FRIEND_CONTEXT of a friend declaration rather than into its CP_DECL_CONTEXT. gcc/testsuite/ChangeLog: PR c++/94645 * g++.dg/cpp2a/concepts-lambda6.C: New test.
Patrick Palka committed -
Every other *_exec insn has the exec operand last. This being the other way around is a cause of bugs, and prevents use in macro templates. 2020-04-23 Andrew Stubbs <ams@codesourcery.com> gcc/ * config/gcn/gcn-valu.md (mov<mode>_exec): Swap the numbers on operands 2 and 3. (mov<mode>_exec): Likewise. (trunc<vndi><mode>2_exec): Swap parameters to gen_mov<mode>_exec. (<convop><mode><vndi>2_exec): Likewise.
Andrew Stubbs committed -
* include/experimental/net/executor (system_context): Mark system_context::system_context() = delete. * testsuite/experimental/net/executor/1.cc: Add new test to check system_context is not default constructible.
Thomas Rodgers committed -
This reorganises the C++20 status table, grouping the proposals by category. It also adds more proposals, and documents all the feature test macros for C++20 library changes. * doc/xml/manual/status_cxx2020.xml: Update C++20 status table. * doc/html/*: Regenerate.
Jonathan Wakely committed -
This partially reverts my previous change related to this macro. The C++20 constexpr iterator requirements are always met by array:iterator, because it's just a pointer. So the macro can be set to 201803 even in C++17 mode. * include/bits/stl_iterator.h (__cpp_lib_array_constexpr): Revert value for C++17 to 201803L because P0858R0 is supported for C++17. * include/std/version (__cpp_lib_array_constexpr): Likewise. * testsuite/23_containers/array/element_access/constexpr_c++17.cc: Check for value corresponding to P0031R0 features being tested. * testsuite/23_containers/array/requirements/constexpr_iter.cc: Check for value corresponding to P0858R0 features being tested.
Jonathan Wakely committed -
The <compare> header is always supported, not only for hosted configs. * include/std/version (__cpp_lib_three_way_comparison): Define for freestanding builds.
Jonathan Wakely committed -
The GIMPLE SSA store merging pass blows up when it is rewriting the stores because it didn't realize that they don't belong to the same EH region. Fixed by refusing to merge them. PR tree-optimization/94717 * gimple-ssa-store-merging.c (try_coalesce_bswap): Return false if one of the stores doesn't have the same landing pad number as the first. (coalesce_immediate_stores): Do not try to coalesce the store using bswap if it doesn't have the same landing pad number as the first.
Eric Botcazou committed -
A user reported that we are still referring to a public review draft of the ELFv2 ABI specification. Replace that by a permalink. 2020-04-24 Bill Schmidt <wschmidt@linux.ibm.com> * gcc/doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions): Replace outdated link to ELFv2 ABI.
Bill Schmidt committed -
This PR is about the rs6000 backend emitting wrong assembly for whole vector shift by 0, and while I think it is desirable to fix the backend, I don't see a point why the expander should try to emit that, whole vector shift by 0 is identity, we can just return the operand. 2020-04-23 Jakub Jelinek <jakub@redhat.com> PR target/94710 * optabs.c (expand_vec_perm_const): For shift_amt const0_rtx just return v2.
Jakub Jelinek committed -
Normally, when we find a statement containing an await expression this will be expanded to a statement list implementing the control flow implied. The expansion process successively replaces each await expression in a statement with the result of its await_resume(). In the case of conditional statements (if, while, do, switch) the expansion of the condition (or expression in the case of do-while) cannot take place 'inline', leading to the PR. The solution is to evaluate the expression separately, and to transform while and do-while loops into endless loops with a break on the required condition. In fixing this, I realised that I'd also made a thinko in the case of expanding truth-and/or-if expressions, where one arm of the expression might need to be short-circuited. The mechanism for expanding via the tree walk will not work correctly in this case and we need to pre-expand any truth-and/or-if with an await expression on its conditionally-taken arm. This applies to any statement with truth-and/or-if expressions, so can be handled generically. gcc/cp/ChangeLog: 2020-04-23 Iain Sandoe <iain@sandoe.co.uk> PR c++/94288 * coroutines.cc (await_statement_expander): Simplify cases. (struct susp_frame_data): Add fields for truth and/or if cases, rename one field. (analyze_expression_awaits): New. (expand_one_truth_if): New. (add_var_to_bind): New helper. (coro_build_add_if_not_cond_break): New helper. (await_statement_walker): Handle conditional expressions, handle expansion of truth-and/or-if cases. (bind_expr_find_in_subtree): New, checking-only. (coro_body_contains_bind_expr_p): New, checking-only. (morph_fn_to_coro): Ensure that we have a top level bind expression. gcc/testsuite/ChangeLog: 2020-04-23 Iain Sandoe <iain@sandoe.co.uk> PR c++/94288 * g++.dg/coroutines/torture/co-await-18-if-cond.C: New test. * g++.dg/coroutines/torture/co-await-19-while-cond.C: New test. * g++.dg/coroutines/torture/co-await-20-do-while-cond.C: New test. * g++.dg/coroutines/torture/co-await-21-switch-value.C: New test. * g++.dg/coroutines/torture/co-await-22-truth-and-of-if.C: New test. * g++.dg/coroutines/torture/co-ret-16-simple-control-flow.C: New test.
Iain Sandoe committed -
find_tm_attribute was using TREE_PURPOSE to get the attribute name, which is breaking now that we preserve the C++11-style attribute format past decl_attributes. So use get_attribute_name which can handle both formats of attributes. PR c++/94733 * c-attribs.c (find_tm_attribute): Use get_attribute_name instead of TREE_PURPOSE. * g++.dg/tm/attrib-5.C: New test.
Marek Polacek committed -
In the recent get_narrower change, I wanted it to be efficient and avoid recursion if there are many nested COMPOUND_EXPRs. That builds the COMPOUND_EXPR nest with the right arguments, but as build2_loc computes some flags like TREE_SIDE_EFFECTS, TREE_CONSTANT and TREE_READONLY, when it is called with something that will not be the argument in the end, those flags are computed incorrectly. So, this patch instead uses an auto_vec and builds them in the reverse order so when they are built, they are built with the correct operands. 2020-04-23 Jakub Jelinek <jakub@redhat.com> PR middle-end/94724 * tree.c (get_narrower): Instead of creating COMPOUND_EXPRs temporarily with non-final second operand and updating it later, push COMPOUND_EXPRs into a vector and process it in reverse, creating COMPOUND_EXPRs with the final operands. * gcc.c-torture/execute/pr94724.c: New test.
Jakub Jelinek committed -
This one took a bit of detective work. When array pointers point to components of derived types, we currently set the span field and then create an array temporary when we pass the array pointer to a procedure as a non-pointer or non-target argument. (This is inefficient, but that's for another release). Now, the compiler detected this case when there was a direct assignment like p => a%b, but not when p was returned either as a function result or via an argument. This patch fixes that. 2020-04-23 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/93956 * expr.c (gfc_check_pointer_assign): Also set subref_array_pointer when a function returns a pointer. * interface.c (gfc_set_subref_array_pointer_arg): New function. (gfc_procedure_use): Call it. 2020-04-23 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/93956 * gfortran.dg/pointer_assign_13.f90: New test.
Thomas König committed -
Update the inline namespace to __n4861. Add '__cpp_lib_coroutine' defined to 201902L per n4861. libstdc++-v3/ChangeLog: 2020-04-23 Iain Sandoe <iain@sandoe.co.uk> * include/std/coroutine: Update the inline namespace to __n4861. Add the __cpp_lib_coroutine define, set to 201902L. * include/std/version: Add __cpp_lib_coroutine, set to 201902L. gcc/testsuite/ChangeLog: 2020-04-23 Iain Sandoe <iain@sandoe.co.uk> * g++.dg/coroutines/coro-bad-alloc-00-bad-op-new.C: Adjust for changed inline namespace. * g++.dg/coroutines/coro-bad-alloc-01-bad-op-del.C: Likewise. * g++.dg/coroutines/coro-bad-alloc-02-no-op-new-nt.C: Likewise * g++.dg/coroutines/coro.h: Likewise
Iain Sandoe committed -
The bti pass currently first emits bti c at function start if there is no paciasp (which also acts as indirect call landing pad), then bti j is emitted at jump labels, however if there is a label right before paciasp then the function start can end up like foo: label: bti j paciasp ... This patch is a minimal fix that just moves the bti c handling after the bti j handling so we end up with foo: bti c label: bti j paciasp ... This could be improved by emitting bti jc in this case, or by detecting that the label is not in fact an indirect jump target and then this situation would be much less common. Needs to be backported to gcc-9 branch. gcc/ChangeLog: PR target/94697 * config/aarch64/aarch64-bti-insert.c (rest_of_insert_bti): Swap bti c and bti j handling. gcc/testsuite/ChangeLog: PR target/94697 * gcc.target/aarch64/pr94697.c: New test.
Szabolcs Nagy committed -
Add extra testing in the following two tests to make sure CPP predefines redefinitions on #pragma works as expected when -mgeneral-regs-only option is specified (See PR94678): gcc.target/aarch64/pragma_cpp_predefs_2.c gcc.target/aarch64/pragma_cpp_predefs_3.c 2020-04-23 Felix Yang <felix.yang@huawei.com> gcc/testsuite/ PR target/94678 * gcc.target/aarch64/pragma_cpp_predefs_2.c: Fix typos, pop_pragma -> pop_options. Add tests for general-regs-only. * gcc.target/aarch64/pragma_cpp_predefs_3.c: Add tests for general-regs-only.
Fei Yang committed -
2020-04-23 Andrew Stubbs <ams@codesourcery.com> Thomas Schwinge <thomas@codesourcery.com> PR middle-end/93488 gcc/ * omp-expand.c (expand_omp_target): Use force_gimple_operand_gsi on t_async and the wait arguments. gcc/testsuite/ * c-c++-common/goacc/pr93488.c: New file. Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>
Andrew Stubbs committed -
This PR was caused by mismatched expectations between vectorizable_comparison and SLP. We had a "<" comparison between two booleans that were leaves of the SLP tree, so vectorizable_comparison fell back on: /* Invariant comparison. */ if (!vectype) { vectype = get_vectype_for_scalar_type (vinfo, TREE_TYPE (rhs1), slp_node); if (maybe_ne (TYPE_VECTOR_SUBPARTS (vectype), nunits)) return false; } rhs1 and rhs2 were *unsigned* boolean types, so we got back a vector of unsigned integers. This in itself was OK, and meant that "<" worked as expected without the need for the boolean fix-ups: /* Boolean values may have another representation in vectors and therefore we prefer bit operations over comparison for them (which also works for scalar masks). We store opcodes to use in bitop1 and bitop2. Statement is vectorized as BITOP2 (rhs1 BITOP1 rhs2) or rhs1 BITOP2 (BITOP1 rhs2) depending on bitop1 and bitop2 arity. */ bool swap_p = false; if (VECTOR_BOOLEAN_TYPE_P (vectype)) { However, vectorizable_comparison then used vect_get_slp_defs to get the actual operands. The request went to vect_get_constant_vectors, which also has logic to calculate the vector type. The problem was that this type was different from the one chosen above: if (VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (op)) && vect_mask_constant_operand_p (stmt_vinfo)) vector_type = truth_type_for (stmt_vectype); else vector_type = get_vectype_for_scalar_type (vinfo, TREE_TYPE (op), op_node); So the function gave back a vector of mask types, which here are vectors of *signed* booleans. This meant that "<" gave: true (-1) < false (0) and so the boolean fixup above was needed after all. Fixed by making vectorizable_comparison also pick a mask type in this case. 2020-04-23 Richard Sandiford <richard.sandiford@arm.com> gcc/ PR tree-optimization/94727 * tree-vect-stmts.c (vectorizable_comparison): Use mask_type when comparing invariant scalar booleans. gcc/testsuite/ PR tree-optimization/94727 * gcc.dg/vect/pr94727.c: New test.
Richard Sandiford committed -
In C++17, an empty class deriving from an empty base is not an aggregate, while in C++14 it is. In order to implement this, GCC adds an artificial field to such classes. This artificial field has no mapping to Fundamental Data Types in the AArch64 PCS ABI and hence should not count towards determining whether an object can be passed using the vector registers as per section "6.4.2 Parameter Passing Rules" in the AArch64 PCS. https://github.com/ARM-software/abi-aa/blob/master/aapcs64/aapcs64.rst#the-base-procedure-call-standard This patch avoids counting this artificial field in aapcs_vfp_sub_candidate, and hence calculates whether such objects should be passed in vector registers in the same manner as C++14 (where the artificial field does not exist). Before this change, the test below would pass the arguments to `f` in general registers. After this change, the test passes the arguments to `f` using the vector registers. The new behaviour matches the behaviour of `armclang`, and also matches the behaviour when run with `-std=gnu++14`. > gcc -std=gnu++17 test.cpp ``` test.cpp struct base {}; struct pair : base { float first; float second; pair (float f, float s) : first(f), second(s) {} }; void f (pair); int main() { f({3.14, 666}); return 1; } ``` We add a `-Wpsabi` warning to catch cases where this fix has changed the ABI for some functions. Unfortunately this warning is not emitted twice for multiple calls to the same function, but I feel this is not much of a problem and can be fixed later if needs be. (i.e. if `main` called `f` twice in a row we only emit a diagnostic for the first). Testing: Bootstrap and regression test on aarch64-linux. All struct-layout-1 tests now pass. gcc/ChangeLog: 2020-04-23 Matthew Malcomson <matthew.malcomson@arm.com> Jakub Jelinek <jakub@redhat.com> PR target/94383 * config/aarch64/aarch64.c (aapcs_vfp_sub_candidate): Account for C++17 empty base class artificial fields. (aarch64_vfp_is_call_or_return_candidate): Warn when ABI PCS decision is different after this fix.
Matthew Malcomson committed -
libgfortran/ChangeLog: 2020-04-22 Fritz Reese <foreese@gcc.gnu.org> PR libfortran/94694 PR libfortran/94586 * intrinsics/trigd.c, intrinsics/trigd_lib.inc, intrinsics/trigd.inc: Guard against unavailable math functions. Use suffixes from kinds.h based on the REAL kind. gcc/fortran/ChangeLog: 2020-04-22 Fritz Reese <foreese@gcc.gnu.org> * trigd_fe.inc: Use mpfr to compute cosd(30) rather than a host- precision floating point literal based on an invalid macro.
Fritz Reese committed -
Ensure that the returned status values are not ignored. The old code was not broken, but this is both safer and satisfies static analysis. 2020-04-23 Andrew Stubbs <ams@codesourcery.com> PR other/94629 libgomp/ * plugin/plugin-gcn.c (init_hsa_context): Check return value from hsa_iterate_agents. (GOMP_OFFLOAD_init_device): Check return values from both calls to hsa_agent_iterate_regions.
Andrew Stubbs committed
-