The standard describes a rewrite of the body of the user-authored
function (which wraps it in a try-catch block and provides the
initial and final suspend expressions). The exact arrangement of
this was still in flux right up until the DIS and as a consequence
was a bit of a moving target.
The net result was a fragmented implementation of the parts of
the rewrite which is now impeding progress in fixing other issues.
This patch collates the rewrite action into a single function and
carries this out earlier.
gcc/cp/ChangeLog:
* coroutines.cc (expand_one_await_expression): Remove
code dealing with initial suspend.
(build_actor_fn): Remove code special-casing initial
and final suspend. Handle the final suspend and marking
of the coroutine as done.
(coro_rewrite_function_body): New.
(bind_expr_find_in_subtree): Remove.
(coro_body_contains_bind_expr_p): Remove.
(morph_fn_to_coro): Split the rewrite of the original
function into coro_rewrite_function_body and call it.
The code accidentally called Type::type_descriptor rather than the
do_type_descriptor method. Calling Type::type_descriptor with a second
argument of NULL would always crash. Since that never happened,
it revealed that this code was never actually executed.
Fixes PR go/95970
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/240477
This one-line fix removes a check for recursion for procedures
which are compiler-generated, such as finalizers or deallocation.
These need to be recursive, even if the user code should not be.
gcc/fortran/ChangeLog:
PR fortran/95743
* trans-decl.c (gfc_generate_function_code): Do not generate
recursion check for compiler-generated procedures.
2020-06-29 Segher Boessenkool <segher@kernel.crashing.org>
* doc/extend.texi: Change references to "future architecture" to
"ISA 3.1", "-mcpu=future" to "-mcpu=power10", and remove vaguer
references to "future" (because the future is now).
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.
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-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.
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.
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.
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.
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.
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>.
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.
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.
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.
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>
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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-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.
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.
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.
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.
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.
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.