[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 20 Oct 2014 15:06:52 +0000 (17:06 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 20 Oct 2014 15:06:52 +0000 (17:06 +0200)
2014-10-20  Robert Dewar  <dewar@adacore.com>

* sem_ch3.adb, prj-proc.adb, prj-proc.ads, prj-conf.adb: Minor
reformatting.

2014-10-20  Robert Dewar  <dewar@adacore.com>

* par-prag.adb (Add_List_Pragma_Entry): New procedure.
* par.adb (P_Pragma): Document requirement to handle multiple calls.

2014-10-20  Robert Dewar  <dewar@adacore.com>

* sem_prag.adb (Analyze_Pragma, case No_Elaboration_Code_All):
Fix error of bad inheritance of this pragma from with'ed unit.

2014-10-20  Ed Schonberg  <schonberg@adacore.com>

* sem_ch13.adb (Inherit_Aspects_At_Freeze_Point): For a subtype,
inherit convention from parent type, because the subtype may
have been declared on a partial view, prior to the pragma on
the parent.

2014-10-20  Olivier Hainque  <hainque@adacore.com>
    Tristan Gingold  <gingold@adacore.com>

* gcc-interface/Makefile.in: Handle arm-darwin and VxWorks 7.
Misc clean ups.

2014-10-20  Nicolas Roche  <roche@adacore.com>

* gcc-interface/Make-lang.in: ensure that automatically generated
dependency are referencing generated gnatvsn rather than original
one.

From-SVN: r216482

gcc/ada/ChangeLog
gcc/ada/gcc-interface/Make-lang.in
gcc/ada/gcc-interface/Makefile.in
gcc/ada/par-prag.adb
gcc/ada/par.adb
gcc/ada/prj-conf.adb
gcc/ada/prj-proc.adb
gcc/ada/prj-proc.ads
gcc/ada/sem_ch13.adb
gcc/ada/sem_ch3.adb
gcc/ada/sem_prag.adb

index 5cabad4752fc38339bb17be0f9c792b9f17493dd..759de61734afc4cbec8f0e71f6021142cf93f030 100644 (file)
@@ -1,3 +1,37 @@
+2014-10-20  Robert Dewar  <dewar@adacore.com>
+
+       * sem_ch3.adb, prj-proc.adb, prj-proc.ads, prj-conf.adb: Minor
+       reformatting.
+
+2014-10-20  Robert Dewar  <dewar@adacore.com>
+
+       * par-prag.adb (Add_List_Pragma_Entry): New procedure.
+       * par.adb (P_Pragma): Document requirement to handle multiple calls.
+
+2014-10-20  Robert Dewar  <dewar@adacore.com>
+
+       * sem_prag.adb (Analyze_Pragma, case No_Elaboration_Code_All):
+       Fix error of bad inheritance of this pragma from with'ed unit.
+
+2014-10-20  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch13.adb (Inherit_Aspects_At_Freeze_Point): For a subtype,
+       inherit convention from parent type, because the subtype may
+       have been declared on a partial view, prior to the pragma on
+       the parent.
+
+2014-10-20  Olivier Hainque  <hainque@adacore.com>
+           Tristan Gingold  <gingold@adacore.com>
+
+       * gcc-interface/Makefile.in: Handle arm-darwin and VxWorks 7.
+       Misc clean ups.
+
+2014-10-20  Nicolas Roche  <roche@adacore.com>
+
+       * gcc-interface/Make-lang.in: ensure that automatically generated
+       dependency are referencing generated gnatvsn rather than original
+       one.
+
 2014-10-20  Gary Dismukes  <dismukes@adacore.com>
 
        * gnat_ugn.texi: Minor reformatting.
index e11794f92378eba45d2edb0ff6d9e0a7a61338f1..efae513ef79f2c434062b76d5b1671039f6db95b 100644 (file)
@@ -68,7 +68,7 @@ ALL_ADAFLAGS = \
   $(CFLAGS) $(ADA_CFLAGS) $(ADAFLAGS) $(CHECKING_ADAFLAGS) $(WARN_ADAFLAGS)
 FORCE_DEBUG_ADAFLAGS = -g
 ADA_CFLAGS =
-ADA_INCLUDES = -nostdinc -I- -I. -Iada -I$(srcdir)/ada -I$(srcdir)/ada/gcc-interface
+ADA_INCLUDES = -nostdinc -I- -I. -Iada/generated -Iada -I$(srcdir)/ada -I$(srcdir)/ada/gcc-interface
 GNATLIBFLAGS= -W -Wall -gnatpg -nostdinc
 GNATLIBCFLAGS= -g -O2 $(TCFLAGS)
 ADA_INCLUDE_DIR = $(libsubdir)/adainclude
@@ -111,6 +111,7 @@ ADA_DEPS=case $@ in \
             *)a="`echo $@ | sed -e 's/.o$$/.ali/'`"; \
                 echo "$@: `cat $$a | \
                 sed -ne 's;^D \([a-z0-9_\.-]*\).*;ada/\1;gp' | \
+                sed -e 's;ada/gnatvsn.ads;ada/generated/gnatvsn.ads;g' | \
                 tr -d '\015' | tr '\n' ' '`" > $(dir $@)/$(DEPDIR)/$(patsubst %.o,%.Po,$(notdir $@));; \
          esac;
 
@@ -145,7 +146,7 @@ ifeq ($(build), $(host))
         CC="../../xgcc -B../../" \
         CXX="$(CXX)" \
         $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) \
