Commit Graph

187034 Commits

Author SHA1 Message Date
Joseph Myers
59ffdb9849 Update gcc de.po.
* de.po: Update.
2021-07-30 14:48:24 +00:00
H.J. Lu
854ef6e50a x86: Don't enable LZCNT/POPCNT if disabled explicitly
gcc/

	PR target/101685
	* config/i386/i386-options.c (ix86_option_override_internal):
	Don't enable LZCNT/POPCNT if they have been disabled explicitly.

gcc/testsuite/

	PR target/101685
	* gcc.target/i386/pr101685.c: New test.
2021-07-30 06:05:37 -07:00
Iain Buclaw
011134dc19 d: Remove dead code from binary_op.
The front-end ensures that both sides have been casted to the same type
before being given to the lowering pass.

gcc/d/ChangeLog:

	* expr.cc (binary_op): Remove dead code.
2021-07-30 12:54:05 +02:00
Iain Buclaw
baa1226c37 d: Always layout initializer for the m_RTInfo field in TypeInfo_Class
Makes it explicit that the default value is set to NULL.

gcc/d/ChangeLog:

	* typeinfo.cc (TypeInfoVisitor::visit (TypeInfoClassDeclaration *)):
	Always layout initializer for the m_RTInfo field.
2021-07-30 12:53:53 +02:00
Iain Buclaw
5ad4eab2e6 d: Don't generate a PREDICT_EXPR when assert contracts are turned off.
This expression is just discarded by add_stmt, so never reaches the
middle-end.

gcc/d/ChangeLog:

	* expr.cc (ExprVisitor::visit (AssertExp *)): Don't generate
	PREDICT_EXPR.
2021-07-30 12:51:36 +02:00
Iain Buclaw
c18db639a3 d: Clarify comment for generating static array assignment with literal.
The code block is done as an optimization to elide a call to the runtime
library helpers _d_arrayctor or _d_arrayassign.

gcc/d/ChangeLog:

	* expr.cc (ExprVisitor::visit (AssignExp *)): Clarify comment
	  for generating static array assignment with literal.
2021-07-30 12:51:36 +02:00
Iain Buclaw
370f66b6af d: Only handle named enums in enum_initializer_decl
Anonymous enums neither generate an initializer nor typeinfo symbol, so
it's safe to assert that all enum declarations passed to this function
always have an identifier.

gcc/d/ChangeLog:

	* decl.cc (enum_initializer_decl): Only handle named enums.
2021-07-30 12:51:36 +02:00
Iain Buclaw
e22b7ae15b d: Set COMDAT and visibility of thunks only if they are public.
It is not expected to have a member function that can be non-public, but
this guards against any internal errors that might occur should that
ever change in the front-end.

gcc/d/ChangeLog:

	* decl.cc (make_thunk): Set COMDAT and visibility of thunks only if
	they are public.
2021-07-30 12:51:36 +02:00
Iain Buclaw
99d6d3d92f d: Factor aggregate_initializer_decl to set the sinit for aggregate declarations.
The self-hosted implementation of the D front-end changes the type of
`sinit' to a void pointer, which requires an explicit cast to `tree'.

gcc/d/ChangeLog:

	* decl.cc (DeclVisitor::visit (StructDeclaration *)): Don't use sinit
	for declaration directly.
	(DeclVisitor::visit (ClassDeclaration *)): Likewise.
	(aggregate_initializer_decl): Likewise.  Set sinit after creating.
2021-07-30 12:51:35 +02:00
Iain Buclaw
3b52a1086c d: Use Identifier::idPool to generate anonymous field name.
The self-hosted implementation of the D front-end does not export
Identifier::generateId, so handle name generation inline instead.

gcc/d/ChangeLog:

	* d-builtins.cc (build_frontend_type): Use Identifier::idPool to
	generate anonymous field name.
2021-07-30 12:51:35 +02:00
Iain Buclaw
bc5208f735 d: Use hasMonitor to determine whether to emit a __monitor field in D classes
This helper introduced by the front-end is a better gate, and allows the
front-end to change rules for what gets a monitor in the future.

gcc/d/ChangeLog:

	* types.cc (layout_aggregate_type): Call hasMonitor.
	* typeinfo.cc (TypeInfoVisitor::layout_base): Likewise.
	(layout_cpp_typeinfo): Likewise.  Don't emit vtable unless
	have_typeinfo_p.
2021-07-30 12:51:35 +02:00
Iain Buclaw
b2abe4e1ad d: Insert null terminator in obstack buffers
Covers cases where functions that handle the extracted strings ignore
the explicit length.  This isn't something that's known to happen in the
current front-end, but the self-hosted front-end has been observed to do
this in its conversions between D and C-style strings.

gcc/d/ChangeLog:

	* d-lang.cc (deps_add_target): Insert null terminator in buffer.
	(deps_write): Likewise.
	(d_parse_file): Likewise.
2021-07-30 12:51:35 +02:00
Iain Buclaw
bafda27537 d: Drop any field or parameter types that got cached before conversion failed.
This ensures there are no dangling references to AST members that have
been freed, either explcitly or by the garbage collector.

gcc/d/ChangeLog:

	* d-builtins.cc (build_frontend_type): Restore builtin_converted_decls
	length on conversion failure.
2021-07-30 12:51:35 +02:00
Iain Buclaw
55303957de d: Factor d_nested_class and d_nested_struct into single function.
Both do the exact same operation, just on different AST nodes.

gcc/d/ChangeLog:

	* d-codegen.cc (d_nested_class): Rename to ...
	(get_outer_function): ... this.  Handle all aggregate declarations.
	(d_nested_struct): Remove.
	(find_this_tree): Use get_outer_function.
	(get_framedecl): Likewise.
2021-07-30 12:51:34 +02:00
Aldy Hernandez
2730aa7809 Mark gcc.dg/shrink-wrap-loop.c as XFAIL.
It occurs to me that I should not have disabled early jump threading in
this test, as it may hide an actual defect.  I have reverted my change
and XFAILed the test instead.  I have also opened a PR101690 to keep track
of this problem.

gcc/testsuite/ChangeLog:

	* gcc.dg/shrink-wrap-loop.c: Enable early jump threading.  Mark as
	XFAIL.
