Commit Graph

177860 Commits

Author SHA1 Message Date
Jakub Jelinek
baa4578911 testsuite: Adjust testcase for recent -Wnonnull changes
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-29 14:38:23 +02:00
Jakub Jelinek
fe7c43a7bc testsuite: Adjust testcase for recent -Wnonnull changes
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-29 13:50:53 +02:00
Martin Liska
e712ef9eee
Use gsi_bb instead of iterator->bb.
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-29 13:28:16 +02:00
Andrew Stubbs
eff23b7961 amdgcn: Support basic DWARF
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-29 11:58:54 +01:00
Kaipeng Zhou
35cf3c5516 store-merging: ICE in find_bswap_or_nop_1 PR95854.
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-29 12:58:10 +02:00
Rainer Orth
ceac3edb42 sparc: Remove register storage class in sparc.c
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-29 11:51:07 +02:00
Martin Liska
4494fcbc9b
arc: add exceptions for PR92860.
gcc/ChangeLog:

	PR tree-optimization/92860
	* optc-save-gen.awk: Add exceptions for arc target.
2020-06-29 10:55:33 +02:00
Frederik Harwath
d4501bbedc testsuite: clarify scan-dump file globbing behavior
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-29 08:42:57 +02:00
GCC Administrator
69273534c6 Daily bump. 2020-06-29 00:16:29 +00:00
Ville Voutilainen
b26fd416fb Add a __nonnnull__ attribute to std::string's _CharT* constructor
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-29 00:47:05 +03:00
Ville Voutilainen
24b54628cf PR libstdc++/95915
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-29 00:36:38 +03:00
Martin Sebor
75ff24e192 Underline argument in -Wnonnull and in C++ extend warning to the this 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-28 14:24:52 -06:00
Iain Buclaw
ce56fd949f d: Merge upstream dmd 8508c4e68.
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-28 18:04:20 +02:00
Harald Anlauf
b62cac6d92 PR fortran/95340 - ICE in gfc_match_select_rank, at fortran/match.c:6690
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-28 16:24:15 +02:00
Iain Sandoe
06ed4aae1c coroutines: Handle namespaces while scanning local vars [PR95711].
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-28 13:52:25 +01:00
Harald Anlauf
f3a8f66a83 PR fortran/95880 - ICE in gfc_add_type, at fortran/symbol.c:2030
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-28 13:52:51 +02:00
Iain Sandoe
31419a80b6 coroutines, testsuite: Update log messages. [NFC, PR95519]
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-28 10:23:11 +01:00
Kewen Lin
ef8d1da1b5 IFN: Fix mask_{load,store} optab support macros
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-27 21:17:04 -05:00
David Edelsohn
5771314d18 rs6000: Correct prefix testsuite failures on AIX.
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-27 20:21:47 -04:00
GCC Administrator
9a33c41fe4 Daily bump. 2020-06-28 00:16:21 +00:00
Harald Anlauf
3cbc0fb39c PR fortran/95881 - ICE in resolve_symbol, at fortran/resolve.c:15175
Avoid NULL pointer dereference.

gcc/fortran/
	PR fortran/95881
	* resolve.c (resolve_symbol): Avoid NULL pointer dereference.
2020-06-27 14:57:28 +02:00
Aldy Hernandez
fc36b97af0 Move simplification of statements using ranges into its own class.
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-27 14:11:41 +02:00
Jakub Jelinek
aed3ab253d openmp: Non-rectangular loop support for non-composite worksharing loops and 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-27 12:43:36 +02:00
Jakub Jelinek
3799596098 c-family: Use TYPE_OVERFLOW_UNDEFINED instead of !TYPE_UNSIGNED in 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-27 12:42:13 +02:00
Iain Sandoe
daaed0199e coroutines: Handle awaiters that are sub-objects [PR95736]
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-27 09:43:54 +01:00
Iain Sandoe
9c5ca11a33 coroutines: Improve diagnostics for one allocator case.
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 09:37:43 +01:00
Michael Meissner
212475e575 Add PowerPC tests for power10.
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-27 00:40:48 -05:00
GCC Administrator
c9c05f7323 Daily bump. 2020-06-27 00:16:24 +00:00
H.J. Lu
727efd27da Linux/i386: Remove SUBTARGET_FRAME_POINTER_REQUIRED
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-26 15:17:49 -07:00
Yichao Yu
00e90d3d4c Fix target clone indirection elimination
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-26 15:49:52 -06:00
Peter Bergner
67161d24f4 rs6000: Add support for __builtin_cpu_is ("power10")
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-26 16:28:39 -05:00
Marek Polacek
0801f41944 c++: Change the default dialect to C++17.
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-26 15:29:07 -04:00
Kwok Cheung Yeung
0fce12c092 Fix failure in gfortran.dg/gomp/combined-if.f90 test
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-26 11:22:45 -07:00
Eric Botcazou
b3d77404c0 Take into account range info to optimize range tests into bit tests
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-26 15:26:48 +02:00
Iain Buclaw
2ca7883561 d/testsuite: Amend test to actually trigger the ICE being fixed
gcc/testsuite/ChangeLog:

	* gdc.dg/pr95250.d: Updated.
