gcc.git
6 years agocompiler: do order_evaluations before remove_shortcuts
Ian Lance Taylor [Fri, 20 Jul 2018 19:56:21 +0000 (19:56 +0000)]
compiler: do order_evaluations before remove_shortcuts

    In remove_shortcuts, the shortcut expressions (&&, ||) are
    rewritten to if statements, which are lifted out before the
    statement containing the shortcut expression. If the containing
    statement has other (sub)expressions that should be evaluated
    before the shortcut expression, which has not been lifted out,
    this will result in wrong evaluation order.

    For example, F() + G(A() && B()), the evaluation order per spec
    is F, A, B (if A returns true), G. If we lift A() and B() out
    first, they will be called before F, which is wrong.

    To fix this, we split order_evaluations to two phases. The first
    phase, which runs before remove_shortcuts, skips shortcut
    expressions' components. So it won't lift out subexpressions that
    are evaluated conditionally. The shortcut expression itself is
    ordered, since it may have side effects. Then we run
    remove_shortcuts. At this point the subexpressions that should be
    evaluated before the shortcut expression are already lifted out.
    remove_shortcuts also runs the second phase of order_evaluations
    to order the components of shortcut expressions, which were
    skipped during the first phase.

    Reorder the code blocks of remove_shortcuts and order_evaluations,
    since remove_shortcuts now calls Order_eval.

    Fixes golang/go#26495.

    Reviewed-on: https://go-review.googlesource.com/125299

From-SVN: r262908

6 years agoGive up the inlining expansion for strcmp/strncmp/memcmp on a target where the...
Qing Zhao [Fri, 20 Jul 2018 18:18:25 +0000 (18:18 +0000)]
Give up the inlining expansion for strcmp/strncmp/memcmp on a target where the...

Give up the inlining expansion for strcmp/strncmp/memcmp on a target
where the type of the call has same or narrower presicion than unsigned
char.
Change char to unsigned char for strcmp/strncmp when expand them to
a sequence of byte comparisons.

Due to C standard section 7.24.4:

The sign of a nonzero value returned by the comparison functions memcmp,
strcmp, and strncmp is determined by the sign of the difference between
the values of the first pair of characters (both interpreted as unsigned
char) that differ in the objects being compared.

bootstraped and tested on both X86 and Aarch64. no regression.

From-SVN: r262907

6 years agoPR tree-optimization/86613 - missing -Warray-bounds on a wide string access due to...
Martin Sebor [Fri, 20 Jul 2018 16:38:43 +0000 (16:38 +0000)]
PR tree-optimization/86613 - missing -Warray-bounds on a wide string access due to ccp folding

PR tree-optimization/86613 - missing -Warray-bounds on a wide string access due to ccp folding
PR tree-optimization/86611 - missing -Warray-bounds on a large negative index into a string in lp64

gcc/testsuite/ChangeLog:
* gcc/testsuite/c-c++-common/Warray-bounds-2.c: Undefine macros and
prune duplicate warnings.
* gcc/testsuite/gcc.dg/Warray-bounds-31.c: Xfail test cases with
data-model-dependencies.
* gcc/testsuite/gcc.dg/Warray-bounds-32.c: Ditto.

From-SVN: r262906

6 years agoAdd "-fsave-optimization-record"
David Malcolm [Fri, 20 Jul 2018 15:37:23 +0000 (15:37 +0000)]
Add "-fsave-optimization-record"

This patch implements a -fsave-optimization-record option, which
leads to a JSON file being written out, recording the dump_* calls
made (via the optinfo infrastructure).

The patch includes a minimal version of the JSON patch I posted last
year, with just enough support needed for optimization records (I
removed all of the parser code, leaving just the code for building
in-memory JSON trees and writing them to a pretty_printer).

gcc/ChangeLog:
* Makefile.in (OBJS): Add json.o and optinfo-emit-json.o.
(CFLAGS-optinfo-emit-json.o): Define TARGET_NAME.
* common.opt (fsave-optimization-record): New option.
* coretypes.h (struct kv_pair): Move here from dumpfile.c.
* doc/invoke.texi (-fsave-optimization-record): New option.
* dumpfile.c: Include "optinfo-emit-json.h".
(struct kv_pair): Move to coretypes.h.
(optgroup_options): Make non-static.
(dump_context::end_scope): Call
optimization_records_maybe_pop_dump_scope.
* dumpfile.h (optgroup_options): New decl.
* json.cc: New file.
* json.h: New file.
* optinfo-emit-json.cc: New file.
* optinfo-emit-json.h: New file.
* optinfo.cc: Include "optinfo-emit-json.h".
(optinfo::emit): Call optimization_records_maybe_record_optinfo.
(optinfo_enabled_p): Check optimization_records_enabled_p.
(optinfo_wants_inlining_info_p): Likewise.
* optinfo.h: Update comment.
* profile-count.c (profile_quality_as_string): New function.
* profile-count.h (profile_quality_as_string): New decl.
(profile_count::quality): New accessor.
* selftest-run-tests.c (selftest::run_tests): Call json_cc_tests
and optinfo_emit_json_cc_tests.
* selftest.h (selftest::json_cc_tests): New decl.
(selftest::optinfo_emit_json_cc_tests): New decl.
* toplev.c: Include "optinfo-emit-json.h".
(compile_file): Call optimization_records_finish.
(do_compile): Call optimization_records_start.
* tree-ssa-live.c: Include optinfo.h.
(remove_unused_scope_block_p): Retain inlining information if
optinfo_wants_inlining_info_p returns true.

From-SVN: r262905

6 years agoPR libstdc++/86595 add missing noexcept
Jonathan Wakely [Fri, 20 Jul 2018 11:52:54 +0000 (12:52 +0100)]
PR libstdc++/86595 add missing noexcept

PR libstdc++/86595
* include/bits/fs_dir.h (directory_entry::refresh(error_code&)): Add
noexcept.

From-SVN: r262904

6 years agoUse default visibility to work around clang -fvisibility-inlines-hidden bug
Fangrui Song [Fri, 20 Jul 2018 11:24:55 +0000 (11:24 +0000)]
Use default visibility to work around clang -fvisibility-inlines-hidden bug

Clang (including trunk and many older versions) incorrectly marks static
local variables (__tag) hidden when -fvisibility-inlines-hidden is used.
This can lead to multiple instances of __tag when shares objects are used.

2018-07-20  Fangrui Song  <maskray@google.com>

* include/bits/shared_ptr_base.h (_Sp_make_shared_tag::_S_ti): Use
_GLIBCXX_VISIBILITY(default).

From-SVN: r262903

6 years agoPR libstdc++/86603 Move __cpp_lib_list_remove_return_type macro
Jonathan Wakely [Fri, 20 Jul 2018 11:24:38 +0000 (12:24 +0100)]
PR libstdc++/86603 Move __cpp_lib_list_remove_return_type macro

This should only be defined for C++2a not C++17.

PR libstdc++/86603
* include/std/version: Move __cpp_lib_list_remove_return_type macro.

From-SVN: r262902

6 years agore PR debug/86585 (ICE in gen_member_die, at dwarf2out.c:24935)
Richard Biener [Fri, 20 Jul 2018 11:13:47 +0000 (11:13 +0000)]
re PR debug/86585 (ICE in gen_member_die, at dwarf2out.c:24935)

2018-07-20  Richard Biener  <rguenther@suse.de>

PR debug/86585
* dwarf2out.c (dwarf2out_die_ref_for_decl): Test in_lto_p
to cover -flto-partition=none.

lto/
* lto.c (unify_scc): Before we throw away an SCC see if we
can amend prevailing single-entry SCC with debug refs.

* g++.dg/lto/pr86585_0.C: New testcase.
* g++.dg/lto/pr86585_1.C: Likewise.

From-SVN: r262901

6 years agoRemove unused code.
Martin Liska [Fri, 20 Jul 2018 11:00:56 +0000 (13:00 +0200)]
Remove unused code.

2018-07-20  Martin Liska  <mliska@suse.cz>

* tree.h (DECL_LOCATION_RANGE): Remove unused macro.
(get_decl_source_range): Remove unused function.

From-SVN: r262900

6 years agotree-ssa-sccvn.h (struct vn_nary_op_s): Add next member.
Richard Biener [Fri, 20 Jul 2018 07:18:35 +0000 (07:18 +0000)]
tree-ssa-sccvn.h (struct vn_nary_op_s): Add next member.

2018-07-20  Richard Biener  <rguenther@suse.de>

* tree-ssa-sccvn.h (struct vn_nary_op_s): Add next member.
(struct vn_phi_s): Likewise.
(struct vn_reference_s): Likewise.
* tree-ssa-sccvn.c (vn_nary_op_hasher::equal): Add shortcut
for searching the slot of an entry known to be in the hash itself.
(vn_phi_hasher::equal): Likewise.
(vn_reference_hasher::equal): Likewise.
(last_inserted_ref, last_inserted_phi, last_inserted_nary): New
globals.
(optimistic_info, current_info): Remove, keeping only valid_info.
(vn_reference_lookup_1): Remove fallback lookup.
(vn_reference_lookup_2): Likewise.
(vn_nary_op_lookup_1): Likewise.
(vn_phi_lookup): Likewise.
(vn_nary_build_or_lookup_1): Make sure to not chain the built
hash element.
(vn_reference_insert): Adjust, chain the inserted hash element
at last_inserted_ref.
(vn_reference_insert_pieces): Likewise.
(visit_reference_op_call): Likewise.
(vn_nary_op_insert_into): Chain the inserted hash element at
last_inserted_nary.
(vn_nary_op_insert_pieces): Adjust.
(vn_nary_op_insert): Likewise.
(vn_nary_op_insert_stmt): Likewise.
(vn_phi_insert): Adjust, chain the inserted hash element at
last_inserted_phi.
(process_scc): Remove clearing and copying the optimistic
table.  Instead remove elements inserted during an optimistic
iteration from the single table we maintain.
(init_scc_vn): Adjust.
(free_scc_vn): Likewise.
(sccvn_dom_walker::record_cond): Likewise.
(sccvn_dom_walker::after_dom_children): Likewise.

From-SVN: r262899

6 years agoMAINTAINERS (m32c, [...]): Remove myself as maintainer.
DJ Delorie [Fri, 20 Jul 2018 02:01:30 +0000 (22:01 -0400)]
MAINTAINERS (m32c, [...]): Remove myself as maintainer.

* MAINTAINERS (m32c, msp43, rl78, libiberty, build): Remove myself
as maintainer.

From-SVN: r262898