2021-07-30 12:34:27 +02:00
Thomas Schwinge
28665ddc7e [libgomp] Restore offloading 'libgomp/fortran.c'
GCN:

    ld: error: undefined symbol: gomp_ialias_omp_display_env
    >>> referenced by fortran.c:744 ([...]/source-gcc/libgomp/fortran.c:744)
    >>>               fortran.o:(omp_display_env_) in archive [...]/build-gcc-offload-amdgcn-amdhsa/amdgcn-amdhsa/libgomp/.libs/libgomp.a
    >>> referenced by fortran.c:744 ([...]/source-gcc/libgomp/fortran.c:744)
    >>>               fortran.o:(omp_display_env_) in archive [...]/build-gcc-offload-amdgcn-amdhsa/amdgcn-amdhsa/libgomp/.libs/libgomp.a
    >>> referenced by fortran.c:750 ([...]/source-gcc/libgomp/fortran.c:750)
    >>>               fortran.o:(omp_display_env_8_) in archive [...]/build-gcc-offload-amdgcn-amdhsa/amdgcn-amdhsa/libgomp/.libs/libgomp.a
    >>> referenced by fortran.c:750 ([...]/source-gcc/libgomp/fortran.c:750)
    >>>               fortran.o:(omp_display_env_8_) in archive [...]/build-gcc-offload-amdgcn-amdhsa/amdgcn-amdhsa/libgomp/.libs/libgomp.a
    collect2: error: ld returned 1 exit status
    mkoffload: fatal error: build-gcc/gcc/x86_64-pc-linux-gnu-accel-amdgcn-amdhsa-gcc returned 1 exit status

nvptx:

    unresolved symbol omp_display_env
    collect2: error: ld returned 1 exit status
    mkoffload: fatal error: [...]/build-gcc/./gcc/x86_64-pc-linux-gnu-accel-nvptx-none-gcc returned 1 exit status

Fix-up for commit 7123ae2455
"Implement OpenMP 5.1 section 3.15: omp_display_env".

	libgomp/
	* fortran.c (omp_display_env_, omp_display_env_8_): Only
	'#ifndef LIBGOMP_OFFLOADED_ONLY'.

Co-Authored-By: Ulrich Drepper <drepper@redhat.com>
2021-07-30 12:02:15 +02:00
prathamesh.kulkarni
5a973aec60 arm/66791: Replace builtins in vld1.
gcc/ChangeLog:

	PR target/66791
	* config/arm/arm_neon.h (vld1_p64): Replace call to builtin by
	explicitly dereferencing __a.
	(vld1_s64): Likewise.
	(vld1_u64): Likewise.
	* config/arm/arm_neon_builtins.def (vld1): Remove entry for di
	and change to VAR13.
2021-07-30 15:10:37 +05:30
Aldy Hernandez
6165cf6b9b Replace evrp use in loop versioning with ranger.
This patch replaces the evrp_range_analyzer in the loop versioning code
with an on-demand ranger.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* gimple-loop-versioning.cc (lv_dom_walker::lv_dom_walker): Remove
	use of m_range_analyzer.
	(loop_versioning::lv_dom_walker::before_dom_children): Same.
	(loop_versioning::lv_dom_walker::after_dom_children): Remove.
	(loop_versioning::prune_loop_conditions): Replace vr_values use
	with range_query interface.
	(pass_loop_versioning::execute): Use ranger.
2021-07-30 11:28:51 +02:00
Jakub Jelinek
77ab4e3be2 c++: Accept C++11 attribute-definition [PR101582]
As the following testcase shows, we don't parse properly
C++11 attribute-declaration:
https://eel.is/c++draft/dcl.dcl#nt:attribute-declaration

cp_parser_toplevel_declaration just handles empty-declaration parsing
(with diagnostics for C++98) and otherwise calls cp_parser_declaration
which on it calls cp_parser_simple_declaration and rejects it with
"does not declare anything" permerror.

The following patch moves the handling of empty-declaration from
cp_parser_toplevel_declaration to cp_parser_declaration and
handles attribute-declaration in cp_parser_declaration
by parsing the attributes (standard ones only, we've never supported
__attribute__((...)); at namespace scope, so I'm not sure we need to
introduce that), which for C++98 emits the needed diagnostics, and then
warning if there are any attributes that we throw away on the floor.

I'll need this later for OpenMP directives at namespace scope, e.g.
[[omp::directive (requires, atomic_default_mem_order(seq_cst))]];
should be valid at namespace scope (and many other directives).

2021-07-30  Jakub Jelinek  <jakub@redhat.com>

	PR c++/101582
	* parser.c (cp_parser_skip_std_attribute_spec_seq): Add a forward
	declaration.
	(cp_parser_declaration): Parse empty-declaration and
	attribute-declaration.
	(cp_parser_toplevel_declaration): Don't parse empty-declaration here.

	* g++.dg/cpp0x/gen-attrs-45.C: Expect a warning about ignored
	attributes instead of error.
	* g++.dg/cpp0x/gen-attrs-75.C: New test.
	* g++.dg/modules/pr101582-1.C: New test.
2021-07-30 10:30:16 +02:00
Xi Ruoyao
291416d378
ipa-devirt: check precision mismatch of enum values [PR101396]
We are comparing enum values (in wide_int) to check ODR violation.
However, if we compare two wide_int values with different precision,
we'll trigger an assert, leading to ICE.  With enum-base introduced
in C++11, it's easy to sink into this situation.

To fix the issue, we need to explicitly check this kind of mismatch,
and emit a proper warning message if there is such one.

gcc/

	PR ipa/101396
	* ipa-devirt.c (ipa_odr_read_section): Compare the precision of
	  enum values, and emit a warning if they mismatch.

gcc/testsuite/

	PR ipa/101396
	* g++.dg/lto/pr101396_0.C: New test.
	* g++.dg/lto/pr101396_1.C: New test.
2021-07-30 15:43:38 +08:00
Kewen Lin
e41ba804ba Use range-based for loops for traversing loops
This patch follows Martin's suggestion here[1], to support
range based loop for iterating loops, analogously to the
patch for vec[2].