2020-06-26 13:59:50 +02:00
Iain Sandoe
e74c760730 coroutines: Handle non-method promise expressions [PR95519]
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-26 12:40:16 +01:00
Iain Sandoe
e195c8045a coroutines: Handle bad g-r-o-o-a-f cases.
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-26 12:40:16 +01:00
Richard Biener
5b959c22bc tree-optimization/95897 - fix fold-left SLP reduction insert place
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-26 13:04:21 +02:00
Nick Clifton
87fce92c5c This patch removes the use of the "register" keyword from the bsearch() and 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-26 10:06:48 +01:00
GCC Administrator
d61ffe1244 Daily bump. 2020-06-26 00:16:23 +00:00
Marek Polacek
08ca2d744d c++: Add test for c++/91104
Fixed by r271705.

gcc/testsuite/ChangeLog:

	PR c++/91104
	* g++.dg/cpp1y/lambda-generic-variadic21.C: New test.
2020-06-25 19:05:15 -04:00
Harald Anlauf
77d455ee81 PR fortran/95828 - Buffer overflows with SELECT RANK
With SELECT RANK, name mangling results in long internal symbols that
overflows internal buffers.  Fix that.

gcc/fortran/
	PR fortran/95828
	* match.c (select_rank_set_tmp): Enlarge internal buffer used in
	generating a mangled name.
	* resolve.c (resolve_select_rank): Likewise.
2020-06-25 20:34:48 +02:00
Harald Anlauf
35a335a159 PR fortran/95826 - Buffer overflows with PDTs and long symbols
With PDTs (parameterized derived types), name mangling results in variably
long internal symbols.  Use a dynamic buffer instead of a fixed-size one.

gcc/fortran/
	PR fortran/95826
	* decl.c (gfc_match_decl_type_spec): Replace a fixed size
	buffer by a pointer and reallocate if necessary.
2020-06-25 20:32:13 +02:00
Nick Clifton
20f466326c This patch disables the movsicc pattern in the M32R backend, which is repsonsible for the failure of several gcc testsuite entries.
2020-06-05  Nick Clifton  <nickc@redhat.com>

gcc/
	* config/m32r/m32r.md (movsicc): Disable pattern.
2020-06-25 16:48:34 +01:00
Iain Buclaw
27a6802011 d: Do not implicitly set DECL_DECLARED_INLINE_P on member functions.
This has been questionable behaviour since it was added, and though it
has no effect on wider discussions around what should be the correct
semantics of pragma(inline) within D modules, doing this tree-level
optimization has mostly zero benefit as cross-module inlining doesn't
happen anyway.

gcc/d/ChangeLog:

	* decl.cc (get_symbol_decl): Do not implicitly set
	DECL_DECLARED_INLINE_P on member functions.
2020-06-25 17:02:47 +02:00
Iain Buclaw
bbd6a326f4 d: Move d_signed_type and d_unsigned_type to types.cc
These two functions are not tied to the language-specific part of the
front-end in any way.

gcc/d/ChangeLog:

	* d-lang.cc (d_gimplify_expr_p): Make static.
	(d_parse_file): Likewise.
	(d_signed_or_unsigned_type): Move to types.cc.
	(d_unsigned_type): Likewise.
	(d_signed_type): Likewise.
	* d-tree.h (d_unsigned_type): Change the location in file.
	(d_signed_type): Likewise.
	* types.cc (d_signed_or_unsigned_type): Moved from d-lang.cc.
	(d_unsigned_type): Likewise.
	(d_signed_type): Likewise.
2020-06-25 17:02:47 +02:00
Iain Buclaw
1b7b352a83 d: Merge upstream dmd 4be011355.
Fixes self-assignment warnings seen when compiling with clang.

Reviewed-on: https://github.com/dlang/dmd/pull/11315

gcc/d/ChangeLog:

	PR d/95075
	* dmd/MERGE: Merge upstream dmd 4be011355.
2020-06-25 17:02:47 +02:00
Iain Buclaw
1d19c9cd3d d: Merge upstream dmd 90450f3ef.
Fixes a regression caused by an incomplete backport of converting the
Expression semantic pass to a Visitor.

Reviewed-on: https://github.com/dlang/dmd/pull/11314

gcc/d/ChangeLog:

	PR d/95250
	* dmd/MERGE: Merge upstream dmd 90450f3ef.

gcc/testsuite/ChangeLog:

	PR d/95250
	* gdc.dg/pr95250.d: New test.
2020-06-25 17:02:46 +02:00
Iain Buclaw
e52f5d0786 d: Remove another dependency on the front-end OutBuffer type.
As the DMD front-end never frees allocated memory, the glue layer
between the DMD front-end and GCC should generally avoid using DMD types
and interfaces if the purpose is internal only.

gcc/d/ChangeLog:

	* d-lang.cc (d_parse_file): Replace OutBuffer with obstack.
2020-06-25 17:02:46 +02:00
Iain Buclaw
d103f336bd d: Merge upstream dmd 5fc1806cd.
Backports the OutBuffer interface from upstream dmd master, removing
another difference this and the self-hosted D branch that is purely
refactoring, and doesn't introduce any mechanical changes.

Reviewed-on: https://github.com/dlang/dmd/pull/11302

gcc/d/ChangeLog:

	* dmd/MERGE: Merge upstream dmd 5fc1806cd.
	* d-lang.cc (d_parse_file): Use peekChars to get string representation
	of OutBuffer data.
2020-06-25 17:02:46 +02:00