1. 22 Aug, 2018 20 commits
    • [ fix changelog ] · ecc643a8
      2018-08-22  Segher Boessenkool  <segher@kernel.crashing.org>
      
      	PR rtl-optimization/86771
      	* combine.c (try_combine): Do not allow splitting a resulting PARALLEL
      	of two SETs into those two SETs, one to be placed at i2, if that SETs
      	destination is modified between i2 and i3.
      
      From-SVN: r263780
      Segher Boessenkool committed
    • Change AArch64 specific FMAX/FMIN tests into generic MAX_EXPR/MIN_EXPR tests · 3543c89f
      gfortran now always uses MAX_EXPR/MIN_EXPR for MAX/MIN intrinsics, so the
      AArch64 specific FMAX/FMIN tests are no longer valid.
      
      2018-08-22  Szabolcs Nagy  <szabolcs.nagy@arm.com>
      
      	* gfortran.dg/max_fmax_aarch64.f90: Rename to...
      	* gfortran.dg/max_expr.f90: ...this.
      	* gfortran.dg/min_fmin_aarch64.f90: Rename to...
      	* gfortran.dg/min_expr.f90: ...this.
      
      From-SVN: r263778
      Szabolcs Nagy committed
    • combine: Do another check before splitting a parallel (PR86771) · 90cb08ca
      When combine splits a resulting parallel into its two SETs, it has to
      place one at i2, and the other stays at i3.  This does not work if the
      destination of the SET that will be placed at i2 is modified between
      i2 and i3.  This patch fixes it.
      
      
      	* combine.c (try_combine): Do not allow splitting a resulting PARALLEL
      	of two SETs into those two SETs, one to be placed at i2, if that SETs
      	destination is modified between i2 and i3.
      
      From-SVN: r263776
      Segher Boessenkool committed
    • [2/2] Fix bogus inner induction (PR 86725) · 18bc19a7
      This patch is the second part of the fix for PR 86725.  The problem
      in the original test is that for:
      
        outer1:
          x_1 = PHI <x_4(outer2), ...>;
          ...
      
        inner:
          x_2 = PHI <x_1(outer1), x_3(...)>;
          ...
          x_3 = ...;
          ...
      
        outer2:
          x_4 = PHI <x_3(inner)>;
          ...
      
      there are corner cases in which it is possible to classify the
      inner phi as an induction but not the outer phi.  The -4.c test
      is a more direct example.
      
      After failing to classify x_1 as an induction, we go on to
      classify it as a double reduction (which is basically true).
      But we still classified the inner phi as an induction rather
      than as part of a reduction, leading to an ICE when trying
      to vectorise the outer phi.
      
      We analyse the phis for outer loops first, so the simplest
      fix is not to classify the phi as an induction if outer loop
      analysis said that it should be a reduction.
      
      The -2.c test is from the original PR.  The -3.c test is a
      version in which "wo" really is used a reduction; this was
      already correctly rejected, but for the wrong reason ("inner-loop
      induction only used outside of the outer vectorized loop").
      The -4.c test is another way of tickling the original problem
      without relying on the undefinedness of signed overflow.
      The -5.c test shows an (uninteresting) example in which the
      patch prevents a spurious failure to vectorise the outer loop.
      
      2018-08-22  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR tree-optimization/86725
      	* tree-vect-loop.c (vect_inner_phi_in_double_reduction_p): New
      	function.
      	(vect_analyze_scalar_cycles_1): Check it.
      
      gcc/testsuite/
      	PR tree-optimization/86725
      	* gcc.dg/vect/no-scevccp-pr86725-2.c: New test.
      	* gcc.dg/vect/no-scevccp-pr86725-3.c: Likewise.
      	* gcc.dg/vect/no-scevccp-pr86725-4.c: Likewise.
      	* gcc.dg/vect/no-scevccp-pr86725-5.c: Likewise.
      
      From-SVN: r263774
      Richard Sandiford committed
    • [1/2] Fix bogus double reduction (PR 86725) · 3a4da266
      This patch is the first part of the fix for PR 86725.  We would
      treat x_1 in:
      
          outer1:
            x_1 = PHI <x_4(outer2), ...>;
            ...
      
          inner:
            x_2 = ...x_1...;
            ...
            x_3 = ...;
            ...
      
          outer2:
            x_4 = PHI <x_3(inner)>;
            ...
      
      as a double reduction without checking what kind of statement x_2 is.
      In practice it has to be a phi, since for other x_2, x_1 would simply
      be a loop invariant that gets used for every inner loop iteration.
      
      The idea with doing this patch first is that, by checking x_2 really
      is a phi, we can hand off the validation of the rest of the reduction
      to the phi analysis in the inner loop.
      
      The test case is a variant of the one in the PR.
      
      2018-08-22  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR tree-optimization/86725
      	* tree-vect-loop.c (vect_is_simple_reduction): When treating
      	an outer loop phi as a double reduction, make sure that the
      	single user of the phi result is an inner loop phi.
      
      gcc/testsuite/
      	PR tree-optimization/86725
      	* gcc.dg/vect/no-scevccp-pr86725-1.c: New test.
      
      From-SVN: r263773
      Richard Sandiford committed
    • Make the vectoriser drop to strided accesses for stores with gaps · 203942b8
      We could vectorise:
      
           for (...)
             {
               a[0] = ...;
               a[1] = ...;
               a[2] = ...;
               a[3] = ...;
               a += stride;
             }
      
      (including the case when stride == 8) but not:
      
           for (...)
             {
               a[0] = ...;
               a[1] = ...;
               a[2] = ...;
               a[3] = ...;
               a += 8;
             }
      
      (where the stride is always 8).  The former was treated as a "grouped
      and strided" store, while the latter was treated as a grouped store
      with gaps, which we don't support.
      
      This patch makes us treat groups of stores with gaps at the end as
      strided groups too.  I tried to go through all uses of STMT_VINFO_STRIDED_P
      and all vector uses of DR_STEP to see whether there were any hard-baked
      assumptions, but couldn't see any.  I wondered whether we should relax:
      
        /* We do not have to consider dependences between accesses that belong
           to the same group, unless the stride could be smaller than the
           group size.  */
        if (DR_GROUP_FIRST_ELEMENT (stmtinfo_a)
            && (DR_GROUP_FIRST_ELEMENT (stmtinfo_a)
                == DR_GROUP_FIRST_ELEMENT (stmtinfo_b))
            && !STMT_VINFO_STRIDED_P (stmtinfo_a))
          return false;
      
      for cases in which the step is constant and the absolute step is known
      to be greater than the group size, but data dependence analysis should
      already return chrec_known for those cases.
      
      The new test is a version of vect-avg-15.c with the variable step
      replaced by a constant one.
      
      A natural follow-on would be to do the same for groups with gaps in
      the middle:
      
                /* Check that the distance between two accesses is equal to the type
                   size. Otherwise, we have gaps.  */
                diff = (TREE_INT_CST_LOW (DR_INIT (data_ref))
                        - TREE_INT_CST_LOW (prev_init)) / type_size;
                if (diff != 1)
                  {
                    [...]
                    if (DR_IS_WRITE (data_ref))
                      {
                        if (dump_enabled_p ())
                          dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
                                           "interleaved store with gaps\n");
                        return false;
                      }
      
      But I think we should do that separately and see what the fallout
      from this change is first.
      
      2018-08-22  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* tree-vect-data-refs.c (vect_analyze_group_access_1): Convert
      	grouped stores with gaps to a strided group.
      
      gcc/testsuite/
      	* gcc.dg/vect/vect-avg-16.c: New test.
      	* gcc.dg/vect/slp-37.c: Expect the loop to be vectorized.
      	* gcc.dg/vect/vect-strided-u8-i8-gap4.c,
      	* gcc.dg/vect/vect-strided-u8-i8-gap4-big-array.c: Likewise for
      	the second loop in main1.
      
      From-SVN: r263772
      Richard Sandiford committed
    • Only test STMT_VINFO_STRIDED_P for the first statement in a group · 3ad3b3ac
      get_load_store_type & co were testing STMT_VINFO_STRIDED_P on individual
      statements in a group instead of the first.  This has no effect on
      its own, but is needed by a later patch.
      
      2018-08-22  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* tree-vect-stmts.c (get_group_load_store_type)
      	(get_load_store_type): Only test STMT_VINFO_STRIDED_P for the
      	first statement in a group.
      
      From-SVN: r263771
      Richard Sandiford committed
    • Udate Darwin's LTO specs to match what's in gcc/gcc.c · 257d10b5
      gcc/
      	* config/darwin.h (LINK_COMMAND_SPEC_A): Sync LTO options with
      	the sequence used in gcc/gcc.c.
      
      From-SVN: r263770
      Iain Sandoe committed
    • stringify __USER_LABEL_PREFIX__ in pr85248 testcase. · f0dbdef3
      gcc/testsuite
      
      	* gcc.dg/lto/pr85248_0.c (test_alias):
      	Stringify __USER_LABEL_PREFIX__.
      	(test_noreturn): Likewise.
      
      From-SVN: r263769
      Iain Sandoe committed
    • Make the gcc-ar,nm, strip tools respond correctly to --help and --version · 26e0e97b
      when there's no plugin built.
      
      gcc/
      
      	PR other/704
      	* gcc-ar.c (main): Don’t try to invoke the plug-in if we’re not
      	building it.
      
      From-SVN: r263768
      Iain Sandoe committed
    • PR libstdc++/77854 document size_type for containers · 7c1dcf50
      	PR libstdc++/77854
      	* doc/xml/manual/status_cxx1998.xml: Document size_type and
      	difference_type for containers.
      	* doc/html/*: Regenerate.
      
      From-SVN: r263767
      Jonathan Wakely committed
    • commit missed change from r263764 · 88350fd9
      From-SVN: r263766
      Iain Sandoe committed
    • Move Darwin10 unwinder fix to a crt shim. · a49c064e
      gcc/
      	* config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Adjust to use the
      	Darwin10-specific unwinder-shim.
      	* config/darwin12.h (LINK_GCC_C_SEQUENCE_SPEC): Remove.
      	* config/rs6000/darwin.h (DARWIN_CRT1_SPEC, DARWIN_DYLIB1_SPEC): 
      	New to cater for Darwin10 Rosetta.
      
      libgcc/
      	* config/unwind-dw2-fde-darwin.c
      	(_darwin10_Unwind_FindEnclosingFunction): move from here ...
      	* config/darwin10-unwind-find-enc-func.c: … to here.
      	* config/t-darwin: Build Darwin10 unwinder shim crt.
      	* libgcc/config.host: Add the Darwin10 unwinder shim.
      
      From-SVN: r263765
      Iain Sandoe committed
    • Allw for Darwin to operate with an assembler supporting gotoff in data. · 36bd86fa
      gcc/
      
      	* config/i386/i386.c (ix86_output_addr_diff_elt): Move the MACH-O
      	specific test before the one for HAVE_AS_GOTOFF_IN_DATA.
      
      From-SVN: r263764
      Iain Sandoe committed
    • Fix FDE labels for Darwin · 333a29f9
      gcc/
      
      	PR bootstrap/81033
      	PR target/81733
      	PR target/52795
      	* gcc/dwarf2out.c (FUNC_SECOND_SECT_LABEL): New.
      	(dwarf2out_switch_text_section): Generate a local label for the second
      	function sub-section and apply it as the second FDE start label.
      	* gcc/final.c (final_scan_insn_1): Emit second FDE label after the second
      	sub-section start.
      
      From-SVN: r263763
      Iain Sandoe committed
    • re PR tree-optimization/86988 (ICE: tree check: expected integer_cst, have… · acc25807
      re PR tree-optimization/86988 (ICE: tree check: expected integer_cst, have var_decl in get_len, at tree.h:5563)
      
      2018-08-22  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/86988
      	* tree-vrp.c (vrp_prop::check_mem_ref): Bail out on VLAs.
      
      	* g++.dg/pr86988.C: New testcase.
      
      From-SVN: r263762
      Richard Biener committed
    • re PR tree-optimization/86945 (BUG with optimisation of select case statement in gfortran) · 66c4f4d8
      2018-08-22  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/86945
      	* tree-cfg.c (generate_range_test): Use unsigned arithmetic.
      
      	* gcc.dg/torture/pr86945.c: New testcase.
      
      From-SVN: r263761
      Richard Biener committed
    • rs6000 small data: add note on sdata2/r2 · 30379cbf
      for  gcc/ChangeLog
      
      	* config/rs6000/rs6000.c (SMALL_DATA_RELOC, SMALL_DATA_REG): Add
      	a comment about how uses of r2 for .sdata2 come about.
      
      From-SVN: r263760
      Alexandre Oliva committed
    • fix reassoc cut&pasto · 141f2b50
      for  gcc/ChangeLog
      
      	* tree-ssa-reassoc.c (is_reassociable_op): Fix cut&pasto.
      
      From-SVN: r263759
      Alexandre Oliva committed
    • Daily bump. · ecd06383
      From-SVN: r263758
      GCC Administrator committed
  2. 21 Aug, 2018 20 commits
    • P0646R1 Improving the Return Value of Erase-Like Algorithms I · f7191a37
      2018-08-21  François Dumont  <fdumont@gcc.gnu.org>
      
      	P0646R1 Improving the Return Value of Erase-Like Algorithms I
      	* include/debug/forward_list (forward_list::__remove_return_type):
      	Define typedef as size_type or void, according to __cplusplus value.
      	(_GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG): Define macro as abi-tag or
      	empty, according to __cplusplus value.
      	(_GLIBCXX20_ONLY): Define macro.
      	(forward_list::remove, forward_list::unique): Use typedef and macro
      	to change return type and add abi-tag for C++2a. Return number of
      	removed elements for C++2a.
      	(forward_list::remove_if<Pred>, forward_list::unique<BinPred>): Use
      	typedef to change return type for C++2a. Return number of removed
      	elements for C++2a.
      	* include/debug/list (list::__remove_return_type): Define typedef as
      	size_type or void, according to __cplusplus value.
      	(_GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG): Define macro as abi-tag or
      	empty, according to __cplusplus value.
      	(_GLIBCXX20_ONLY): Define macro.
      	(list::remove, list::unique): Use typedef and macro to change return
      	type and add abi-tag for C++2a. Return number of removed elements for
      	C++2a.
      	(list::remove_if<Predicate>, list::unique<BinaryPredicate>): Use typedef
      	to change return type for C++2a. Return number of removed elements for
      	C++2a.
      
      From-SVN: r263752
      François Dumont committed
    • Unconditionally use MAX_EXPR/MIN_EXPR for MAX/MIN intrinsics · fa3d2d38
      For floating point types, the question is what MAX(a, NaN) or MIN(a,
      NaN) should return (where "a" is a normal number).  There are valid
      usecases for returning either one, but the Fortran standard doesn't
      specify which one should be chosen.  Also, there is no consensus among
      other tested compilers.  In short, it's a mess.  So lets just do
      whatever is fastest, which is using MAX_EXPR/MIN_EXPR which are not
      defined to do anything in particular if one of the operands is a NaN.
      
      gcc/fortran/ChangeLog:
      
      2018-08-21  Janne Blomqvist  <jb@gcc.gnu.org>
      
      	* trans-intrinsic.c (gfc_conv_intrinsic_minmax): Use
      	MAX_EXPR/MIN_EXPR unconditionally for real arguments.
      	* gfortran.texi (Compiler Characteristics): Document MAX/MIN
      	behavior wrt NaN.
      
      gcc/testsuite/ChangeLog:
      
      2018-08-21  Janne Blomqvist  <jb@gcc.gnu.org>
      
      	* gfortran.dg/nan_1.f90: Remove tests that test MAX/MIN with NaNs.
      
      From-SVN: r263751
      Janne Blomqvist committed
    • re PR fortran/25829 ([F03] Asynchronous IO support) · 2b4c9065
      2018-08-21  Nicolas Koenig  <koenigni@gcc.gnu.org>
      	Thomas Koenig <tkoenig@gcc.gnu.org>
      
      	PR fortran/25829
      	* gfortran.texi: Add description of asynchronous I/O.
      	* trans-decl.c (gfc_finish_var_decl): Treat asynchronous variables
      	as volatile.
      	* trans-io.c (gfc_build_io_library_fndecls): Rename st_wait to
      	st_wait_async and change argument spec from ".X" to ".w".
      	(gfc_trans_wait): Pass ID argument via reference.
      
      2018-08-21  Nicolas Koenig  <koenigni@gcc.gnu.org>
      	Thomas Koenig <tkoenig@gcc.gnu.org>
      
      	PR fortran/25829
      	* gfortran.dg/f2003_inquire_1.f03: Add write statement.
      	* gfortran.dg/f2003_io_1.f03: Add wait statement.
      
      2018-08-21  Nicolas Koenig  <koenigni@gcc.gnu.org>
      	Thomas Koenig <tkoenig@gcc.gnu.org>
      
      	PR fortran/25829
      	* Makefile.am: Add async.c to gfor_io_src.
      	Add async.h to gfor_io_headers.
      	* Makefile.in: Regenerated.
      	* gfortran.map: Add _gfortran_st_wait_async.
      	* io/async.c: New file.
      	* io/async.h: New file.
      	* io/close.c: Include async.h.
      	(st_close): Call async_wait for an asynchronous unit.
      	* io/file_pos.c (st_backspace): Likewise.
      	(st_endfile): Likewise.
      	(st_rewind): Likewise.
      	(st_flush): Likewise.
      	* io/inquire.c: Add handling for asynchronous PENDING
      	and ID arguments.
      	* io/io.h (st_parameter_dt): Add async bit.
      	(st_parameter_wait): Correct.
      	(gfc_unit): Add au pointer.
      	(st_wait_async): Add prototype.
      	(transfer_array_inner): Likewise.
      	(st_write_done_worker): Likewise.
      	* io/open.c: Include async.h.
      	(new_unit): Initialize asynchronous unit.
      	* io/transfer.c (async_opt): New struct.
      	(wrap_scalar_transfer): New function.
      	(transfer_integer): Call wrap_scalar_transfer to do the work.
      	(transfer_real): Likewise.
      	(transfer_real_write): Likewise.
      	(transfer_character): Likewise.
      	(transfer_character_wide): Likewise.
      	(transfer_complex): Likewise.
      	(transfer_array_inner): New function.
      	(transfer_array): Call transfer_array_inner.
      	(transfer_derived): Call wrap_scalar_transfer.
      	(data_transfer_init): Check for asynchronous I/O.
      	Perform a wait operation on any pending asynchronous I/O
      	if the data transfer is synchronous. Copy PDT and enqueue
      	thread for data transfer.
      	(st_read_done_worker): New function.
      	(st_read_done): Enqueue transfer or call st_read_done_worker.
      	(st_write_done_worker): New function.
      	(st_write_done): Enqueue transfer or call st_read_done_worker.
      	(st_wait): Document as no-op for compatibility reasons.
      	(st_wait_async): New function.
      	* io/unit.c (insert_unit): Use macros LOCK, UNLOCK and TRYLOCK;
      	add NOTE where necessary.
      	(get_gfc_unit): Likewise.
      	(init_units): Likewise.
      	(close_unit_1): Likewise. Call async_close if asynchronous.
      	(close_unit): Use macros LOCK and UNLOCK.
      	(finish_last_advance_record): Likewise.
      	(newunit_alloc): Likewise.
      	* io/unix.c (find_file): Likewise.
      	(flush_all_units_1): Likewise.
      	(flush_all_units): Likewise.
      	* libgfortran.h (generate_error_common): Add prototype.
      	* runtime/error.c: Include io.h and async.h.
      	(generate_error_common): New function.
      
      2018-08-21  Nicolas Koenig  <koenigni@gcc.gnu.org>
      	Thomas Koenig <tkoenig@gcc.gnu.org>
      
      	PR fortran/25829
      	* testsuite/libgomp.fortran/async_io_1.f90: New test.
      	* testsuite/libgomp.fortran/async_io_2.f90: New test.
      	* testsuite/libgomp.fortran/async_io_3.f90: New test.
      	* testsuite/libgomp.fortran/async_io_4.f90: New test.
      	* testsuite/libgomp.fortran/async_io_5.f90: New test.
      	* testsuite/libgomp.fortran/async_io_6.f90: New test.
      	* testsuite/libgomp.fortran/async_io_7.f90: New test.
      
      
      Co-Authored-By: Thomas Koenig <tkoenig@gcc.gnu.org>
      
      From-SVN: r263750
      Nicolas Koenig committed
    • re PR c++/86499 (lambda-expressions with capture-default are allowed at namespace scope) · 774fb6c4
      	PR c++/86499
      	* parser.c (cp_parser_lambda_introducer): Give error if a non-local
      	lambda has a capture-default.
      
      	* g++.dg/cpp0x/lambda/lambda-non-local.C: New test.
      	* g++.dg/cpp0x/lambda/lambda-this10.C: Adjust dg-error.
      
      From-SVN: r263749
      Marek Polacek committed
    • decl.c (check_static_variable_definition): Change to return void. · 55082d81
      2018-08-21  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* decl.c (check_static_variable_definition): Change to return void.
      
      From-SVN: r263742
      Paolo Carlini committed
    • PR c++/86981, Implement -Wpessimizing-move. · 79ca9c35
      	* c.opt (Wpessimizing-move): New option.
      
      	* typeck.c (decl_in_std_namespace_p): New.
      	(is_std_move_p): New.
      	(maybe_warn_pessimizing_move): New.
      	(can_do_nrvo_p): New, factored out of ...
      	(check_return_expr): ... here.  Warn about potentially harmful
      	std::move in a return statement.
      
      	* doc/invoke.texi: Document -Wpessimizing-move.
      
      	* g++.dg/cpp0x/Wpessimizing-move1.C: New test.
      	* g++.dg/cpp0x/Wpessimizing-move2.C: New test.
      	* g++.dg/cpp0x/Wpessimizing-move3.C: New test.
      	* g++.dg/cpp0x/Wpessimizing-move4.C: New test.
      	* g++.dg/cpp1z/Wpessimizing-move1.C: New test.
      
      From-SVN: r263741
      Marek Polacek committed
    • re PR c++/65043 (Expected narrowing conversion during list initialization of bool from double) · 992931ba
      	PR c++/65043
      	* call.c (standard_conversion): Set check_narrowing.
      	* typeck2.c (check_narrowing): Use CP_INTEGRAL_TYPE_P rather
      	than comparing with INTEGER_TYPE.
      
      	* g++.dg/concepts/pr67595.C: Add dg-warning.
      	* g++.dg/cpp0x/Wnarrowing11.C: New test.
      	* g++.dg/cpp0x/Wnarrowing12.C: New test.
      	* g++.dg/cpp0x/rv-cast5.C: Add static_cast.
      
      From-SVN: r263739
      Marek Polacek committed
    • * cp-tree.h: Fix typo. · d3e993e9
      From-SVN: r263738
      Marek Polacek committed
    • [Ada] Minor reformattings · 92a68a04
      2018-08-21  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* checks.adb, contracts.adb, exp_aggr.adb, exp_attr.adb,
      	exp_ch6.adb, exp_ch7.adb, exp_ch9.adb, exp_unst.adb,
      	exp_util.adb, freeze.adb, gnatlink.adb, layout.adb,
      	lib-writ.adb, lib-xref-spark_specific.adb, sem_ch13.adb,
      	sem_ch3.adb, sem_ch6.adb, sem_res.adb, sem_util.adb, sinfo.ads,
      	sprint.adb: Minor reformatting.
      
      From-SVN: r263737
      Hristian Kirtchev committed
    • [Ada] Add a new gnat tool vxlink · 5ec8edb5
      VxLink is a helper tool used as a wrapper around g++/gcc to build
      VxWorks DKM (Downloadable Kernel Modules).
      
      Such DKM is a partially linked object that includes entry points for
      constructors and destructors.
      
      This tool thus uses g++ to generate an intermediate partially linked
      object, retrieves the list of constructors and destructors in it and
      produces a C file that lists those ctors/dtors in a way that is
      understood be VxWorks kernel. It then links this file with the
      intermediate object to produce a valid DKM.
      
      2018-08-21  Jerome Lambourg  <lambourg@adacore.com>
      
      gcc/ada/
      
      	* vxlink-bind.adb, vxlink-bind.ads, vxlink-link.adb,
      	vxlink-link.ads, vxlink-main.adb, vxlink.adb, vxlink.ads: Add a
      	new tool vxlink to handle VxWorks constructors in DKMs.
      	* gcc-interface/Makefile.in: add rules to build vxlink
      
      From-SVN: r263736
      Jerome Lambourg committed
    • [Ada] Crash on expression function and tagged types · 084e3bd1
      This patch fixes a compiler abort on an expression function whose
      expression includes tagged types that have not been frozen before the
      generated body of the function is analyzed, even though that body is
      inserted at the end of the current declarative part.
      
      2018-08-21  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch6.adb (Analyze_Subprogram_Body_Helper, Mask_Type):
      	Refine the handling of freezing types for expression functions
      	that are not completions, when analyzing the generated body for
      	the function: the body is inserted at the end of the enclosing
      	declarative part, and its analysis may freeze types declared in
      	the same scope that have not been frozen yet.
      
      gcc/testsuite/
      
      	* gnat.dg/expr_func7.adb, gnat.dg/expr_func7.ads: New testcase.
      
      From-SVN: r263735
      Ed Schonberg committed
    • [Ada] Spurious crash on expression function as completion with contracts · 0db1c386
      This patch fixes a compiler abort on an expression function that is a
      completion of a subprogram with preconditions. The problem is caused by
      the presence of types in the precondition that are not frozen when the
      subprogram body constructed for the expression function receives the
      code that enforces the precondition. These types must be frozen before
      the contract is expanded, so the freeze nodes for these types appear in
      the proper scope. This is analogous to what is done with type references
      that appear in the original expression of the expression function.
      
      2018-08-21  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch6.adb: Remove Freeze_Expr_Types.
      	* freeze.ads, freeze.adb (Freeze_Expr_Types): Moved from
      	sem_ch6.adb, and extended to handle other expressions that may
      	contain unfrozen types that must be frozen in their proper
      	scopes.
      	* contracts.adb (Analyze_Entry_Or_Subprogram_Contract): If the
      	contract is for the generated body of an expression function
      	that is a completion, traverse the expressions for pre- and
      	postconditions to freeze all types before adding the contract
      	code within the subprogram body.
      
      gcc/testsuite/
      
      	* gnat.dg/expr_func6.adb, gnat.dg/expr_func6.ads: New testcase.
      
      From-SVN: r263734
      Ed Schonberg committed
    • [Ada] Retention of with clauses for ignored Ghost units · 5b1c4547
      This patch ensures that with clauses that mention ignored Ghost units are
      retained in the tree. The retention is necessary for several reasons:
      
         * The with clauses allow the new elaboration order mechanism to
           produce the same library edges regardless of whether the Ghost unit
           is checked or ignored. This ensures that the elaboration order
           remains consistent.
      
         * The with clauses allow the unnesting mechanism to properly
           recognize that all units have been examined for unnesing purposes.
      
      No observable impact, no test needed.
      
      2018-08-21  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* sem_ch10.adb: Remove the with and use clause for unit Ghost.
      	(Analyze_With_Clause): Do not mark a with clause which mentions
      	an ignored Ghost code for elimination.
      
      From-SVN: r263733
      Hristian Kirtchev committed
    • [Ada] Crash processing SPARK annotate aspect · 322d87a9
      The compiler blows up writing the ALI file of a package that has a ghost
      subprogram with an annotate contract.
      
      2018-08-21  Javier Miranda  <miranda@adacore.com>
      
      gcc/ada/
      
      	* lib-writ.adb (Write_Unit_Information): Handle pragmas removed
      	by the expander.
      
      gcc/testsuite/
      
      	* gnat.dg/spark2.adb, gnat.dg/spark2.ads: New testcase.
      
      From-SVN: r263732
      Javier Miranda committed
    • [Ada] Spurious error on overriding protected function in instance · 24241bd0
      The conformance between an overriding protected operation with
      progenitors and the overridden interface operation requires subtype
      conformance; requiring equality of return types in the case of a
      function is too restrictive and leads to spurious errors when the return
      type is a generic actual.
      
      2018-08-21  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch6.adb (Check_Synchronized_Overriding): The conformance
      	between an overriding protected operation and the overridden
      	abstract progenitor operation requires subtype conformance;
      	requiring equality of return types in the case of a function is
      	too restrictive and leads to spurious errors when the return
      	type is a generic actual.
      
      gcc/testsuite/
      
      	* gnat.dg/prot6.adb, gnat.dg/prot6.ads: New testcase.
      
      From-SVN: r263731
      Ed Schonberg committed
    • [Ada] Properly set scope of artificial entities in blocks · 5bb9ebcb
      2018-08-21  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* exp_ch9.adb (Expand_N_Timed_Entry_Call,
      	Expand_Conditional_Entry_Call): Use Reset_Scopes_Of to set
      	properly the scope of all entities created in blocks generated
      	by the expansion of these constructs.
      
      From-SVN: r263730
      Ed Schonberg committed
    • [Ada] Fix scope computation for loop statements · 6989a2bb
      2018-08-21  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Build_Predicate_Functioss): Apply
      	Reset_Quantified_Variables_Scope after predicate function has
      	been analyzed, so that the scope can be reset on the generated
      	loop statements that have replaced the quantified expressions.
      
      From-SVN: r263729
      Ed Schonberg committed
    • [Ada] Einfo: remove obsolete code · 09825f92
      2018-08-21  Bob Duff  <duff@adacore.com>
      
      gcc/ada
      
      	* einfo.ads, einfo.adb (Private_View, Shadow_Entities): Remove
      	obsolete code.
      
      From-SVN: r263728
      Bob Duff committed
    • [Ada] Update for Ownership rules for access types according to AI12-0240 · 7d8cc2b6
      The implementation of these Ownership rules for safe pointers and
      automatic memory management is still a prototype at an experimental
      stage.
      
      To activate the checks, the code should be compiled with the debug flag
      -gnatdF and the flag -gnatd.F for setting the context for formal
      verification of SPARK.
      
      These changes do not affect compilation.
      
      2018-08-21  Maroua Maalej  <maalej@adacore.com>
      
      gcc/ada/
      
      	* sem_spark.adb (Check_Call_Statement): Check global and formal
      	parameter permissions at call sites.
      	(Check_Callable_Body): Assume permissions on globals and
      	parameters depending on their modes then analyse the body
      	operations.
      	(Check_Declaration): Consider both deep (including elementary
      	access) object declarations and normal variables. First check
      	whether the deep object is of Ownership Aspec True or not, then,
      	depending on its initialization, assign the appropriate state.
      	Check related to non access type variables deal with
      	initialization value permissions.
      	(Check_Expression): Check nodes used in the expression being
      	analyzed.
      	(Check_Globals): Call by Check_Call_Statement to perform the
      	check on globals.
      	(Check_List): Call Check_Node on each element of the list.
      	(Check_Loop_Statement): Check the Iteration_Scheme and loop
      	statements.
      	(Check_Node): Main traversal procedure to check safe pointer usage.
      	(Check_Package_Body): Check subprogram's body.
      	(Check_Param_In): Take a formal and an actual parameter and
      	Check the permission of every in-mode parameter.
      	(Check_Param_Out): Take a formal and an actual parameter and
      	check the state of out-mode and in out-mode parameters.
      	(Check_Statement): Check statements other than procedure call.
      	(Get_Perm, Get_Perm_Or_Tree, Get_Perm_Tree): Find out the state
      	related to the given name.
      	(Is_Deep): Return True if an object is of access type or has
      	subfields of access type.
      	(Perm_Error, Perm_Error_Subprogram_End): Add an error message
      	whenever the found state on the given name is different from the
      	one expected (in the statement being analyzed).
      	(Process_Path): Given an operation and a current state, call
      	Perm_Error if there is any mismatch.
      	(Return_Declarations, Return_Globals, Return_The_Global): Check
      	the state of a given name at the end of the subprogram. These
      	procedures may change depending on how we shall finally deal
      	with globals and the rhs state in a move operation.
      	(Set_Perm_Extensions, Set_Perm_Prefixes_Borrow,
      	Set_Perm_Prefixes, Setup_Globals, Setup_Parameter_Or_Global,
      	Setup_Parameters): Set up the new states to the given node and
      	up and down the tree after an operation.
      	(Has_Ownership_Aspect_True): This function may disappear later
      	when the Ownership Aspect will be implemented in the FE.
      
      From-SVN: r263727
      Maroua Maalej committed
    • [Ada] Spurious ambiguity error on call returning an access type · 41306c0a
      If F is a function with a single defaulted parameter that returns an
      access_to_array type, then F (I) may designate either the return type or
      an indexing of the result of the call, after implicit dereferencing.  If
      the component type C of the array type AR is accces AR this is ambiguous
      in a context whose expected type is C. If F is parameterless the call is
      not ambiguous.
      
      2018-08-21  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_res.adb (Resolve_Call): Resolve correctly a parameterless
      	call that returns an access type whose designated type is the
      	component type of an array, when the function has no defaulted
      	parameters.
      
      gcc/testsuite/
      
      	* gnat.dg/access5.adb, gnat.dg/access5.ads: New testcase.
      
      From-SVN: r263726
      Ed Schonberg committed