-        ADA_INCLUDES="-I- -I../rts" \
+        ADA_INCLUDES="-I- -I../generated -I../rts" \
         GNATMAKE="../../gnatmake" \
         GNATLINK="../../gnatlink" \
         GNATBIND="../../gnatbind"
@@ -163,7 +164,7 @@ ifeq ($(build), $(host))
         CC="$(CC)" \
         CXX="$(CXX)" \
         $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) \
-        ADA_INCLUDES="-I$(RTS_DIR)/../adainclude -I$(RTS_DIR)" \
+        ADA_INCLUDES="-I../generated -I$(RTS_DIR)/../adainclude -I$(RTS_DIR)" \
         GNATMAKE="gnatmake" \
         GNATBIND="gnatbind" \
         GNATLINK="gnatlink" \
@@ -186,7 +187,7 @@ else
         CC="$(CC)" \
         CXX="$(CXX)" \
         $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS)  \
-        ADA_INCLUDES="-I../rts"                \
+        ADA_INCLUDES="-I../generated -I../rts"                \
         GNATMAKE="$(GNATMAKE_FOR_HOST)"      \
         GNATBIND="$(GNATBIND_FOR_HOST)"      \
         GNATLINK="$(GNATLINK_FOR_HOST)"      \
@@ -201,7 +202,7 @@ else
         CC="$(CC)" \
         CXX="$(CXX)" \
         $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS)  \
-        ADA_INCLUDES="-I$(RTS_DIR)/../adainclude -I$(RTS_DIR)" \
+        ADA_INCLUDES="-I../generated -I$(RTS_DIR)/../adainclude -I$(RTS_DIR)" \
         GNATMAKE="$(GNATMAKE_FOR_HOST)"      \
         GNATBIND="$(GNATBIND_FOR_HOST)"      \
         GNATLINK="$(GNATLINK_FOR_HOST)"      \
@@ -985,6 +986,24 @@ ada/a-tags.o  : ada/a-tags.adb ada/a-tags.ads
          $< $(OUTPUT_OPTION)
        @$(ADA_DEPS)
 