For example, use below range-based for loop

    for (auto loop : loops_list (cfun, 0))

to replace the previous macro FOR_EACH_LOOP

    FOR_EACH_LOOP (loop, 0)

[1] https://gcc.gnu.org/pipermail/gcc-patches/2021-June/573424.html
[2] https://gcc.gnu.org/pipermail/gcc-patches/2021-June/572315.html

gcc/ChangeLog:

	* cfgloop.h (as_const): New function.
	(class loop_iterator): Rename to ...
	(class loops_list): ... this.
	(loop_iterator::next): Rename to ...
	(loops_list::Iter::fill_curr_loop): ... this and adjust.
	(loop_iterator::loop_iterator): Rename to ...
	(loops_list::loops_list): ... this and adjust.
	(loops_list::Iter): New class.
	(loops_list::iterator): New type.
	(loops_list::const_iterator): New type.
	(loops_list::begin): New function.
	(loops_list::end): Likewise.
	(loops_list::begin const): Likewise.
	(loops_list::end const): Likewise.
	(FOR_EACH_LOOP): Remove.
	(FOR_EACH_LOOP_FN): Remove.
	* cfgloop.c (flow_loops_dump): Adjust FOR_EACH_LOOP* with range-based
	for loop with loops_list instance.
	(sort_sibling_loops): Likewise.
	(disambiguate_loops_with_multiple_latches): Likewise.
	(verify_loop_structure): Likewise.
	* cfgloopmanip.c (create_preheaders): Likewise.
	(force_single_succ_latches): Likewise.
	* config/aarch64/falkor-tag-collision-avoidance.c
	(execute_tag_collision_avoidance): Likewise.
	* config/mn10300/mn10300.c (mn10300_scan_for_setlb_lcc): Likewise.
	* config/s390/s390.c (s390_adjust_loops): Likewise.
	* doc/loop.texi: Likewise.
	* gimple-loop-interchange.cc (pass_linterchange::execute): Likewise.
	* gimple-loop-jam.c (tree_loop_unroll_and_jam): Likewise.
	* gimple-loop-versioning.cc (loop_versioning::analyze_blocks): Likewise.
	(loop_versioning::make_versioning_decisions): Likewise.
	* gimple-ssa-split-paths.c (split_paths): Likewise.
	* graphite-isl-ast-to-gimple.c (graphite_regenerate_ast_isl): Likewise.
	* graphite.c (canonicalize_loop_form): Likewise.
	(graphite_transform_loops): Likewise.
	* ipa-fnsummary.c (analyze_function_body): Likewise.
	* ipa-pure-const.c (analyze_function): Likewise.
	* loop-doloop.c (doloop_optimize_loops): Likewise.
	* loop-init.c (loop_optimizer_finalize): Likewise.
	(fix_loop_structure): Likewise.
	* loop-invariant.c (calculate_loop_reg_pressure): Likewise.
	(move_loop_invariants): Likewise.
	* loop-unroll.c (decide_unrolling): Likewise.
	(unroll_loops): Likewise.
	* modulo-sched.c (sms_schedule): Likewise.
	* predict.c (predict_loops): Likewise.
	(pass_profile::execute): Likewise.
	* profile.c (branch_prob): Likewise.
	* sel-sched-ir.c (sel_finish_pipelining): Likewise.
	(sel_find_rgns): Likewise.
	* tree-cfg.c (replace_loop_annotate): Likewise.
	(replace_uses_by): Likewise.
	(move_sese_region_to_fn): Likewise.
	* tree-if-conv.c (pass_if_conversion::execute): Likewise.
	* tree-loop-distribution.c (loop_distribution::execute): Likewise.
	* tree-parloops.c (parallelize_loops): Likewise.
	* tree-predcom.c (tree_predictive_commoning): Likewise.
	* tree-scalar-evolution.c (scev_initialize): Likewise.
	(scev_reset): Likewise.
	* tree-ssa-dce.c (find_obviously_necessary_stmts): Likewise.
	* tree-ssa-live.c (remove_unused_locals): Likewise.
	* tree-ssa-loop-ch.c (ch_base::copy_headers): Likewise.
	* tree-ssa-loop-im.c (analyze_memory_references): Likewise.
	(tree_ssa_lim_initialize): Likewise.
	* tree-ssa-loop-ivcanon.c (canonicalize_induction_variables): Likewise.
	* tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize): Likewise.
	* tree-ssa-loop-manip.c (get_loops_exits): Likewise.
	* tree-ssa-loop-niter.c (estimate_numbers_of_iterations): Likewise.
	(free_numbers_of_iterations_estimates): Likewise.
	* tree-ssa-loop-prefetch.c (tree_ssa_prefetch_arrays): Likewise.
	* tree-ssa-loop-split.c (tree_ssa_split_loops): Likewise.
	* tree-ssa-loop-unswitch.c (tree_ssa_unswitch_loops): Likewise.
	* tree-ssa-loop.c (gate_oacc_kernels): Likewise.
	(pass_scev_cprop::execute): Likewise.
	* tree-ssa-propagate.c (clean_up_loop_closed_phi): Likewise.
	* tree-ssa-sccvn.c (do_rpo_vn): Likewise.
	* tree-ssa-threadupdate.c
	(jump_thread_path_registry::thread_through_all_blocks): Likewise.
	* tree-vectorizer.c (vectorize_loops): Likewise.
	* tree-vrp.c (vrp_asserts::find_assert_locations): Likewise.
2021-07-29 22:26:25 -05:00
Hans-Peter Nilsson
4186cb9cc0 fix breakage from "libstdc++: Remove unnecessary uses of <utility>"
Commit r12-2534 was incomplete and (by inspection derived
from an MMIX build) failing for targets without an insn for
compare_and_swap for pointer-size objects, IOW for targets
for which "ATOMIC_POINTER_LOCK_FREE != 2" is true:

x/gcc/libstdc++-v3/src/c++17/memory_resource.cc: In member function
 'std::pmr::memory_resource*
std::pmr::{anonymous}::atomic_mem_res::exchange(std::pmr::memory_resource*)':
x/gcc/libstdc++-v3/src/c++17/memory_resource.cc:140:21: error:
 'exchange' is not a member of 'std'
  140 |         return std::exchange(val, r);
      |                     ^~~~~~~~
