1. 26 Sep, 2018 40 commits
    • syscall: don't assume we have a GETEUID system call · dd554b78
          
          On Alpha GNU/Linux there is no geteuid system call, there is only
          getresuid.  The raw geteuid system call is only used for testing, so
          just skip the test if it's not available.
          
          Reviewed-on: https://go-review.googlesource.com/137655
      
      From-SVN: r264647
      Ian Lance Taylor committed
    • * ChangeLog: Add missing PR number. · 66938984
      From-SVN: r264646
      Uros Bizjak committed
    • re PR target/87439 (ICE in ix86_mode_needed, at config/i386/i386.c:18907) · 8c097065
      	PR target/87439
      	* config/i386/i386.h (NUM_MODES_FOR_MODE_SWITCHING): Update
      	for removed I387_MASK_PM entity.
      
      From-SVN: r264645
      Uros Bizjak committed
    • Revert · 8caf8f77
      	2018-09-26  Alexey Neyman  <stilor@att.net>
      
      	* graphite.h: Include <isl/id.h> and <isl/space.h>; these
      	headers are no longer pulled in by <isl/val.h>.
      
      From-SVN: r264644
      Jeff Law committed
    • re PR debug/87443 (GCC mixes abstract and concrete instances in abstract origins for inlines) · 39aae603
      2018-09-26  Richard Biener  <rguenther@suse.de>
      
      	PR debug/87443
      	* dwarf2out.c (gen_lexical_block_die): Do not equate inline
      	or concrete instance DIE to the tree.  Create abstract origin
      	attributes also for concrete instances.
      
      	* gcc.dg/debug/dwarf2/inline5.c: New testcase.
      
      From-SVN: r264643
      Richard Biener committed
    • graphite.h: Include <isl/id.h> and <isl/space.h>... · 9b4e3b9a
      	* graphite.h: Include <isl/id.h> and <isl/space.h>; these
      	headers are no longer pulled in by <isl/val.h>.
      
      From-SVN: r264642
      Alexey Neyman committed
    • Ignore chmod errors during mostlyclean-local, check-go-tool · 19071aa4
      	* Makefile.am (mostlyclean-local): Ignore chmod errors.
      	(check-go-tool): Likewise.
      	* Makefile.in: Regenerate.
      
      From-SVN: r264641
      Rainer Orth committed
    • [PR 87347] Prevent segfaults if TYPE_ARG_TYPES is NULL · ce6f0888
      2018-09-26  Martin Jambor  <mjambor@suse.cz>
      
      	PR c/87347
      	c/
      	* c-parser.c (warn_for_abs): Bail out if TYPE_ARG_TYPES is NULL.  Fix
              comment.
      
      	testsuite/
      	* gcc.dg/pr87347.c: New test.
      
      From-SVN: r264640
      Martin Jambor committed
    • re PR c++/71131 ([concepts] Ill-formed code declaring a variable with a template… · 6fe0c58b
      re PR c++/71131 ([concepts] Ill-formed code declaring a variable with a template concept not rejected)
      
      2018-09-26  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/71131
      	* g++.dg/concepts/pr71131.C: New.
      
      2018-09-26  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/71127
      	* g++.dg/concepts/pr71127.C: New.
      
      From-SVN: r264639
      Paolo Carlini committed
    • re PR c++/67655 ([concepts] expression constraints and variadic expansions) · 3c010a24
      2018-09-26  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/67655
      	* g++.dg/concepts/pr67655.C: New.
      
      From-SVN: r264638
      Paolo Carlini committed
    • [Ada] SPARK: minor error message enhancement · 1899cb68
      2018-09-26  Elisa Barboni  <barboni@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Check_Refined_Global_Item): Improve error
      	message.
      
      From-SVN: r264637
      Elisa Barboni committed
    • [Ada] Fix inheritance of representation items defined as aspects · def15641
      When a representation item is defined by a pragma or attribute
      definition clause, the entity it applies to is that of the Name of the
      representation item. But when it is defined by an aspect definition, the
      entity is directly denoted by the Entity attribute of the represenation
      item. The circuitry that inherits representation items for derived types
      or subtypes must account for these two possible cases.
      
      2018-09-26  Thomas Quinot  <quinot@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Inherit_Aspects_At_Freeze_Point): For a
      	representation item that is an N_Aspect_Definition, retrieve the
      	entity it applies to using the Entity attribute.
      
      gcc/testsuite/
      
      	* gnat.dg/sso13.adb: New testcase.
      
      From-SVN: r264636
      Thomas Quinot committed
    • [Ada] Spurious ineffective use_clause warning · 0ebf09ed
      This patch fixes an issue whereby user-defined subprograms used as
      generic actuals with corresponding formals containing other formal types
      led to spurious ineffective use_clause warnings.
      
      2018-09-26  Justin Squirek  <squirek@adacore.com>
      
      gcc/ada/
      
      	* sem_ch8.adb (Analyze_Subprogram_Renaming): Add extra condition
      	to check for unmarked subprogram references coming from
      	renamings.
      
      gcc/testsuite/
      
      	* gnat.dg/warn16.adb: New testcase.
      
      From-SVN: r264635
      Justin Squirek committed
    • [Ada] Store -G xxx switches · cec0185c
      2018-09-26  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* back_end.adb (Scan_Compiler_Arguments): Store -G xxx switches.
      
      From-SVN: r264634
      Arnaud Charlet committed
    • [Ada] Issue info message on inlined subprograms in GNATprove mode · 940cf495
      Issue a positive message that inlining was performed in GNATprove mode,
      when corresponding debug switch -gnatd_f is set.
      
      2018-09-26  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* errout.ads: Update comment for insertion character '?'.
      	* inline.adb: Use simple insertion character '?' for GNATprove
      	info messages.
      	* sem_res.adb (Resolve_Call): Issue an info message on inlining
      	in GNATprove mode.
      
      From-SVN: r264633
      Yannick Moy committed
    • [Ada] Missing front-end code for constraint checks on fixed point exprs · 241848fd
      This patch ensures that the front-end generates constraint checks for
      some operations that previously depended on gigi for the corresponding
      check. The patch also resets the Do_Range_Check flag so that it never
      appears in the tree presented to gigi.
      
      2018-09-26  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* checks.adb (Apply_Type_Conversion_Checks): Do not generate a
      	range check on the expression of the conversion if it involves a
      	fixed-point type, as such conversions are handled specially
      	during expansion.
      	* exp_ch4.adb (Expand_N_Type_Conversion): In a conversion from
      	Fixed to Integer, use the base type of the expression to ensure
      	that the caller will generate the proper constraint check when
      	needed.
      
      From-SVN: r264632
      Ed Schonberg committed
    • [Ada] SPARK: fix a bug related to loop exit environment · 2d9a8c0b
      2018-09-26  Maroua Maalej  <maalej@adacore.com>
      
      gcc/ada/
      
      	* sem_spark.adb (Check_Loop_Statement): Fix a bug related to
      	loop exit environment.
      	(Check_Statement): fixing a bug when comparing the source and
      	target in an assignment statement.
      
      From-SVN: r264631
      Maroua Maalej committed
    • [Ada] Spurious elaboration issue due to inlining · 1a409f80
      This patch ensures that the full compilation context is captured prior
      to package or subprogram instantiation/inlining and restored after the
      action takes place.
      
      2018-09-26  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* sem_ch12.adb (Instantiate_Package_Body): Capture and restore
      	the full compilation context.
      	(Instantiate_Subprogram_Body): Capture and restore the full
      	compilation context.
      
      gcc/testsuite/
      
      	* gnat.dg/elab7.adb, gnat.dg/elab7_pkg1.adb,
      	gnat.dg/elab7_pkg1.ads, gnat.dg/elab7_pkg2.adb,
      	gnat.dg/elab7_pkg2.ads: New testcase.
      
      From-SVN: r264630
      Hristian Kirtchev committed
    • [Ada] Do not issue by default info messages for inlining in GNATprove · a30a69c1
      Info messages about lack of inlining for analysis in GNATprove may be
      confusing to users. They are now only issued when GNATprove is called
      with switch --info, which it passes on to gnat2why with switch -gnatd_f.
      
      There is no effect on compilation.
      
      2018-09-26  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* debug.adb: Add use for -gnatd_f switch.
      	* inline.adb (Cannot_Inline): Only issue info message for
      	failure to inline in GNATprove mode when switch -gnatd_f is
      	used.
      
      From-SVN: r264629
      Yannick Moy committed
    • [Ada] Spurious error on interface conversion under ZFP · 2d9c4206
      The frontend reports an error under ZFP when performing the type
      conversion of a tagged object to one of its covered interface types.
      
      2018-09-26  Javier Miranda  <miranda@adacore.com>
      
      gcc/ada/
      
      	* exp_disp.adb (Expand_Interface_Conversion): No displacement of
      	the pointer needed when the type of the operand is an interface
      	type that maches the target type and we are compiling under
      	configurable runtime. Adding also documentation explaining why
      	this cannot be done when compiling with the full runtime.
      	* exp_intr.adb: Update comment.
      
      gcc/testsuite/
      
      	* gnat.dg/interface8.adb, gnat.dg/interface8.ads: New testcase.
      
      From-SVN: r264628
      Javier Miranda committed
    • [Ada] Add a No_Return annotation to ease static analysis · 9d951866
      2018-09-26  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* sem_ch5.adb (Wrap_Loop_Statement): Annotate as No_Return.
      
      From-SVN: r264627
      Hristian Kirtchev committed
    • [Ada] Spurious error on private extension with predicate · 6cd1ee98
      This patch fixes a spurious error involving a private extension whose
      full view includes a dynamic predicate, when the parent type is itself
      private at the point of the predicate check.  The conversion is known to
      be legal so no extra conversion checks are required.
      
      2018-09-26  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* exp_util.adb (Make_Predicate_Call): Use OK_Convert_To when
      	applying a predicate check to prevent spurious errors when
      	private ancestors are involved.
      
      gcc/testsuite/
      
      	* gnat.dg/predicate2-containers.ads,
      	gnat.dg/predicate2-project-name_values.ads,
      	gnat.dg/predicate2-project-registry-attribute.ads,
      	gnat.dg/predicate2-project-registry.ads,
      	gnat.dg/predicate2-project-typ-set.ads,
      	gnat.dg/predicate2-project-typ.ads,
      	gnat.dg/predicate2-project.ads,
      	gnat.dg/predicate2-source_reference.ads, gnat.dg/predicate2.ads,
      	gnat.dg/predicate2_main.adb: New testcase.
      
      From-SVN: r264626
      Ed Schonberg committed
    • [Ada] Spurious dependency on secondary stack · abbfd698
      This patch reimplements the handling of the secondary stack when the
      iteration scheme of a loop statement requires this support.
      
      Prior to this modification, an iterator loop over a container was
      assumed to require unconditional secondary stack management. This is
      however not always true because of user-defined iterator types, where
      routines First and Next return an iterator that does require the
      secondary stack.
      
      ------------
      -- Source --
      ------------
      
      --  gnat.adc
      
      pragma Restrictions (No_Secondary_Stack);
      
      --  test.ads
      
      package Test is
         type Test_Type is private
         with
            Default_Initial_Condition,
            Iterable => (First       => First_Element,
                         Next        => Next_Element,
                         Has_Element => Has_Element,
                         Element     => Element);
      
         type Cursor_Type is private;
      
         function First_Element (T : Test_Type) return Cursor_Type;
      
         function Next_Element (T : Test_Type; C : Cursor_Type) return Cursor_Type;
      
         function Has_Element (T : Test_Type; C : Cursor_Type) return Boolean;
      
         function Element (T : Test_Type; C : Cursor_Type) return Natural;
      
      private
         type Cursor_Type is new Natural;
      
         type Test_Type is record
            null;
         end record;
      
         function First_Element (T : Test_Type) return Cursor_Type
         is (0);
      
         function Next_Element (T : Test_Type; C : Cursor_Type) return Cursor_Type
         is (0);
      
         function Has_Element (T : Test_Type; C : Cursor_Type) return Boolean
         is (False);
      
         function Element (T : Test_Type; C : Cursor_Type) return Natural
         is (0);
      end Test;
      
      --  main.adb
      
      with Test; use Test;
      
      procedure Main is
         F : Boolean;
         M : Test_Type;
      
      begin
         for Elem of M loop
            null;
         end loop;
      
         F := (for all C of M => C = 1);
         F := (for all C in M => True);
      end Main;
      
      -----------------
      -- Compilation --
      -----------------
      
      $ gnatmake -q --RTS=zfp -nostdlib main.adb
      
      2018-09-26  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* exp_ch4.adb (Expand_N_Allocator): Ensure that the use of the
      	secondary stack does not clash with restriction
      	No_Secondary_Stack.
      	* exp_ch6.adb (Expand_N_Extended_Return_Statement): Ensure that
      	the use of the secondary stack does not clash with restriction
      	No_Secondary_Stack.
      	* sem_ch5.adb (Analyze_Loop_Statement): Wrap the loop in a block
      	prior to analysis in order to either provide a local scope for
      	an iterator, or ensure that the secondary stack is properly
      	managed.
      	(Check_Call): Account for the case where the tree may be
      	unanalyzed or contain prior errors.
      	(Has_Call_Using_Secondary_Stack): Renamed to Has_Sec_Stack_Call.
      	Update all uses of the subprogram.
      	(Prepare_Loop_Statement): New routine.
      
      From-SVN: r264625
      Hristian Kirtchev committed
    • [Ada] Mimic the C++ ABI when passing class-wide conversion actuals · c886a946
      This patch does not affect the behavior of Ada-only code but improves
      consistency with the code generated by the C++ compiler.
      
      2018-09-26  Javier Miranda  <miranda@adacore.com>
      
      gcc/ada/
      
      	* sem_res.adb (Resolve_Actuals): If the formal is a class-wide
      	type conversion then do not skip resolving and expanding the
      	conversion; required to displace the pointer to the object and
      	reference the dispatch table associated with the target
      	interface type.
      
      From-SVN: r264624
      Javier Miranda committed
    • [Ada] Pair miscount in Dynamic_HTable.Put · 4f95defa
      This patch corrects the logic of GNAT.Dynamic_HTables.Dynamic_HTable.Put to
      update the number of key-value pairs in the hash table only when the put is
      adding a new pair, rather than updating the value of an existing pair.
      
      2018-09-26  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* libgnat/g-dynhta.adb (Prepend_Or_Replace): Update the number
      	of key-value pairs in the hash table only when adding a brand
      	new pair.
      
      gcc/testsuite/
      
      	* gnat.dg/dynhash1.adb: New testcase.
      
      From-SVN: r264623
      Hristian Kirtchev committed
    • [Ada] Add notes about processing of aggregate projects · 3e4ade66
      2018-09-26  Sergey Rybin  <rybin@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_ugn/gnat_utility_programs.rst: Add note about
      	processing of aggregate projects in gnatmetric and gnatstub.
      
      From-SVN: r264622
      Sergey Rybin committed
    • [Ada] Minor reformattings · dd81163f
      2018-09-26  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* contracts.adb, exp_unst.adb, exp_util.adb, gnat1drv.adb,
      	opt.ads, par-prag.adb, sem_ch3.adb, sem_ch5.adb, sem_prag.adb,
      	sinfo.ads, snames.ads-tmpl: Minor reformatting.
      
      From-SVN: r264621
      Hristian Kirtchev committed
    • [Ada] New unit GNAT.Sets · f8bc3bcb
      This patch implements unit GNAT.Sets which currently offers a general purpose
      membership set. The patch also streamlines GNAT.Dynamic_HTables and GNAT.Lists
      to use parts of the same API, types, and exceptions as those used by GNAT.Sets.
      
      2018-09-26  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* gcc-interface/Make-lang.in: Add unit GNAT.Sets to the list of
      	front end sources.
      	* impunit.adb: Add unit GNAT.Sets to the list of predefined
      	units.
      	* Makefile.rtl: Add unit GNAT.Sets to the list of non-tasking
      	units.
      	* libgnat/g-sets.adb: New unit.
      	* libgnat/g-sets.ads: New unit.
      	* libgnat/g-dynhta.adb (Minimum_Size): Decrease to 8 in order to
      	allow for small sets.  Update all occurrences of Table_Locked to
      	Iterated.
      	(Ensure_Unlocked): Query the number of iterators.
      	(Find_Node): Use the supplied equality.
      	(Is_Empty): New routine.
      	(Lock): Update the number of iterators.
      	(Prepend_Or_Replace): Use the supplied equality.
      	(Size): Update the return type.
      	(Unlock): Update the number of iterators.
      	* libgnat/g-dynhta.ads: Update all occurrences of Table_Locked
      	to Iterated.  Rename formal subprogram Equivalent_Keys to "=".
      	(Bucket_Range_Type, Pair_Count_Type): Remove types.
      	(Not_Created, Table_Locked, Iterator_Exhausted): Remove
      	exceptions.
      	(Hash_Table): Update to store the number of iterators rather
      	than locks.
      	(Is_Empty): New routine.
      	(Size): Update the return type.
      	* libgnat/g-lists.adb: Update all occurrences of List_Locked to
      	Iterated.
      	(Ensure_Unlocked): Query the number of iterators.
      	(Length): Remove.
      	(Lock): Update the number of iterators.
      	(Size): New routine.
      	(Unlock): Update the number of iterators.
      	* libgnat/g-lists.ads: Update all occurrences of List_Locked to
      	Iterated.
      	(Element_Count_Type): Remove type.
      	(Not_Created, Table_Locked, Iterator_Exhausted): Remove
      	exceptions.
      	(Linked_List): Update type to store the number of iterators
      	rather than locks.
      	(Length): Remove.
      	(Size): New routine.
      	* libgnat/gnat.ads (Bucket_Range_Type): New type.
      	(Iterated, Iterator_Exhausted, and Not_Created): New exceptions.
      
      gcc/testsuite/
      
      	* gnat.dg/sets1.adb: New testcase.
      	* gnat.dg/dynhash.adb, gnat.dg/linkedlist.adb: Update testcases
      	to new API.
      
      From-SVN: r264620
      Hristian Kirtchev committed
    • [Ada] ICE on mix of tagged and limited interfaces · fcf1dd74
      2018-09-26  Javier Miranda  <miranda@adacore.com>
      
      gcc/ada/
      
      	* checks.adb (Install_Null_Excluding_Check): Do not add
      	null-excluding checks when the tree may not be fully decorated.
      	This patch cascade errors.
      
      From-SVN: r264619
      Javier Miranda committed
    • [Ada] Illegal formal objects associated with anonymous acc-to-subp args · 7fea7b57
      The compiler was incorrectly accepting generic instantiations with
      formal objects of named access-to-subprogram types associated with an
      actual of an anonymous access-to-subprogram type.
      Analyze_Object_Declaration tests for objects initialized anonymous
      access-to-subprogram values, and wraps a conversion around the argument,
      which normally will result in error checks during resolution in
      Valid_Conversion, but the conversion was only created when the
      initialization expression Comes_From_Source, which prevented the
      conversion wrapping from happening for constant declarations resulting
      from generic expansion. The test for Comes_From_Source was removed.
      
      The following test must report the error output given further below for
      the three constructs marked as errors when compiled with this command:
      
      gcc -c -gnatj70 bad_anon_access_instance.adb
      
      procedure Bad_Anon_Access_Instance (Anon_Acc : access procedure) is
      
         type Ref is access procedure;
      
         Ref_1 : Ref := Anon_Acc;           -- ERROR (flagged by GNAT)
      
         Ref_2 : constant Ref := Anon_Acc;  -- ERROR (flagged by GNAT)
      
         generic
            Formal_Ref : Ref;
         package Gen is
         end Gen;
      
         package Inst
           is new Gen (Formal_Ref => Anon_Acc); -- ERROR (but not flagged by GNAT)
      
      begin
         null;
      end Bad_Anon_Access_Instance;
      
      -------------
      Error output:
      -------------
      
      bad_anon_access_instance.adb:4:19: illegal attempt to store anonymous
                                         access to subprogram, value has
                                         deeper accessibility than any
                                         master (RM 3.10.2 (13)), use named
                                         access type for "Anon_Acc" instead
                                         of access parameter
      bad_anon_access_instance.adb:6:28: illegal attempt to store anonymous
                                         access to subprogram, value has
                                         deeper accessibility than any
                                         master (RM 3.10.2 (13)), use named
                                         access type for "Anon_Acc" instead
                                         of access parameter
      bad_anon_access_instance.adb:14:32: illegal attempt to store
                                          anonymous access to subprogram,
                                          value has deeper accessibility
                                          than any master (RM 3.10.2 (13)),
                                          use named access type for
                                          "Anon_Acc" instead of access
                                          parameter
      
      2018-09-26  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (Analyze_Object_Declaration): Remove test for
      	Comes_From_Source, which prevented implicit conversions from
      	being applied to anonymous access-to-subprogram formals in
      	constant declartions that arise from instance associations for
      	generic formal objects.  Add RM and AARM references to comment.
      
      From-SVN: r264618
      Gary Dismukes committed
    • [Ada] Front-end support for OpenACC pragmas · 95f2be29
      This patch introduces the upper part of the Ada front-end support for a first
      set of OpenACC directives (Acc_Kernels, Acc_Loop, Acc_Parallel, Acc_Data) and
      their clauses.
      
      The pragmas syntax is documented, pragmas are recognized and checked for
      syntactic correctness, keyed on -fopenacc. A couple of new flags are defined
      on loop statements in the GNAT tree.
      
      2018-09-26  Olivier Hainque  <hainque@adacore.com>
      
      gcc/ada/
      
      	* opt.ads (OpenAcc_Enabled): New flag. False by default. True
      	when OpenACC pragmas are requested to be honored, when -fopenacc
      	is found on the command line.
      	* back_end.adb (Scan_Compiler_Arguments): Set OpenACC_Enabled if
      	-fopenacc is seen on the command line.
      	* sinfo.adb, sinfo.ads (Is_OpenAcc_Environment): New
      	flag/predicate on Loop statements which embed an Acc_Kernels,
      	Acc_Parallel or Acc_Data pragma.
      	(Is_OpenAcc_Loop): New flag/predicate on Loop statements which
      	embed an Acc_Loop pragma.
      	(Set_Is_OpenAcc_Environment, Set_Is_OpenAcc_Loop): Setters for
      	the new flags.
      	* par-prag.adb (Prag): Handle Acc_Data, Acc_Loop, Acc_Parallel
      	and Acc_Kernels pragmas.  Nothing to do here, all handled by
      	sem_prag.
      	* sem_prag.adb (Acc_First, Acc_Next,
      	Validate_Acc_Condition_Clause, Validate_Acc_Data_Clause,
      	Validate_Acc_Int_Expr_Clause, Validate_Acc_Int_Expr_List_Clause,
      	Validate_Acc_Loop_Collapse, Validate_Acc_Loop_Gang,
      	Validate_Acc_Loop_Vector, Validate_Acc_Loop_Worker,
      	Validate_Acc_Name_Reduction, Validate_Acc_Size_Expressions): New
      	helper for Analyze_Pragma, to handle OpenACC pragmas.
      	(Analyze_Pragma): Handle Acc_Data, Acc_Loop, Acc_Parallel and
      	Acc_Kernels pragmas.
      	* sem_ch5.adb (Disable_Constant): Unset Is_True_Constant on
      	variable entity, action for ...
      	(Disable_Constants): Helper for Analyze_Loop_Statement, to ...
      	(Analyze_Loop_Statement): Disable True_Constant on variables
      	referenced within an OpenACC environment.
      	* snames.ads-tmpl: Declare Name_Ids for the OpenACC directives
      	and clauses we can handle. Remove an exraneous whitespace before
      	columns, preventing line length overflow in the generated spec
      	with Ids now reaching beyond 999.
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Document
      	pragma Acc_Parallel, Acc_Loop, Acc_Kernels and Acc_Data.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r264617
      Olivier Hainque committed
    • [Ada] Missing error on non-limited derived type with limited component · 8e532681
      This patch fixes a missing error on a type extension with limited
      components, when the parent type is a derived limited interface. This
      may allow the unit to improperly compile, but may lead to bind-time
      errors when compiling a client of that unit.
      
      Compiling p.adb must yield:
      
       keys.ads:8:06: extension of nonlimited type cannot have limited components
       keys.ads:8:06: limitedness is not inherited from limited interface
       keys.ads:8:06: add "limited" to type indication
      
      ----
      with Keys;
      procedure P is
      begin
        null;
      end;
      ----
      with GNAT.Semaphores;
      package Keys is
      
        type Ref0 is limited interface;
        type Ref2 is limited interface and Ref0;
      
        type Object is new Ref2 with record
           Lock : aliased GNAT.Semaphores.Binary_Semaphore
             (True, GNAT.Semaphores.Default_Ceiling);
        end record;
      
      end;
      
      2018-09-26  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (Is_Onown_Limited): A derived type whose parent P
      	is a derived limited record is not itself limited if P is a
      	derived limited interface.
      
      From-SVN: r264616
      Ed Schonberg committed
    • [Ada] Inlining of renamed subprogram instances in package body · 56c3e620
      This fixes a small discrepancy in the handling of renamed subprograms
      declared in a package body, between those originally a regular
      subprogram and those an instance of a generic subprogram, the latter
      being slightly hindered.
      
      The difference comes from the setting of the Is_Public flag, which was
      more conservative in the latter case because instantiations of generic
      subprograms are done in compiler-generated local packages.
      
      It is eliminated by allowing Has_Referencer to recurse into nested
      packages, but only if they are themselves not instances of generic
      packages.
      
      The compiler must now fully inline Doit_I into Doit at -O2 in:
      
      package P is
      
        generic procedure Doit_G;
      
        procedure Doit;
      end P;
      
      package body P is
      
        N : Natural := 0;
      
        procedure Doit_G is
        begin
          N := 1;
        end Doit_G;
      
        procedure Doit_I is new Doit_G;
      
        procedure Doit renames Doit_I;
      
      end P;
      
      2018-09-26  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch7.adb (Has_Referencer): Remove Top_Level parameter and
      	add In_Nested_Instance and
      	Has_Outer_Referencer_Of_Non_Subprograms parameters.  Rename
      	Has_Non_Subprograms_Referencer variable into
      	Has_Referencer_Of_Non_Subprograms and initialize it with the new
      	third parameter.  Adjust recursive calls and to the renaming.
      	Replace test on Top_Level with test on In_Nested_Instance to
      	decide whether to clear the Is_Public flag on entities.
      	(Hide_Public_Entities): Adjust call to Has_Referencer.
      
      From-SVN: r264615
      Eric Botcazou committed
    • [Ada] Preparation for new description of interface thunks · d58008d2
      This adjusts and exposes a couple of functions of the front-end used for the
      generation of interface thunks so as to make them callable from gigi.  This
      also propagates the debug info setting from the targets to the thunks so as
      to make stepping into primitives work better in the debugger.
      
      2018-09-26  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_disp.adb (Expand_Interface_Conversion): Use Present test.
      	(Expand_Interface_Thunk): Propagate debug info setting from
      	target.
      	* exp_util.ads (Find_Interface_Tag): Adjust comment.
      	* exp_util.adb (Find_Interface_Tag): Remove assertions of
      	success.
      	* sem_util.adb (Is_Variable_Size_Record): Only look at
      	components and robustify the implementation.
      	* fe.h (Find_Interface_Tag): Declare.
      	(Is_Variable_Size_Record): Likewise.
      
      From-SVN: r264614
      Eric Botcazou committed
    • [Ada] Propagate bit order and SSO from root to classwide equivalent type · 52ba224d
      2018-09-26  Thomas Quinot  <quinot@adacore.com>
      
      gcc/ada/
      
      	* exp_util.adb (Make_CW_Equivalent_Type): Propagate bit order
      	and scalar storage order from root type to classwide equivalent
      	type, to prevent rejection of the equivalent type by the
      	freezing circuitry.
      
      gcc/testsuite/
      
      	* gnat.dg/sso12.adb: New testcase.
      
      From-SVN: r264613
      Thomas Quinot committed
    • [Ada] Crash on expression functions within quantified expressions · b45a9ff3
      This patch fixes an issue whereby using a call to an expression function
      as the domain of iteration for a loop would trigger a crash due to the
      function not being frozen appropriately.
      
      2018-09-26  Justin Squirek  <squirek@adacore.com>
      
      gcc/ada/
      
      	* sem_ch5.adb (Analyze_Iterator_Specification): Add conditional
      	to freeze called functions within iterator specifications during
      	full analysis.
      	(Preanalyze_Range): Minor typo fix.
      
      gcc/testsuite/
      
      	* gnat.dg/expr_func8.adb: New testcase.
      
      From-SVN: r264612
      Justin Squirek committed
    • [Ada] Missing predicate check on return value · bcbe14db
      The semantics of the return statement includes an implicit conversion of
      the value to the return type of the funcction. This conversion, as
      elsewhere, entails a predicate check if the return type has a predicate
      aspect.
      
      We do not apply the check to a case expression because in the context of
      a return statement it will be expanded into a series of return
      statements, each of which will receive a predicate check.
      
      2018-09-26  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch6.adb (Analyze_Function_Return): If the return type has
      	a dynamic_predicate, apply a Predicate_Check to the expression,
      	given that it is implicitly converted to the return type.
      	Exclude case expressions from the check, because in this context
      	the expression is expanded into individual return statements.
      
      gcc/testsuite/
      
      	* gnat.dg/predicate3.adb, gnat.dg/predicate3_pkg.ads: New
      	testcase.
      
      From-SVN: r264611
      Ed Schonberg committed
    • [Ada] ICE on array of task type with -gnatct · 4453a822
      2018-09-26  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Task_Type>: In
      	-gnatct mode, process the discriminants only for a definition.
      
      From-SVN: r264610
      Eric Botcazou committed
    • [Ada] Fix assertion failure on record subtype with -gnatRj · 81d85d4b
      The JSON output of the -gnatR machinery was choking on record subtypes
      and the change fixes this oversight.
      
      The following package must now compile properly with -gnatRj:
      
      package P is
      
        type Rec (D : Integer) is record
            C : Integer;
      
            case D is
               when 1 =>
                  S : String (1 .. 20);
               when 2 =>
                  B : Boolean;
               when others =>
                  Ch1 : Character;
                  F   : Float;
                  Ch2 : Character;
            end case;
      
         end record;
      
         subtype Rec1 is Rec (1);
      
      end P;
      
      2018-09-26  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* repinfo.adb (List_Record_Layout): Be prepared for JSON output.
      	(List_Record_Info): Use the flat representation for record
      	subtypes in the JSON format.
      
      From-SVN: r264609
      Eric Botcazou committed
    • [Ada] Regression in partial compilation of RCI units · 05a84157
      This patch fixes an issue whereby the compilation of partial sources
      (packages without bodies that require them) would not occur when said
      sources were remote call interfaces. This is required because such
      interfaces may have bodies that only exist on the server side or vice
      versa
      
      2018-09-26  Justin Squirek  <squirek@adacore.com>
      
      gcc/ada/
      
      	* lib-writ.adb, lib-writ.ads (Write_With_Lines): Add
      	documentation and an extra conditional check for RCI units so
      	that generated ali files will list the spec only instead of a
      	body when a body is not found.
      
      From-SVN: r264608
      Justin Squirek committed