+# Handling of gnatvsn version string
+
+# This ensure the build works even if there is no GNAT_DATE present in the
+# sources
+ada/GNAT_DATE:
+       touch ada/GNAT_DATE
+
+ada/generated/gnatvsn.ads: ada/gnatvsn.ads BASE-VER ada/GNAT_DATE
+       $(MKDIR) ada/generated
+       s=`cat $(srcdir)/BASE-VER | sed -e "s/\([0-9]*\)\.\([0-9]*\)\..*/-\1\2/g"`; \
+       d=`if test -f $(srcdir)/ada/GNAT_DATE; then \
+           cat $(srcdir)/ada/GNAT_DATE; else date +%Y%m%d; fi`; \
+       cat $< | sed -e "/Version/s/(\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*)/($$d$$s)/g" >$@
+
+ada/gnatvsn.o : ada/gnatvsn.adb ada/generated/gnatvsn.ads
+       $(CC) -c $(ALL_ADAFLAGS) -Iada/generated -I../ada/generated $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
+       @$(ADA_DEPS)
+
 # Dependencies for windows specific tool (mdll)
 
 ada/mdll.o : ada/mdll.adb ada/mdll.ads ada/mdll-fil.ads ada/mdll-utl.ads
@@ -997,7 +1016,8 @@ ada/mdll-utl.o : ada/mdll-utl.adb ada/mdll.ads ada/mdll-utl.ads ada/sdefault.ads
        $(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
 
 ada_generated_files = ada/sinfo.h ada/einfo.h ada/nmake.adb ada/nmake.ads \
-                     ada/treeprs.ads ada/snames.ads ada/snames.adb ada/snames.h
+                     ada/treeprs.ads ada/snames.ads ada/snames.adb ada/snames.h \
+                     ada/generated/gnatvsn.ads
 
 # When building from scratch we don't have dependency files, the only thing
 # we need to ensure is that the generated files are created first.
index 51c817b6b10263e4013b9b57073d18a44ec54343..cedc7e93a0367ea52398d7a17c3f16a992e51234 100644 (file)
@@ -523,6 +523,12 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks vxworks7,$(target_cpu) $(target_
      ARCH_STR=ppc
   endif
 
+  ifeq ($(strip $(filter-out vxworks7%, $(target_os))),)
+     SVX=system-vxworks7
+  else
+     SVX=system-vxworks
+  endif
+
   LIBGNAT_TARGET_PAIRS = \
   a-intnam.ads<a-intnam-vxworks.ads \
   a-numaux.ads<a-numaux-vxworks.ads \
@@ -586,7 +592,7 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks vxworks7,$(target_cpu) $(target_
       s-vxwext.ads<s-vxwext-rtp.ads \
       s-vxwext.adb<s-vxwext-rtp-smp.adb \
       s-tpopsp.adb<s-tpopsp-vxworks-tls.adb \
-      system.ads<system-vxworks-$(ARCH_STR)-rtp.ads
+      system.ads<$(SVX)-$(ARCH_STR)-rtp-smp.ads
 
       EH_MECHANISM=-gcc
       EXTRA_LIBGNAT_OBJS+=affinity.o sigtramp-vxworks.o
@@ -871,6 +877,13 @@ endif
 
 # x86 VxWorks
 ifeq ($(strip $(filter-out %86 wrs vxworks vxworks7,$(target_cpu) $(target_vendor) $(target_os))),)
+
+  ifeq ($(strip $(filter-out vxworks7%, $(target_os))),)
+     SVX=system-vxworks7
+  else
+     SVX=system-vxworks
+  endif
+
   LIBGNAT_TARGET_PAIRS = \
   a-intnam.ads<a-intnam-vxworks.ads \
   i-vxwork.ads<i-vxwork-x86.ads \
@@ -921,7 +934,7 @@ ifeq ($(strip $(filter-out %86 wrs vxworks vxworks7,$(target_cpu) $(target_vendo
       s-vxwext.ads<s-vxwext-rtp.ads \
       s-vxwext.adb<s-vxwext-rtp-smp.adb \
       s-tpopsp.adb<s-tpopsp-vxworks-tls.adb \
-      system.ads<system-vxworks-x86-rtp.ads
+      system.ads<$(SVX)-x86-rtp-smp.ads
 
       EXTRA_LIBGNAT_OBJS+=affinity.o
     else
@@ -956,6 +969,9 @@ ifeq ($(strip $(filter-out %86 wrs vxworks vxworks7,$(target_cpu) $(target_vendo
   EXTRA_GNATRTL_TASKING_OBJS += s-vxwork.o s-vxwext.o
 
   EXTRA_LIBGNAT_OBJS+=vx_stack_info.o
+
+  GCC_SPEC_FILES+=vxworks-x86-link.spec
+  GCC_SPEC_FILES+=vxworks-smp-x86-link.spec
 endif
 
 # ARM VxWorks
@@ -1149,15 +1165,15 @@ ifeq ($(strip $(filter-out sparc% sun solaris%,$(target_cpu) $(target_vendor) $(
   s-tasinf.ads<s-tasinf-solaris.ads \
   s-taspri.ads<s-taspri-solaris.ads \
   s-tpopsp.adb<s-tpopsp-solaris.adb \
-  g-soliop.ads<g-soliop-solaris.ads
+  g-soliop.ads<g-soliop-solaris.ads \
+  $(ATOMICS_TARGET_PAIRS) \
+  $(ATOMICS_BUILTINS_TARGET_PAIRS)
 
   LIBGNAT_TARGET_PAIRS_32 = \
   system.ads<system-solaris-sparc.ads
 
   LIBGNAT_TARGET_PAIRS_64 = \
-  system.ads<system-solaris-sparcv9.ads \
-  $(ATOMICS_TARGET_PAIRS) \
-  $(ATOMICS_BUILTINS_TARGET_PAIRS)
+  system.ads<system-solaris-sparcv9.ads
 
   ifeq ($(strip $(filter-out sparc sun solaris%,$(target_cpu) $(target_vendor) $(target_os))),)
     ifeq ($(strip $(MULTISUBDIR)),/sparcv9)
@@ -2326,6 +2342,16 @@ ifeq ($(strip $(filter-out darwin%,$(target_os))),)
     endif
   endif
 
+  ifeq ($(strip $(filter-out arm,$(arch))),)
+    LIBGNAT_TARGET_PAIRS += \
+      s-intman.adb<s-intman-susv3.adb \
+      s-osprim.adb<s-osprim-darwin.adb \
+      $(ATOMICS_TARGET_PAIRS)
+
+    LIBGNAT_TARGET_PAIRS += \
+      system.ads<system-darwin-arm.ads
+  endif
+
   TOOLS_TARGET_PAIRS =  \
     mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
     indepsw.adb<indepsw-darwin.adb
index a9fc33d59b0f2e3c588217ee99752b45bdd78c9a..44f936e96e7b27546e43e62335be4f9c60a20a8a 100644 (file)
@@ -53,6 +53,11 @@ function Prag (Pragma_Node : Node_Id; Semi : Source_Ptr) return Node_Id is
    -- Local Subprograms --
    -----------------------
 
+   procedure Add_List_Pragma_Entry (PT : List_Pragma_Type; Loc : Source_Ptr);
+   --  Make a new entry in the List_Pragmas table if this entry is not already
+   --  in the table (it will always be the last one if there is a duplication
+   --  resulting from the use of Save/Restore_Scan_State).
+
    function Arg1 return Node_Id;
    function Arg2 return Node_Id;
    function Arg3 return Node_Id;
@@ -107,6 +112,19 @@ function Prag (Pragma_Node : Node_Id; Semi : Source_Ptr) return Node_Id is
    --  Note that we don't need to do full error checking for badly formed cases
    --  of restrictions, since these will be caught during semantic analysis.
 
+   ---------------------------
+   -- Add_List_Pragma_Entry --
+   ---------------------------
+
+   procedure Add_List_Pragma_Entry (PT : List_Pragma_Type; Loc : Source_Ptr) is
+   begin
+      if List_Pragmas.Last < List_Pragmas.First
+        or else (List_Pragmas.Table (List_Pragmas.Last)) /= ((PT, Loc))
+      then
+         List_Pragmas.Append ((PT, Loc));
+      end if;
+   end Add_List_Pragma_Entry;
+
    ----------
    -- Arg1 --
    ----------
@@ -413,8 +431,8 @@ begin
 
       --  pragma List (Off | On)
 
-      --  The processing for pragma List must be done at parse time,
-      --  since a listing can be generated in parse only mode.
+      --  The processing for pragma List must be done at parse time, since a
+      --  listing can be generated in parse only mode.
 
       when Pragma_List =>
          Check_Arg_Count (1);
@@ -425,16 +443,12 @@ begin
          --  in the List (Off) case, the pragma will print even in a region
          --  of code with listing turned off (this is required).
 
-         List_Pragmas.Increment_Last;
-         List_Pragmas.Table (List_Pragmas.Last) :=
-           (Ptyp => List_On, Ploc => Sloc (Pragma_Node));
+         Add_List_Pragma_Entry (List_On, Sloc (Pragma_Node));
 
          --  Now generate the list off entry for pragma List (Off)
 
          if Chars (Expression (Arg1)) = Name_Off then
-            List_Pragmas.Increment_Last;
-            List_Pragmas.Table (List_Pragmas.Last) :=
-              (Ptyp => List_Off, Ploc => Semi);
+            Add_List_Pragma_Entry (List_Off, Semi);
          end if;
 
       ----------------
@@ -448,8 +462,7 @@ begin
 
       when Pragma_Page =>
          Check_Arg_Count (0);
-         List_Pragmas.Increment_Last;
-         List_Pragmas.Table (List_Pragmas.Last) := (Page, Semi);
+         Add_List_Pragma_Entry (Page, Semi);
 
       ------------------
       -- Restrictions --
index 53b19f53fce03bc94e95db8be4c34b9f6d450398..0e938d72ea86b17ab597e99556047bf0c497f547 100644 (file)
@@ -611,7 +611,12 @@ function Par (Configuration_Pragmas : Boolean) return List_Id is
       function P_Pragma (Skipping : Boolean := False) return Node_Id;
       --  Scan out a pragma. If Skipping is True, then the caller is skipping
       --  the pragma in the context of illegal placement (this is used to avoid
-      --  some junk cascaded messages).
+      --  some junk cascaded messages). Some pragmas must be dealt with during
+      --  the parsing phase (e.g. pragma Page, since we can generate a listing
+      --  in syntax only mode). It is possible that the parser uses the rescan
+      --  logic (using Save/Restore_Scan_State) with the effect of calling this
+      --  procedure more than once for the same pragma. All parse-time pragma
+      --  handling must be prepared to handle such multiple calls correctly.
 
       function P_Identifier (C : Id_Check := None) return Node_Id;
       --  Scans out an identifier. The parameter C determines the treatment
index 0be49a079fb729365b1d4432a338bd4ef2eb30bd..53d29ac5d37feaa3c2733f2f31250b1ab6de9349 100644 (file)
@@ -849,10 +849,8 @@ package body Prj.Conf is
 
       begin
          Proj := Project;
-
          while Proj /= No_Project loop
             Id := Value_Of (Name_Runtime, Proj.Decl.Arrays, Shared);
-
             while Id /= No_Array_Element loop
                Element := Shared.Array_Elements.Table (Id);
                Lang := Element.Index;
index dbb7714410498bc710635757780eb392f581153a..bb07da9bdeaa9c0b26c9f331641144785a3166b1 100644 (file)
@@ -966,19 +966,19 @@ package body Prj.Proc is
 
                            when List =>
                               case The_Default is
-                                 when Read_Only_Value =>
+                                 when Read_Only_Value  =>
                                     null;
 
-                                 when Empty_Value =>
+                                 when Empty_Value      =>
                                     The_Variable.Values := Nil_String;
 
-                                 when Dot_Value =>
+                                 when Dot_Value        =>
                                     The_Variable.Values :=
                                       Shared.Dot_String_List;
 
                                  when Object_Dir_Value |
-                                      Target_Value |
-                                      Runtime_Value =>
+                                      Target_Value     |
+                                      Runtime_Value    =>
                                     null;
                               end case;
                            end case;
index 0156df87f4496563df54112ac12c14b21904ab8b..face045b5f4a554d30179d09200b7039b152e104 100644 (file)
@@ -93,4 +93,5 @@ package Prj.Proc is
    procedure Set_Default_Runtime_For (Language : Name_Id; Value : String);
    --  Set the default value for the runtime of Language. To be used for the
    --  value of 'Runtime(<Language>) when Runtime (<language>) is not declared.
+
 end Prj.Proc;
index 211d9675681f596ea7d5f4cc2891b57f060c6341..a23001daa482ec0fbbc93b950538f4af04c878ea 100644 (file)
@@ -10664,6 +10664,9 @@ package body Sem_Ch13 is
       --  Component_Size, Machine_Radix, Object_Size, Pack, Predicates,
       --  Preelaborable_Initialization, RM_Size and Small.
 
+      --  In addition, Convention must be propagated from base type to subtype,
+      --  because the subtype may have been declared on an incomplete view.
+
       if Nkind (Parent (Typ)) = N_Private_Extension_Declaration then
          return;
       end if;
@@ -10700,6 +10703,12 @@ package body Sem_Ch13 is
          Set_Is_Volatile (Typ);
       end if;
 
+      --  Convention
+
+      if Typ /= Base_Type (Typ) and then Is_Frozen (Base_Type (Typ)) then
+         Set_Convention (Typ, Convention (Base_Type (Typ)));
+      end if;
+
       --  Default_Component_Value
 
       if Is_Array_Type (Typ)
index ec4f7914c0c7b541c64aab1f316dad64a76b96ac..7f42291317cd7c23e9d0e9c094a27a2848c8852e 100644 (file)
@@ -3846,9 +3846,7 @@ package body Sem_Ch3 is
             --  for discriminants and are thus not indefinite.
 
             elsif Is_Unchecked_Union (T) then
-               if Constant_Present (N)
-                 or else Nkind (E) = N_Function_Call
-               then
+               if Constant_Present (N) or else Nkind (E) = N_Function_Call then
                   Set_Ekind (Id, E_Constant);
                else
                   Set_Ekind (Id, E_Variable);
@@ -3856,9 +3854,9 @@ package body Sem_Ch3 is
 
                Rewrite (N,
                  Make_Object_Renaming_Declaration (Loc,
-                    Defining_Identifier => Id,
-                    Subtype_Mark => New_Occurrence_Of (T, Loc),
-                    Name => E));
+                   Defining_Identifier => Id,
+                   Subtype_Mark        => New_Occurrence_Of (T, Loc),
+                   Name                => E));
 
                Set_Renamed_Object (Id, E);
                Freeze_Before (N, T);
index ea028abf06478da07885842fb9e55d5fe26c6fa3..5ef1010e3caa0dcfce595cbd58a159291bcf775b 100644 (file)
@@ -16416,12 +16416,19 @@ package body Sem_Prag is
 
             Set_No_Elab_Code_All (Current_Sem_Unit);
 
-            --  Set restriction No_Elaboration_Code, including adding it to the
-            --  set of configuration restrictions so it will apply to all units
-            --  in the extended main source.
+            --  Set restriction No_Elaboration_Code
 
             Set_Restriction (No_Elaboration_Code, N);
-            Add_To_Config_Boolean_Restrictions (No_Elaboration_Code);
+
+            --  If we are in the main unit or in an extended main source unit,
+            --  then we also add it to the configuration restrictions so that
+            --  it will apply to all units in the extended main source.
+
+            if Current_Sem_Unit = Main_Unit
+              or else In_Extended_Main_Source_Unit (N)
+            then
+               Add_To_Config_Boolean_Restrictions (No_Elaboration_Code);
+            end if;
 
             --  If in main extended unit, activate transitive with test