make[5]: *** [Makefile:577: memory_resource.lo] Error 1
make[5]: Leaving directory
 '/home/hp/tmp/newmmix-r12-2579-p3/gccobj/mmix/libstdc++-v3/src/c++17'

This fix was derived from edits elsewhere in that patch.

Tested mmix-knuth-mmixware, restoring build (together with
target-reviving patches as MMIX is currently and at that commit
broken for target-specific reasons).

libstdc++-v3/:
	* src/c++17/memory_resource.cc: Use __exchange instead
	of std::exchange.
2021-07-30 01:27:26 +02:00
Hans-Peter Nilsson
ef22e9c725 Fix MMIX breakage; ICE in df_ref_record, at df-scan.c:2598
This bug made me dive into some of the murkier waters of gcc, namely
the source of operand 2 to the "call" pattern.  It can be pretty
poisonous, but is unused (either directly or later) by most targets.

The target function_arg (and function_incoming_arg), can unless
specially handled, cause a VOIDmode reg RTX to be generated, for the
function arguments end-marker.  This is then passed on by expand_call
to the target "call" pattern, as operand[2] (which is wrongly
documented or wrongly implemented, see comment in mmix.c) but unused
by most targets that do not handle it specially, as in operand 2 not
making it into the insn generated for the "call" (et al) patterns.  Of
course, the MMIX port stands out here: the RTX makes it into the
generated RTX but is then actually unused and is just a placeholder;
see mmix_print_operand 'p'.

Anyway, df-scan inspects the emitted call rtx and horks on the
void-mode RTX (actually: that it represents a zero-sized register
range) from r12-1702.

While I could replace or remove the emitted unused call insn operand,
that would still leave unusable rtx to future users of function_arg
actually looking for next_arg_reg.  Better replace VOIDmode with
DImode here; that's the "natural" mode of MMIX registers.

