aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2018-08-22module.c (load_generic_interfaces): Move call to find_symbol() so that only ↵Andrew Benson2-3/+8
occurs if actually needed. 2018-08-22 Andrew Benson <abensonca@gmail.com> * module.c (load_generic_interfaces): Move call to find_symbol() so that only occurs if actually needed. From-SVN: r263784
2018-08-22Update write after approval listAndrew Benson1-0/+1
2018-08-22 Andrew Benson <abensonca@gmail.com> * MAINTAINERS: Add self to write after approval list. From-SVN: r263783
2018-08-22re PR fortran/86888 ([F08] allocatable components of indirectly recursive type)Janus Weil11-32/+52
fix PR 86888 2018-08-22 Janus Weil <janus@gcc.gnu.org> PR fortran/86888 * decl.c (gfc_match_data_decl): Allow allocatable components of indirectly recursive type. * resolve.c (resolve_component): Remove two errors messages ... (resolve_fl_derived): ... and replace them by a new one. 2018-08-22 Janus Weil <janus@gcc.gnu.org> PR fortran/86888 * gfortran.dg/alloc_comp_basics_6.f90: Update an error message and add an additional case. * gfortran.dg/alloc_comp_basics_7.f90: New test case. * gfortran.dg/class_17.f03: Update error message. * gfortran.dg/class_55.f90: Ditto. * gfortran.dg/dtio_11.f90: Update error messages. * gfortran.dg/implicit_actual.f90: Add an error message. * gfortran.dg/typebound_proc_12.f90: Update error message. From-SVN: r263782
2018-08-22PR middle-end/87052 - STRING_CST printing incomplete in Gimple dumpsMartin Sebor5-48/+77
gcc/testsuite/ChangeLog: PR middle-end/87052 * gcc.dg/pr87052.c: New test. * gcc.dg/tree-ssa/dump-3.c: Adjust. gcc/ChangeLog: PR middle-end/87052 * tree-pretty-print.c (pretty_print_string): Add argument. (dump_generic_node): Call to pretty_print_string with string size. From-SVN: r263781
2018-08-22[ fix changelog ]Segher Boessenkool1-0/+1
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
2018-08-22Change AArch64 specific FMAX/FMIN tests into generic MAX_EXPR/MIN_EXPR testsSzabolcs Nagy3-4/+11
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
2018-08-22combine: Do another check before splitting a parallel (PR86771)Segher Boessenkool2-2/+14
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
2018-08-22[2/2] Fix bogus inner induction (PR 86725)Richard Sandiford7-0/+145
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
2018-08-22[1/2] Fix bogus double reduction (PR 86725)Richard Sandiford4-0/+39
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
2018-08-22Make the vectoriser drop to strided accesses for stores with gapsRichard Sandiford7-15/+77
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
2018-08-22Only test STMT_VINFO_STRIDED_P for the first statement in a groupRichard Sandiford2-4/+13
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
2018-08-22Udate Darwin's LTO specs to match what's in gcc/gcc.cIain Sandoe2-1/+6
gcc/ * config/darwin.h (LINK_COMMAND_SPEC_A): Sync LTO options with the sequence used in gcc/gcc.c. From-SVN: r263770
2018-08-22stringify __USER_LABEL_PREFIX__ in pr85248 testcase.Iain Sandoe2-2/+13
gcc/testsuite * gcc.dg/lto/pr85248_0.c (test_alias): Stringify __USER_LABEL_PREFIX__. (test_noreturn): Likewise. From-SVN: r263769
2018-08-22Make the gcc-ar,nm, strip tools respond correctly to --help and --versionIain Sandoe2-2/+20
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
2018-08-22PR libstdc++/77854 document size_type for containersJonathan Wakely5-2/+24
PR libstdc++/77854 * doc/xml/manual/status_cxx1998.xml: Document size_type and difference_type for containers. * doc/html/*: Regenerate. From-SVN: r263767
2018-08-22commit missed change from r263764Iain Sandoe1-1/+1
From-SVN: r263766
2018-08-22Move Darwin10 unwinder fix to a crt shim.Iain Sandoe8-29/+57
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
2018-08-22Allw for Darwin to operate with an assembler supporting gotoff in data.Iain Sandoe2-2/+7
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
2018-08-22Fix FDE labels for DarwinIain Sandoe3-2/+23
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
2018-08-22re PR tree-optimization/86988 (ICE: tree check: expected integer_cst, have ↵Richard Biener4-0/+27
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
2018-08-22re PR tree-optimization/86945 (BUG with optimisation of select case ↵Richard Biener4-11/+35
statement in gfortran) 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
2018-08-22rs6000 small data: add note on sdata2/r2Alexandre Oliva2-0/+8
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
2018-08-22fix reassoc cut&pastoAlexandre Oliva2-1/+5
for gcc/ChangeLog * tree-ssa-reassoc.c (is_reassociable_op): Fix cut&pasto. From-SVN: r263759
2018-08-22Daily bump.GCC Administrator1-1/+1
From-SVN: r263758
2018-08-21P0646R1 Improving the Return Value of Erase-Like Algorithms IFrançois Dumont3-61/+199
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
2018-08-21Unconditionally use MAX_EXPR/MIN_EXPR for MAX/MIN intrinsicsJanne Blomqvist5-80/+37
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
2018-08-21re PR fortran/25829 ([F03] Asynchronous IO support)Nicolas Koenig32-150/+1971
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
2018-08-21re PR c++/86499 (lambda-expressions with capture-default are allowed at ↵Marek Polacek5-1/+24
namespace scope) 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
2018-08-21decl.c (check_static_variable_definition): Change to return void.Paolo Carlini2-21/+17
2018-08-21 Paolo Carlini <paolo.carlini@oracle.com> * decl.c (check_static_variable_definition): Change to return void. From-SVN: r263742
2018-08-21PR c++/86981, Implement -Wpessimizing-move.Marek Polacek12-19/+423
* 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
2018-08-21re PR c++/65043 (Expected narrowing conversion during list initialization of ↵Marek Polacek8-3/+80
bool from double) 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
2018-08-21* cp-tree.h: Fix typo.Marek Polacek2-1/+5
From-SVN: r263738
2018-08-21[Ada] Minor reformattingsHristian Kirtchev22-132/+163
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
2018-08-21[Ada] Add a new gnat tool vxlinkJerome Lambourg9-0/+1189
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
2018-08-21[Ada] Crash on expression function and tagged typesEd Schonberg5-16/+58
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
2018-08-21[Ada] Spurious crash on expression function as completion with contractsEd Schonberg8-209/+291
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
2018-08-21[Ada] Retention of with clauses for ignored Ghost unitsHristian Kirtchev2-3/+6
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
2018-08-21[Ada] Crash processing SPARK annotate aspectJavier Miranda5-1/+45
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
2018-08-21[Ada] Spurious error on overriding protected function in instanceEd Schonberg5-1/+67
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
2018-08-21[Ada] Properly set scope of artificial entities in blocksEd Schonberg2-11/+36
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
2018-08-21[Ada] Fix scope computation for loop statementsEd Schonberg2-1/+45
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
2018-08-21[Ada] Einfo: remove obsolete codeBob Duff3-75/+5
2018-08-21 Bob Duff <duff@adacore.com> gcc/ada * einfo.ads, einfo.adb (Private_View, Shadow_Entities): Remove obsolete code. From-SVN: r263728
2018-08-21[Ada] Update for Ownership rules for access types according to AI12-0240Maroua Maalej2-2758/+1191
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
2018-08-21[Ada] Spurious ambiguity error on call returning an access typeEd Schonberg5-1/+38
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
2018-08-21[Ada] Document entries of the target parametrization fileYannick Moy3-3/+66
2018-08-21 Yannick Moy <moy@adacore.com> gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Document entries of the target parametrization file. * gnat_ugn.texi: Regenerate. From-SVN: r263725
2018-08-21[Ada] Set scope of elaboration flag for 'AccessEd Schonberg2-0/+13
2018-08-21 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_attr.adb: Set scope of elaboration flag for 'Access. From-SVN: r263724
2018-08-21[Ada] Sprint: add guard on printing aspectsEd Schonberg2-2/+8
2018-08-21 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sprint.adb: Add guard on printing aspects. From-SVN: r263723
2018-08-21[Ada] Crash compiling SPARK ghost functions with callgraph infoJavier Miranda2-1/+13
The compiler blows up generating the callgraph output of SPARK ghost subprograms whose contracts invoke ghost functions. 2018-08-21 Javier Miranda <miranda@adacore.com> gcc/ada/ * exp_cg.adb (Generate_CG_Output): Handle calls removed by the expander. From-SVN: r263722
2018-08-21[Ada] Unnesting: do not set size of access subprogramsEd Schonberg2-0/+15
2018-08-21 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * layout.adb: Do not set size of access subprogram if unnesting. From-SVN: r263721
2018-08-21[Ada] Unnesting: do not emit warnings for access to subprogramsEd Schonberg2-1/+10
2018-08-21 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * freeze.adb: Remove warnings for access to subprograms when unnesting is active. From-SVN: r263720