6 years agoDaily bump.
GCC Administrator [Fri, 20 Jul 2018 00:16:29 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262897

6 years agoPR tree-optimization/84047 - missing -Warray-bounds on an out-of-bounds index into...
Martin Sebor [Thu, 19 Jul 2018 23:36:34 +0000 (23:36 +0000)]
PR tree-optimization/84047 - missing -Warray-bounds on an out-of-bounds index into an array

PR tree-optimization/84047 - missing -Warray-bounds on an out-of-bounds index into an array
PR tree-optimization/83776 - missing -Warray-bounds indexing past the end of a string literal

gcc/ChangeLog:

PR tree-optimization/84047
PR tree-optimization/83776
* tree-vrp.c (vrp_prop::check_mem_ref): New function.
(check_array_bounds): Call it.

gcc/testsuite/ChangeLog:

PR tree-optimization/83776
PR tree-optimization/84047
* gcc.dg/Warray-bounds-29.c: New test.
* gcc.dg/Warray-bounds-30.c: New test.
* gcc.dg/Warray-bounds-31.c: New test.
* gcc.dg/Warray-bounds-32.c: New test.

From-SVN: r262893

6 years agoalign.h (align_flags): Use member initialization.
Martin Sebor [Thu, 19 Jul 2018 22:12:06 +0000 (22:12 +0000)]
align.h (align_flags): Use member initialization.

gcc/ChangeLog:

* align.h (align_flags): Use member initialization.

From-SVN: r262892

6 years agoAdd "optinfo" framework
David Malcolm [Thu, 19 Jul 2018 20:49:25 +0000 (20:49 +0000)]
Add "optinfo" framework

This patch implements a way to consolidate dump_* calls into
optinfo objects, as enabling work towards being able to write out
optimization records to a file.

The patch adds the support for building optinfo instances from dump_*
calls, but leaves implementing any *users* of them to followup patches.

gcc/ChangeLog:
* Makefile.in (OBJS): Add optinfo.o.
* coretypes.h (class symtab_node): New forward decl.
(struct cgraph_node): New forward decl.
(class varpool_node): New forward decl.
* dump-context.h: New file.
* dumpfile.c: Include "optinfo.h", "dump-context.h", "cgraph.h",
"tree-pass.h".
(refresh_dumps_are_enabled): Use optinfo_enabled_p.
(set_dump_file): Call dumpfile_ensure_any_optinfo_are_flushed.
(set_alt_dump_file): Likewise.
(dump_context::~dump_context): New dtor.
(dump_gimple_stmt): Move implementation to...
(dump_context::dump_gimple_stmt): ...this new member function.
Add the stmt to any pending optinfo, creating one if need be.
(dump_gimple_stmt_loc): Move implementation to...
(dump_context::dump_gimple_stmt_loc): ...this new member function.
Start a new optinfo and add the stmt to it.
(dump_gimple_expr): Move implementation to...
(dump_context::dump_gimple_expr): ...this new member function.
Add the stmt to any pending optinfo, creating one if need be.
(dump_gimple_expr_loc): Move implementation to...
(dump_context::dump_gimple_expr_loc): ...this new member function.
Start a new optinfo and add the stmt to it.
(dump_generic_expr): Move implementation to...
(dump_context::dump_generic_expr): ...this new member function.
Add the tree to any pending optinfo, creating one if need be.
(dump_generic_expr_loc): Move implementation to...
(dump_context::dump_generic_expr_loc): ...this new member
function.  Add the tree to any pending optinfo, creating one if
need be.
(dump_printf): Move implementation to...
(dump_context::dump_printf_va): ...this new member function.  Add
the text to any pending optinfo, creating one if need be.
(dump_printf_loc): Move implementation to...
(dump_context::dump_printf_loc_va): ...this new member function.
Start a new optinfo and add the stmt to it.
(dump_dec): Move implementation to...
(dump_context::dump_dec): ...this new member function.  Add the
value to any pending optinfo, creating one if need be.
(dump_context::dump_symtab_node): New member function.
(dump_context::get_scope_depth): New member function.
(dump_context::begin_scope): New member function.
(dump_context::end_scope): New member function.
(dump_context::ensure_pending_optinfo): New member function.
(dump_context::begin_next_optinfo): New member function.
(dump_context::end_any_optinfo): New member function.
(dump_context::s_current): New global.
(dump_context::s_default): New global.
(dump_scope_depth): Delete global.
(dumpfile_ensure_any_optinfo_are_flushed): New function.
(dump_symtab_node): New function.
(get_dump_scope_depth): Reimplement in terms of dump_context.
(dump_begin_scope): Likewise.
(dump_end_scope): Likewise.
(selftest::temp_dump_context::temp_dump_context): New ctor.
(selftest::temp_dump_context::~temp_dump_context): New dtor.
(selftest::verify_item): New function.
(ASSERT_IS_TEXT): New macro.
(ASSERT_IS_TREE): New macro.
(ASSERT_IS_GIMPLE): New macro.
(selftest::test_capture_of_dump_calls): New test.
(selftest::dumpfile_c_tests): Call it.
* dumpfile.h (dump_printf, dump_printf_loc, dump_basic_block)
(dump_generic_expr_loc, dump_generic_expr, dump_gimple_stmt_loc)
(dump_gimple_stmt, dump_dec): Gather these related decls and add a
descriptive comment.
(dump_function, print_combine_total_stats, enable_rtl_dump_file)
(dump_node, dump_bb): Move these unrelated decls.
(class dump_manager): Add leading comment.
* optinfo.cc: New file.
* optinfo.h: New file.

From-SVN: r262891

6 years agoaarch64.md (subv<GPI>4, [...]): New patterns.
Michael Collison [Thu, 19 Jul 2018 20:24:47 +0000 (20:24 +0000)]
aarch64.md (subv<GPI>4, [...]): New patterns.

2018-07-19  Michael Collison  <michael.collison@arm.com>
    Richard Henderson <rth@redhat.com>

* config/aarch64/aarch64.md (subv<GPI>4, usubv<GPI>4): New patterns.
(subti): Handle op1 zero.
(subvti4, usub4ti4): New.
(*sub<GPI>3_compare1_imm): New.
(sub<GPI>3_carryinCV): New.
(*sub<GPI>3_carryinCV_z1_z2, *sub<GPI>3_carryinCV_z1): New.
(*sub<GPI>3_carryinCV_z2, *sub<GPI>3_carryinCV): New.

2018-07-19  Michael Collison  <michael.collison@arm.com>
    Richard Henderson <rth@redhat.com>

* config/aarch64/aarch64.md: (addv<GPI>4, uaddv<GPI>4): New.
(addti3): Create simpler code if low part is already known to be 0.
(addvti4, uaddvti4): New.
(*add<GPI>3_compareC_cconly_imm): New.
(*add<GPI>3_compareC_cconly): New.
(*add<GPI>3_compareC_imm): New.
(*add<GPI>3_compareC): Rename from add<GPI>3_compare1; do not
handle constants within this pattern..
(*add<GPI>3_compareV_cconly_imm): New.
(*add<GPI>3_compareV_cconly): New.
(*add<GPI>3_compareV_imm): New.
(add<GPI>3_compareV): New.
(add<GPI>3_carryinC, add<GPI>3_carryinV): New.
(*add<GPI>3_carryinC_zero, *add<GPI>3_carryinV_zero): New.
(*add<GPI>3_carryinC, *add<GPI>3_carryinV): New.
((*add<GPI>3_compareC_cconly_imm): Replace 'ne' operator
with 'comparison' operator.
(*add<GPI>3_compareV_cconly_imm): Ditto.
(*add<GPI>3_compareV_cconly): Ditto.
(*add<GPI>3_compareV_imm): Ditto.
(add<GPI>3_compareV): Ditto.
(add<mode>3_carryinC): Ditto.
(*add<mode>3_carryinC_zero): Ditto.
(*add<mode>3_carryinC): Ditto.
(add<mode>3_carryinV): Ditto.
(*add<mode>3_carryinV_zero): Ditto.
(*add<mode>3_carryinV): Ditto.

2018-07-19  Michael Collison  <michael.collison@arm.com>
    Richard Henderson <rth@redhat.com>

* config/aarch64/aarch64-modes.def (CC_V): New.
* config/aarch64/aarch64-protos.h
(aarch64_addti_scratch_regs): Declare
(aarch64_subvti_scratch_regs): Declare.
(aarch64_expand_subvti): Declare.
(aarch64_gen_unlikely_cbranch): Declare
* config/aarch64/aarch64.c (aarch64_select_cc_mode): Test
for signed overflow using CC_Vmode.
(aarch64_get_condition_code_1): Handle CC_Vmode.
(aarch64_gen_unlikely_cbranch): New function.
(aarch64_addti_scratch_regs): New function.
(aarch64_subvti_scratch_regs): New function.
(aarch64_expand_subvti): New function.

2018-07-19  Michael Collison  <michael.collison@arm.com>
    Richard Henderson <rth@redhat.com>

* gcc.target/aarch64/builtin_sadd_128.c: New testcase.
* gcc.target/aarch64/builtin_saddl.c: New testcase.
* gcc.target/aarch64/builtin_saddll.c: New testcase.
* gcc.target/aarch64/builtin_uadd_128.c: New testcase.
* gcc.target/aarch64/builtin_uaddl.c: New testcase.
* gcc.target/aarch64/builtin_uaddll.c: New testcase.
* gcc.target/aarch64/builtin_ssub_128.c: New testcase.
* gcc.target/aarch64/builtin_ssubl.c: New testcase.
* gcc.target/aarch64/builtin_ssubll.c: New testcase.
* gcc.target/aarch64/builtin_usub_128.c: New testcase.
* gcc.target/aarch64/builtin_usubl.c: New testcase.
* gcc.target/aarch64/builtin_usubll.c: New testcase.

Co-Authored-By: Richard Henderson <rth@redhat.com>
From-SVN: r262890

6 years agoSimplify the base characteristics for some type traits
Jonathan Wakely [Thu, 19 Jul 2018 19:12:37 +0000 (20:12 +0100)]
Simplify the base characteristics for some type traits

* include/std/type_traits (__is_member_object_pointer_helper): Use
__not_<is_function<_Tp>>::type instead of integral_constant.
(__is_member_function_pointer_helper): Likewise for
is_function<_Tp>::type.
(is_compund): Likewise for __not_<is_fundamental<_Tp>>::type.
(__do_is_nt_destructible_impl): Use __bool_constant and reindent.
(is_trivially_constructible): Remove redundant use of
is_constructible.
(__is_trivially_copy_assignable_impl): Remove redundant use of
is_copy_assignable.
(__is_trivially_move_assignable_impl): Remove redundant use of
is_move_assignable.
(is_trivially_destructible): Use __bool_constant.
* testsuite/20_util/is_trivially_assignable/value.cc: Add some more
tests for scalar types.

From-SVN: r262889

6 years agoUse __builtin_memmove for trivially copyable types
Glen Joseph Fernandes [Thu, 19 Jul 2018 18:58:09 +0000 (18:58 +0000)]
Use __builtin_memmove for trivially copyable types

2018-07-19  Glen Joseph Fernandes  <glenjofe@gmail.com>

* include/bits/stl_algobase.h (__copy_move_a): Used
__is_trivially_copyable.
(__copy_move_backward_a): Likewise.
* testsuite/20_util/specialized_algorithms/uninitialized_copy/1.cc:
New test.

From-SVN: r262884

6 years agorevert: [multiple changes]
Paolo Carlini [Thu, 19 Jul 2018 16:58:06 +0000 (16:58 +0000)]
revert: [multiple changes]

2018-07-19  Paolo Carlini  <paolo.carlini@oracle.com>

Revert fix for c++/59480 (and testsuite followup)

/testsuite
2018-07-19  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.old-deja/g++.mike/p784.C: Add -fpermissive.

/cp
2019-07-18  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/59480, DR 136
* decl.c (check_no_redeclaration_friend_default_args): New.
(duplicate_decls): Use the latter; also check that a friend
declaration specifying default arguments is a definition.

/testsuite
2019-07-18  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/59480, DR 136
* g++.dg/other/friend8.C: New.
* g++.dg/other/friend9.C: Likewise.
* g++.dg/other/friend10.C: Likewise.
* g++.dg/other/friend11.C: Likewise.
* g++.dg/other/friend12.C: Likewise.
* g++.dg/parse/defarg4.C: Compile with -fpermissive -w.
* g++.dg/parse/defarg8.C: Likewise.

From-SVN: r262883

6 years ago[PATCH, GCC, AARCH64] Add support for +profile extension
Andre Vieira [Thu, 19 Jul 2018 15:47:15 +0000 (15:47 +0000)]
[PATCH, GCC, AARCH64] Add support for +profile extension

This patch adds support for the Statistical Profiling Extension (SPE) on
AArch64. Even though the compiler will not generate code any differently
given this extension, it will need to pass it on to the assembler in
order to let it correctly assemble inline asm containing accesses to the
extension's system registers.  The same applies when using the
preprocessor on an assembly file as this first must pass through cc1.

I left the hwcaps string for SPE empty as the kernel does not define a
feature string for this extension.  The current effect of this is that
driver will disable profile feature bit in GCC.  This is OK though
because we don't, nor do we ever, enable this feature bit, as codegen is
not affect by the SPE support and more importantly the driver will still
pass the extension down to the assembler regardless.

gcc/ChangeLog
2018-07-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>

* config/aarch64/aarch64-option-extensions.def: New entry for profile
extension.
* config/aarch64/aarch64.h (AARCH64_FL_PROFILE): New.
* doc/invoke.texi (aarch64-feature-modifiers): New entry for profile
extension.

gcc/testsuite/ChangeLog
2018-07-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>

* gcc.target/aarch64/profile.c: New test.

From-SVN: r262882

6 years ago[AArch64][PATCH 2/2] PR target/83009: Relax strict address checking for store
Andre Vieira [Thu, 19 Jul 2018 14:03:21 +0000 (14:03 +0000)]
[AArch64][PATCH 2/2] PR target/83009: Relax strict address checking for store
pair lanes

gcc/ChangeLog
2018-07-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>

PR target/83009
* config/aarch64/predicates.md (aarch64_mem_pair_lanes_operand): Make
address check not strict.

gcc/testsuite/ChangeLog
2018-07-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>

PR target/83009
* gcc/target/aarch64/store_v2vec_lanes.c: Add extra tests.

From-SVN: r262881

6 years ago[AArch64][PATCH 1/2] Fix addressing printing of LDP/STP
Andre Vieira [Thu, 19 Jul 2018 13:59:17 +0000 (13:59 +0000)]
[AArch64][PATCH 1/2] Fix addressing printing of LDP/STP

gcc/ChangeLog
2018-07-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>

* config/aarch64/aarch64-simd.md (aarch64_simd_mov<VQ:mode>): Replace
Umq with Umn.
(store_pair_lanes<mode>): Likewise.
* config/aarch64/aarch64-protos.h (aarch64_addr_query_type): Add new
enum value 'ADDR_QUERY_LDP_STP_N'.
* config/aarch64/aarch64.c (aarch64_addr_query_type): Likewise.
(aarch64_print_address_internal): Add declaration.
(aarch64_print_ldpstp_address): Remove.
(aarch64_classify_address): Adapt mode for 'ADDR_QUERY_LDP_STP_N'.
(aarch64_print_operand): Change printing of 'y'.
* config/aarch64/predicates.md (aarch64_mem_pair_lanes_operand): Use
new enum value 'ADDR_QUERY_LDP_STP_N', don't hardcode mode and use
'true' rather than '1'.
* gcc/config/aarch64/constraints.md (Uml): Likewise.
(Uml): Rename to Umn.
(Umq): Remove.

From-SVN: r262880

6 years agotree-ssa-sccvn.h (struct vn_phi_s): Make phiargs member a trailing array.
Richard Biener [Thu, 19 Jul 2018 12:19:07 +0000 (12:19 +0000)]
tree-ssa-sccvn.h (struct vn_phi_s): Make phiargs member a trailing array.

2018-07-19  Richard Biener  <rguenther@suse.de>

* tree-ssa-sccvn.h (struct vn_phi_s): Make phiargs member
a trailing array.
* tree-ssa-sccvn.c: Remove alloc-pool.h use.
(vn_phi_hasher): Derive from nofree_ptr_hash and remove remove method.
(vn_reference_hasher): Likewise.
(struct vn_tables_s): Remove obstack and alloc-pool members.
(vn_tables_obstack, vn_tables_insert_obstack): New global obstacks.
(vn_nary_build_or_lookup_1): Manually build in vn_tables_insert_obstack.
(vn_reference_insert): Allocate from obstack instead of from alloc-pool.
(vn_reference_insert_pieces): Likewise.
(alloc_vn_nary_op_noinit): Adjust.
(vn_nary_op_insert_stmt): Allocate phiargs in-place.
(vn_phi_eq): Adjust.
(shared_lookup_phiargs): Remove.
(vn_phi_lookup): Allocate temporary vn_phi_s on the stack.
(vn_phi_insert): Allocate from obstack instead of from alloc-pool.
(visit_reference_op_call): Likewise.
(copy_nary, copy_phi, copy_reference): Remove.
(process_scc): Rewind the obstack when iterating.  Do not
copy the elements to valid_info but just move them from one
hashtable to the other.
(allocate_vn_table): Adjust.
(free_vn_table): Likewise.
(init_scc_vn): Likewise.
(free_scc_vn): Likewise.

From-SVN: r262879

6 years agoi386: Test __has_attribute (__indirect_return__)
H.J. Lu [Thu, 19 Jul 2018 12:00:59 +0000 (12:00 +0000)]
i386: Test __has_attribute (__indirect_return__)

The new indirect_return attribute is intended to mark swapcontext in
<ucontext.h>.  Test __has_attribute (__indirect_return__) so that it
can be backported to GCC 8.

PR target/86560
* gcc.target/i386/pr86560-4.c: New test.
* gcc.target/i386/pr86560-5.c: Likewise.
---
 gcc/testsuite/gcc.target/i386/pr86560-4.c | 21 +++++++++++++++++++++
 gcc/testsuite/gcc.target/i386/pr86560-5.c | 21 +++++++++++++++++++++
 2 files changed, 42 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr86560-4.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr86560-5.c

diff --git a/gcc/testsuite/gcc.target/i386/pr86560-4.c b/gcc/testsuite/gcc.target/i386/pr86560-4.c
new file mode 100644
index 00000000000..a623e3dcbeb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr86560-4.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fcf-protection" } */
+/* { dg-final { scan-assembler-times {\mendbr} 2 } } */
+
+struct ucontext;
+
+extern int (*bar) (struct ucontext *)
+#ifdef __has_attribute
+# if __has_attribute (indirect_return)
+  __attribute__((__indirect_return__))
+# endif
+#endif
+;
+
+extern int res;
+
+void
+foo (struct ucontext *oucp)
+{
+  res = bar (oucp);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr86560-5.c b/gcc/testsuite/gcc.target/i386/pr86560-5.c
new file mode 100644
index 00000000000..33b0f6424c2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr86560-5.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fcf-protection" } */
+/* { dg-final { scan-assembler-times {\mendbr} 2 } } */
+
+struct ucontext;
+
+extern int (*bar) (struct ucontext *)
+#ifdef __has_attribute
+# if __has_attribute (__indirect_return__)
+  __attribute__((__indirect_return__))
+# endif
+#endif
+;
+
+extern int res;
+
+void
+foo (struct ucontext *oucp)
+{
+  res = bar (oucp);
+}
--
2.17.1

From-SVN: r262878

6 years agoi386: Change indirect_return to function type attribute
H.J. Lu [Thu, 19 Jul 2018 10:47:23 +0000 (10:47 +0000)]
i386: Change indirect_return to function type attribute

In

struct ucontext;
typedef struct ucontext ucontext_t;

extern int (*bar) (ucontext_t *__restrict __oucp,
                   const ucontext_t *__restrict __ucp)
  __attribute__((__indirect_return__));

extern int res;

void
foo (ucontext_t *oucp, ucontext_t *ucp)
{
  res = bar (oucp, ucp);
}

bar() may return via indirect branch.  This patch changes indirect_return
to type attribute to allow indirect_return attribute on variable or type
of function pointer so that ENDBR can be inserted after call to bar().

gcc/

PR target/86560
* config/i386/i386.c (rest_of_insert_endbranch): Lookup
indirect_return as function type attribute.
(ix86_attribute_table): Change indirect_return to function
type attribute.
* doc/extend.texi: Update indirect_return attribute.

gcc/testsuite/

PR target/86560
* gcc.target/i386/pr86560-1.c: New test.
* gcc.target/i386/pr86560-2.c: Likewise.
* gcc.target/i386/pr86560-3.c: Likewise.

From-SVN: r262877

6 years ago[Fortran] Use MIN/MAX_EXPR or IFN_FMIN/MAX for min/max intrinsics when possible
Kyrylo Tkachov [Thu, 19 Jul 2018 09:49:36 +0000 (09:49 +0000)]
[Fortran] Use MIN/MAX_EXPR or IFN_FMIN/MAX for min/max intrinsics when possible

* trans-intrinsic.c: (gfc_conv_intrinsic_minmax): Emit MIN_MAX_EXPR
or IFN_FMIN/FMAX sequence to calculate the min/max when possible.

* gfortran.dg/max_fmax_aarch64.f90: New test.
* gfortran.dg/min_fmin_aarch64.f90: Likewise.
* gfortran.dg/minmax_integer.f90: Likewise.

From-SVN: r262876

6 years agop784.C: Add -fpermissive.
Paolo Carlini [Thu, 19 Jul 2018 09:44:11 +0000 (09:44 +0000)]
p784.C: Add -fpermissive.

2018-07-19  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.old-deja/g++.mike/p784.C: Add -fpermissive.

From-SVN: r262875

6 years agowide-int.h (widest2_int): New.
Aldy Hernandez [Thu, 19 Jul 2018 09:12:32 +0000 (09:12 +0000)]
wide-int.h (widest2_int): New.

* wide-int.h (widest2_int): New.
* gimple-fold.c (arith_overflowed_p): Use it.
* tree.h (widest2_int_cst): New.
* tree-vrp.c (wide_int_binop_overflow): Rename from
vrp_int_const_binop.
Rewrite to work on trees.
(extract_range_from_multiplicative_op_1): Abstract code to...
(wide_int_range_min_max): ...here.
(wide_int_range_cross_product): ...and here.
(extract_range_from_binary_expr_1): Abstract overflow code to...
(wide_int_range_cross_product_wrapping): ...here.
* tree-vrp.h (wide_int_range_cross_product): New.
(wide_int_range_cross_product_wrapping): New.

From-SVN: r262874

6 years agosimple-object-elf.c (ENOTSUP): If not defined by errno.h, redirect to ENOSYS.
Eli Zaretskii [Thu, 19 Jul 2018 08:47:34 +0000 (08:47 +0000)]
simple-object-elf.c (ENOTSUP): If not defined by errno.h, redirect to ENOSYS.

2018-07-19  Eli Zaretskii  <eliz@gnu.org>

* simple-object-elf.c (ENOTSUP): If not defined by errno.h, redirect
to ENOSYS.

From-SVN: r262872

6 years agox86-tune-costs.h (skylake_memcpy, [...]): Replace rep_prefix with unrolling for size...
Andrew Senkevich [Thu, 19 Jul 2018 06:49:10 +0000 (06:49 +0000)]
x86-tune-costs.h (skylake_memcpy, [...]): Replace rep_prefix with unrolling for size 512.

* config/i386/x86-tune-costs.h (skylake_memcpy,
skylake_memset): Replace rep_prefix with unrolling for size 512.

Co-Authored-By: Julia Koval <julia.koval@intel.com>
From-SVN: r262871

6 years agoDaily bump.
GCC Administrator [Thu, 19 Jul 2018 00:16:18 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262870

6 years agore PR tree-optimization/86544 (Popcount detection generates different code on C and...
Kugan Vivekanandarajah [Wed, 18 Jul 2018 22:11:24 +0000 (22:11 +0000)]
re PR tree-optimization/86544 (Popcount detection generates different code on C and C++)

gcc/ChangeLog:

2018-07-18  Kugan Vivekanandarajah  <kuganv@linaro.org>

PR middle-end/86544
* tree-ssa-phiopt.c (cond_removal_in_popcount_pattern): Handle comparision with EQ_EXPR
in last stmt.

gcc/testsuite/ChangeLog:

2018-07-18  Kugan Vivekanandarajah  <kuganv@linaro.org>

PR middle-end/86544
* g++.dg/tree-ssa/pr86544.C: New test.

From-SVN: r262864

6 years agoextend.texi (PowerPC AltiVec Built-in Functions): Rename this subsection to "PowerPC...
Kelvin Nilsen [Wed, 18 Jul 2018 21:31:04 +0000 (21:31 +0000)]
extend.texi (PowerPC AltiVec Built-in Functions): Rename this subsection to "PowerPC AltiVec/VSX Built-in Functions".

gcc/ChangeLog:

2018-07-18  Kelvin Nilsen  <kelvin@gcc.gnu.org>

* doc/extend.texi (PowerPC AltiVec Built-in Functions): Rename
this subsection to "PowerPC AltiVec/VSX Built-in Functions".
(PowerPC AltiVec/VSX Built-in Functions): New name for subsection
previously known as "PowerPC AltiVec Built-in Functions".  Move
some material to new subsubsections "PowerPC AltiVec Built-in
Functions on ISA 2.06" and "PowerPC AltiVec Built-in Functions on
ISA 2.07".
(PowerPC Altivec Built-in Functions on ISA 2.05): New subsubsection.
(PowerPC Altivec Built-in Functions on ISA 2.06): Likewise.
(PowerPC Altivec Built-in Functions on ISA 2.07): Likewise.
(PowerPC Altivec Built-in Functions on ISA 3.0): Likewise.

From-SVN: r262863

6 years agore PR c++/86550 (Lambda parsing allows arbitrary types in decl-specifier-seq)
Jakub Jelinek [Wed, 18 Jul 2018 21:01:54 +0000 (23:01 +0200)]
re PR c++/86550 (Lambda parsing allows arbitrary types in decl-specifier-seq)

PR c++/86550
* parser.c (cp_parser_decl_specifier_seq): Diagnose invalid type
specifier if CP_PARSER_FLAGS_ONLY_MUTABLE_OR_CONSTEXPR.

* g++.dg/cpp0x/lambda/lambda-86550.C: New test.

From-SVN: r262862

6 years agore PR c/69558 (glib2 warning pragmas stopped working)
Bernd Edlinger [Wed, 18 Jul 2018 19:36:01 +0000 (19:36 +0000)]
re PR c/69558 (glib2 warning pragmas stopped working)

libcpp:
2018-07-18  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR 69558
        * macro.c (enter_macro_context): Change the location info for builtin
        macros and _Pragma from location of the closing parenthesis to location
        of the macro expansion point.

testsuite:
2018-07-18  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR 69558
        * c-c++-common/cpp/diagnostic-pragma-2.c: New test.
        * c-c++-common/pr69558.c: Remove xfail.
        * gcc.dg/cpp/builtin-macro-1.c: Adjust test expectations.
        * gcc.dg/pr61817-1.c: Likewise.
        * gcc.dg/pr61817-2.c: Likewise.
        * g++.dg/plugin/pragma_plugin.c: Warn at expansion_point_location.

From-SVN: r262861

6 years agore PR fortran/85599 (warn about short-circuiting of logical expressions for non-pure...
Janus Weil [Wed, 18 Jul 2018 18:31:59 +0000 (20:31 +0200)]
re PR fortran/85599 (warn about short-circuiting of logical expressions for non-pure functions)

2018-07-18  Janus Weil  <janus@gcc.gnu.org>
    Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/85599
* dump-parse-tree.c (show_attr): Add handling of implicit_pure.
* frontend-passes.c (do_warn_function_elimination): Do not warn for
pure functions.
* gfortran.h: Add prototypes for gfc_pure_function and
gfc_implicit_pure_function.
* gfortran.texi: Add chapter on evaluation of logical expressions.
* invoke.texi: Mention that -Wfunction-elimination is implied
by -Wextra.
* lang.opt: Make -Wextra imply -Wfunction-elimination.
* resolve.c (pure_function): Rename to gfc_pure_function.
(gfc_implicit_pure_function): New function.
(check_pure_function): Use it here.
(impure_function_callback): New function.
(resolve_operator): Call it via gfc_expr_walker.

2018-07-18  Janus Weil  <janus@gcc.gnu.org>

PR fortran/85599
* gfortran.dg/function_optimize_5.f90: Add option
'-faggressive-function-elimination' and update dg-warning clauses.
* gfortran.dg/short_circuiting.f90: New test.

Co-Authored-By: Thomas Koenig <tkoenig@gcc.gnu.org>
From-SVN: r262860

6 years agoPR c++/86190 - bogus -Wsign-conversion warning
Marek Polacek [Wed, 18 Jul 2018 13:13:11 +0000 (13:13 +0000)]
PR c++/86190 - bogus -Wsign-conversion warning

PR c++/86190 - bogus -Wsign-conversion warning
* typeck.c (cp_build_binary_op): Fix formatting.  Add a warning
sentinel.

* g++.dg/warn/Wsign-conversion-3.C: New test.
* g++.dg/warn/Wsign-conversion-4.C: New test.

From-SVN: r262855

6 years agore PR target/86557 (missed vectorization with std::vector compared to icc 18)
Richard Biener [Wed, 18 Jul 2018 12:57:15 +0000 (12:57 +0000)]
re PR target/86557 (missed vectorization with std::vector compared to icc 18)

2018-07-18  Richard Biener  <rguenther@suse.de>

PR tree-optimization/86557
* tree-vect-patterns.c (vect_recog_divmod_pattern): Also handle
EXACT_DIV_EXPR.

From-SVN: r262854

6 years ago2018-07-18 Paolo Carlini <paolo.carlini@oracle.com>
Paolo Carlini [Wed, 18 Jul 2018 10:30:42 +0000 (10:30 +0000)]
2018-07-18  Paolo Carlini  <paolo.carlini@oracle.com>

* Fix typos in ChangeLog entries.

From-SVN: r262852

6 years agore PR c++/59480 (Missing error diagnostic: friend declaration specifying a default...
Paolo Carlini [Wed, 18 Jul 2018 10:27:12 +0000 (10:27 +0000)]
re PR c++/59480 (Missing error diagnostic: friend declaration specifying a default argument must be a definition)

/cp
2018-07-18  Paolo Carlini  <paolo.carlini@oracle.com>

* class.c (note_name_declared_in_class): Prefer permerror + inform
to a pair of permerrors; use DECL_SOURCE_LOCATION.

/testsuite
2018-07-18  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/ext/uow-3.C: Adjust.
* g++.dg/ext/uow-4.C: Likewise.
* g++.dg/lookup/name-clash11.C: Likewise.
* g++.dg/lookup/name-clash7.C: Likewise.
* g++.dg/lookup/redecl1.C: Likewise.
* g++.dg/warn/changes-meaning.C: Likewise.
* g++.old-deja/g++.jason/scoping8.C: Likewise.
* g++.old-deja/g++.law/nest1.C: Likewise.

/cp
2019-07-18  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/59480, DR 136
* decl.c (check_no_redeclaration_friend_default_args): New.
(duplicate_decls): Use the latter; also check that a friend
declaration specifying default arguments is a definition.

/testsuite
2019-07-18  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/59480, DR 136
* g++.dg/other/friend8.C: New.
* g++.dg/other/friend9.C: Likewise.
* g++.dg/other/friend10.C: Likewise.
* g++.dg/other/friend11.C: Likewise.
* g++.dg/other/friend12.C: Likewise.
* g++.dg/parse/defarg4.C: Compile with -fpermissive -w.
* g++.dg/parse/defarg8.C: Likewise.

From-SVN: r262851

6 years agoS/390: Add CFI for mcount call sequences
Ilya Leoshkevich [Wed, 18 Jul 2018 06:58:39 +0000 (06:58 +0000)]
S/390: Add CFI for mcount call sequences

2018-07-18  Ilya Leoshkevich  <iii@linux.ibm.com>

* config/s390/s390.c (s390_function_profiler): Generate CFI.

From-SVN: r262850

6 years agore PR debug/86523 (ICE in gen_member_die, at dwarf2out.c:24933 starting from r262560)
Richard Biener [Wed, 18 Jul 2018 06:54:23 +0000 (06:54 +0000)]
re PR debug/86523 (ICE in gen_member_die, at dwarf2out.c:24933 starting from r262560)

2018-07-18  Richard Biener  <rguenther@suse.de>

PR debug/86523
cp/
* decl2.c (c_parse_final_cleanups): Call write_out_vars before
start_static_storage_duration_function sets current_function_decl.

* g++.dg/lto/pr86523-3_0.C: New testcase.

From-SVN: r262849

6 years agoarm.c (get_label_padding): Update for recent changes to label_to_alignment.
Jeff Law [Wed, 18 Jul 2018 04:55:03 +0000 (22:55 -0600)]
arm.c (get_label_padding): Update for recent changes to label_to_alignment.

* config/arm/arm.c (get_label_padding): Update for recent
changes to label_to_alignment.

From-SVN: r262848

6 years agoDaily bump.
GCC Administrator [Wed, 18 Jul 2018 00:16:31 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262846

6 years agore PR tree-optimization/86010 (redundant memset with smaller size not eliminated)
Jeff Law [Tue, 17 Jul 2018 23:54:10 +0000 (17:54 -0600)]
re PR tree-optimization/86010 (redundant memset with smaller size not eliminated)

PR tree-optimization/86010
* tree-ssa-dse.c (compute_trims): Fix typo/thinko.

From-SVN: r262841

6 years agomips.c (vr4130_align_insns): Update for recent changes to label_to_alignment.
Jeff Law [Tue, 17 Jul 2018 20:52:20 +0000 (14:52 -0600)]
mips.c (vr4130_align_insns): Update for recent changes to label_to_alignment.

* config/mips/mips.c (vr4130_align_insns): Update for recent
changes to label_to_alignment.

From-SVN: r262838

6 years agofrv.c (frv_label_align): Update for recent changes to label_to_alignment.
Jeff Law [Tue, 17 Jul 2018 20:30:49 +0000 (14:30 -0600)]
frv.c (frv_label_align): Update for recent changes to label_to_alignment.

       * config/frv/frv.c (frv_label_align): Update for recent changes
        to label_to_alignment.

From-SVN: r262837

6 years agonios2.c (nios2_label_align): Update for recent changes which dropped ALIGN_LABELS_LOG.
Jeff Law [Tue, 17 Jul 2018 20:23:25 +0000 (14:23 -0600)]
nios2.c (nios2_label_align): Update for recent changes which dropped ALIGN_LABELS_LOG.

* config/nios2/nios2.c (nios2_label_align): Update for recent
changes which dropped ALIGN_LABELS_LOG.

From-SVN: r262836

6 years agoFix invalid cc_status after [const_][us]mulsi3_highpart
Andreas Schwab [Tue, 17 Jul 2018 18:42:42 +0000 (18:42 +0000)]
Fix invalid cc_status after [const_][us]mulsi3_highpart

* config/m68k/m68k.md (umulsi3_highpart+1, const_umulsi3_highpart)
(smulsi3_highpart+1, const_smulsi3_highpart): Add CC_STATUS_INIT.

testsuite/:
* gcc.target/m68k/mulsi_highpart.c: New test.

From-SVN: r262835

6 years agocompiler: don't set btype_ too early for alias type
Ian Lance Taylor [Tue, 17 Jul 2018 18:27:22 +0000 (18:27 +0000)]
compiler: don't set btype_ too early for alias type

    CL 123362 introduced a bug in creating alias type's backend
    representation. A type's btype_ should not be set before
    named types are converted if it is a placeholder. For alias
    type, it is set too early. This may result in unresolved
    placeholders. This CL fixes it.

    Reviewed-on: https://go-review.googlesource.com/123975

From-SVN: r262833

6 years agolex.c (_cpp_lex_direct): Use CPP_DL_NOTE instead of CPP_DL_PEDWARN...
Jakub Jelinek [Tue, 17 Jul 2018 18:10:57 +0000 (20:10 +0200)]
lex.c (_cpp_lex_direct): Use CPP_DL_NOTE instead of CPP_DL_PEDWARN...

* lex.c (_cpp_lex_direct): Use CPP_DL_NOTE instead of CPP_DL_PEDWARN,
CPP_DL_WARNING or CPP_DL_ERROR for note that diagnostics for C++ style
comments is reported only once per file and guard those calls on the
preceding cpp_error returning true.

* gcc.dg/cpp/pr61854-c90.c (foo): Expect a note, rather than error.
* gcc.dg/cpp/pr61854-c94.c (foo): Likewise.
* gcc.dg/cpp/pr61854-4.c (foo): Likewise.
* gcc.dg/cpp/pr61854-8.c: New test.

From-SVN: r262832

6 years ago* gcc.target/powerpc/pr85456.c: Require longdouble128.
David Edelsohn [Tue, 17 Jul 2018 17:35:24 +0000 (17:35 +0000)]
* gcc.target/powerpc/pr85456.c: Require longdouble128.

From-SVN: r262831

6 years agocompiler: connect the concrete type and the placeholder for circular types
Ian Lance Taylor [Tue, 17 Jul 2018 17:21:10 +0000 (17:21 +0000)]
compiler: connect the concrete type and the placeholder for circular types

    Previously, when creating the backend representation of a
    circular type, we resolve the placeholder to a
    circular_pointer_type. The backend doesn't know what the
    concrete type is.

    This CL changes it to resolve the placeholder to the concrete
    type instead, so the backend may have better knowledge of the
    concrete type.

    Reviewed-on: https://go-review.googlesource.com/123738

From-SVN: r262830

6 years agore PR fortran/83184 (Out of memory or ICE with option -fdec)
Fritz Reese [Tue, 17 Jul 2018 16:02:03 +0000 (16:02 +0000)]
re PR fortran/83184 (Out of memory or ICE with option -fdec)

2018-07-17  Fritz Reese  <fritzoreese@gmail.com>

    gcc/testsuite/ChangeLog:

PR fortran/83184
* gfortran.dg/dec_structure_23.f90: Oops, "un-fix" error messages.

From-SVN: r262828

6 years agofold-vec-unpack-char.c: New.
Will Schmidt [Tue, 17 Jul 2018 15:51:12 +0000 (15:51 +0000)]
fold-vec-unpack-char.c: New.

[testsuite]

2018-07-06  Will Schmidt  <will_schmidt@vnet.ibm.com>

* gcc.target/powerpc/fold-vec-unpack-char.c: New.
* gcc.target/powerpc/fold-vec-unpack-float.c: New.
* gcc.target/powerpc/fold-vec-unpack-int.c: New.
* gcc.target/powerpc/fold-vec-unpack-pixel.c: New.
* gcc.target/powerpc/fold-vec-unpack-short.c: New.

From-SVN: r262827

6 years agopr57150.c: Require longdouble128.
David Edelsohn [Tue, 17 Jul 2018 15:41:47 +0000 (15:41 +0000)]
pr57150.c: Require longdouble128.

* gcc.target/powerpc/pr57150.c: Require longdouble128.
* gcc.target/powerpc/pr79916.c: Require dfp.

From-SVN: r262826

6 years agoPR c++/86480 - nested variadic lambda and constexpr if.
Jason Merrill [Tue, 17 Jul 2018 15:39:46 +0000 (11:39 -0400)]
PR c++/86480 - nested variadic lambda and constexpr if.

* pt.c (find_parameter_packs_r) [IF_STMT]: Don't walk into
IF_STMT_EXTRA_ARGS.
* tree.c (cp_walk_subtrees) [DECLTYPE_TYPE]: Set
cp_unevaluated_operand.
[ALIGNOF_EXPR] [SIZEOF_EXPR] [NOEXCEPT_EXPR]: Likewise.

From-SVN: r262825

6 years agoPR libstdc++/86450 use -Wabi=2 and simplify -Werror use
Jonathan Wakely [Tue, 17 Jul 2018 13:18:47 +0000 (14:18 +0100)]
PR libstdc++/86450 use -Wabi=2 and simplify -Werror use

Use -Wabi=2 to fix warnings about -Wabi having no effect on its own.
This requires suppressing two warnings in src/c++11/debug.cc which do
not affect the library ABI.

Previously libstdc++ defaulted to --enable-werror but the -Werror flag
was not actually added unless --enable-maintainer-mode was used. This is
not documented and not the expected behaviour. This removes any special
treatment for maintainer-mode, makes -Werror depend directly on
--enable-werror, and changes the default to --enable-werror=no.

PR libstdc++/86450
* acinclude.m4 (GLIBCXX_CHECK_COMPILER_FEATURES): Don't define WERROR.
(GLIBCXX_EXPORT_FLAGS): Use -Wabi=2 instead of -Wabi.
* configure: Regenerate.
* configure.ac: Change GLIBCXX_ENABLE_WERROR default to "no".
* doc/Makefile.in: Regenerate.
* fragment.am: Set WERROR_FLAG to -Werror instead of $(WERROR).
* include/Makefile.in: Regenerate.
* libsupc++/Makefile.in: Regenerate.
* po/Makefile.in: Regenerate.
* python/Makefile.in: Regenerate.
* src/Makefile.in: Regenerate.
* src/c++11/Makefile.in: Regenerate.
* src/c++11/debug.cc: Use diagnostic pragmas to suppress warnings
from -Wabi=2 that don't affect exported symbols.
* src/c++98/Makefile.in: Regenerate.
* src/filesystem/Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.

From-SVN: r262824

6 years agoRemove unused explicit instantiation of __bind_simple
Jonathan Wakely [Tue, 17 Jul 2018 13:16:51 +0000 (14:16 +0100)]
Remove unused explicit instantiation of __bind_simple

The explicit instantiation of std::call_once used to require an
instantiation of __bind_simple, but call_once was changed by r241031 to
not use __bind_simple. The instantiation of __bind_simple (and the
definitions it uses) are not needed. They should have been removed
instead of doing the changes in r241111 that kept them compiling.

The use of std::call_once by _Async_state_common::_M_join can be
simplified to use a pointer instead of reference wrapper. The call_once
symbol isn't exported so the change isn't visible outside the library.

* src/c++11/compatibility-thread-c++0x.cc [_GLIBCXX_SHARED]
(_Async_state_common::_M_join): Simplify use of std::call_once and
corresponding explicit instantiation.
(_Maybe_wrap_member_pointer, _Bind_simple, _Bind_simple_helper)
(__bind_simple): Remove definitions and explicit instantiation that
are not required by exported symbols.

From-SVN: r262823

6 years ago[ARC] Don't use deprecated align_labels_log variable.
Claudiu Zissulescu [Tue, 17 Jul 2018 12:27:10 +0000 (14:27 +0200)]
[ARC] Don't use deprecated align_labels_log variable.

2018-07-17  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (arc_label_align): Use alogn_labels instead of
deprecated align_labels_log.

From-SVN: r262820

6 years agore PR debug/86456 (Segfault in switch_to_section at gcc/varasm.c:7353 since r259317)
Richard Biener [Tue, 17 Jul 2018 12:26:21 +0000 (12:26 +0000)]
re PR debug/86456 (Segfault in switch_to_section at  gcc/varasm.c:7353 since r259317)

2018-07-17  Richard Biener  <rguenther@suse.de>

PR lto/86456
* dwarf2out.c (init_sections_and_labels): Always generate
a debug_line_str_section for early LTO debug.
(dwarf2out_finish): Reset debug_line_str_hash output early.
Bump counter for extra dwarf5 .debug_loc labels to not conflict
with fat LTO part.
(dwarf2out_early_finish): Output debug_line_str.

* g++.dg/debug/dwarf2/pr86456.C: New testcase.

From-SVN: r262819

6 years agoS/390: Do not use LA with index register on z196 or newer.
Robin Dapp [Tue, 17 Jul 2018 12:08:06 +0000 (12:08 +0000)]
S/390: Do not use LA with index register on z196 or newer.

gcc/ChangeLog:

2018-07-17  Robin Dapp  <rdapp@linux.ibm.com>

* config/s390/s390.c (preferred_la_operand_p): Do not use LA with
index register on z196 or later.

From-SVN: r262818

6 years agoS/390: Set default function alignment to 16.
Robin Dapp [Tue, 17 Jul 2018 12:05:07 +0000 (12:05 +0000)]
S/390: Set default function alignment to 16.

gcc/ChangeLog:

2018-07-17  Robin Dapp  <rdapp@linux.ibm.com>

* config/s390/s390.c (s390_default_align): Set default function
alignment to 16.
(s390_override_options_after_change): Call s390_default align.
(s390_option_override_internal): Call s390_default_align.
(TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Define.

gcc/testsuite/ChangeLog:

2018-07-17  Robin Dapp  <rdapp@linux.ibm.com>

* gcc.target/s390/function-align1.c: New test.
* gcc.target/s390/function-align2.c: New test.
* gcc.target/s390/function-align3.c: New test.

From-SVN: r262817

6 years agore PR middle-end/86542 (wrong-code for collapsed taskloop which needs omp_cpyfn)
Jakub Jelinek [Tue, 17 Jul 2018 10:54:52 +0000 (12:54 +0200)]
re PR middle-end/86542 (wrong-code for collapsed taskloop which needs omp_cpyfn)

PR middle-end/86542
* omp-low.c (create_task_copyfn): Copy over also fields corresponding
to _looptemp_ clauses, other than the first two.

* testsuite/libgomp.c++/pr86542.C: New test.

From-SVN: r262815

6 years agodecl.c (choices_to_gnu): Rename parameters.
Eric Botcazou [Tue, 17 Jul 2018 10:02:36 +0000 (10:02 +0000)]
decl.c (choices_to_gnu): Rename parameters.

* gcc-interface/decl.c (choices_to_gnu): Rename parameters.  Deal with
an operand of Character type.  Factor out range generation to the end.
Check that the bounds are literals and convert them to the type of the
operand before building the ranges.
* gcc-interface/utils.c (make_dummy_type): Minor tweak.
(make_packable_type): Propagate TYPE_DEBUG_TYPE.
(maybe_pad_type): Likewise.

From-SVN: r262812

6 years agoAdd -fomit-frame-pointer to gcc.target/i386/vartrack-1.c
Rainer Orth [Tue, 17 Jul 2018 09:43:57 +0000 (09:43 +0000)]
Add -fomit-frame-pointer to gcc.target/i386/vartrack-1.c

* gcc.target/i386/vartrack-1.c (dg-options): Add
-fomit-frame-pointer.

From-SVN: r262811

6 years agoBuild gcc/testsuite/g++.dg/lto/pr86523-[12]_0.C as PIC
Rainer Orth [Tue, 17 Jul 2018 09:41:11 +0000 (09:41 +0000)]
Build gcc/testsuite/g++.dg/lto/pr86523-[12]_0.C as PIC

* g++.dg/lto/pr86523-1_0.C: Require fpic, shared support.
(dg-lto-options): Add -fPIC.
* g++.dg/lto/pr86523-2_0.C: Likewise.

From-SVN: r262810

6 years agoDo not enable OPT_falign_* for -Os.
Martin Liska [Tue, 17 Jul 2018 09:22:14 +0000 (11:22 +0200)]
Do not enable OPT_falign_* for -Os.

2018-07-17  Martin Liska  <mliska@suse.cz>

* opts.c: Do not enable OPT_falign_* for -Os.

From-SVN: r262807

6 years agoDefine MAX_CODE_ALIGN globally.
Martin Liska [Tue, 17 Jul 2018 09:21:41 +0000 (11:21 +0200)]
Define MAX_CODE_ALIGN globally.

2018-07-17  Martin Liska  <mliska@suse.cz>

* align.h (MAX_CODE_ALIGN): New.
(MAX_CODE_ALIGN_VALUE): New.
* common/config/i386/i386-common.c (ix86_handle_option):
(MAX_CODE_ALIGN): Moved to align.h.
* final.c (MAX_CODE_ALIGN): Likewise.
* opts.c (parse_and_check_align_values):
(MAX_CODE_ALIGN): Likewise.
(MAX_CODE_ALIGN_VALUE): Likewise.

From-SVN: r262806

6 years agoFix coding style of ASM_OUTPUT_ALIGN.
Martin Liska [Tue, 17 Jul 2018 09:19:57 +0000 (11:19 +0200)]
Fix coding style of ASM_OUTPUT_ALIGN.

2018-07-17  Martin Liska  <mliska@suse.cz>

* config/i386/att.h (ASM_OUTPUT_ALIGN): Fix spacing
        in order to fulfil coding style.
* config/i386/cygming.h (ASM_OUTPUT_ALIGN): Likewise.
* config/i386/gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
* config/i386/x86-64.h (ASM_OUTPUT_MAX_SKIP_PAD): Likewise.
* config/iq2000/iq2000.h (ASM_OUTPUT_ALIGN): Likewise.
* config/pa/pa.h (ASM_OUTPUT_ALIGN): Likewise.
* config/sparc/sol2.h (ASM_OUTPUT_ALIGN_WITH_NOP): Likewise.
* config/sparc/sparc.h (ASM_OUTPUT_ALIGN): Likewise.
* config/visium/visium.h (ASM_OUTPUT_ALIGN): Likewise.
(ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.

From-SVN: r262805

6 years agoClean up of new format of -falign-FOO.
Martin Liska [Tue, 17 Jul 2018 09:19:27 +0000 (11:19 +0200)]
Clean up of new format of -falign-FOO.

2018-07-17  Martin Liska  <mliska@suse.cz>

* align.h: New file.
* config/alpha/alpha.c (alpha_align_insns_1): Use align_functions directly.
* config/i386/i386.c (ix86_avoid_jump_mispredicts): Use new return type
align_flags of label_to_alignment.
* config/m32r/m32r.h (LOOP_ALIGN): Wrap returned values into align_flags
class.
* config/m68k/m68k.c: Do not use removed align_labels_value and
align_loops_value.
* config/nds32/nds32.h (JUMP_ALIGN): Wrap result into align_flags class.
(LOOP_ALIGN): Likewise.
(LABEL_ALIGN): Likewise.
* config/powerpcspe/powerpcspe.c (TARGET_ASM_LOOP_ALIGN_MAX_SKIP):
Remove not used macro.
(rs6000_loop_align): Change return type to align_flags.
(rs6000_loop_align_max_skip): Remove.
* config/rs6000/rs6000-protos.h (rs6000_loop_align):
Change return type to align_flags.
* config/rs6000/rs6000.c (TARGET_ASM_LOOP_ALIGN_MAX_SKIP):
Remove not used macro.
(rs6000_loop_align):  Change return type to align_flags.
(rs6000_loop_align_max_skip): Remove.
* config/rx/rx.h (JUMP_ALIGN): Wrap integer values
* config/rx/rx-protos.h (rx_align_for_label): Make it
        static function.
* config/rx/rx.c (rx_align_for_label): Change return type
        to align_flags.
(rx_max_skip_for_label): Remove TARGET_ASM_*_ALIGN_MAX_SKIP
        macro definitions.
into align_flags class.
(LABEL_ALIGN): Likewise.
(LOOP_ALIGN): Likewise.
* config/s390/s390.c (s390_label_align): Use align_flags
class member.
(s390_asm_output_function_label): Likewise.
* config/sh/sh.c (sh_override_options_after_change):
Use align_flags class directly without macros.
(find_barrier): Likewise.
(barrier_align): Likewise.
(sh_loop_align): Likewise.
* config/spu/spu.c (spu_option_override):
Use align_flags_tuple::get_value instead of removed macros.
(spu_sched_init): Likewise.
* config/spu/spu.h (GTY): Likewise.
* config/visium/visium.c (visium_option_override):
Set "8" as default secondary alignment.
* config/visium/visium.h (SUBALIGN_LOG): Define to 3
in order to guarantee secondary alignment of 8.
* coretypes.h: Include align.h header file.
* doc/tm.texi: Remove TARGET_ASM_JUMP_ALIGN_MAX_SKIP,
TARGET_ASM_LOOP_ALIGN_MAX_SKIP, TARGET_ASM_LABEL_ALIGN_MAX_SKIP
        and TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP macros.
* doc/tm.texi.in: Likewise.
* final.c (struct label_alignment): Remove not used structure.
(LABEL_ALIGN): Change type to align_flags.
(LOOP_ALIGN): Likewise.
(JUMP_ALIGN): Likewise.
(default_loop_align_max_skip): Remove.
(default_label_align_max_skip): Likewise.
(default_jump_align_max_skip): Likewise.
(default_label_align_after_barrier_max_skip):
(LABEL_TO_ALIGNMENT): Change to access label_align vector.
(LABEL_TO_MAX_SKIP): Remove.
(label_to_alignment): Return align_flags type instead of integer.
(label_to_max_skip): Remove.
(align_fuzz): Use align_flags type.
(compute_alignments): Use align_flags type and use align_flags::max
to combine multiple alignments.
(grow_label_align): Grow vec instead of C array.
(update_alignments): Assign just LABEL_TO_ALIGNMENT.
(shorten_branches):  Use align_flags type and use align_flags::max
to combine multiple alignments.
(final_scan_insn_1): Remove usage of secondary alignment that comes
from label alignment, but instead use proper secondary alignment
which is computed in grow_label_align.
* flags.h (struct align_flags_tuple): Move to align.h.
(struct align_flags): Likewise.
(state_align_loops): Rename to align_loops.
(state_align_jumps): Rename to align_jumps.
(state_align_labels): Rename to align_labels.
(state_align_functions): Rename to align_functions.
(align_loops_log): Remove.
(align_jumps_log): Remove.
(align_labels_log): Remove.
(align_functions_log): Remove.
(align_loops_max_skip): Remove.
(align_jumps_max_skip): Remove.
(align_labels_max_skip): Remove.
(align_functions_max_skip): Remove.
(align_loops_value): Remove.
(align_jumps_value): Remove.
(align_labels_value): Remove.
(align_functions_value): Remove.
* output.h (label_to_alignment): Change return type to align_flags.
(label_to_max_skip): Remove.
* target.def: Remove loop_align_max_skip, label_align_max_skip,
jump_align_max_skip macros.
* targhooks.h (default_loop_align_max_skip): Remove.
(default_label_align_max_skip): Likewise.
(default_jump_align_max_skip): Likewise.
(default_label_align_after_barrier_max_skip): Remove.
* toplev.c (read_log_maxskip): Use ::normalize function.
(parse_N_M): Remove not used argument and also call ::normalize.
(parse_alignment_opts): Do not pass unused arguments.
* varasm.c (assemble_start_function): Use directly align_functions
instead of removed macros.
* system.h: Do not poison removed macros.
2018-07-17  Martin Liska  <mliska@suse.cz>

* gcc.target/powerpc/loop_align.c: Update scanned pattern.

From-SVN: r262804

6 years ago[Ada] Spurious error on prefixed call in an instantiation
Ed Schonberg [Tue, 17 Jul 2018 08:13:28 +0000 (08:13 +0000)]
[Ada] Spurious error on prefixed call in an instantiation

This patch fixes a spurious error on a prefixed call in an instance, when the
generic parameters include an interface type and an abstract operation of that
type, and the actuals in the instance include an interface type and a
corresponding abstract operation of it, with a different name than the
corresponding generic subprogram parameter. The patch also fixes a similar
error involving class-wide operations and generic private types.

2018-07-17  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch4.adb (Try_Object_Operation): Handle properly a prefixed call
in an instance, when the generic parameters include an interface type
and a abstract operation of that type, and the actuals in the instance
include an interface type and a corresponding abstract operation of it,
with a different name than the corresponding generic subprogram
parameter.

gcc/testsuite/

* gnat.dg/generic_call_cw.adb, gnat.dg/generic_call_iface.adb: New
testcase.

From-SVN: r262803

6 years ago[Ada] Preserve original CE reason in more cases
Arnaud Charlet [Tue, 17 Jul 2018 08:12:51 +0000 (08:12 +0000)]
[Ada] Preserve original CE reason in more cases

2018-07-17  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* sem_eval.adb (Rewrite_In_Raise_CE): Keep the original reason in more
cases.

From-SVN: r262802

6 years ago[Ada] Add provision for floating-point in Apply_Division_Check
Arnaud Charlet [Tue, 17 Jul 2018 08:12:46 +0000 (08:12 +0000)]
[Ada] Add provision for floating-point in Apply_Division_Check

2018-07-17  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* checks.adb (Apply_Division_Check): Add provision for floating-point
checks.

From-SVN: r262801

6 years ago[Ada] Fix expansion of aggregates components rewritten to raise statements
Ed Schonberg [Tue, 17 Jul 2018 08:12:14 +0000 (08:12 +0000)]
[Ada] Fix expansion of aggregates components rewritten to raise statements

2018-07-17  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_aggr.adb (Component_OK_For_Backend): If an array component of the
enclosing record has a bound that is out of range (and that has been
rewritten as a raise statement) the aggregate is not OK for any back
end, and should be expanded into individual assignments.

From-SVN: r262800

6 years ago[Ada] Reuse Is_Rewrite_Substitution in Relocate_Node
Piotr Trojanek [Tue, 17 Jul 2018 08:12:08 +0000 (08:12 +0000)]
[Ada] Reuse Is_Rewrite_Substitution in Relocate_Node

Semantics not affected; the reused routine is exactly the same as the replaced
condition.

2018-07-17  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* atree.adb (Relocate_Node): Simplify with Is_Rewrite_Substitution.

From-SVN: r262799

6 years ago[Ada] Fix RM rule references
Piotr Trojanek [Tue, 17 Jul 2018 08:11:49 +0000 (08:11 +0000)]
[Ada] Fix RM rule references

2018-07-17  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* sem_util.ads (Denotes_Same_Object): Likewise.
* sem_warn.adb (Warn_On_Overlapping_Actuals): Fix RM rule references.

From-SVN: r262798

6 years ago[Ada] Fix incompatibility Default_Scalar_Storage_Order/tagged types
Eric Botcazou [Tue, 17 Jul 2018 08:11:43 +0000 (08:11 +0000)]
[Ada] Fix incompatibility Default_Scalar_Storage_Order/tagged types

The pragma Default_Scalar_Storage_Order cannot reliably be used to set the
non-default scalar storage order for a program that declares tagged types, if
it also declares user-defined primitives.

This is fixed by making Make_Tags use the same base array type as Make_DT and
Make_Secondary_DT when accessing the array of user-defined primitives.

2018-07-17  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_disp.adb (Make_Tags): When the type has user-defined primitives,
build the access type that is later used by Build_Get_Prim_Op_Address
as pointing to a subtype of Ada.Tags.Address_Array.

gcc/testsuite/

* gnat.dg/sso10.adb, gnat.dg/sso10_pkg.ads: New testcase.

From-SVN: r262797

6 years ago[Ada] Use standard version of s-memory.adb for mingw32
Patrick Bernardi [Tue, 17 Jul 2018 08:11:37 +0000 (08:11 +0000)]
[Ada] Use standard version of s-memory.adb for mingw32

This patch switches mingw32 targets to use the standard version of s-memory.adb
as Windows now has the capability of limiting the amount of memory used by
process.

2018-07-17  Patrick Bernardi  <bernardi@adacore.com>

gcc/ada/

* libgnat/s-memory__mingw.adb: Remove.
* Makefile.rtl: Remove s-memory.adb target pair from the Cygwin/Mingw32
section.

gcc/testsuite/

* gnat.dg/memorytest.adb: New testcase.

From-SVN: r262796

6 years ago[Ada] Faulty ignored Ghost code removal
Hristian Kirtchev [Tue, 17 Jul 2018 08:11:32 +0000 (08:11 +0000)]
[Ada] Faulty ignored Ghost code removal

This patch ensures that removal of ignored Ghost code is the absolute last
operation performed on the tree. Previously the removal was performed prior to
issuing delayed warnings, however the warning mechanism may see a heavily
modified tree and fail.

No small reproducer available.

2018-07-17  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* frontend.adb (Frontend): The removal of ignored Ghost code must be
the last semantic operation performed on the tree.

From-SVN: r262795

6 years ago[Ada] Configuration state not observed for instance bodies
Hristian Kirtchev [Tue, 17 Jul 2018 08:11:28 +0000 (08:11 +0000)]
[Ada] Configuration state not observed for instance bodies

This patch ensures that the processing of instantiated and inlined bodies uses
the proper configuration context available at the point of the instantiation or
inlining.

Previously configuration pragmas which appear prior to the context items of a
unit would lose their effect when a body is instantiated or inlined.

2018-07-17  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* frontend.adb (Frontend): Update the call to Register_Config_Switches.
* inline.ads: Add new component Config_Switches to record
Pending_Body_Info which captures the configuration state of the pending
body.  Remove components Version, Version_Pragma, SPARK_Mode, and
SPARK_Mode_Pragma from record Pending_Body_Info because they are
already captured in component Config_Switches.
* opt.adb (Register_Opt_Config_Switches): Rename to
Register_Config_Switches.
(Restore_Opt_Config_Switches): Rename to Restore_Config_Switches.
(Save_Opt_Config_Switches): Rename to Save_Config_Switches. This
routine is now a function, and returns the saved configuration state as
an aggregate to avoid missing an attribute.
(Set_Opt_Config_Switches): Rename to Set_Config_Switches.
* opt.ads (Register_Opt_Config_Switches): Rename to
Register_Config_Switches.
(Restore_Opt_Config_Switches): Rename to Restore_Config_Switches.
(Save_Opt_Config_Switches): Rename to Save_Config_Switches. This
routine is now a function.
(Set_Opt_Config_Switches): Rename to Set_Config_Switches.
* par.adb (Par): Update the calls to configuration switch-related
subprograms.
* sem.adb (Semantics): Update the calls to configuration switch-related
subprograms.
* sem_ch10.adb (Analyze_Package_Body_Stub): Update the calls to
configuration switch-related subprograms.
(Analyze_Protected_Body_Stub): Update the calls to configuration
switch-related subprograms.
(Analyze_Subprogram_Body_Stub): Update calls to configuration
switch-related subprograms.
* sem_ch12.adb (Add_Pending_Instantiation): Update the capture of
pending instantiation attributes.
(Inline_Instance_Body): Update the capture of pending instantiation
attributes.  It is no longer needed to explicitly manipulate the SPARK
mode.
(Instantiate_Package_Body): Update the restoration of the context
attributes.
(Instantiate_Subprogram_Body): Update the restoration of context
attributes.
(Load_Parent_Of_Generic): Update the capture of pending instantiation
attributes.
(Set_Instance_Env): Update the way relevant configuration attributes
are saved and restored.

gcc/testsuite/

* gnat.dg/config_pragma1.adb, gnat.dg/config_pragma1_pkg.ads: New testcase.

From-SVN: r262794

6 years ago[Ada] ICE on renaming of result of binary operation
Eric Botcazou [Tue, 17 Jul 2018 08:11:22 +0000 (08:11 +0000)]
[Ada] ICE on renaming of result of binary operation

2018-07-17  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Deal with
more rvalues in the expression of a renaming.

From-SVN: r262793

6 years ago[Ada] Type mismatch warning for imported C++ class
Eric Botcazou [Tue, 17 Jul 2018 08:10:04 +0000 (08:10 +0000)]
[Ada] Type mismatch warning for imported C++ class

2018-07-17  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* gcc-interface/ada-tree.h (TYPE_RETURN_BY_DIRECT_REF_P): Define for
METHOD_TYPE too.
(TYPE_RETURN_UNCONSTRAINED_P): Likewise.
(TYPE_CI_CO_LIST): Likewise.
* gcc-interface/gigi.h (is_cplusplus_method): Delete.
(fntype_same_flags_p): Adjust comment.
* gcc-interface/decl.c (Has_Thiscall_Convention): Delete.
(gnat_to_gnu_entity) <E_Subprogram_Type>: Do not set the "thiscall"
attribute directly.
(is_cplusplus_method): Make static and adjust head comment.
(gnat_to_gnu_param): Return a pointer for the "this" parameter of
C++ constructors.
(gnat_to_gnu_subprog_type): Turn imported C++ constructors into their
callable form.  Generate a METHOD_TYPE node for imported C++ methods.
Set param_list at the very end of the processing.
(substitute_in_type) <METHOD_TYPE>: New case.
* gcc-interface/misc.c (gnat_print_type) <METHOD_TYPE>: Likewise.
(gnat_type_hash_eq): Accept METHOD_TYPE.
* gcc-interface/trans.c (Identifier_to_gnu): Deal with METHOD_TYPE.
(Attribute_to_gnu): Likewise.
(Call_to_gnu): Likewise.
(process_freeze_entity): Likewise.
* gcc-interface/utils.c (create_subprog_decl): Adjust head comment.
(fntype_same_flags_p): Likewise.

From-SVN: r262792

6 years ago[Ada] Remove extra parentheses in Expand_Inlined_Call
Piotr Trojanek [Tue, 17 Jul 2018 08:09:59 +0000 (08:09 +0000)]
[Ada] Remove extra parentheses in Expand_Inlined_Call

2018-07-17  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* inline.adb (Expand_Inlined_Call): Remove extra parentheses.

From-SVN: r262791

6 years ago[Ada] Minor fix for imported C++ constructors
Eric Botcazou [Tue, 17 Jul 2018 08:09:54 +0000 (08:09 +0000)]
[Ada] Minor fix for imported C++ constructors

C++ constructors are imported as functions and then internally rewritten into
procedures taking the "this" pointer as first parameter.  Now this parameter is
not of an access type but of the type directly, so it must be In/Out and not
just In.

2018-07-17  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_disp.adb (Gen_Parameters_Profile): Make the _Init parameter an
In/Out parameter.
(Set_CPP_Constructors): Adjust comment accordingly.

From-SVN: r262790

6 years ago[Ada] Assertion_Policy for class-wide precondition
Bob Duff [Tue, 17 Jul 2018 08:09:30 +0000 (08:09 +0000)]
[Ada] Assertion_Policy for class-wide precondition

This patch fixes the compiler to that class-wide preconditions on primitive
operations of interfaces are not checked at run time when the Assertion_Policy
indicates that they should be ignored. This is required by the RM.

2018-07-17  Bob Duff  <duff@adacore.com>

gcc/ada/

* exp_disp.adb (Build_Class_Wide_Check): Return early if the
precondition is supposed to be ignored.

From-SVN: r262789

6 years ago[Ada] Missing check on illegal equality operation in subprogram
Ed Schonberg [Tue, 17 Jul 2018 08:09:14 +0000 (08:09 +0000)]
[Ada] Missing check on illegal equality operation in subprogram

In Ada2012 it is illegal to declare an equality operation on an untagged
type when the operation is primitive and the type is already frozem (see
RM 4.5.2 (9.8)). previously the test to detect this illegality only examined
declarations within a package. This patch covers the case where type and
operation are both declared within a subprogram body.

2018-07-17  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch6.adb (Check_Untagged_Equality): Extend check to operations
declared in the same scope as the operand type, when that scope is a
procedure.

gcc/testsuite/

* gnat.dg/equal3.adb: New testcase.

From-SVN: r262788

6 years ago[Ada] Unnesting: don't use Get_Actual_Subtype for record subtypes
Ed Schonberg [Tue, 17 Jul 2018 08:08:04 +0000 (08:08 +0000)]
[Ada] Unnesting: don't use Get_Actual_Subtype for record subtypes

2018-07-17  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_unst.adb (Unnest_Subprograms): Do nothing if the expander is not
active.  Don't use Get_Actual_Subtype for record subtypes.  Ignore
rewritten identifiers and uplevel references to bounds of types that
come from the original type reference.

From-SVN: r262787

6 years ago[Ada] Minor reformatting
Hristian Kirtchev [Tue, 17 Jul 2018 08:07:59 +0000 (08:07 +0000)]
[Ada] Minor reformatting

2018-07-17  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* exp_ch13.adb, exp_ch7.adb, exp_unst.adb, freeze.adb,
libgnat/s-os_lib.adb, sem_ch3.adb, sem_ch3.ads, sem_ch5.adb,
sem_eval.adb, sem_res.adb, sem_util.adb: Minor reformatting.

From-SVN: r262786

6 years ago[Ada] Crash processing abstract state aspect of a package
Javier Miranda [Tue, 17 Jul 2018 08:07:52 +0000 (08:07 +0000)]
[Ada] Crash processing abstract state aspect of a package

The compiler may crash processing an aspect Part_Of used in a
package spec which has also an Initial_Condition aspect. After
this patch the following test compiles fine.

package P
with
  SPARK_Mode => On,
  Abstract_State => (Count_State),
  Initial_Condition => (Get_Count = 0)              -- Test
is
   type Count_Type is range 0 .. 16;

   function Get_Count return Count_Type;

   procedure Dummy;

private
   C: Count_Type := 0 with Part_Of => Count_State;  -- Test

   function Get_Count return Count_Type is (C);
end P;

package body P
with
  SPARK_Mode => On,
  Refined_State => (Count_State => C)
is
  procedure Dummy is null;
end P;

Command: gcc -c p.adb

2018-07-17  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* exp_ch13.adb (Expand_N_Freeze_Entity): Handle subtype declared for an
iterator.
* freeze.adb (Freeze_Expression): Handle freeze of an entity defined
outside of a subprogram body. This case was previously handled during
preanalysis; the frozen entities were remembered and left pending until
we continued freezeing entities outside of the subprogram. Now, when
climbing the parents chain to locate the correct placement for the
freezeing node, we check if the entity can be frozen and only when no
enclosing node is marked as Must_Not_Freeze the entity is frozen.
* sem_ch3.ads (Preanalyze_Default_Expression): Declaration moved to the
package body.
* sem_ch3.adb (Preanalyze_Default_Expression): Code adjusted to invoke
the new subprogram Preanalyze_With_Freezing_And_Resolve.
* sem_ch6.adb (Preanalyze_Formal_Expression): New subprogram.
(Analyze_Expression_Function, Process_Formals): Invoke
Preanalyze_Formal_Expression instead of Preanalyze_Spec_Expression
since the analysis of the formals may freeze entities.
(Analyze_Subprogram_Body_Helper): Skip building the body of the
class-wide clone for eliminated subprograms.
* sem_res.ads, sem_res.adb (Preanalyze_And_Resolve): New subprogram.
Its code is basically the previous version of this routine but extended
with an additional parameter which is used to specify if during
preanalysis we are allowed to freeze entities.  If the new parameter is
True then the subtree root node is marked as Must_Not_Freeze and no
entities are frozen during preanalysis.
(Preanalyze_And_Resolve): Invokes the internal version of
Preanalyze_And_Resolve without entity freezing.
(Preanalyze_With_Freezing_And_Resolve): Invokes the internal version of
Prenalyze_And_Resolve with freezing enabled.

From-SVN: r262785

6 years ago[Ada] Consistent spelling of "i.e." in docs and comments
Piotr Trojanek [Tue, 17 Jul 2018 08:07:47 +0000 (08:07 +0000)]
[Ada] Consistent spelling of "i.e." in docs and comments

2018-07-17  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* einfo.ads, libgnat/g-comlin.ads: Minor change "ie" to "i.e." in docs
and comments.

From-SVN: r262784

6 years ago[Ada] Argument_String_To_List creates empty items from whitespace
Justin Squirek [Tue, 17 Jul 2018 08:07:42 +0000 (08:07 +0000)]
[Ada] Argument_String_To_List creates empty items from whitespace

This patch corrects an issue whereby leading whitespace in a non-quoted
argument list passed to Argument_String_To_List caused extraneous empty
arguments to be returned.

2018-07-17  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* libgnat/s-os_lib.adb (Argument_String_To_List): Fix trimming of
whitespace.

gcc/testsuite/

* gnat.dg/split_args.adb: New testcase.

From-SVN: r262783

6 years ago[Ada] Spurious error on Part_Of indicator
Hristian Kirtchev [Tue, 17 Jul 2018 08:07:37 +0000 (08:07 +0000)]
[Ada] Spurious error on Part_Of indicator

This patch modifies the verification of a missing Part_Of indicator to avoid
considering constants as visible state of a package instantiation because the
compiler cannot determine whether their values depend on variable input. This
diagnostic is left to GNATprove.

------------
-- Source --
------------

--  gnat.adc

pragma SPARK_Mode;

--  gen_pack.ads

generic
package Gen_Pack is
   Val : constant Integer := 123;
end Gen_Pack;

--  pack.ads

with Gen_Pack;

package Pack
  with Abstract_State => Pack_State
is
   procedure Force_Body;
private
   package Inst_1 is new Gen_Pack;                                   --  OK
   package Inst_2 is new Gen_Pack with Part_Of => Pack_State;        --  OK
end Pack;

--  pack.adb

package body Pack
  with Refined_State => (Pack_State => Inst_2.Val)
is
   procedure Force_Body is null;
end Pack;

-----------------
-- Compilation --
-----------------

$ gcc -c pack.adb

2018-07-17  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_prag.adb (Has_Visible_State): Do not consider constants as
visible state because it is not possible to determine whether a
constant depends on variable input.
(Propagate_Part_Of): Add comment clarifying the behavior with respect
to constant.

From-SVN: r262782

6 years ago[Ada] Avoid confusing warning on exception propagation in GNATprove mode
Yannick Moy [Tue, 17 Jul 2018 08:07:31 +0000 (08:07 +0000)]
[Ada] Avoid confusing warning on exception propagation in GNATprove mode

When compiling with the restriction No_Exception_Propagation, GNAT compiler
may issue a warning about exceptions not being propagated. This warning is
useless and confusing to users for GNATprove analysis, as GNATprove
precisely detects possible exceptions, so disable the warning in that mode.

2018-07-17  Yannick Moy  <moy@adacore.com>

gcc/ada/

* gnat1drv.adb (Gnat1drv): Do not issue warning about exception not
being propagated in GNATprove mode.

From-SVN: r262781

6 years ago[Ada] GNAT.Sockets: reorganize and make public components of Inet_Addr_Type
Dmitriy Anisimkov [Tue, 17 Jul 2018 08:07:26 +0000 (08:07 +0000)]
[Ada] GNAT.Sockets: reorganize and make public components of Inet_Addr_Type

2018-07-17  Dmitriy Anisimkov  <anisimko@adacore.com>

gcc/ada/

* libgnat/g-socket.adb, libgnat/g-socket.ads: Reorganize and make
public components of Inet_Addr_Type. Introduce public binary
operations.

From-SVN: r262780

6 years ago[Ada] Secondary stack leak in statements block located in a loop
Javier Miranda [Tue, 17 Jul 2018 08:07:00 +0000 (08:07 +0000)]
[Ada] Secondary stack leak in statements block located in a loop

When a loop iterator has a block declaration containing statements that invoke
functions whose result is returned on the secondary stack (such as a
string-returning function), the compiler fails to generate code to release the
allocated memory when the loop terminates.

After this patch the following test works fine.

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
pragma Warnings (Off);
with System.Secondary_Stack;
pragma Warnings (On);

procedure Small is
   procedure Info is new System.Secondary_Stack.Ss_Info (Put_Line);

   US : Unbounded_String;
begin
   Info;
   for J in 1 .. 100_000 loop
      Leaky_Block : declare
      begin
         if (J mod 20000) = 0 then
            Info;
         end if;

         Ada.Text_IO.Put_Line (To_String (US));  --  Test

         if (J mod 20000) = 0 then
            Info;
         end if;
      end Leaky_Block;
   end loop;
   Info;
end;

Command:
  gnatmake small.adb; small | grep "Current allocated space :" | uniq
Output:
  Current allocated space :  0 bytes

2018-07-17  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* exp_ch7.adb (Make_Transient_Block): When determining whether an
enclosing scope already handles the secondary stack, take into account
transient blocks nested in a block that do not manage the secondary
stack and are located within a loop.

From-SVN: r262779

6 years ago[Ada] Fix Enclosing_Subprogram for protected entries and task entries
Ed Schonberg [Tue, 17 Jul 2018 08:06:55 +0000 (08:06 +0000)]
[Ada] Fix Enclosing_Subprogram for protected entries and task entries

2018-07-17  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_util.adb (Enclosing_Subprogram): Protected entries and task
entries must be treated separately: task entries are within the
enclosing subprogram of the task type, while protected entries are
transformed into the corresponding Protected_Body_Subprogram, which is
the enclosing_subprogram of any subprogram declared within the entry
body.

From-SVN: r262778

6 years ago[Ada] Add elaboration-related switches to GNAT UGN
Hristian Kirtchev [Tue, 17 Jul 2018 08:06:50 +0000 (08:06 +0000)]
[Ada] Add elaboration-related switches to GNAT UGN

This patch adds compiler switches -gnatH and -gnatJ to section "Alphabetical
list of all switches" of the GNAT User Guide for Native.

2018-07-17  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* doc/gnat_ugn/building_executable_programs_with_gnat.rst: Add missing
sections on -gnatH and -gnatJ compiler switches.
* gnat_ugn.texi: Regenerate.

From-SVN: r262777

6 years agore PR middle-end/86539 (OpenMP wrong-code with taskloop and references)
Jakub Jelinek [Tue, 17 Jul 2018 08:06:25 +0000 (10:06 +0200)]
re PR middle-end/86539 (OpenMP wrong-code with taskloop and references)

PR middle-end/86539
* gimplify.c (gimplify_omp_for): Ensure taskloop firstprivatized init
and cond temporaries don't have reference type if iterator has
pointer type.  For init use &for_pre_body instead of pre_p if
for_pre_body is non-empty.

* testsuite/libgomp.c++/pr86539.C: New test.

From-SVN: r262776

6 years ago[Ada] New ignored Ghost code removal mechanism
Hristian Kirtchev [Tue, 17 Jul 2018 08:06:24 +0000 (08:06 +0000)]
[Ada] New ignored Ghost code removal mechanism

This patch reimplements the mechanism which removes ignored Ghost code from the
tree.

The previous mechanism proved to be unreliable because it assumed that no new
scoping constructs would be created after some ignored Ghost code had already
notified its enclosing scoping constructs that they contain such code. The
assumption can be broken by having a call to an ignored Ghost procedure within
the extended return statement of a function. The procedure call would signal
the enclosing function that it contains ignored Ghost code, however the return
statement would introduce an extra block, effectively hiding the procedure call
from the ignored Ghost code elimination pass.

The new mechanism implemented in this patch forgoes directed tree pruning in
favor of storing the actual ignored Ghost code, and later directly eliminating
it from the tree.

For this approach to operate efficiently, only "top level" ignored Ghost
constructs are stored. The top level constructs are essentially nodes which can
appear within a declarative or statement list and be safely rewritten into null
statements. This ensures that only "root" ignored Ghost construct need to be
processed, as opposed to all ignored Ghost nodes within a subtree.

The approach has one drawback however. Due to the generation and analysis of
ignored Ghost code, a construct may be recorded multiple times (usually twice).
The mechanism simply deals with this artefact instead of employing expensive
solutions such as hash tables or a common flag shared by all nodes to eliminate
the duplicates.

------------
-- Source --
------------

--  main.adb

with Ada.Text_IO; use Ada.Text_IO;

procedure Main is
   procedure Ghost_Proc with Ghost;
   procedure Ghost_Proc is
   begin
      Put_Line ("ERROR: Ghost_Proc called");
   end Ghost_Proc;

   function Func return Integer is
   begin
      return Res : Integer := 123 do
         Ghost_Proc;
      end return;
   end Func;

   Val : Integer with Ghost;

begin
   Val := Func;
end Main;

----------------------------
-- Compilation and output --
----------------------------

$ gcc -c -gnatDG main.adb
$ grep -c "ghost" main.adb.dg
0

2018-07-17  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* alloc.ads: Update the allocation metrics of the ignored Ghost nodes
table.
* atree.adb: Add a soft link for a procedure which is invoked whenever
an ignored Ghost node or entity is created.
(Change_Node): Preserve relevant attributes which come from the Flags
table.
(Mark_New_Ghost_Node): Record a newly created ignored Ghost node or
entity.
(Rewrite): Preserve relevant attributes which come from the Flags
table.
(Set_Ignored_Ghost_Recording_Proc): New routine.
* atree.ads: Define an access-to-suprogram type for a soft link which
records a newly created ignored Ghost node or entity.
(Set_Ignored_Ghost_Recording_Proc): New routine.
* ghost.adb: Remove with and use clause for Lib.  Remove table
Ignored_Ghost_Units.  Add new table Ignored_Ghost_Nodes.
(Add_Ignored_Ghost_Unit): Removed.
(Initialize): Initialize the table which stores ignored Ghost nodes.
Set the soft link which allows Atree.Mark_New_Ghost_Node to record an
ignored Ghost node.
(Is_Ignored_Ghost_Unit): Use the ultimate original node when checking
an eliminated ignored Ghost unit.
(Lock): Release and lock the table which stores ignored Ghost nodes.
(Mark_And_Set_Ghost_Assignment): Record rather than propagate ignored
Ghost nodes.
(Mark_And_Set_Ghost_Procedure_Call): Record rather than propagate
ignored Ghost nodes.
(Mark_Ghost_Clause): Record rather than propagate ignored Ghost nodes.
(Mark_Ghost_Declaration_Or_Body): Record rather than propagate ignored
Ghost nodes.
(Mark_Ghost_Pragma): Record rather than propagate ignored Ghost nodes.
(Propagate_Ignored_Ghost_Code): Removed.
(Record_Ignored_Ghost_Node): New routine.
(Remove_Ignored_Ghost_Code): Reimplemented.
(Remove_Ignored_Ghost_Node): New routine.
(Ultimate_Original_Node): New routine.
* ghost.ads (Check_Ghost_Completion): Removed.
* sem_ch8.adb (Analyze_Use_Package): Remove obsolete code. Mark a use
package clause as ignored Ghost if applicable.
* sem_util.adb (Is_Body_Or_Package_Declaration): Reimplemented.

From-SVN: r262775