(As a future improvement, I'll also remove the placeholder argument
and replace the intended user; the print_operand output modifier 'p'
modifier (as in "PUSHJ $%p2,%0") with some punctuation, perhaps '!'
(as in "PUSHJ $%!,%0").

I inspected all ports, but other targets emit a special
function_arg_info::end_marker cookie or just don't emit "call"
operand[2] (etc) in the expanded "call" pattern.

gcc:
	* config/mmix/mmix.c (mmix_function_arg_1): Avoid
	generating a VOIDmode register for e.g the
	function_arg_info::end_marker.
2021-07-30 01:20:35 +02:00
Joseph Myers
591b128e93 Update gcc .po files.
* be.po, da.po, de.po, el.po, es.po, fi.po, fr.po, hr.po, id.po,
	ja.po, nl.po, ru.po, sr.po, sv.po, zh_CN.po, zh_TW.po: Update.
2021-07-29 21:16:56 +00:00
Jeff Law
0c6d21faa4 Reinstate branch-on-bit insns for H8
gcc/
	* config/h8300/h8300-modes.def: Add CCZ, CCV and CCC, drop CCZNV.
	* config/h8300/h8300.md (H8cc mode iterator): Add CCZ.
	(cc mode_attr): Similarly.
	(ccz subst_attr): Similarly.
	* config/h8300/jumpcall.md: Add new patterns for branch-on-bit.
	* config/h8300/testcompare.md: Remove various cc0 based patterns
	that had been commented out.  Add pattern to set CCZ from a bit
	test.
2021-07-29 14:57:53 -04:00
Martin Sebor
2f6bdd51cf Xfail just the failing assertion and correct target.
Related to:
PR middle-end/101674 - gcc.dg/uninit-pred-9_b.c fails after jump threading rewrite

gcc/testsuite:
	PR middle-end/101674
	* gcc.dg/uninit-pred-9_b.c: Xfail just the failing assertion and
	correct target.
2021-07-29 10:11:18 -06:00
Iain Buclaw
3c13cf479b d: Generate Object class if it doesn't exist during TypeInfo emission (PR101672)
Having a stub will prevent errors from occuring when compiling D code
with an empty object.d.  Though if it were to actually be used
implicitly then an error should occur.

	PR d/101672

gcc/d/ChangeLog:

	* typeinfo.cc (make_frontend_typeinfo): Generate Object class if it
	doesn't exist.
	(check_typeinfo_type): Don't warn if there's no location.

gcc/testsuite/ChangeLog:

	* gdc.dg/pr100967.d: Update test.
	* gdc.dg/pr101672.d: New test.
2021-07-29 17:10:13 +02:00
Iain Buclaw
7616ed6307 d: Return the correct value for C++ constructor calls (PR101664)
C++ constructors return void, even though the front-end semantic treats
them as implicitly returning `this'.  To handle this correctly, the
object reference is cached and used as the result of the expression.

	PR d/101664

gcc/d/ChangeLog:

	* expr.cc (ExprVisitor::visit (CallExp *)): Use object expression as
	result for C++ constructor calls.

gcc/testsuite/ChangeLog:

	* gdc.dg/extern-c++/extern-c++.exp: New.
	* gdc.dg/extern-c++/pr101664.d: New test.
	* gdc.dg/extern-c++/pr101664_1.cc: New test.
2021-07-29 17:10:09 +02:00
Iain Buclaw
5c9b7408dc d: Ensure casting from bool results in either 0 or 1 (PR96435)
If casting from bool, the result is either 0 or 1, any other value
violates @safe code, so enforce that it is never invalid.

	PR d/96435

gcc/d/ChangeLog:

	* d-convert.cc (convert_for_rvalue): New function.
	* d-tree.h (convert_for_rvalue): Declare.
	* expr.cc (ExprVisitor::visit (CastExp *)): Use convert_for_rvalue.
	(build_return_dtor): Likewise.

gcc/testsuite/ChangeLog:

	* gdc.dg/torture/pr96435.d: New test.
2021-07-29 16:16:19 +02:00
Iain Buclaw
75f2e3f6cb d: Remove generated D header files on error (PR101657)
If an error occurs later during compilation, remember that we generated
the headers, so that they can be removed before exit.

	PR d/101657

gcc/d/ChangeLog:

	* d-lang.cc (d_parse_file): Remove generated D header files on error.

gcc/testsuite/ChangeLog:

	* gdc.dg/pr101657.d: New test.
2021-07-29 16:16:19 +02:00
Iain Buclaw
cd4bda4297 d: Don't escape quoted format strings in escape_d_format (PR101656)
If the format string is enclosed by two '`' characters, then don't
escape the first and laster characters.

	PR d/101656

gcc/d/ChangeLog:

	* d-diagnostic.cc (escape_d_format): Don't escape quoted format
	strings.
2021-07-29 16:16:19 +02:00
Jakub Jelinek
7d014f7b22 testsuite: Fix up two tests for recent libstdc++ header changes [PR101647]
After recent libstdc++ header changes <functional> no longer includes
(parts of?) <array> and doesn't have to and <memory> no longer includes
(parts of?) <initializer_list>.
This patch fixes:
testsuite/g++.dg/pr71389.C:10:39: error: aggregate 'std::array<std::array<int, 16>, 16> v13' has incomplete type and cannot be defined
as well as
testsuite/g++.dg/cpp0x/initlist48.C:11:6: error: 'initializer_list' in namespace 'std' does not name a template type; did you mean 'uninitialized_fill'?

2021-07-29  Jakub Jelinek  <jakub@redhat.com>

	PR testsuite/101647
	* g++.dg/pr71389.C: Include <array> instead of <functional>.
	* g++.dg/cpp0x/initlist48.C: Include also <initializer_list>.
2021-07-29 14:17:55 +02:00
Thomas Schwinge
0829ab79d3 [OpenACC] Extract 'pass_oacc_loop_designation' out of 'pass_oacc_device_lower'
This really is a separate step -- and another pass to be added between the two,
later on.

	gcc/
	* omp-offload.c (oacc_loop_xform_head_tail, oacc_loop_process):
	'update_stmt' after modification.
	(pass_oacc_loop_designation): New function, extracted out of...
	(pass_oacc_device_lower): ... this.
	(pass_data_oacc_loop_designation, pass_oacc_loop_designation)
	(make_pass_oacc_loop_designation): New
	* passes.def: Add it.
	* tree-parloops.c (create_parallel_loop): Adjust.
	* tree-pass.h (make_pass_oacc_loop_designation): New.
	gcc/testsuite/
	* c-c++-common/goacc/classify-kernels-unparallelized.c:
	's%oaccdevlow%oaccloops%g'.
	* c-c++-common/goacc/classify-kernels.c: Likewise.
	* c-c++-common/goacc/classify-parallel.c: Likewise.
	* c-c++-common/goacc/classify-routine-nohost.c: Likewise.
	* c-c++-common/goacc/classify-routine.c: Likewise.
	* c-c++-common/goacc/classify-serial.c: Likewise.
	* c-c++-common/goacc/routine-nohost-1.c: Likewise.
	* g++.dg/goacc/template.C: Likewise.
	* gcc.dg/goacc/loop-processing-1.c: Likewise.
	* gfortran.dg/goacc/classify-kernels-unparallelized.f95: Likewise.
	* gfortran.dg/goacc/classify-kernels.f95: Likewise.
	* gfortran.dg/goacc/classify-parallel.f95: Likewise.
	* gfortran.dg/goacc/classify-routine-nohost.f95: Likewise.
	* gfortran.dg/goacc/classify-routine.f95: Likewise.
	* gfortran.dg/goacc/classify-serial.f95: Likewise.
	* gfortran.dg/goacc/routine-multiple-directives-1.f90: Likewise.
	libgomp/
	* testsuite/libgomp.oacc-c-c++-common/pr85486-2.c:
	's%oaccdevlow%oaccloops%g'.
	* testsuite/libgomp.oacc-c-c++-common/pr85486-3.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/pr85486.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/routine-nohost-1.c:
	Likewise.
	* testsuite/libgomp.oacc-c-c++-common/vector-length-128-1.c:
	Likewise.
	* testsuite/libgomp.oacc-c-c++-common/vector-length-128-2.c:
	Likewise.
	* testsuite/libgomp.oacc-c-c++-common/vector-length-128-3.c:
	Likewise.
	* testsuite/libgomp.oacc-c-c++-common/vector-length-128-4.c:
	Likewise.
	* testsuite/libgomp.oacc-c-c++-common/vector-length-128-5.c:
	Likewise.
	* testsuite/libgomp.oacc-c-c++-common/vector-length-128-6.c:
	Likewise.
	* testsuite/libgomp.oacc-c-c++-common/vector-length-128-7.c:
	Likewise.
	* testsuite/libgomp.oacc-fortran/routine-nohost-1.f90: Likewise.

Co-Authored-By: Julian Brown <julian@codesourcery.com>
Co-Authored-By: Kwok Cheung Yeung <kcy@codesourcery.com>
2021-07-29 09:19:44 +02:00
Haochen Gui
f0529d96f5 Fix failed test cases caused by disabling mode promotion for pseudos [PR100952]
gcc/testsuite
	PR target/100952
	* gcc.target/powerpc/pr56605.c: Change matching
	conditions.
	* gcc.target/powerpc/pr81348.c: Likewise.
2021-07-29 15:06:12 +08:00
Aldy Hernandez
2e96b5f14e Backwards jump threader rewrite with ranger.
This is a rewrite of the backwards threader with a ranger based solver.

The code is divided into two parts: the path solver in
gimple-range-path.*, and the path discovery bits in
tree-ssa-threadbackward.c.

The legacy code is still available with --param=threader-mode=legacy,
but will be removed shortly after.

gcc/ChangeLog:

	* Makefile.in (tree-ssa-loop-im.o-warn): New.
	* flag-types.h (enum threader_mode): New.
	* params.opt: Add entry for --param=threader-mode.
	* tree-ssa-threadbackward.c (THREADER_ITERATIVE_MODE): New.
	(class back_threader): New.
	(back_threader::back_threader): New.
	(back_threader::~back_threader): New.
	(back_threader::maybe_register_path): New.
	(back_threader::find_taken_edge): New.
	(back_threader::find_taken_edge_switch): New.
	(back_threader::find_taken_edge_cond): New.
	(back_threader::resolve_def): New.
	(back_threader::resolve_phi): New.
	(back_threader::find_paths_to_names): New.
	(back_threader::find_paths): New.
	(dump_path): New.
	(debug): New.
	(thread_jumps::find_jump_threads_backwards): Call ranger threader.
	(thread_jumps::find_jump_threads_backwards_with_ranger): New.
	(pass_thread_jumps::execute): Abstract out code...
	(try_thread_blocks): ...here.
	* tree-ssa-threadedge.c (jump_threader::thread_outgoing_edges):
	Abstract out threading candidate code to...
	(single_succ_to_potentially_threadable_block): ...here.
	* tree-ssa-threadedge.h (single_succ_to_potentially_threadable_block):
	New.
	* tree-ssa-threadupdate.c (register_jump_thread): Return boolean.
	* tree-ssa-threadupdate.h (class jump_thread_path_registry):
	Return bool from register_jump_thread.

libgomp/ChangeLog:

	* testsuite/libgomp.graphite/force-parallel-4.c: Adjust for
	threader.
	* testsuite/libgomp.graphite/force-parallel-8.c: Same.

gcc/testsuite/ChangeLog:

	* g++.dg/debug/dwarf2/deallocator.C: Adjust for threader.
	* gcc.c-torture/compile/pr83510.c: Same.
	* dg.dg/analyzer/pr94851-2.c: Same.
	* gcc.dg/loop-unswitch-2.c: Same.
	* gcc.dg/old-style-asm-1.c: Same.
	* gcc.dg/pr68317.c: Same.
	* gcc.dg/pr97567-2.c: Same.
	* gcc.dg/predict-9.c: Same.
	* gcc.dg/shrink-wrap-loop.c: Same.
	* gcc.dg/sibcall-1.c: Same.
	* gcc.dg/tree-ssa/builtin-sprintf-3.c: Same.
	* gcc.dg/tree-ssa/pr21001.c: Same.
	* gcc.dg/tree-ssa/pr21294.c: Same.
	* gcc.dg/tree-ssa/pr21417.c: Same.
	* gcc.dg/tree-ssa/pr21458-2.c: Same.
	* gcc.dg/tree-ssa/pr21563.c: Same.
	* gcc.dg/tree-ssa/pr49039.c: Same.
	* gcc.dg/tree-ssa/pr61839_1.c: Same.
	* gcc.dg/tree-ssa/pr61839_3.c: Same.
	* gcc.dg/tree-ssa/pr77445-2.c: Same.
	* gcc.dg/tree-ssa/split-path-4.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-11.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-12.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-14.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-18.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-6.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-7.c: Same.
	* gcc.dg/tree-ssa/ssa-fre-48.c: Same.
	* gcc.dg/tree-ssa/ssa-thread-11.c: Same.
	* gcc.dg/tree-ssa/ssa-thread-12.c: Same.
	* gcc.dg/tree-ssa/ssa-thread-14.c: Same.
	* gcc.dg/tree-ssa/vrp02.c: Same.
	* gcc.dg/tree-ssa/vrp03.c: Same.
	* gcc.dg/tree-ssa/vrp05.c: Same.
	* gcc.dg/tree-ssa/vrp06.c: Same.
	* gcc.dg/tree-ssa/vrp07.c: Same.
	* gcc.dg/tree-ssa/vrp09.c: Same.
	* gcc.dg/tree-ssa/vrp19.c: Same.
	* gcc.dg/tree-ssa/vrp20.c: Same.
	* gcc.dg/tree-ssa/vrp33.c: Same.
	* gcc.dg/uninit-pred-9_b.c: Same.
	* gcc.dg/uninit-pr61112.c: Same.
	* gcc.dg/vect/bb-slp-16.c: Same.
	* gcc.target/i386/avx2-vect-aggressive.c: Same.
	* gcc.dg/tree-ssa/ranger-threader-1.c: New test.
	* gcc.dg/tree-ssa/ranger-threader-2.c: New test.
	* gcc.dg/tree-ssa/ranger-threader-3.c: New test.
	* gcc.dg/tree-ssa/ranger-threader-4.c: New test.
	* gcc.dg/tree-ssa/ranger-threader-5.c: New test.
2021-07-29 08:24:50 +02:00
Richard Biener
e63d76234d c/101512 - fix missing address-taking in c_common_mark_addressable_vec
c_common_mark_addressable_vec fails to look through C_MAYBE_CONST_EXPR
in the case it isn't at the toplevel.

2021-07-21  Richard Biener  <rguenther@suse.de>

	PR c/101512
gcc/c-family/
	* c-common.c (c_common_mark_addressable_vec): Look through
	C_MAYBE_CONST_EXPR even if not at the toplevel.

gcc/testsuite/
	* gcc.dg/torture/pr101512.c: New testcase.
2021-07-29 08:13:29 +02:00
Andreas Krebbel
841548f0f7 Adjust docu of TARGET_VECTORIZE_VEC_PERM_CONST
gcc/ChangeLog:

	* target.def: in0 and in1 do not need to be registers.
	* doc/tm.texi: Regenerate.
2021-07-29 08:03:36 +02:00
Ankur Saini
e8de5bad25 analyzer: : Refactor callstring to work with pairs of supernodes.
2021-07-25  Ankur Saini  <arsenic@sourceware.org>

gcc/analyzer/ChangeLog:
	* call-string.cc (call_string::element_t::operator==): New operator.
	(call_String::element_t::operator!=): New operator.
	(call_string::element_t::get_caller_function): New function.
	(call_string::element_t::get_callee_function): New function.
	(call_string::call_string): Refactor to Initialise m_elements.
	(call_string::operator=): Refactor to work with m_elements.
	(call_string::operator==): Likewise.
	(call_string::to_json): Likewise.
	(call_string::hash): Refactor to hash e.m_caller.
	(call_string::push_call): Refactor to work with m_elements.
	(call_string::push_call): New overload to push call via supernodes.
	(call_string::pop): Refactor to work with m_elements.
	(call_string::calc_recursion_depth): Likewise.
	(call_string::cmp): Likewise.
	(call_string::validate): Likewise.
	(call_string::operator[]): Likewise.
	* call-string.h (class supernode): New forward decl.
	(struct call_string::element_t): New struct.
	(call_string::call_string): Refactor to initialise m_elements.
	(call_string::bool empty_p): Refactor to work with m_elements.
	(call_string::get_callee_node): New decl.
	(call_string::get_caller_node): New decl.
	(m_elements): Replaces m_return_edges.
	* program-point.cc (program_point::get_function_at_depth): Refactor to
	work with new call-string format.
	(program_point::validate): Likewise.
	(program_point::on_edge): Likewise.
2021-07-29 08:37:49 +05:30
liuhongt
7d11da87a1 Adjust/Refine testcases.
gcc/testsuite/ChangeLog:

	PR target/99881
	* gcc.target/i386/pr91446.c:
	* gcc.target/i386/pr92658-avx512bw-2.c:
	* gcc.target/i386/pr92658-sse4-2.c:
	* gcc.target/i386/pr92658-sse4.c:
	* gcc.target/i386/pr99881.c:
2021-07-29 10:18:17 +08:00
liuhongt
231bcc77b9 Add a separate function to calculate cost for WIDEN_MULT_EXPR.
gcc/ChangeLog:

	PR target/39821
	* config/i386/i386.c (ix86_widen_mult_cost): New function.
	(ix86_add_stmt_cost): Use ix86_widen_mult_cost for
	WIDEN_MULT_EXPR.

gcc/testsuite/ChangeLog:

	PR target/39821
	* gcc.target/i386/sse2-pr39821.c: New test.
	* gcc.target/i386/sse4-pr39821.c: New test.
2021-07-29 09:06:24 +08:00
Jiufu Guo
aafa38b5bf Use preferred mode for doloop IV [PR61837]
Currently, doloop.xx variable is using the type as niter which may be
shorter than word size.  For some targets, it would be better to use
word size type.  For example, on 64bit system, to access 32bit value,
subreg maybe used.  Then using 64bit type maybe better for niter if
it can be present in both 32bit and 64bit.

This patch add target hook to query preferred mode for doloop IV,
and update mode accordingly.

gcc/ChangeLog:

2021-07-29  Jiufu Guo  <guojiufu@linux.ibm.com>

	PR target/61837
	* config/rs6000/rs6000.c (TARGET_PREFERRED_DOLOOP_MODE): New hook.
	(rs6000_preferred_doloop_mode): New hook.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in: Add hook preferred_doloop_mode.
	* target.def (preferred_doloop_mode): New hook.
	* targhooks.c (default_preferred_doloop_mode): New hook.
	* targhooks.h (default_preferred_doloop_mode): New hook.
	* tree-ssa-loop-ivopts.c (compute_doloop_base_on_mode): New function.
	(add_iv_candidate_for_doloop): Call targetm.preferred_doloop_mode
	and compute_doloop_base_on_mode.

gcc/testsuite/ChangeLog:

2021-07-29  Jiufu Guo  <guojiufu@linux.ibm.com>

	PR target/61837
	* gcc.target/powerpc/pr61837.c: New test.
2021-07-29 08:42:56 +08:00
GCC Administrator
3916902930 Daily bump. 2021-07-29 00:16:43 +00:00
Martin Sebor
1121e495b7 Correct uninitialized object offset and size computation [PR101494].
Resolves:
PR middle-end/101494 - -Wuninitialized false alarm with memrchr of size 0

gcc/ChangeLog:

	PR middle-end/101494
	* tree-ssa-uninit.c (maybe_warn_operand): Correct object offset
	and size computation.

gcc/testsuite/ChangeLog:

	PR middle-end/101494
	* gcc.dg/uninit-pr101494.c: New test.
2021-07-28 16:25:40 -06:00
Martin Sebor
b9cbf8c9e0 Correct -Warray-bounds handling if function pointers [PR101601].
Resolves:
PR middle-end/101601 - -Warray-bounds triggers error: arrays of functions are not meaningful

	PR middle-end/101601

gcc/ChangeLog:

	* gimple-array-bounds.cc (array_bounds_checker::check_mem_ref): Remove
	a pointless test.
	Handle pointers to functions.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Warray-bounds-25.C: New test.
	* gcc.dg/Warray-bounds-85.c: New test.
2021-07-28 16:14:38 -06:00
Martin Sebor
2a837de28e Add new gimple-ssa-warn-access pass.
gcc/ChangeLog:

	* Makefile.in (OBJS): Add gimple-ssa-warn-access.o and pointer-query.o.
	* attribs.h (fndecl_dealloc_argno): Move fndecl_dealloc_argno to tree.h.
	* builtins.c (compute_objsize_r): Move to pointer-query.cc.
	(access_ref::access_ref): Same.
	(access_ref::phi): Same.
	(access_ref::get_ref): Same.
	(access_ref::size_remaining): Same.
	(access_ref::offset_in_range): Same.
	(access_ref::add_offset): Same.
	(access_ref::inform_access): Same.
	(ssa_name_limit_t::visit_phi): Same.
	(ssa_name_limit_t::leave_phi): Same.
	(ssa_name_limit_t::next): Same.
	(ssa_name_limit_t::next_phi): Same.
	(ssa_name_limit_t::~ssa_name_limit_t): Same.
	(pointer_query::pointer_query): Same.
	(pointer_query::get_ref): Same.
	(pointer_query::put_ref): Same.
	(pointer_query::flush_cache): Same.
	(warn_string_no_nul): Move to gimple-ssa-warn-access.cc.
	(check_nul_terminated_array): Same.
	(unterminated_array): Same.
	(maybe_warn_for_bound): Same.
	(check_read_access): Same.
	(warn_for_access): Same.
	(get_size_range): Same.
	(check_access): Same.
	(gimple_call_alloc_size): Move to tree.c.
	(gimple_parm_array_size): Move to pointer-query.cc.
	(get_offset_range): Same.
	(gimple_call_return_array): Same.
	(handle_min_max_size): Same.
	(handle_array_ref): Same.
	(handle_mem_ref): Same.
	(compute_objsize): Same.
	(gimple_call_alloc_p): Move to gimple-ssa-warn-access.cc.
	(call_dealloc_argno): Same.
	(fndecl_dealloc_argno): Same.
	(new_delete_mismatch_p): Same.
	(matching_alloc_calls_p): Same.
	(warn_dealloc_offset): Same.
	(maybe_emit_free_warning): Same.
	* builtins.h (check_nul_terminated_array): Move to
	gimple-ssa-warn-access.h.
	(check_nul_terminated_array): Same.
	(warn_string_no_nul): Same.
	(unterminated_array): Same.
	(class ssa_name_limit_t): Same.
	(class pointer_query): Same.
	(struct access_ref): Same.
	(class range_query): Same.
	(struct access_data): Same.
	(gimple_call_alloc_size): Same.
	(gimple_parm_array_size): Same.
	(compute_objsize): Same.
	(class access_data): Same.
	(maybe_emit_free_warning): Same.
	* calls.c (initialize_argument_information): Remove call to
	maybe_emit_free_warning.
	* gimple-array-bounds.cc: Include new header..
	* gimple-fold.c: Same.
	* gimple-ssa-sprintf.c: Same.
	* gimple-ssa-warn-restrict.c: Same.
	* passes.def: Add pass_warn_access.
	* tree-pass.h (make_pass_warn_access): Declare.
	* tree-ssa-strlen.c: Include new headers.
	* tree.c (fndecl_dealloc_argno): Move here from builtins.c.
	* tree.h (fndecl_dealloc_argno): Move here from attribs.h.
	* gimple-ssa-warn-access.cc: New file.
	* gimple-ssa-warn-access.h: New file.
	* pointer-query.cc: New file.
	* pointer-query.h: New file.

gcc/cp/ChangeLog:

	* init.c: Include new header.
2021-07-28 16:02:17 -06:00
Michael Meissner
f471739e63 PR 100168: Fix call test on power10.
Fix a test that was checking for 64-bit TOC calls, to also allow for
PC-relative calls.

2021-07-28  Michael Meissner  <meissner@linux.ibm.com>

gcc/testsuite
	PR testsuite/100168
	* gcc.dg/pr56727-2.c: Add support for PC-relative calls.
2021-07-28 17:24:23 -04:00
David Malcolm
37eb3ef48c analyzer: play better with -fsanitize=bounds
gcc/analyzer/ChangeLog:
	* region-model.cc (region_model::on_call_pre): Treat
	IFN_UBSAN_BOUNDS, BUILT_IN_STACK_SAVE, and BUILT_IN_STACK_RESTORE
	as no-ops, rather than handling them as unknown functions.

gcc/testsuite/ChangeLog:
	* gcc.dg/analyzer/torture/ubsan-1.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-07-28 14:47:54 -04:00
David Malcolm
b508113016 analyzer: remove redundant return value from various impl_call_*
gcc/analyzer/ChangeLog:
	* region-model-impl-calls.cc (region_model::impl_call_alloca):
	Drop redundant return value.
	(region_model::impl_call_builtin_expect): Likewise.
	(region_model::impl_call_calloc): Likewise.
	(region_model::impl_call_malloc): Likewise.
	(region_model::impl_call_memset): Likewise.
	(region_model::impl_call_operator_new): Likewise.
	(region_model::impl_call_operator_delete): Likewise.
	(region_model::impl_call_strlen): Likewise.
	* region-model.cc (region_model::on_call_pre): Fix return value of
	known functions that don't have unknown side-effects.
	* region-model.h (region_model::impl_call_alloca): Drop redundant
	return value.
	(region_model::impl_call_builtin_expect): Likewise.
	(region_model::impl_call_calloc): Likewise.
	(region_model::impl_call_malloc): Likewise.
	(region_model::impl_call_memset): Likewise.
	(region_model::impl_call_strlen): Likewise.
	(region_model::impl_call_operator_new): Likewise.
	(region_model::impl_call_operator_delete): Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-07-28 14:46:03 -04:00
Harald Anlauf
7bf582e6cf Fortran: ICE in resolve_allocate_deallocate for invalid STAT argument
gcc/fortran/ChangeLog:

	PR fortran/101564
	* expr.c (gfc_check_vardef_context): Add check for KIND and LEN
	parameter inquiries.
	* match.c (gfc_match): Fix comment for %v code.
	(gfc_match_allocate, gfc_match_deallocate): Replace use of %v code
	by %e in gfc_match to allow for function references as STAT and
	ERRMSG arguments.
	* resolve.c (resolve_allocate_deallocate): Avoid NULL pointer
	dereferences and shortcut for bad STAT and ERRMSG argument to
	(DE)ALLOCATE.  Remove bogus parts of checks for STAT and ERRMSG.

gcc/testsuite/ChangeLog:

	PR fortran/101564
	* gfortran.dg/allocate_stat_3.f90: New test.
	* gfortran.dg/allocate_stat.f90: Adjust error messages.
	* gfortran.dg/implicit_11.f90: Likewise.
	* gfortran.dg/inquiry_type_ref_3.f90: Likewise.
2021-07-28 19:11:27 +02:00
Jakub Jelinek
49e28c02a9 ubsan: Fix ICEs with DECL_REGISTER tests [PR101624]
The following testcase ICEs, because the base is a CONST_DECL for
the Fortran parameter, and ubsan/sanopt uses DECL_REGISTER macro on it.
 /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'.  */
 #define DECL_REGISTER(NODE) (DECL_WRTL_CHECK (NODE)->decl_common.decl_flag_0)
while CONST_DECL doesn't satisfy DECL_WRTL_CHECK.

The following patch checks explicitly for VAR_DECL/PARM_DECL/RESULT_DECL
only before using DECL_REGISTER, assumes other decls aren't DECL_REGISTER.
Not really sure about RESULT_DECL but it at least satisfies DECL_WRTL_CHECK...

2021-07-28  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/101624
	* ubsan.c (maybe_instrument_pointer_overflow,
	instrument_object_size): Only test DECL_REGISTER on VAR_DECLs,
	PARM_DECLs or RESULT_DECLs.
	* sanopt.c (maybe_optimize_ubsan_ptr_ifn): Likewise.

	* gfortran.dg/ubsan/ubsan.exp: New file.
	* gfortran.dg/ubsan/pr101624.f90: New test.
2021-07-28 18:43:15 +02:00