1. 22 May, 2018 4 commits
    • re PR tree-optimization/85863 (ICE in compiling spec2006 fortran test case… · 4515e413
      re PR tree-optimization/85863 (ICE in compiling spec2006 fortran test case solib.fppized.f starting with r260283)
      
      2018-05-22  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/85863
      	* tree-vect-stmts.c (vect_is_simple_cond): Only widen invariant
      	comparisons when vectype is specified.
      	(vectorizable_condition): Do not specify vectype for
      	vect_is_simple_cond when SLP vectorizing.
      
      	* gfortran.fortran-torture/compile/pr85863.f: New testcase.
      
      From-SVN: r260501
      Richard Biener committed
    • * MAINTAINERS (loop-optimizer): Add myself. · c5470754
      From-SVN: r260500
      Bin Cheng committed
    • re PR fortran/85841 ([F2018] reject deleted features) · 286f737c
      2018-05-22  Janus Weil  <janus@gcc.gnu.org>
      
      	PR fortran/85841
      	* libgfortran.h: Remove the macros GFC_STD_F2008_TS and
      	GFC_STD_OPT_F08TS.
      	* error.c (notify_std_msg): Remove GFC_STD_F2008_TS.
      	* options.c (set_default_std_flags): Ditto.
      	(gfc_handle_option): Make -std=f2008ts an alias for -std=f2018.
      	* array.c (gfc_match_array_spec): Replace GFC_STD_F2008_TS by
      	GFC_STD_F2018.
      	* check.c (gfc_check_atomic, gfc_check_event_query,
      	gfc_check_c_f_pointer, gfc_check_c_f_procpointer, gfc_check_c_funloc,
      	gfc_check_c_loc, gfc_check_num_images, gfc_check_this_image): Ditto.
      	* decl.c (gfc_verify_c_interop_param, gfc_match_decl_type_spec): Ditto.
      	* intrinsic.c (add_functions, add_subroutines,
      	gfc_check_intrinsic_standard): Ditto.
      	* iso-c-binding.def: Ditto.
      	* iso-fortran-env.def: Ditto.
      	* match.c (gfc_match_event_post, gfc_match_event_wait,
      	gfc_match_fail_image, gfc_match_form_team, gfc_match_change_team,
      	gfc_match_end_team, gfc_match_sync_team): Ditto.
      	* gfortran.texi: Remove mention of -std=f2008ts.
      	Move TSs into F2018 section.
      	* invoke.texi: Update documentation of -std=f2008ts.
      
      
      2018-05-22  Janus Weil  <janus@gcc.gnu.org>
      
      	PR fortran/85841
      	* gfortran.dg/assumed_rank_5.f90: Update error message.
      	* gfortran.dg/assumed_type_4.f90: Ditto.
      	* gfortran.dg/bind_c_array_params.f03: Ditto.
      	* gfortran.dg/bind_c_usage_28.f90: Ditto.
      	* gfortran.dg/c_funloc_tests_5.f03: Ditto.
      	* gfortran.dg/c_funloc_tests_6.f90: Ditto.
      	* gfortran.dg/c_loc_tests_11.f03: Ditto.
      	* gfortran.dg/coarray_atomic_2.f90: Ditto.
      	* gfortran.dg/coarray_collectives_2.f90: Ditto.
      	* gfortran.dg/coarray_collectives_10.f90: Ditto.
      	* gfortran.dg/coarray_collectives_13.f90: Ditto.
      	* gfortran.dg/rank_3.f90: Ditto.
      	* gfortran.dg/error_stop_4.f90: Replace -std=f2008ts by -std=f2008.
      	* gfortran.dg/implicit_14.f90: Ditto.
      
      From-SVN: r260499
      Janus Weil committed
    • Daily bump. · 9687412c
      From-SVN: r260497
      GCC Administrator committed
  2. 21 May, 2018 36 commits
    • * es.po: Update. · fb235814
      From-SVN: r260492
      Joseph Myers committed
    • simd-5.c: Fix comment. · 7157e925
      2018-05-21  Christian Groessler  <chris@groessler.org>
      
      	* gcc.c-torture/compile/simd-5.c: Fix comment.
      
      From-SVN: r260491
      Christian Groessler committed
    • re PR target/85657 (Make __ibm128 a separate type, even if long double uses the… · c05fb645
      re PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM double-double format)
      
      2018-05-21  Michael Meissner  <meissner@linux.ibm.com>
      
      	PR target/85657
      	* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not
      	define __ibm128 as long double.
      	* config/rs6000/rs6000.c (rs6000_init_builtins): Create __ibm128
      	as a distinct type with IEEE 128-bit floating point is supported.
      	(init_float128_ieee): Fix up conversions between IFmode and IEEE
      	128-bit types to use the correct functions.
      	(rs6000_expand_float128_convert): Use explicit FLOAT_EXTEND to
      	convert between 128-bit floating point types that have different
      	modes but the same representation, instead of using gen_lowpart to
      	makean alias.
      	* config/rs6000/rs6000.md (IFKF): New iterator for IFmode and
      	KFmode.
      	(IFKF_reg): New attributes to give the register constraints for
      	IFmode and KFmode.
      	(extend<mode>tf2_internal): New insns to mark an explicit
      	conversion between 128-bit floating point types that have a
      	different mode but share the same representation.
      
      [gcc/testsuite]
      2018-05-21  Michael Meissner  <meissner@linux.ibm.com>
      
      	PR target/85657
      	* gcc.target/powerpc/pr85657-1.c: New test for converting between
      	__float128, __ibm128, and long double.
      	* gcc.target/powerpc/pr85657-2.c: Likewise.
      	* gcc.target/powerpc/pr85657-3.c: Likewise.
      	* g++.dg/pr85667.C: New test to make sure __ibm128 is
      	implementated as a separate type internally, and is not just an
      	alias for long double.
      
      From-SVN: r260490
      Michael Meissner committed
    • re PR target/85657 (Make __ibm128 a separate type, even if long double uses the… · 75705fa9
      re PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM double-double format)
      
      [gcc]
      2018-05-21  Michael Meissner  <meissner@linux.ibm.com>
      
      	PR target/85657
      	* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not
      	define __ibm128 as long double.
      	* config/rs6000/rs6000.c (rs6000_init_builtins): Always create
      	__ibm128 as a distinct type.
      	(init_float128_ieee): Fix up conversions between IFmode and IEEE
      	128-bit types to use the correct functions.
      	(rs6000_expand_float128_convert): Use explicit FLOAT_EXTEND to
      	convert between 128-bit floating point types that have different
      	modes but the same representation, instead of using gen_lowpart to
      	makean alias.
      	* config/rs6000/rs6000.md (IFKF): New iterator for IFmode and
      	KFmode.
      	(IFKF_reg): New attributes to give the register constraints for
      	IFmode and KFmode.
      	(extend<mode>tf2_internal): New insns to mark an explicit
      	conversion between 128-bit floating point types that have a
      	different mode but share the same representation.
      
      [gcc/testsuite]
      2018-05-21  Michael Meissner  <meissner@linux.ibm.com>
      
      	PR target/85657
      	* gcc.target/powerpc/pr85657-1.c: New test for converting between
      	__float128, __ibm128, and long double.
      	* gcc.target/powerpc/pr85657-2.c: Likewise.
      	* gcc.target/powerpc/pr85657-3.c: Likewise.
      	* g++.dg/pr85667.C: New test to make sure __ibm128 is
      	implementated as a separate type internally, and is not just an
      	alias for long double.
      
      From-SVN: r260489
      Michael Meissner committed
    • Fix tree-ssa-strlen handling of partial clobbers (PR85814) · 9c8c7338
      In this PR we have:
      
        c_5 = c_4(D) + 4;
        c_12 = c_5 + 1;
        *c_5 = 2;
        a = 2;		// A
        c_21 = c_12 + 1;
        *c_12 = 2;
        a = 2;		// B
        c_28 = c_21 + 1;
        *c_21 = 2;
        a = 2;
        c_7 = c_28 + 1;
        *c_28 = 2;
      
      where a is a global int.  We decide that A can't clobber *c_5 == c_4[4]
      because the latter implies that c_4 is an object of 5 bytes or more,
      whereas a has exactly 4 bytes.
      
      The assumption for B and *c_5 is the same, but when considering B and
      *c_12, we only follow the definition of c_12 to c_5 + 1 (for good
      reason) and so have *c_12 == c_5[1].  We then don't have the same
      size guarantee and so assume that B could clobber *c_12.  This leads
      to a situation in which the strinfo for c_5 is still valid but the
      next strinfo (c_12) isn't.  We then segfaulted while trying to get
      the strinfo for c_21 + 1 == c_5 + 3 because get_stridx_plus_constant
      assumed that c_5's next strinfo (c_12) would be valid too.
      
      And of course it should be valid really.  It doesn't make sense for the
      string based at c_5 to be valid but a substring of it to be invalid.
      I don't think we can guarantee that such weird corner cases never
      happen though, even if we tried to avoid this one.
      
      One possibility would be to mark c_12 as valid on the basis that c_5
      is valid, but I'm not sure the complication is worth it given that it
      seems to trigger very rarely.  A better optimisation would be to get
      the unroller to clean up after itself a bit more...
      
      Although this particular instance of the bug relies on r249880, I think
      we could have similar problems in GCC 7.  It would be much harder to
      trigger though, especially since it relies on unfolded IR like the above.
      
      2018-05-21  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	PR tree-optimization/85814
      	* tree-ssa-strlen.c (get_stridx_plus_constant): Cope with
      	a null return from get_strinfo when unsharing the next
      	strinfo in the chain.
      
      gcc/testsuite/
      	PR tree-optimization/85814
      	* gcc.dg/torture/pr85814.c: New test.
      
      From-SVN: r260488
      Richard Sandiford committed
    • re PR fortran/85841 ([F2018] reject deleted features) · 4358400b
      2018-05-21  Janus Weil  <janus@gcc.gnu.org>
      
      	PR fortran/85841
      	PR testsuite/85865
      	* testsuite/libgomp.fortran/collapse2.f90: Add option "-std=legacy".
      	* testsuite/libgomp.fortran/omp_atomic2.f90: Ditto.
      	* testsuite/libgomp.fortran/omp_parse1.f90: Ditto.
      	* testsuite/libgomp.fortran/omp_parse3.f90: Ditto.
      	* testsuite/libgomp.fortran/task2.f90: Ditto.
      	* testsuite/libgomp.fortran/vla1.f90: Ditto.
      	* testsuite/libgomp.fortran/vla2.f90: Ditto.
      	* testsuite/libgomp.fortran/vla3.f90: Ditto.
      	* testsuite/libgomp.fortran/vla4.f90: Ditto.
      	* testsuite/libgomp.fortran/vla5.f90: Ditto.
      	* testsuite/libgomp.fortran/vla6.f90: Ditto.
      	* testsuite/libgomp.fortran/vla8.f90: Ditto.
      	* testsuite/libgomp.oacc-fortran/collapse-2.f90: Ditto.
      	* testsuite/libgomp.oacc-fortran/nested-function-1.f90: Ditto.
      
      From-SVN: r260487
      Janus Weil committed
    • parser.c (cp_parser_parameter_declaration_list): Remove bool* parameter. · 54c22d96
      2018-05-21  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* parser.c (cp_parser_parameter_declaration_list): Remove
      	bool* parameter.
      	(cp_parser_parameter_declaration_clause): Adjust.
      	(cp_parser_cache_defarg): Likewise.
      
      From-SVN: r260486
      Paolo Carlini committed
    • re PR target/84923 (gcc.dg/attr-weakref-1.c failed on aarch64) · a3c70819
              PR gcc/84923
              * varasm.c (weak_finish): Clean up weak_decls.
      
      From-SVN: r260485
      Vladimir Mezentsev committed
    • re PR c++/84588 (internal compiler error: Segmentation fault (contains_struct_check())) · 18759120
      /cp
      2018-05-21  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/84588
      	* parser.c (cp_parser_maybe_commit_to_declaration,
      	cp_parser_check_condition_declarator): New.
      	(cp_parser_simple_declaration): Use the first above.
      	(cp_parser_condition): Use both the above; enforce
      	[stmt.stmt]/2 about the declarator not specifying
      	a function or an array; improve error-recovery.
      
      /testsuite
      2018-05-21  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/84588
      	* g++.dg/cpp0x/cond1.C: New.
      	* g++.dg/cpp1y/pr84588-1.C: Likewise.
      	* g++.dg/cpp1y/pr84588-2.C: Likewise.
      	* g++.dg/cpp1y/pr84588-3.C: Likewise.
      	* g++.dg/parse/cond6.C: Likewise.
      	* g++.dg/parse/cond7.C: Likewise.
      	* g++.dg/parse/cond8.C: Likewise.
      	* g++.dg/cpp1z/decomp16.C: Update.
      	* g++.old-deja/g++.jason/cond.C: Likewise.
      
      From-SVN: r260482
      Paolo Carlini committed
    • ChangeLog for r260480 · b3229fe1
      2018-05-21  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	ChangeLog for r260480
              * gfortran.dg/graphite/block-2.f: Adjust testcase for new gfortran
              warnings for deleted and obsolescent features.
              * gfortran.dg/graphite/id-19.f: Ditto.
              * gfortran.dg/graphite/id-20.f: Ditto.
              * gfortran.dg/graphite/id-27.f90: Ditto.
              * gfortran.dg/graphite/pr82449.f: Ditto.
      
      From-SVN: r260481
      Steven G. Kargl committed
    • block-2.f: Adjust testcase for new gfortran warnings for deleted and obsolescent features. · ea81ff50
      2018-05-21  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	* gfortran.dg/graphite/block-2.f: Adjust testcase for new gfortran
         	warnings for deleted and obsolescent features.
      	* gfortran.dg/graphite/id-19.f: Ditto.
      	* gfortran.dg/graphite/id-20.f: Ditto.
      	* gfortran.dg/graphite/id-27.f90: Ditto.
      	* gfortran.dg/graphite/pr82449.f: Ditto.
      
      From-SVN: r260480
      Steven G. Kargl committed
    • Add support for opening file streams from wide character strings · b0292359
      C++17 added new overloads to <fstream> class templates to support
      opening files from wide character strings "on systems where
      filesystem::path::value_type is not char". This patch adds those
      overloads conditional on _wfopen being available, and enables them for
      pre-C++17 modes as well.
      
      	Add support for opening file streams from wide character strings.
      	* config/io/basic_file_stdio.cc [_GLIBCXX_HAVE__WFOPEN]
      	(__basic_file<char>::open(const wchar_t*, ios_base::openmode)):
      	Define new overload.
      	* config/io/basic_file_stdio.h [_GLIBCXX_HAVE__WFOPEN]
      	(__basic_file<char>::open(const wchar_t*, ios_base::openmode)):
      	Declare new overload.
      	* configure.ac: Check for _wfopen.
      	* crossconfig.m4: Likewise.
      	* configure: Regenerate.
      	* config.h.in: Regenerate.
      	* include/bits/fstream.tcc [_GLIBCXX_HAVE__WFOPEN]
      	(basic_filebuf<C,T>::open(const wchar_t*, ios_base::openmode)):
      	Define new overload.
      	* include/std/fstream [_GLIBCXX_HAVE__WFOPEN]
      	(basic_filebuf<C,T>::open(const wchar_t*, ios_base::openmode)):
      	Declare new overload.
      	[_GLIBCXX_HAVE__WFOPEN]
      	(basic_ifstream<C,T>::basic_ifstream(const wchar_t*, openmode))
      	(basic_ifstream<C,T>::basic_open(const wchar_t*, openmode))
      	(basic_ofstream<C,T>::basic_ifstream(const wchar_t*, openmode))
      	(basic_ofstream<C,T>::basic_open(const wchar_t*, openmode))
      	(basic_fstream<C,T>::basic_ifstream(const wchar_t*, openmode))
      	(basic_fstream<C,T>::basic_open(const wchar_t*, openmode)): Define
      	new overloads.
      	* testsuite/27_io/basic_filebuf/open/wchar_t/1.cc: New.
      	* testsuite/27_io/basic_ifstream/cons/wchar_t/1.cc: New.
      	* testsuite/27_io/basic_ifstream/open/wchar_t/1.cc: New.
      	* testsuite/27_io/basic_ofstream/cons/wchar_t/1.cc: New.
      	* testsuite/27_io/basic_ofstream/open/wchar_t/1.cc: New.
      	* testsuite/27_io/basic_fstream/cons/wchar_t/1.cc: New.
      	* testsuite/27_io/basic_fstream/open/wchar_t/1.cc: New.
      
      From-SVN: r260479
      Jonathan Wakely committed
    • re PR libstdc++/85845 (Many libstdc++ test failures) · 8b6d2d3b
      2018-05-21  François Dumont  <fdumont@gcc.gnu.org>
      
      	PR libstdc++/85845
      	* include/bits/stl_tree.h
      	(_Rb_tree_impl(_Rb_tree_impl&&, _Node_allocator&&)): Fix noexcept
      	qualification.
      
      From-SVN: r260478
      François Dumont committed
    • [AArch64][committed] Fix gcc.target/aarch64/vec_init_1.c for tiny and large mcmodels · a9221d82
      This recently-committed test fails the INS scan for tiny and large memory models.
      That is because instead of the:
      make_vector:
               adrp    x1, a
               adrp    x0, b
               movi    v0.4s, 0
               ldr     s2, [x1, #:lo12:a]
               ldr     s1, [x0, #:lo12:b]
               ins     v0.s[2], v2.s[0]
               ins     v0.s[3], v1.s[0]
               ret
      
      That we generate for the default small model, we end up with a simple register
      addressing mode with no addend/offset for the lane load:
      make_vector:
               movi    v0.4s, 0
               adr     x1, a
               adr     x0, b
               ld1     {v0.s}[2], [x1]
               ld1     {v0.s}[3], [x0]
               ret
      
      and
      
      make_vector:
               movi    v0.4s, 0
               adrp    x0, .LC0
               ldr     x1, [x0, #:lo12:.LC0]
               adrp    x0, .LC1
               ldr     x0, [x0, #:lo12:.LC1]
               ld1     {v0.s}[2], [x1]
               ld1     {v0.s}[3], [x0]
               ret
      
      So we end up merging the load and the lane insert.
      This patch adjusts the testcase to scan for the right thing accordingly.
      Checked that the testcase passes with -mcmodel=tiny, -mcmodel=small, -mcmodel=large.
      
      	* gcc.target/aarch64/vec_init_1.c: Scan for LD1 instead of INS for
      	tiny and large memory models.
      
      From-SVN: r260474
      Kyrylo Tkachov committed
    • Fix bogous dates in gcc/ada/ChangeLog · dc3d037e
      From-SVN: r260472
      Pierre-Marie de Rodat committed
    • [Ada] Spurious warning on object declaration with address clause · f9e9ab63
      The compiler warns on an object declaration with default initialization
      and an address clause, to indicate that the overlay implied by the address
      clause might affect a value elsewhere. The warning is suppressed if the type
      carries the Suppress_Initialization aspect. With this patch the compiler
      also inhibits the warning if the aspect is specified for the object itself.
      
      2018-05-21  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* freeze.adb (Warn_Overlay): Do not emit a wawrning on an object
      	declaration with an explicit address clause and a type with default
      	initialization, if the declaration carries an aspect
      	Suppress_Initialization.
      
      gcc/testsuite/
      
      	* gnat.dg/suppress_initialization.adb,
      	gnat.dg/suppress_initialization_pkg.ads: New testcase.
      
      From-SVN: r260471
      Ed Schonberg committed
    • [Ada] Pretty-print attribute names using mixed case · af5d8cb0
      2018-05-21  Daniel Mercier  <mercier@adacore.com>
      
      gcc/ada/
      
      	* pprint.adb: Use mixed case for attribute names.
      
      From-SVN: r260470
      Daniel Mercier committed
    • [Ada] Aspects on stubs · e9d08fd7
      This patch ensures that aspect specifications which appear on package,
      protected, and task body stubs are properly analyzed.
      
      ------------
      -- Source --
      ------------
      
      --  pack.ads
      
      package Pack
        with SPARK_Mode,
             Abstract_State => State
      is
         -------------------------------------
         -- Refined_Depends, Refined_Global --
         -------------------------------------
      
         procedure Proc_1;
         procedure Proc_2
           with Global  => (In_Out => State),
                Depends => (State  => State);
      
         task Task_Obj_1;
         task Task_Obj_2
           with Global  => (In_Out => State),
                Depends => (State  => State);
      
         ------------------
         -- Refined_Post --
         ------------------
      
         function Func_1 (Formal : Integer) return Integer;
         function Func_2 (Formal : Integer) return Integer
           with Post => Func_2'Result > Formal;
      
         -------------------
         -- Refined_State --
         -------------------
      
         package Pack_1 is end Pack_1;
         package Pack_2 with Abstract_State => State_2 is end Pack_2;
      
         ----------------
         -- SPARK_Mode --
         ----------------
      
         package Pack_3 with SPARK_Mode => Off is end Pack_3;
         package Pack_4 with SPARK_Mode => Off is end Pack_4;
         package Pack_5 is end Pack_5;
      
         protected type Prot_Typ_1 with SPARK_Mode => Off is end Prot_Typ_1;
         protected type Prot_Typ_2 with SPARK_Mode => Off is end Prot_Typ_2;
         protected type Prot_Typ_3 is end Prot_Typ_3;
      
         procedure Proc_3 with SPARK_Mode => Off;
         procedure Proc_4 with SPARK_Mode => Off;
         procedure Proc_5;
      
         task type Task_Typ_1 with SPARK_Mode => Off;
         task type Task_Typ_2 with SPARK_Mode => Off;
         task type Task_Typ_3;
      end Pack;
      
      --  pack.adb
      
      package body Pack
        with SPARK_Mode,
             Refined_State => (State => Constit)
      is
         Constit : Integer := 0;
      
         -------------------------------------
         -- Refined_Depends, Refined_Global --
         -------------------------------------
      
         procedure Proc_1 is separate
           with Refined_Global  => (In_Out  => Constit),                   --  Error
                Refined_Depends => (Constit => Constit);                   --  Error
      
         procedure Proc_2 is separate
           with Refined_Global  => (In_Out  => Constit),                   --  OK
                Refined_Depends => (Constit => Constit);                   --  OK
      
         task body Task_Obj_1 is separate
           with Refined_Global  => (In_Out  => Constit),                   --  Error
                Refined_Depends => (Constit => Constit);                   --  Error
      
         task body Task_Obj_2 is separate
           with Refined_Global  => (In_Out  => Constit),                   --  OK
                Refined_Depends => (Constit => Constit);                   --  OK
      
         ------------------
         -- Refined_Post --
         ------------------
      
         function Func_1 (Formal : Integer) return Integer is separate
           with Refined_Post => Func_1'Result > Formal;                    --  OK
      
         function Func_2 (Formal : Integer) return Integer is separate
           with Refined_Post => Func_2'Result > Formal;                    --  OK
      
         -------------------
         -- Refined_State --
         -------------------
      
         package body Pack_1 is separate
           with Refined_State => (State_1 => Constit_1);                   --  Error
      
         package body Pack_2 is separate
           with Refined_State => (State_2 => Constit_2);                   --  Error
      
         ----------------
         -- SPARK_Mode --
         ----------------
      
         package body Pack_3 is separate with SPARK_Mode => On;            --  Error
         package body Pack_4 is separate;
         package body Pack_5 is separate with SPARK_Mode => Off;           --  Error
      
         protected body Prot_Typ_1 is separate with SPARK_Mode => On;      --  Error
         protected body Prot_Typ_2 is separate;
         protected body Prot_Typ_3 is separate with SPARK_Mode => Off;     --  Error
      
         procedure Proc_3 is separate with SPARK_Mode => On;               --  Error
         procedure Proc_4 is separate;
         procedure Proc_5 is separate with SPARK_Mode => Off;              --  Error
      
         task body Task_Typ_1 is separate with SPARK_Mode => On;           --  Error
         task body Task_Typ_2 is separate;
         task body Task_Typ_3 is separate with SPARK_Mode => Off;          --  Error
      end Pack;
      
      --  pack-func_1.adb
      
      separate (Pack)
      
      function Func_1 (Formal : Integer) return Integer
        with Refined_Post => Func_1'Result > Formal                        --  Error
      is
      begin
         return Formal * 10;
      end Func_1;
      
      --  pack-func_2.adb
      
      separate (Pack)
      
      function Func_2 (Formal : Integer) return Integer
        with Refined_Post => Func_2'Result > Formal                        --  Error
      is
      begin
         return Formal * 10;
      end Func_2;
      
      --  pack-pack_1.adb
      
      separate (Pack)
      
      package body Pack_1
        with SPARK_Mode,
             Refined_State => (State_1 => Constit_1)                       --  Error
      is
         Constit_1 : Integer := 1;
      end Pack_1;
      
      --  pack-pack_2.adb
      
      separate (Pack)
      
      package body Pack_2
        with SPARK_Mode,
             Refined_State => (State_2 => Constit_2)                       --  OK
      is
         Constit_2 : Integer := 2;
      end Pack_2;
      
      --  pack-pack_3.adb
      
      separate (Pack)
      
      package body Pack_3 is end Pack_3;
      
      --  pack-pack_4.adb
      
      separate (Pack)
      
      package body Pack_4 with SPARK_Mode => On is end Pack_4;             --  OK
      
      --  pack-pack_5.adb
      
      separate (Pack)
      
      package body Pack_5 with SPARK_Mode => On is end Pack_5;             --  OK
      
      --  pack-proc_1.adb
      
      separate (Pack)
      
      procedure Proc_1
        with Refined_Global  => (In_Out  => Constit),                      --  Error
             Refined_Depends => (Constit => Constit)                       --  Error
      is begin null; end Proc_1;
      
      --  pack-proc_2.adb
      
      separate (Pack)
      
      procedure Proc_2
        with Refined_Global  => (In_Out  => Constit),                      --  Error
             Refined_Depends => (Constit => Constit)                       --  Error
      is begin null; end Proc_2;
      
      --  pack-proc_3.adb
      
      separate (Pack)
      
      procedure Proc_3 is begin null; end Proc_3;
      
      --  pack-proc_4.adb
      
      separate (Pack)
      
      procedure Proc_4 with SPARK_Mode => On is begin null; end Proc_4;    --  OK
      
      --  pack-proc_5.adb
      
      separate (Pack)
      
      procedure Proc_5 with SPARK_Mode => On is begin null; end Proc_5;    --  OK
      
      --  pack-prot_typ_1.adb
      
      separate (Pack)
      
      protected body Prot_Typ_1 is end Prot_Typ_1;
      
      --  pack-prot_typ_2.adb
      
      separate (Pack)
      
      protected body Prot_Typ_2 with SPARK_Mode => On is end Prot_Typ_2;   --  OK
      
      --  pack-prot_typ_3.adb
      
      separate (Pack)
      
      protected body Prot_Typ_3 with SPARK_Mode => On is end Prot_Typ_3;   --  OK
      
      --  pack-task_obj_1.adb
      
      separate (Pack)
      
      task body Task_Obj_1
        with Refined_Global  => (In_Out  => Constit),                      --  Error
             Refined_Depends => (Constit => Constit)                       --  Error
      is begin null; end Task_Obj_1;
      
      --  pack-task_obj_2.adb
      
      separate (Pack)
      
      task body Task_Obj_2
        with Refined_Global  => (In_Out  => Constit),                      --  Error
             Refined_Depends => (Constit => Constit)                       --  Error
      is begin null; end Task_Obj_2;
      
      --  pack-task_typ_1.adb
      
      separate (Pack)
      
      task body Task_Typ_1 is begin null; end Task_Typ_1;
      
      --  pack-task_typ_2.adb
      
      separate (Pack)
      
      task body Task_Typ_2 with SPARK_Mode => On is                        --  OK
      begin null; end Task_Typ_2;
      
      --  pack-task_typ_3.adb
      
      separate (Pack)
      
      task body Task_Typ_3 with SPARK_Mode => On is                        --  OK
      begin null; end Task_Typ_3;
      
      ----------------------------
      -- Compilation and output --
      ----------------------------
      
      $ gcc -c pack.adb
      pack.adb:12:11: useless refinement, declaration of subprogram "Proc_1" lacks
        aspect or pragma Global
      pack.adb:13:11: useless refinement, declaration of subprogram "Proc_1" lacks
        aspect or pragma Depends
      pack.adb:20:11: useless refinement, declaration of task type "Task_Obj_1" lacks
        aspect or pragma Global
      pack.adb:21:11: useless refinement, declaration of task type "Task_Obj_1" lacks
        aspect or pragma Depends
      pack.adb:42:11: aspect "Refined_State" must apply to a package body
      pack.adb:45:11: aspect "Refined_State" must apply to a package body
      pack.adb:51:41: incorrect placement of aspect "Spark_Mode"
      pack.adb:53:41: incorrect placement of aspect "Spark_Mode"
      pack.adb:55:47: incorrect placement of aspect "Spark_Mode"
      pack.adb:57:47: incorrect placement of aspect "Spark_Mode"
      pack.adb:59:38: incorrect placement of aspect "Spark_Mode"
      pack.adb:61:38: incorrect placement of aspect "Spark_Mode"
      pack.adb:63:42: incorrect placement of aspect "Spark_Mode"
      pack.adb:65:42: incorrect placement of aspect "Spark_Mode"
      pack-proc_1.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
      pack-proc_1.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
      pack-proc_2.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
      pack-proc_2.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
      pack-task_obj_1.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
      pack-task_obj_1.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
      pack-task_obj_2.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
      pack-task_obj_2.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
      pack-func_1.adb:4:08: aspect "Refined_Post" cannot apply to a subunit
      pack-func_2.adb:4:08: aspect "Refined_Post" cannot apply to a subunit
      pack-pack_1.adb:3:14: body of package "Pack_1" has unused hidden states
      pack-pack_1.adb:3:14: variable "Constit_1" defined at line 7
      pack-pack_1.adb:5:08: useless refinement, package "Pack_1" does not define
        abstract states
      pack-pack_1.adb:5:26: "State_1" is undefined
      pack-pack_3.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
      pack-pack_3.adb:3:01: value Off was set for SPARK_Mode on "Pack_3" at
        pack.ads:38
      pack-pack_4.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
      pack-pack_4.adb:3:01: value Off was set for SPARK_Mode on "Pack_4" at
        pack.ads:39
      pack-pack_4.adb:3:26: incorrect use of SPARK_Mode
      pack-pack_4.adb:3:26: value Off was set for SPARK_Mode on "Pack_4" at
        pack.ads:39
      pack-prot_typ_2.adb:3:32: incorrect use of SPARK_Mode
      pack-prot_typ_2.adb:3:32: value Off was set for SPARK_Mode on "Prot_Typ_2" at
        pack.ads:43
      pack-proc_3.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
      pack-proc_3.adb:3:01: value Off was set for SPARK_Mode on "Proc_3" at
        pack.ads:46
      pack-proc_4.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
      pack-proc_4.adb:3:01: value Off was set for SPARK_Mode on "Proc_4" at
        pack.ads:47
      pack-proc_4.adb:3:23: incorrect use of SPARK_Mode
      pack-proc_4.adb:3:23: value Off was set for SPARK_Mode on "Proc_4" at
        pack.ads:47
      pack-task_typ_2.adb:3:27: incorrect use of SPARK_Mode
      pack-task_typ_2.adb:3:27: value Off was set for SPARK_Mode on "Task_Typ_2" at
        pack.ads:51
      
      2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* sem_ch6.adb (Analyze_Generic_Subprogram_Body): Rename the call to
      	Analyze_Aspect_Specifications_On_Body_Or_Stub.
      	(Analyze_Subprogram_Body_Helper): Rename the calls to
      	Analyze_Aspect_Specifications_On_Body_Or_Stub.
      	* sem_ch9.adb (Analyze_Entry_Body): Rename the call to
      	Analyze_Aspect_Specifications_On_Body_Or_Stub.
      	* sem_ch10.adb: Add with and use clause for Sem_Ch13.
      	(Analyze_Package_Body_Stub): Add constant Id. Decorate the package stub
      	prior to analyzing its aspects.
      	(Analyze_Protected_Body_Stub): Add constant Id. Decorate the package
      	stub prior to analyzing its aspects. Save and restore the configuration
      	switches.
      	(Analyze_Task_Body_Stub): Add constant Id. Decorate the package stub
      	prior to analyzing its aspects.
      	* sem_ch13.adb (Analyze_Aspect_Specifications_On_Body_Or_Stub): Renamed
      	to Analyze_Aspects_On_Subprogram_Body_Or_Stub.
      	* sem_ch13.ads (Analyze_Aspect_Specifications_On_Body_Or_Stub): Renamed
      	to Analyze_Aspects_On_Subprogram_Body_Or_Stub.
      	* sem_prag.adb: Code reformatting.
      	(Analyze_Refined_Depends_Global_Post): Consider task body stubs.
      
      From-SVN: r260469
      Hristian Kirtchev committed
    • [Ada] Add g-soliop__qnx.ads to the runtime build · f35b3e38
      This properly links with libsocket when needed by the user code.
      
      2018-05-21  Jerome Lambourg  <lambourg@adacore.com>
      
      gcc/ada/
      
      	* gcc-interface/Makefile.in: Add g-soliop__qnx.ads to the runtime build
      	for QNX.
      
      From-SVN: r260468
      Jerome Lambourg committed
    • [Ada] Spurious error on early call region of tagged type · 7a500fd7
      This patch corrects the part of the access-before-elaboration mechanism which
      ensures that the freeze node of a tagged type is within the early call region
      of all its overriding bodies to ignore predefined primitives.
      
      ------------
      -- Source --
      ------------
      
      --  pack.ads
      
      package Pack with SPARK_Mode is
         type Parent_Typ is tagged null record;
         procedure Prim (Obj : Parent_Typ);
      
         type Deriv_Typ is new Parent_Typ with private;
         overriding procedure Prim (Obj : Deriv_Typ);
      
      private
         type Deriv_Typ is new Parent_Typ with null record;
      end Pack;
      
      -----------------
      -- Compilation --
      -----------------
      
      $ gcc -c pack.ads
      
      2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* exp_cg.adb: Remove with and use clause for Exp_Disp.
      	* exp_ch9.adb: Remove with and use clause for Exp_Disp.
      	* exp_disp.adb (Is_Predefined_Dispatching_Operation): Moved to Sem_Util.
      	(Is_Predefined_Interface_Primitive): Moved to Sem_Util.
      	(Is_Predefined_Internal_Operation): Moved to Sem_Util.
      	* exp_disp.ads (Is_Predefined_Dispatching_Operation): Moved to Sem_Util.
      	(Is_Predefined_Interface_Primitive): Moved to Sem_Util.
      	(Is_Predefined_Internal_Operation): Moved to Sem_Util.
      	* exp_dist.adb: Remove with and use clause for Exp_Disp.
      	* freeze.adb: Remove with and use clause for Exp_Disp.
      	* sem_cat.adb: Remove with and use clause for Exp_Disp.
      	* sem_ch6.adb: Remove with and use clause for Exp_Disp.
      	* sem_ch12.adb: Remove with and use clause for Exp_Disp.
      	* sem_elab.adb (Check_Overriding_Primitive): Do not process predefined
      	primitives.
      	* sem_util.adb: Remove with and use clause for Exp_Disp.
      	(Is_Predefined_Dispatching_Operation): Moved from Exp_Disp.
      	(Is_Predefined_Interface_Primitive): Moved from Exp_Disp.
      	(Is_Predefined_Internal_Operation): Moved from Exp_Disp.
      	* sem_util.ads (Is_Predefined_Dispatching_Operation): Moved from
      	Exp_Disp.
      	(Is_Predefined_Interface_Primitive): Moved from Exp_Disp.
      	(Is_Predefined_Internal_Operation): Moved from Exp_Disp.
      
      From-SVN: r260467
      Hristian Kirtchev committed
    • [Ada] Error message on invalid conversion involving limited views · 516057d3
      A type conversion may be illegal if the expression in the conversion has a
      limited view of a type. This patch expands the error report to indicate the
      presence of a limited view, and when the context is a package body it suggests
      the addition of a regular with-clause to make the full view available.
      
      Compiling client.adb must yield:
      
         client.adb:6:16: invalid conversion, not compatible with limited view
            of type "Map_Type" defined at maps.ads:2
         client.adb:6:16: add with_clause for "Maps" to current unit
      
      ----
      package Maps is
        type Map_Type is null record;
      end;
      ----
      limited with Maps;
      package Payloads is
        function Get_Map return access Maps.Map_Type;
      end;
      ----
      with Maps;
      package Maps2 is
        type New_Map_Type is new Maps.Map_Type;
      end;
      ----
      with Maps2;
      package Client is
        procedure Foo (Map : Maps2.New_Map_Type) is null;
        procedure Bar;
      end;
      ----
      with Payloads;
      package body Client is
        procedure Bar is
        begin
           Foo (Maps2.New_Map_Type (Payloads.Get_Map.all));
        end;
      end;
      
      2018-05-21  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_res.adb (Valid_Conversion): Improve error message on an illegal
      	type conversion whose expression has a limited view of a type.
      
      From-SVN: r260466
      Ed Schonberg committed
    • [Ada] Exit statement in loops over iterable objects · def6e435
      This patch fixes an omission in the expansion of loops over GNAT-specific
      iterable objects. If the source includes an explicit name for the loop,
      that name has to be preserved in the expanded code to allow exit statements
      to mention it.
      
      2018-05-21  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* exp_ch5.adb (Build_Formal_Container_Iteration): If source has
      	explicit name for iterator loop, preserve that name in expanded
      	construct, for possible use in exit statements.
      
      gcc/testsuite/
      
      	* gnat.dg/exit1.adb: New testcase.
      
      From-SVN: r260465
      Ed Schonberg committed
    • [Ada] Avoid compiler crash for body in non Ada 2012 mode · 0d8b6803
      2018-05-21  Javier Miranda  <miranda@adacore.com>
      
      gcc/ada/
      
      	* sem_ch4.adb (Analyze_Membership_Op): Avoid compiler crash when the
      	spec of a unit has Ada 2012 membership tests with multiple choices and
      	the unit body is not compiled under Ada 2012 mode.
      
      From-SVN: r260464
      Javier Miranda committed
    • [Ada] Enhance stack unwinding on VxWorks for AArch64 · 92689021
      2018-05-21  Doug Rupp  <rupp@adacore.com>
      
      gcc/ada/
      
      	* sigtramp-vxworks-target.inc: Set cfa_reg properly from sigcontext
      	pregs.
      	(CFI_COMMON_REGS): Restore LR jic probed from prologue.
      	(REGNO_PC_OFFSET): Change to correct value for Aarch64.
      
      From-SVN: r260463
      Doug Rupp committed
    • [Ada] Minor typo fixes · 9e40de1d
      2018-05-21  Jose Ruiz  <ruiz@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_ugn/gnat_utility_programs.rst, exp_attr.adb,
      	libgnarl/s-tassta.adb: Minor typo fixes
      
      From-SVN: r260462
      Jose Ruiz committed
    • [Ada] Spurious error on indexed call as prefix of a call · 12390626
      This patch refines the handling of the well-known syntactic ambiguity created
      by a function with defaulted parameters that returns an array, so that F (X)
      may designate a call to the function, or an indexing of a parameterless call.
      This patch handles the case where such a call is itself the prefix of another
      call, and the function is a primitive operation invoked in prefix form.
      
      2018-05-21  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch4.adb (Analyze_One_Call): Recognize complex cases where an
      	indexed call originally in prefix forn is itself the prefix of a
      	further call.
      
      gcc/testsuite/
      
      	* gnat.dg/array30.adb: New testcase.
      
      From-SVN: r260461
      Ed Schonberg committed
    • [Ada] Clarify code for accessing full view of a type · a2fcf1e0
      2018-05-21  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* sem_eval.adb (Is_Null_Range): Clarify access to the full view of a
      	type.
      	(Not_Null_Range): Same as above.
      
      From-SVN: r260460
      Piotr Trojanek committed
    • [Ada] Minor reformatting · 663afa9f
      2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* exp_ch3.adb: Minor reformatting.
      	* exp_ch6.adb: Likewise.
      	* freeze.adb: Likewise.
      	* inline.adb: Likewise.
      	* sem_util.adb: Likewise.
      
      From-SVN: r260459
      Hristian Kirtchev committed
    • [Ada] Use type conversion when inlining may trigger a run-time check · 031936bc
      In the frontend inlining used in GNATprove, inlining of a return statement
      was using an unchecked type conversion, which could cause a necessary
      run-time check on the conversion to be skipped. Now fixed.
      
      There is no impact on compilation.
      
      2018-05-21  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Expand_Inlined_Call.Process_Formals): Use a type
      	conversion instead of an unchecked type conversion when inlining a
      	return statement, unless type qualification is required (for character
      	and string literal) or no check can result from the conversion (for
      	access types).
      	* opt.ads: Update comment.
      
      From-SVN: r260458
      Yannick Moy committed
    • [Ada] Placement of pragma Elaboration_Checks · 7255f3c3
      This patch modifies the semantics of pragma Elaboration_Checks. The pragma
      was intended to be a configuration pragma, however its placement was never
      verified until now.
      
      The pragma may appear in the following contexts:
      
         * Configuration pragmas file
      
         * Prior to the context clauses of a compilation unit's initial declaration
      
      Any other placement of the pragma will result in a warning and the effects of
      the offending pragma will be ignored.
      
      ------------
      -- Source --
      ------------
      
      --  elab_checks_1.adc
      
      pragma Elaboration_Checks (Dynamic);
      
      --  elab_checks_2.adc
      
      pragma Elaboration_Checks (Dynamic);
      pragma Elaboration_Checks (Static);                                  --  Error
      
      --  pack_1.ads
      
      pragma Elaboration_Checks (Static);                                  --  OK
      
      package Pack_1 is
      end Pack_1;
      
      --  pack_2.ads
      
      pragma Elaboration_Checks (Static);                                  --  OK
      pragma Elaboration_Checks (Static);                                  --  Error
      
      package Pack_2 is
      end Pack_2;
      
      --  pack_3.ads
      
      package Pack_3 is
         procedure Proc;
      end Pack_3;
      
      --  pack_3.adb
      
      pragma Elaboration_Checks (Static);                                  --  Error
      
      package body Pack_3 is
         procedure Proc is begin null; end Proc;
      end Pack_3;
      
      --  pack_4.ads
      
      package Pack_4 is
         procedure Proc;
      end Pack_4;
      
      --  pack_4.adb
      
      package body Pack_4 is
         procedure Proc is separate;
      end Pack_4;
      
      --  pack_4-proc.adb
      
      pragma Elaboration_Checks (Static);                                  --  Error
      
      separate (Pack_4)
      procedure Proc is begin null; end Proc;
      
      --  gen.ads
      
      generic
         with function Called_At_Elaboration return Boolean;
      
      package Gen is
         procedure Proc;
      end Gen;
      
      --  gen.adb
      
      package body Gen is
         procedure Proc is
            Obj : constant Boolean := Called_At_Elaboration;
         begin null; end Proc;
      begin
         Proc;
      end Gen;
      
      --  abe_static.ads
      
      pragma Elaboration_Checks (Static);
      
      with Gen;
      
      package ABE_Static is
         function ABE return Boolean;
      
         package Inst_1 is new Gen (ABE);
      end ABE_Static;
      
      --  abe_static.adb
      
      package body ABE_Static is
         package Inst_2 is new Gen (ABE);
      
         package Subunit is
         end Subunit;
      
         package body Subunit is separate;
      
         function ABE return Boolean is
         begin
            return True;
         end ABE;
      end ABE_Static;
      
      --  abe_static-subunit.adb
      
      separate (ABE_Static)
      
      package body Subunit is
         package Inst_3 is new Gen (ABE);
      
         package Nested_Subunit is
         end Nested_Subunit;
      
         package body Nested_Subunit is separate;
      end Subunit;
      
      --  abe_static-subunit-nested_subunit.adb
      
      separate (ABE_Static.Subunit)
      
      package body Nested_Subunit is
         package Inst_4 is new Gen (ABE);
      end Nested_Subunit;
      
      --  abe_static_main.adb
      
      with ABE_Static;
      
      procedure ABE_Static_Main is begin null; end ABE_Static_Main;
      
      ----------------------------
      -- Compilation and output --
      ----------------------------
      
      $ gcc -c pack_1.ads -gnatec=elab_checks_1.adc
      $ gcc -c pack_1.ads -gnatec=elab_checks_2.adc
      $ gcc -c pack_1.ads
      $ gcc -c pack_2.ads
      $ gcc -c pack_3.adb
      $ gcc -c pack_4.adb
      $ gnatmake -q -gnatE abe_static_main.adb
      elab_checks_2.adc:2:01: pragma "Elaboration_Checks" duplicates pragma declared
        at line 1
      pack_2.ads:2:01: pragma "Elaboration_Checks" duplicates pragma declared at line
        1
      pack_3.adb:1:01: warning: effects of pragma "Elaboration_Checks" are ignored
      pack_3.adb:1:01: warning: place pragma on initial declaration of library unit
      pack_4-proc.adb:1:01: warning: effects of pragma "Elaboration_Checks" are
        ignored
      pack_4-proc.adb:1:01: warning: place pragma on initial declaration of library
        unit
      abe_static.adb:2:04: warning: in instantiation at gen.adb:3
      abe_static.adb:2:04: warning: cannot call "ABE" before body seen
      abe_static.adb:2:04: warning: Program_Error may be raised at run time
      abe_static.adb:2:04: warning:   body of unit "ABE_Static" elaborated
      abe_static.adb:2:04: warning:   procedure "Proc" called at gen.adb:6, instance
        at line 2
      abe_static.adb:2:04: warning:   function "ABE" called at gen.adb:3, instance at
        line 2
      abe_static.ads:8:04: warning: in instantiation at gen.adb:3
      abe_static.ads:8:04: warning: cannot call "ABE" before body seen
      abe_static.ads:8:04: warning: Program_Error may be raised at run time
      abe_static.ads:8:04: warning:   spec of unit "ABE_Static" elaborated
      abe_static.ads:8:04: warning:   procedure "Proc" called at gen.adb:6, instance
        at line 8
      abe_static.ads:8:04: warning:   function "ABE" called at gen.adb:3, instance at
        line 8
      abe_static-subunit.adb:4:04: warning: in instantiation at gen.adb:3
      abe_static-subunit.adb:4:04: warning: cannot call "ABE" before body seen
      abe_static-subunit.adb:4:04: warning: Program_Error may be raised at run time
      abe_static-subunit.adb:4:04: warning:   body of unit "ABE_Static" elaborated
      abe_static-subunit.adb:4:04: warning:   procedure "Proc" called at gen.adb:6,
        instance at line 4
      abe_static-subunit.adb:4:04: warning:   function "ABE" called at gen.adb:3,
        instance at line 4
      abe_static-subunit-nested_subunit.adb:4:04: warning: in instantiation at
        gen.adb:3
      abe_static-subunit-nested_subunit.adb:4:04: warning: cannot call "ABE" before
        body seen
      abe_static-subunit-nested_subunit.adb:4:04: warning: Program_Error may be
        raised at run time
      abe_static-subunit-nested_subunit.adb:4:04: warning:   body of unit
        "ABE_Static" elaborated
      abe_static-subunit-nested_subunit.adb:4:04: warning:   procedure "Proc" called
        at gen.adb:6, instance at line 4
      abe_static-subunit-nested_subunit.adb:4:04: warning:   function "ABE" called at
        gen.adb:3, instance at line 4
      warning: "abe_static_main.adb" has dynamic elaboration checks and with's
      warning:   "abe_static.ads" which has static elaboration checks
      
      2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Install the elaboration
      	model of the compilation unit spec, if any.
      	* sem_ch7.adb (Analyze_Package_Body_Helper): Install the elaboration
      	model of the compilation unit spec, if any.
      	* sem_ch10.adb (Analyze_Subunit): Install the elaboration model of the
      	parent compilation unit spec, if any.
      	* sem_elab.adb (Check_Elaboration_Scenarios): Restore the elaboration
      	model of the main unit.
      	(Is_Same_Unit): The routine now uses Unit_Entity.
      	(Is_Subunit): Removed.
      	(Normalize_Unit): Removed.
      	(Unit_Entity): New routine.
      	* sem_prag.adb (Analyze_Pragma): Reimplement the handling of pragma
      	Elaboration_Checks. The analysis now ensures that the pragma appears at
      	the configuration level, and on the initial declaration of a unit.
      	Other placements are either flagged as illegal, or ignored.
      	(Check_Duplicate_Elaboration_Checks_Pragma): New routine.
      	(Ignore_Elaboration_Checks_Pragma): New routine.
      	* sem_util.adb (Install_Elaboration_Model): New routine.
      	* sem_util.ads (Install_Elaboration_Model): New routine.
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Update the
      	documentation of pragma Elaboration_Checks.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r260457
      Hristian Kirtchev committed
    • [Ada] Robustify traceback caching for executable in current dir · 18c7a4eb
      Any program calling Gnat.Traceback.Symbolic.Enable_Cache for
      dwarf based symbolization fails with a segmentation violation
      when spawned with an inaccurate argv[0] such that it couldn't
      be found on PATH.
      
      argv[0] is most often found on PATH. One plausible case where
      it isn't is when argv[0] is a mere file name and . isn't on PATH,
      which might happen out of imprecise exec calls.
      
      This change robustifies the Traceback.Symbolic implementation
      to work in this case as well, by just trying to work with argv[0]
      untouched as the executable file to fetch dwarf info from.
      
      2018-05-21  Olivier Hainque  <hainque@adacore.com>
      
      gcc/ada/
      
      	* libgnat/s-trasym__dwarf.adb (Executable_Name): Return argv[0] instead
      	of empty string when argv[0] couldn't be found on PATH.
      	(Enable_Cache): Raise Program_Error instead of attempting a null
      	pointer dereference when the Exec_Module initialization failed.
      
      From-SVN: r260456
      Olivier Hainque committed
    • [Ada] Remove External aspect from predefined abstract states · bbb99006
      Explicit External aspect was an equivalant to an implicit default.  It was only
      needed as a workaround for a frontend bug. (If it meant to serve as
      documentation, there should be explicit Effective_Reads and Effective_Writes
      set to False too.)
      
      No test, because these changes are semantically neutral.
      
      2018-05-21  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* libgnarl/a-reatim.ads (Clock_Time): Remove External aspect.
      	* libgnarl/a-taside.ads (Tasking_State): Likewise.
      	* libgnat/a-calend.ads (Clock_Time): Likewise.
      
      From-SVN: r260455
      Piotr Trojanek committed
    • [Ada] Spurious error in inlining for GNATprove on prefix call notation · e3822b0a
      During the special inlining done in GNATprove mode, a call in prefix
      notation leads to a spurious error. Now fixed.
      
      2018-05-21  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_ch6.adb (Analyze_Procedure_Call): Refine test to recognize prefix
      	call notation in inlined call in GNATprove mode.
      
      From-SVN: r260454
      Yannick Moy committed
    • [Ada] Spurious error on synchronous refinement · bcc093dc
      This patch ensures that an abstract state declared with simple option
      "synchronous" is automatically considered "external".
      
      2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* einfo.adb (Is_External_State): An abstract state is also external
      	when it is declared with option "synchronous".
      	* einfo.ads: Update the documentation of synthesized attribute
      	Is_External_State.
      	* sem_util.adb (Find_Simple_Properties): New routine.
      	(Is_Enabled_External_Property): New routine.
      	(State_Has_Enabled_Property): Reimplemented. The two flavors of option
      	External have precedence over option Synchronous when determining
      	whether a property is in effect.
      
      gcc/testsuite/
      
      	* gnat.dg/sync2.adb, gnat.dg/sync2.ads: New testcase.
      
      From-SVN: r260453
      Hristian Kirtchev committed
    • [Ada] Crash on incorrect frontend inlining in GNATprove mode · fe44c442
      In some cases, the inlining performed in GNATprove mode leads to a crash,
      when inlining a call where a return statement of the inlined function
      returns a string literal. Now fixed.
      
      2018-05-21  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_eval.adb (Static_Length): Take into account case of variable of
      	subtype string literal.
      
      From-SVN: r260452
      Yannick Moy committed
    • [Ada] Tighten Object_Reader.Get_Memory_Bounds · c77384a4
      Symbolization of traceback entries from dwarf info was
      failing in some cases with shared libraries on ELF targets,
      from unexpected overlapping of what we believed were code
      regions for distinct modules.
      
      This is caused by the inclusion of all SHF_ALLOC sections in
      the set of sections of possible relevance to determine the span
      of possible code addresses for a module.
      
      This change renames the Get_memory_Bound subprogram to better
      convey that we really care about sections hosting executable code
      in particular, matching what the spec comments already claims.
      
      It also renames the boolean flag conveying the info of relevance
      in the Object_Section record, and adjusts the ELF implementation
      of Get_Section to feed this flag from SHF_EXECINSTR instead of
      SHF_ALLOC.
      
      2018-05-21  Olivier Hainque  <hainque@adacore.com>
      
      gcc/ada/
      
      	* libgnat/s-objrea.ads (Get_Memory_Bounds): Rename as Get_Xcode_Bounds.
      	(Object_Section): Rename Flag_Alloc component as Flag_Xcode.
      	* libgnat/s-objrea.adb (Get_Xcode_Bounds): Adjust to new subprogram and
      	component name.
      	(Get_Section, ELF case): Set Flag_Xcode from SHF_EXECINSTR.
      	* libgnat/s-dwalin.adb (Open): Adjust to the Get_Memory_Bounds name
      	change.
      
      From-SVN: r260451
      Olivier Hainque committed