]> gcc.gnu.org Git - gcc.git/commitdiff
[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 23 Jan 2004 10:30:04 +0000 (11:30 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 23 Jan 2004 10:30:04 +0000 (11:30 +0100)
2004-01-23  Robert Dewar  <dewar@gnat.com>

* exp_aggr.adb: Minor reformatting

* exp_ch9.adb: Minor code clean up
Minor reformatting
Fix bad character in comment

* targparm.adb (Get_Target_Parameters): Give clean abort error on
unexpected end of file, along with more detailed message.

2004-01-23  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

* exp_pakd.adb (Install_PAT): Clear Freeze_Node for PAT and Etype of
PAT.

* decl.c (copy_alias_set): New function.
(gnat_to_gnu_entity, make_aligning_type, make_packable_type): Use it.

2004-01-23  Doug Rupp  <rupp@gnat.com>

* Makefile.in (install-gnatlib): Change occurrences of lib$$file to
lib$${file} in case subsequent character is not a separator.

2004-01-23  Vincent Celier  <celier@gnat.com>

* 5vml-tgt.adb (Build_Dynamic_Library): Invoke gcc with -shared-libgcc
when the GCC version is at least 3.

* make.adb: (Scan_Make_Arg): Pass -B to Scan_Make_Switches
Remove all "Opt.", to prepare for opt split

* prj-part.adb (Parse_Single_Project): New Boolean out parameter
Extends_All. Set to True when the project parsed is an extending all
project. Fails for importing an extending all project only when the
imported project is an extending all project.
(Post_Parse_Context_Clause): Set Is_Extending_All to the with clause,
depending on the value of Extends_All returned.

* prj-proc.adb (Process): Check that no project shares its object
directory with a project that extends it, directly or indirectly,
including a virtual project.
Check that no project extended by another project shares its object
directory with another also extended project.

* prj-tree.adb (Is_Extending_All, Set_Is_Extending_All): Allow for
Kind = N_With_Clause

* prj-tree.ads: Minor reformatting
Indicate that Flag2 also applies to N_With_Clause (Is_Extending_All).

2004-01-23  Ed Schonberg  <schonberg@gnat.com>

* sem_ch13.adb (Analyze_Attribute_Definition_Clause): If the attribute
applies to a type with an incomplete view, use full view in Name of
clause, for consistency with uses of Get_Attribute_Definition_Clause.

2004-01-23  Arnaud Charlet  <charlet@act-europe.fr>

* 5itaprop.adb (Set_Priority): Reset the priority to 0 when using
SCHED_RR, since other values are not supported by this policy.
(Initialize): Move initialization of mutex attribute to package
elaboration, to prevent early access to this variable.

* Makefile.in: Remove mention of Makefile.adalib, unused.

* Makefile.adalib: Removed, unused.

From-SVN: r76403

15 files changed:
gcc/ada/5itaprop.adb
gcc/ada/5vml-tgt.adb
gcc/ada/ChangeLog
gcc/ada/Makefile.adalib [deleted file]
gcc/ada/Makefile.in
gcc/ada/decl.c
gcc/ada/exp_aggr.adb
gcc/ada/exp_ch9.adb
gcc/ada/exp_pakd.adb
gcc/ada/make.adb
gcc/ada/prj-part.adb
gcc/ada/prj-proc.adb
gcc/ada/prj-tree.adb
gcc/ada/prj-tree.ads
gcc/ada/sem_ch13.adb

index 54a6b488939e1b5b7f40475005f1d12e0047e17d..b967c18a95048e9ba6075fc1edf99ddf811f84b3 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                  B o d y                                 --
 --                                                                          --
---         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
+--         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
 --                                                                          --
 -- GNARL is free software; you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -712,6 +712,7 @@ package body System.Task_Primitives.Operations is
            (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
 
       else
+         Param.sched_priority := 0;
          Result := pthread_setschedparam
            (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
       end if;
@@ -1038,12 +1039,6 @@ package body System.Task_Primitives.Operations is
    begin
       Environment_Task_ID := Environment_Task;
 
-      Result := pthread_mutexattr_init (Mutex_Attr'Access);
-      pragma Assert (Result = 0 or else Result = ENOMEM);
-
-      Result := pthread_condattr_init (Cond_Attr'Access);
-      pragma Assert (Result = 0 or else Result = ENOMEM);
-
       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
 
       --  Initialize the global RTS lock
@@ -1096,5 +1091,11 @@ begin
             pragma Assert (Result = 0);
          end if;
       end loop;
+
+      Result := pthread_mutexattr_init (Mutex_Attr'Access);
+      pragma Assert (Result = 0);
+
+      Result := pthread_condattr_init (Cond_Attr'Access);
+      pragma Assert (Result = 0);
    end;
 end System.Task_Primitives.Operations;
index ecc39114e1c8aaab9607d09a408a5bd1a8a773fb..835443723f953d3c1aa473aac49bb451c5f650a7 100644 (file)
@@ -69,6 +69,14 @@ package body MLib.Tgt is
 
    Success : Boolean := False;
 
+   Shared_Libgcc : aliased String := "-shared-libgcc";
+
+   No_Shared_Libgcc_Switch : aliased Argument_List := (1 .. 0 => null);
+   Shared_Libgcc_Switch    : aliased Argument_List :=
+                               (1 => Shared_Libgcc'Access);
+   Link_With_Shared_Libgcc : Argument_List_Access :=
+                               No_Shared_Libgcc_Switch'Access;
+
    ------------------------------
    -- Target dependent section --
    ------------------------------
@@ -242,6 +250,14 @@ package body MLib.Tgt is
    --  Start of processing for Build_Dynamic_Library
 
    begin
+      --  Invoke gcc with -shared-libgcc, but only for GCC 3 or higher
+
+      if GCC_Version >= 3 then
+         Link_With_Shared_Libgcc := Shared_Libgcc_Switch'Access;
+      else
+         Link_With_Shared_Libgcc := No_Shared_Libgcc_Switch'Access;
+      end if;
+
       VMS_Options (VMS_Options'First + 1) := For_Linker_Opt;
 
       for J in Inter'Range loop
@@ -451,7 +467,8 @@ package body MLib.Tgt is
         (Output_File => Lib_File,
          Objects     => Ofiles & Additional_Objects.all,
          Options     => VMS_Options,
-         Options_2   => Opts (Opts'First .. Last_Opt) &
+         Options_2   => Link_With_Shared_Libgcc.all &
+                        Opts (Opts'First .. Last_Opt) &
                         Opts2 (Opts2'First .. Last_Opt2),
          Driver_Name => Driver_Name);
 
index 23ccd1eb269d008a290b9d323fa5606479bba86d..d811dfcf25dd89322b3634fb9035122f1f54bdb5 100644 (file)
@@ -1,3 +1,72 @@
+2004-01-23  Robert Dewar  <dewar@gnat.com>
+
+       * exp_aggr.adb: Minor reformatting
+
+       * exp_ch9.adb: Minor code clean up
+       Minor reformatting
+       Fix bad character in comment
+
+       PR ada/13471
+       * targparm.adb (Get_Target_Parameters): Give clean abort error on
+       unexpected end of file, along with more detailed message.
+
+2004-01-23  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * exp_pakd.adb (Install_PAT): Clear Freeze_Node for PAT and Etype of
+       PAT.
+
+       * decl.c (copy_alias_set): New function.
+       (gnat_to_gnu_entity, make_aligning_type, make_packable_type): Use it.
+
+2004-01-23  Doug Rupp  <rupp@gnat.com>
+
+       * Makefile.in (install-gnatlib): Change occurrences of lib$$file to
+       lib$${file} in case subsequent character is not a separator.
+
+2004-01-23  Vincent Celier  <celier@gnat.com>
+
+       * 5vml-tgt.adb (Build_Dynamic_Library): Invoke gcc with -shared-libgcc
+       when the GCC version is at least 3.
+
+       * make.adb: (Scan_Make_Arg): Pass -B to Scan_Make_Switches
+       Remove all "Opt.", to prepare for opt split
+
+       * prj-part.adb (Parse_Single_Project): New Boolean out parameter
+       Extends_All. Set to True when the project parsed is an extending all
+       project. Fails for importing an extending all project only when the
+       imported project is an extending all project.
+       (Post_Parse_Context_Clause): Set Is_Extending_All to the with clause,
+       depending on the value of Extends_All returned.
+
+       * prj-proc.adb (Process): Check that no project shares its object
+       directory with a project that extends it, directly or indirectly,
+       including a virtual project.
+       Check that no project extended by another project shares its object
+       directory with another also extended project.
+
+       * prj-tree.adb (Is_Extending_All, Set_Is_Extending_All): Allow for
+       Kind = N_With_Clause
+
+       * prj-tree.ads: Minor reformatting
+       Indicate that Flag2 also applies to N_With_Clause (Is_Extending_All).
+
+2004-01-23  Ed Schonberg  <schonberg@gnat.com>
+
+       * sem_ch13.adb (Analyze_Attribute_Definition_Clause): If the attribute
+       applies to a type with an incomplete view, use full view in Name of
+       clause, for consistency with uses of Get_Attribute_Definition_Clause.
+
+2004-01-23  Arnaud Charlet  <charlet@act-europe.fr>
+
+       * 5itaprop.adb (Set_Priority): Reset the priority to 0 when using
+       SCHED_RR, since other values are not supported by this policy.
+       (Initialize): Move initialization of mutex attribute to package
+       elaboration, to prevent early access to this variable.
+
+       * Makefile.in: Remove mention of Makefile.adalib, unused.
+
+       * Makefile.adalib: Removed, unused.
+
 2004-01-21  Javier Miranda  <miranda@gnat.com>
 
        * exp_aggr.adb (Build_Record_Aggr_Code): Do not build the master
diff --git a/gcc/ada/Makefile.adalib b/gcc/ada/Makefile.adalib
deleted file mode 100644 (file)
index ba084dc..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-# This is the Unix/NT makefile used to build an alternate GNAT run-time.
-# Note that no files in the original GNAT library dirctory will be
-# modified by this procedure
-#
-# This Makefile requires Gnu make.
-# Here is how to use this Makefile
-#
-# 1. Create a new directory (say adalib)
-#    e.g.  $ mkdir adalib
-#          $ cd adalib           
-#
-# 2. Copy this Makefile from the standard Adalib directory, e.g.
-#    $ cp /usr/local/gnat/lib/gcc-lib/<target>/<version>/adalib/Makefile.adalib .
-#
-# 3. If needed (e.g for pragma Normalize_Scalars), create a gnat.adc
-#    containing the configuration pragmas you want to use to build the library
-#    e.g. $ echo pragma Normalize_Scalars; > gnat.adc
-#    Note that this step is usually not needed, and most pragmas are not
-#    relevant to the GNAT run time. 
-#          
-# 4. Determine the values of the following MACROS
-#      ROOT   (location of GNAT installation, e.g /usr/local/gnat)
-#    and optionnally
-#      CFLAGS (back end compilation flags such as -g -O2)
-#      ADAFLAGS (front end compilation flags such as -gnatpgn)
-#                *beware* the minimum value for this MACRO is -gnatpg 
-#                for proper compilation of the GNAT library
-# 5a. If you are using a native compile, call make
-#   e.g.  $ make -f Makefile.adalib ROOT=/usr/local/gnat CFLAGS="-g -O0"
-#
-# 5b. If you are using a cross compiler, you need to define two additional
-#     MACROS:
-#       CC    (name of the cross compiler)
-#       AR    (name of the cross ar)
-#
-#   e.g.  $ make -f Makefile.adalib ROOT=/opt/gnu/gnat \
-#     CFLAGS="-O2 -g -I/usr/wind/target/h" CC=powerpc-wrs-vxworks-gcc \
-#     AR=arppc
-#
-# 6. put this new library on your Object PATH where you want to use it
-# in place of the original one. This can be achieved for instance by
-# updating the value of the environment variable ADA_OBJECTS_PATH
-
-PWD_COMMAND=$${PWDCMD-pwd}
-CC = gcc
-AR = ar
-
-ifeq ($(strip $(filter-out %sh,$(SHELL))),)
-   GNAT_ROOT = $(shell cd $(ROOT);${PWD_COMMAND})/
-else
-   GNAT_ROOT = $(ROOT)/
-endif
-
-target = $(shell $(CC) -dumpmachine)
-version = $(shell $(CC) -dumpversion)
-ADA_INCLUDE_PATH = $(GNAT_ROOT)lib/gcc-lib/$(target)/$(version)/adainclude/
-GCC_INCLUDE_PATH = $(GNAT_ROOT)lib/gcc-lib/$(target)/$(version)/gcc-include/
-ADA_OBJECTS_PATH = $(GNAT_ROOT)lib/gcc-lib/$(target)/$(version)/adalib/
-
-vpath %.adb $(ADA_INCLUDE_PATH)
-vpath %.ads $(ADA_INCLUDE_PATH)
-vpath %.c $(ADA_INCLUDE_PATH)
-vpath %.h $(ADA_INCLUDE_PATH)
-
-CFLAGS = -O2
-GNATLIBCFLAGS = -DIN_RTS=1 -DIN_GCC=1 -fexceptions
-ADAFLAGS = -gnatpgn
-ALL_ADAFLAGS = $(CFLAGS) $(ADAFLAGS) -I. 
-FORCE_DEBUG_ADAFLAGS = -g
-INCLUDES = -I$(ADA_INCLUDE_PATH) -I$(GCC_INCLUDE_PATH)/include   \
--I$(GCC_INCLUDE_PATH)/gcc/config -I$(GCC_INCLUDE_PATH)/gcc       \
--I$(GCC_INCLUDE_PATH)/gcc/ada    -I$(GCC_INCLUDE_PATH)
-
-# Say how to compile Ada programs.
-.SUFFIXES: .ada .adb .ads
-
-.c.o:
-       $(CC) -c $(CFLAGS) $(GNATLIBCFLAGS) $(INCLUDES) $<
-.adb.o:
-       $(CC) -c $(ALL_ADAFLAGS) $<
-.ads.o:
-       $(CC) -c $(ALL_ADAFLAGS) $<
-
-GNAT_OBJS :=$(filter-out __%,$(shell $(AR) t $(ADA_OBJECTS_PATH)libgnat.a))
-GNARL_OBJS:=$(filter-out __%,$(shell $(AR) t $(ADA_OBJECTS_PATH)libgnarl.a))
-OBJS := $(GNAT_OBJS) $(GNARL_OBJS)
-
-all: libgnat.a libgnarl.a delete_objects g-trasym.o
-       chmod 0444 *.ali *.a
-
-delete_objects:
-       rm *.o
-
-libgnat.a: $(GNAT_OBJS)
-       $(AR) r libgnat.a $(GNAT_OBJS)
-
-libgnarl.a: $(GNARL_OBJS)
-       $(AR) r libgnarl.a $(GNARL_OBJS)
-
-a-except.o: a-except.adb a-except.ads
-       $(CC) -c $(FORCE_DEBUG_ADAFLAGS) $(ALL_ADAFLAGS) -O0 -fno-inline $<
-
-s-assert.o: s-assert.adb s-assert.ads a-except.ads
-       $(CC) -c $(FORCE_DEBUG_ADAFLAGS) $(ALL_ADAFLAGS) $<
-
-s-tasdeb.o: s-tasdeb.adb
-       $(CC) -c $(FORCE_DEBUG_ADAFLAGS) $(ALL_ADAFLAGS) $<
-
-s-vaflop.o: s-vaflop.adb
-       $(CC) -c $(FORCE_DEBUG_ADAFLAGS) -O $(ALL_ADAFLAGS) $<
-
-s-memory.o: s-memory.adb s-memory.ads
-       $(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 $(ADA_INCLUDES) $<
-
-s-traceb.o: s-traceb.adb
-       $(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -fno-optimize-sibling-calls $(ADA_INCLUDES) $<
-
-tracebak.o: tracebak.c
-       $(CC) -c $(CFLAGS) $(GNATLIBCFLAGS) \
-               $(ALL_CPPFLAGS) $(INCLUDES) -fno-omit-frame-pointer $<
-
-.PHONY: delete_objects
index ee2da91e8cad6154e7cc79c752867cfee412e110..7252bc04138fa626cb8aaa1cda674fb378a12380 100644 (file)
@@ -1451,7 +1451,7 @@ RAVEN_OBJS = \
 ADA_INCLUDE_SRCS =\
  ada.ads calendar.ads directio.ads gnat.ads interfac.ads ioexcept.ads \
  machcode.ads text_io.ads unchconv.ads unchdeal.ads \
- sequenio.ads system.ads Makefile.adalib Makefile.prolog Makefile.generic \
+ sequenio.ads system.ads Makefile.prolog Makefile.generic \
  memtrack.adb \
  a-*.adb a-*.ads g-*.ad? i-*.ad? \
  s-[a-o]*.adb s-[p-z]*.adb \
@@ -1706,13 +1706,13 @@ install-gnatlib: ../stamp-gnatlib
 #     for shared libraries on some targets, e.g. on HP-UX where the x
 #     permission is required.
        for file in gnat gnarl; do \
-          if [ -f rts/lib$$file$(hyphen)$(LIBRARY_VERSION)$(soext) ]; then \
-             $(INSTALL) rts/lib$$file$(hyphen)$(LIBRARY_VERSION)$(soext) \
+          if [ -f rts/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) ]; then \
+             $(INSTALL) rts/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \
                         $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
           fi; \
-          if [ -f rts/lib$$file$(soext) ]; then \
-             $(LN_S) lib$$file$(hyphen)$(LIBRARY_VERSION)$(soext) \
-             $(DESTDIR)$(ADA_RTL_OBJ_DIR)/lib$$file$(soext); \
+          if [ -f rts/lib$${file}$(soext) ]; then \
+             $(LN_S) lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \
+             $(DESTDIR)$(ADA_RTL_OBJ_DIR)/lib$${file}$(soext); \
           fi; \
        done
 # This copy must be done preserving the date on the original file.
index 1b0200e2c78528144963c8c6ebc10641dcbd58c6..41669d097c65afd9a79959746b2f4ede44fcd682 100644 (file)
@@ -82,6 +82,7 @@ static struct incomplete
   Entity_Id full_type;
 } *defer_incomplete_list = 0;
 
+static void copy_alias_set (tree, tree);
 static tree substitution_list (Entity_Id, Entity_Id, tree, int);
 static int allocatable_size_p (tree, int);
 static struct attrib *build_attr_list (Entity_Id);
@@ -1605,13 +1606,18 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
            tem = build_array_type (tem, gnu_index_types[index]);
            TYPE_MULTI_ARRAY_P (tem) = (index > 0);
 
-           /* ??? For now, we say that any component of aggregate type is
-              addressable because the front end may take 'Reference of it.
-              But we have to make it addressable if it must be passed by
-              reference or it that is the default.  */
+           /* If the type below this an multi-array type, then this
+              does not not have aliased components.
+
+              ??? Otherwise, for now, we say that any component of aggregate
+              type is addressable because the front end may take 'Reference
+              of it. But we have to make it addressable if it must be passed
+              by reference or it that is the default.  */
            TYPE_NONALIASED_COMPONENT (tem)
-             = (! Has_Aliased_Components (gnat_entity)
-                && ! AGGREGATE_TYPE_P (TREE_TYPE (tem)));
+             = ((TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
+                 && TYPE_MULTI_ARRAY_P (TREE_TYPE (tem))) ? 1
+                : (! Has_Aliased_Components (gnat_entity)
+                   && ! AGGREGATE_TYPE_P (TREE_TYPE (tem))));
          }
 
        /* If an alignment is specified, use it if valid.  But ignore it for
@@ -1923,13 +1929,18 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
            {
              gnu_type = build_array_type (gnu_type, gnu_index_type[index]);
              TYPE_MULTI_ARRAY_P (gnu_type) = (index > 0);
-             /* ??? For now, we say that any component of aggregate type is
-                addressable because the front end may take 'Reference.
-                But we have to make it addressable if it must be passed by
-                reference or it that is the default.  */
+           /* If the type below this an multi-array type, then this
+              does not not have aliased components.
+
+              ??? Otherwise, for now, we say that any component of aggregate
+              type is addressable because the front end may take 'Reference
+              of it. But we have to make it addressable if it must be passed
+              by reference or it that is the default.  */
              TYPE_NONALIASED_COMPONENT (gnu_type)
-               = (! Has_Aliased_Components (gnat_entity)
-                  && ! AGGREGATE_TYPE_P (TREE_TYPE (gnu_type)));
+             = ((TREE_CODE (TREE_TYPE (gnu_type)) == ARRAY_TYPE
+                 && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type))) ? 1
+                : (! Has_Aliased_Components (gnat_entity)
+                   && ! AGGREGATE_TYPE_P (TREE_TYPE (gnu_type))));
            }
 
          /* If we are at file level and this is a multi-dimensional array, we
@@ -2010,8 +2021,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
 
          /* Set our alias set to that of our base type.  This gives all
             array subtypes the same alias set.  */
-         TYPE_ALIAS_SET (gnu_type) = get_alias_set (gnu_base_type);
-         record_component_aliases (gnu_type);
+         copy_alias_set (gnu_type, gnu_base_type);
        }
 
       /* If this is a packed type, make this type the same as the packed
@@ -2408,11 +2418,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
        if (Etype (gnat_entity) != gnat_entity
            && ! (Is_Private_Type (Etype (gnat_entity))
                  && Full_View (Etype (gnat_entity)) == gnat_entity))
-         {
-           TYPE_ALIAS_SET (gnu_type)
-             = get_alias_set (gnat_to_gnu_type (Etype (gnat_entity)));
-           record_component_aliases (gnu_type);
-         }
+         copy_alias_set (gnu_type, gnat_to_gnu_type (Etype (gnat_entity)));
 
        /* Fill in locations of fields.  */
        annotate_rep (gnat_entity, gnu_type);
@@ -2644,8 +2650,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
              TYPE_SIZE (gnu_type) = TYPE_SIZE (gnu_base_type);
              TYPE_SIZE_UNIT (gnu_type) = TYPE_SIZE_UNIT (gnu_base_type);
              SET_TYPE_ADA_SIZE (gnu_type, TYPE_ADA_SIZE (gnu_base_type));
-             TYPE_ALIAS_SET (gnu_type) = get_alias_set (gnu_base_type);
-             record_component_aliases (gnu_type);
+             copy_alias_set (gnu_type, gnu_base_type);
 
              if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
                for (gnu_temp = gnu_subst_list;
@@ -4144,6 +4149,30 @@ mark_out_of_scope (Entity_Id gnat_entity)
     }
 }
 \f
+/* Set the alias set of GNU_NEW_TYPE to be that of GNU_OLD_TYPE.  If this
+   is a multi-dimensional array type, do this recursively.  */
+
+static void
+copy_alias_set (tree gnu_new_type, tree gnu_old_type)
+{
+  if (TREE_CODE (gnu_new_type) == ARRAY_TYPE
+      && TREE_CODE (TREE_TYPE (gnu_new_type)) == ARRAY_TYPE
+      && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_new_type)))
+    {
+      /* We need to be careful here in case GNU_OLD_TYPE is an unconstrained
+        array.  In that case, it doesn't have the same shape as GNU_NEW_TYPE,
+        so we need to go down to what does.  */
+      if (TREE_CODE (gnu_old_type) == UNCONSTRAINED_ARRAY_TYPE)
+       gnu_old_type
+         = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_old_type))));
+
+      copy_alias_set (TREE_TYPE (gnu_new_type), TREE_TYPE (gnu_old_type));
+    }
+
+  TYPE_ALIAS_SET (gnu_new_type) = get_alias_set (gnu_old_type);
+  record_component_aliases (gnu_new_type);
+}
+\f
 /* Return a TREE_LIST describing the substitutions needed to reflect
    discriminant substitutions from GNAT_SUBTYPE to GNAT_TYPE and add
    them to GNU_LIST.  If GNAT_TYPE is not specified, use the base type
@@ -4543,7 +4572,7 @@ make_aligning_type (tree type, int align, tree size)
                  bitsize_int (align));
   TYPE_SIZE_UNIT (record_type)
     = size_binop (PLUS_EXPR, size, size_int (align / BITS_PER_UNIT));
-  TYPE_ALIAS_SET (record_type) = get_alias_set (type);
+  copy_alias_set (record_type, type);
   return record_type;
 }
 \f
@@ -4610,7 +4639,7 @@ make_packable_type (tree type)
     }
 
   finish_record_type (new_type, nreverse (field_list), 1, 1);
-  TYPE_ALIAS_SET (new_type) = get_alias_set (type);
+  copy_alias_set (new_type, type);
   return TYPE_MODE (new_type) == BLKmode ? type : new_type;
 }
 \f
index 7113102095b1895808e50dfe0a04951ab6ae0117..1a1b54ab497a93a62814b90cf835d1e2859235b3 100644 (file)
@@ -1918,14 +1918,13 @@ package body Exp_Aggr is
 
       Comp := First (Component_Associations (N));
       while Present (Comp) loop
-         Selector  := Entity (First (Choices (Comp)));
+         Selector := Entity (First (Choices (Comp)));
 
          --  Ada0Y (AI-287): Default initialization of a limited component
 
          if Box_Present (Comp)
             and then Is_Limited_Type (Etype (Selector))
          then
-
             --  Ada0Y (AI-287): If the component type has tasks then generate
             --  the activation chain and master entities (except in case of an
             --  allocator because in that case these entities are generated
@@ -1949,6 +1948,7 @@ package body Exp_Aggr is
 
                   if not Inside_Init_Proc and not Inside_Allocator then
                      Build_Activation_Chain_Entity (N);
+
                      if not Has_Master_Entity (Current_Scope) then
                         Build_Master_Entity (Etype (N));
                      end if;
index 39a1f31bdecb8d8a55a8903f79596d06e7511d48..76afc7b14950c52e9e97b26c42aeaa04f3c4d2d5 100644 (file)
@@ -1198,7 +1198,8 @@ package body Exp_Ch9 is
       Loc  : constant Source_Ptr := Sloc (E);
       P    : Node_Id;
       Decl : Node_Id;
-      S    : Entity_Id := Scope (E);
+      S    : Entity_Id;
+
    begin
       --  Ada0Y (AI-287): Do not set/get the has_master_entity reminder in
       --  internal scopes. Required for nested limited aggregates.
@@ -1213,12 +1214,13 @@ package body Exp_Ch9 is
          then
             return;
          end if;
-      else
 
-         --  Ada0Y (AI-287): Similar to the Ãƒprevious casebut skipping internal
-         --  scopes. If we are not inside an internal scope this code is
-         --  equivalent to the previous code.
+      else
+         --  Ada0Y (AI-287): Similar to the previous case but skipping
+         --  internal scopes. If we are not inside an internal scope this
+         --  code is equivalent to the previous code.
 
+         S := Scope (E);
          while Is_Internal (S) loop
             S := Scope (S);
          end loop;
@@ -1228,7 +1230,6 @@ package body Exp_Ch9 is
          then
             return;
          end if;
-
       end if;
 
       --  Otherwise first build the master entity
index 36b4b36b97c616f7010344418f21def6a1fbef78..f86ab6e8c27b6de91393defea25989c789c28f78 100644 (file)
@@ -791,6 +791,12 @@ package body Exp_Pakd is
 
          Set_Has_Delayed_Freeze (PAT, False);
          Set_Has_Delayed_Freeze (Etype (PAT), False);
+
+         --  If we did allocate a freeze node, then clear out the reference
+         --  since it is obsolete (should we delete the freeze node???)
+
+         Set_Freeze_Node (PAT, Empty);
+         Set_Freeze_Node (Etype (PAT), Empty);
       end Install_PAT;
 
       -----------------
index f716fe74b900cb0216d84c066027e1780a31e3bf..882fe6cab9a802f9882aaaf07277676cf7b83dff 100644 (file)
@@ -862,7 +862,7 @@ package body Make is
    begin
       Add_Lib_Search_Dir (N);
 
-      if Opt.Verbose_Mode then
+      if Verbose_Mode then
          Write_Str ("Adding object directory """);
          Write_Str (N);
          Write_Str (""".");
@@ -878,7 +878,7 @@ package body Make is
    begin
       Add_Src_Search_Dir (N);
 
-      if Opt.Verbose_Mode then
+      if Verbose_Mode then
          Write_Str ("Adding source directory """);
          Write_Str (N);
          Write_Str (""".");
@@ -1037,7 +1037,7 @@ package body Make is
                         --  modified.
 
                      begin
-                        if Opt.Verbose_Mode then
+                        if Verbose_Mode then
                            Write_Str ("   Adding ");
                            Write_Line (Argv);
                         end if;
@@ -1059,7 +1059,7 @@ package body Make is
                      --  We need a copy, because Name_Buffer may be modified
 
                   begin
-                     if Opt.Verbose_Mode then
+                     if Verbose_Mode then
                         Write_Str ("   Adding ");
                         Write_Line (Argv);
                      end if;
@@ -1317,11 +1317,11 @@ package body Make is
       if Read_Only then
          declare
             Saved_Check_Object_Consistency : constant Boolean :=
-                                               Opt.Check_Object_Consistency;
+                                               Check_Object_Consistency;
          begin
-            Opt.Check_Object_Consistency := False;
+            Check_Object_Consistency := False;
             Text := Read_Library_Info (Lib_File);
-            Opt.Check_Object_Consistency := Saved_Check_Object_Consistency;
+            Check_Object_Consistency := Saved_Check_Object_Consistency;
          end;
 
       else
@@ -1384,7 +1384,7 @@ package body Make is
          --  Don't take Ali file into account if it was generated without
          --  object.
 
-         if Opt.Operating_Mode /= Opt.Check_Semantics
+         if Operating_Mode /= Check_Semantics
            and then ALIs.Table (ALI).No_Object
          then
             Verbose_Msg (Full_Lib_File, "has no corresponding object");
@@ -1394,7 +1394,7 @@ package body Make is
 
          --  Check for matching compiler switches if needed
 
-         if Opt.Check_Switches then
+         if Check_Switches then
 
             --  First, collect all the switches
 
@@ -1465,7 +1465,7 @@ package body Make is
                end loop;
 
                if not Switch_Found then
-                  if Opt.Verbose_Mode then
+                  if Verbose_Mode then
                      Verbose_Msg (ALIs.Table (ALI).Sfile,
                                   "switch mismatch """ &
                                   Switches_To_Check.Table (J).all & '"');
@@ -1480,7 +1480,7 @@ package body Make is
               Integer (Units.Table (ALIs.Table (ALI).First_Unit).Last_Arg -
                        Units.Table (ALIs.Table (ALI).First_Unit).First_Arg + 1)
             then
-               if Opt.Verbose_Mode then
+               if Verbose_Mode then
                   Verbose_Msg (ALIs.Table (ALI).Sfile,
                                "different number of switches");
 
@@ -1516,7 +1516,7 @@ package body Make is
          if Modified_Source /= No_File then
             ALI := No_ALI_Id;
 
-            if Opt.Verbose_Mode then
+            if Verbose_Mode then
                Source_Name := Full_Source_Name (Modified_Source);
 
                if Source_Name /= No_File then
@@ -1532,7 +1532,7 @@ package body Make is
             if New_Spec /= No_File then
                ALI := No_ALI_Id;
 
-               if Opt.Verbose_Mode then
+               if Verbose_Mode then
                   Source_Name := Full_Source_Name (New_Spec);
 
                   if Source_Name /= No_File then
@@ -2545,14 +2545,14 @@ package body Make is
       end if;
 
       --  The following two flags affect the behavior of ALI.Set_Source_Table.
-      --  We set Opt.Check_Source_Files to True to ensure that source file
-      --  time stamps are checked, and we set Opt.All_Sources to False to
+      --  We set Check_Source_Files to True to ensure that source file
+      --  time stamps are checked, and we set All_Sources to False to
       --  avoid checking the presence of the source files listed in the
       --  source dependency section of an ali file (which would be a mistake
       --  since the ali file may be obsolete).
 
-      Opt.Check_Source_Files := True;
-      Opt.All_Sources        := False;
+      Check_Source_Files := True;
+      All_Sources        := False;
 
       Insert_Q (Main_Source);
       Mark (Main_Source);
@@ -2764,22 +2764,22 @@ package body Make is
 
                declare
                   Saved_Object_Consistency : constant Boolean :=
-                                               Opt.Check_Object_Consistency;
+                                               Check_Object_Consistency;
 
                begin
                   --  If compilation was not OK, or if output is not an
                   --  object file and we don't do the bind step, don't check
                   --  for object consistency.
 
-                  Opt.Check_Object_Consistency :=
-                    Opt.Check_Object_Consistency
+                  Check_Object_Consistency :=
+                    Check_Object_Consistency
                     and Compilation_OK
                     and (Output_Is_Object or Do_Bind_Step);
                   Text := Read_Library_Info (Lib_File);
 
                   --  Restore Check_Object_Consistency to its initial value
 
-                  Opt.Check_Object_Consistency := Saved_Object_Consistency;
+                  Check_Object_Consistency := Saved_Object_Consistency;
                end;
 
                --  If an ALI file was generated by this compilation, scan
@@ -2808,7 +2808,7 @@ package body Make is
 
                --  If we could not read the ALI file that was just generated
                --  then there could be a problem reading either the ALI or the
-               --  corresponding object file (if Opt.Check_Object_Consistency
+               --  corresponding object file (if Check_Object_Consistency
                --  is set Read_Library_Info checks that the time stamp of the
                --  object file is more recent than that of the ALI). For an
                --  example of problems caught by this test see [6625-009].
@@ -2870,7 +2870,7 @@ package body Make is
                      --  If we have a special runtime, we add the standard
                      --  library only if we can find it.
 
-                     if Opt.RTS_Switch then
+                     if RTS_Switch then
                         Add_It := Find_File (Sfile, Osint.Source) /= No_File;
                      end if;
 
@@ -2927,7 +2927,7 @@ package body Make is
             end if;
          end loop;
 
-         if Opt.Display_Compilation_Progress then
+         if Display_Compilation_Progress then
             Write_Str ("completed ");
             Write_Int (Int (Q_Front));
             Write_Str (" out of ");
@@ -3158,7 +3158,7 @@ package body Make is
       if (not Debug.Debug_Flag_N) and Main_Project /= No_Project then
          for Project in 1 .. Projects.Last loop
             if Projects.Table (Project).Config_File_Temp then
-               if Opt.Verbose_Mode then
+               if Verbose_Mode then
                   Write_Str ("Deleting temp configuration file """);
                   Write_Str (Get_Name_String
                              (Projects.Table (Project).Config_File_Name));
@@ -3405,7 +3405,7 @@ package body Make is
          --  Do not check for an object file (".o") when compiling to
          --  Java bytecode since ".class" files are generated instead.
 
-         Opt.Check_Object_Consistency := False;
+         Check_Object_Consistency := False;
       end if;
 
       --  Special case when switch -B was specified
@@ -3734,7 +3734,7 @@ package body Make is
          end if;
       end if;
 
-      if Opt.Verbose_Mode then
+      if Verbose_Mode then
          Write_Eol;
          Write_Str ("GNATMAKE ");
          Write_Str (Gnatvsn.Gnat_Version_String);
@@ -3778,8 +3778,8 @@ package body Make is
 
       --  If -M was specified, behave as if -n was specified
 
-      if Opt.List_Dependencies then
-         Opt.Do_Not_Execute := True;
+      if List_Dependencies then
+         Do_Not_Execute := True;
       end if;
 
       --  Note that Osint.Next_Main_Source will always return the (possibly
@@ -3791,7 +3791,7 @@ package body Make is
       Add_Switch ("-I-", Compiler, And_Save => True);
 
       if Main_Project = No_Project then
-         if Opt.Look_In_Primary_Dir then
+         if Look_In_Primary_Dir then
 
             Add_Switch
               ("-I" &
@@ -3815,13 +3815,13 @@ package body Make is
          --  sources for other compilation units, when there are extending
          --  projects.
 
-         Opt.Look_In_Primary_Dir := False;
+         Look_In_Primary_Dir := False;
       end if;
 
       --  If the user wants a program without a main subprogram, add the
       --  appropriate switch to the binder.
 
-      if Opt.No_Main_Subprogram then
+      if No_Main_Subprogram then
          Add_Switch ("-z", Binder, And_Save => True);
       end if;
 
@@ -3951,7 +3951,7 @@ package body Make is
 
                   --  We only output the main source file if there is only one
 
-                  if Opt.Verbose_Mode and then Osint.Number_Of_Files = 1 then
+                  if Verbose_Mode and then Osint.Number_Of_Files = 1 then
                      Write_Str ("Main source file: """);
                      Write_Str (Main_Unit_File_Name
                                 (Pos + 1 .. Main_Unit_File_Name'Last));
@@ -3971,7 +3971,7 @@ package body Make is
                --  switches (if any).
 
                if Osint.Number_Of_Files = 1 then
-                  if Opt.Verbose_Mode then
+                  if Verbose_Mode then
                      Write_Str ("Adding gnatmake switches for """);
                      Write_Str (Main_Unit_File_Name);
                      Write_Line (""".");
@@ -4004,7 +4004,7 @@ package body Make is
 
                   begin
                      if Defaults /= Nil_Variable_Value then
-                        if (not Opt.Quiet_Output)
+                        if (not Quiet_Output)
                           and then Switches /= No_Array_Element
                         then
                            Write_Line
@@ -4020,7 +4020,7 @@ package body Make is
                            The_Package => Builder_Package,
                            Program     => None);
 
-                     elsif (not Opt.Quiet_Output)
+                     elsif (not Quiet_Output)
                        and then Switches /= No_Array_Element
                      then
                         Write_Line
@@ -4046,7 +4046,7 @@ package body Make is
             --  Add binder switches from the project file for the first main
 
             if Do_Bind_Step and Binder_Package /= No_Package then
-               if Opt.Verbose_Mode then
+               if Verbose_Mode then
                   Write_Str ("Adding binder switches for """);
                   Write_Str (Main_Unit_File_Name);
                   Write_Line (""".");
@@ -4061,7 +4061,7 @@ package body Make is
             --  Add linker switches from the project file for the first main
 
             if Do_Link_Step and Linker_Package /= No_Package then
-               if Opt.Verbose_Mode then
+               if Verbose_Mode then
                   Write_Str ("Adding linker switches for""");
                   Write_Str (Main_Unit_File_Name);
                   Write_Line (""".");
@@ -4087,7 +4087,7 @@ package body Make is
             Make_Failed ("*** make failed.");
       end;
 
-      Display_Commands (not Opt.Quiet_Output);
+      Display_Commands (not Quiet_Output);
 
       Check_Steps;
 
@@ -4104,7 +4104,7 @@ package body Make is
                     not MLib.Tgt.Library_Exists_For (Proj);
 
                   if Projects.Table (Proj).Flag1 then
-                     if Opt.Verbose_Mode then
+                     if Verbose_Mode then
                         Write_Str
                           ("Library file does not exist for project """);
                         Write_Str
@@ -4280,7 +4280,7 @@ package body Make is
       --  precedence.
 
       if Saved_Maximum_Processes = 0 then
-         Saved_Maximum_Processes := Opt.Maximum_Processes;
+         Saved_Maximum_Processes := Maximum_Processes;
       end if;
 
       --  Allocate as many temporary mapping file names as the maximum
@@ -4470,15 +4470,15 @@ package body Make is
                   Most_Recent_Obj_Stamp => Youngest_Obj_Stamp,
                   Main_Unit             => Is_Main_Unit,
                   Compilation_Failures  => Compilation_Failures,
-                  Check_Readonly_Files  => Opt.Check_Readonly_Files,
-                  Do_Not_Execute        => Opt.Do_Not_Execute,
-                  Force_Compilations    => Opt.Force_Compilations,
-                  In_Place_Mode         => Opt.In_Place_Mode,
-                  Keep_Going            => Opt.Keep_Going,
+                  Check_Readonly_Files  => Check_Readonly_Files,
+                  Do_Not_Execute        => Do_Not_Execute,
+                  Force_Compilations    => Force_Compilations,
+                  In_Place_Mode         => In_Place_Mode,
+                  Keep_Going            => Keep_Going,
                   Initialize_ALI_Data   => True,
                   Max_Process           => Saved_Maximum_Processes);
 
-               if Opt.Verbose_Mode then
+               if Verbose_Mode then
                   Write_Str ("End of compilation");
                   Write_Eol;
                end if;
@@ -4491,7 +4491,7 @@ package body Make is
                  Total_Compilation_Failures + Compilation_Failures;
 
                if Total_Compilation_Failures /= 0 then
-                  if Opt.Keep_Going then
+                  if Keep_Going then
                      goto Next_Main;
 
                   else
@@ -4563,7 +4563,7 @@ package body Make is
                   end loop;
                end if;
 
-               if Opt.List_Dependencies then
+               if List_Dependencies then
                   if First_Compiled_File /= No_File then
                      Inform
                        (First_Compiled_File,
@@ -4574,13 +4574,13 @@ package body Make is
 
                elsif First_Compiled_File = No_File
                  and then not Do_Bind_Step
-                 and then not Opt.Quiet_Output
+                 and then not Quiet_Output
                  and then not Library_Rebuilt
                  and then Osint.Number_Of_Files = 1
                then
                   Inform (Msg => "objects up to date.");
 
-               elsif Opt.Do_Not_Execute
+               elsif Do_Not_Execute
                  and then First_Compiled_File /= No_File
                then
                   Write_Name (First_Compiled_File);
@@ -4598,8 +4598,8 @@ package body Make is
 
                --    4) Made unit cannot be a main unit
 
-               if (Opt.Do_Not_Execute
-                   or Opt.List_Dependencies
+               if (Do_Not_Execute
+                   or List_Dependencies
                    or not Do_Bind_Step
                    or not Is_Main_Unit)
                  and then not No_Main_Subprogram
@@ -4659,7 +4659,7 @@ package body Make is
                   --  and otherwise motivate the relink/rebind.
 
                   if not Executable_Obsolete then
-                     if not Opt.Quiet_Output then
+                     if not Quiet_Output then
                         Inform (Executable, "up to date.");
                      end if;
 
@@ -4722,7 +4722,7 @@ package body Make is
             --  library path. In this case, use the corresponding library file
             --  name.
 
-            if Main_ALI_File = No_File and then Opt.In_Place_Mode then
+            if Main_ALI_File = No_File and then In_Place_Mode then
                Get_Name_String (Get_Directory (Full_Source_Name (Src_File)));
                Get_Name_String_And_Append (ALI_File);
                Main_ALI_File := Name_Find;
@@ -5300,7 +5300,7 @@ package body Make is
 
                   exception
                      when Link_Failed =>
-                        if Osint.Number_Of_Files = 1 or not Opt.Keep_Going then
+                        if Osint.Number_Of_Files = 1 or not Keep_Going then
                            raise;
 
                         else
@@ -5402,7 +5402,7 @@ package body Make is
                   --  if any.
 
                   if Do_Bind_Step and Binder_Package /= No_Package then
-                     if Opt.Verbose_Mode then
+                     if Verbose_Mode then
                         Write_Str ("Adding binder switches for """);
                         Write_Str (Main_Unit_File_Name);
                         Write_Line (""".");
@@ -5418,7 +5418,7 @@ package body Make is
                   --  if any.
 
                   if Do_Link_Step and Linker_Package /= No_Package then
-                     if Opt.Verbose_Mode then
+                     if Verbose_Mode then
                         Write_Str ("Adding linker switches for""");
                         Write_Str (Main_Unit_File_Name);
                         Write_Line (""".");
@@ -5649,7 +5649,7 @@ package body Make is
       --  GNATMAKE since we do not need to check source consistency
       --  again once GNATMAKE has looked at the sources to check.
 
-      Opt.Check_Object_Consistency := True;
+      Check_Object_Consistency := True;
 
       --  Package initializations. The order of calls is important here.
 
@@ -5689,14 +5689,14 @@ package body Make is
 
       --  Test for trailing -o switch
 
-      elsif Opt.Output_File_Name_Present
+      elsif Output_File_Name_Present
         and then not Output_File_Name_Seen
       then
          Make_Failed ("output file name missing after -o");
 
       --  Test for trailing -D switch
 
-      elsif Opt.Object_Directory_Present
+      elsif Object_Directory_Present
         and then not Object_Directory_Seen then
          Make_Failed ("object directory missing after -D");
       end if;
@@ -5730,7 +5730,7 @@ package body Make is
 
          --  A project file was specified by a -P switch
 
-         if Opt.Verbose_Mode then
+         if Verbose_Mode then
             Write_Eol;
             Write_Str ("Parsing Project File """);
             Write_Str (Project_File_Name.all);
@@ -5740,7 +5740,7 @@ package body Make is
 
          --  Avoid looking in the current directory for ALI files
 
-         --  Opt.Look_In_Primary_Dir := False;
+         --  Look_In_Primary_Dir := False;
 
          --  Set the project parsing verbosity to whatever was specified
          --  by a possible -vP switch.
@@ -5759,7 +5759,7 @@ package body Make is
             Make_Failed ("""", Project_File_Name.all, """ processing failed");
          end if;
 
-         if Opt.Verbose_Mode then
+         if Verbose_Mode then
             Write_Eol;
             Write_Str ("Parsing of Project File """);
             Write_Str (Project_File_Name.all);
@@ -5941,7 +5941,7 @@ package body Make is
             --  is not marked.
 
             if Sfile /= No_Name and then not Is_Marked (Sfile) then
-               if Opt.Verbose_Mode then
+               if Verbose_Mode then
                   Write_Str ("Adding """);
                   Write_Str (Get_Name_String (Sfile));
                   Write_Line (""" to the queue");
@@ -5959,7 +5959,7 @@ package body Make is
             --  queue. This will allow parallel compilation processes if -jx
             --  switch is used.
 
-            if Opt.Verbose_Mode then
+            if Verbose_Mode then
                Write_Str ("Adding """);
                Write_Str (Get_Name_String (Sfile));
                Write_Line (""" as if on the command line");
@@ -6229,7 +6229,7 @@ package body Make is
 
          --  We have to provide the full library file name in In_Place_Mode
 
-         if Opt.In_Place_Mode then
+         if In_Place_Mode then
             Lib_Name := Full_Lib_File_Name (Lib_Name);
          end if;
 
@@ -6249,7 +6249,7 @@ package body Make is
             then
                null;
             else
-               if not Opt.Quiet_Output then
+               if not Quiet_Output then
                   Src_Name := Full_Source_Name (Src_Name);
                end if;
 
@@ -6479,7 +6479,7 @@ package body Make is
       --  flag (that is we have seen a -o), then the next argument is
       --  the name of the output executable.
 
-      elsif Opt.Output_File_Name_Present
+      elsif Output_File_Name_Present
         and then not Output_File_Name_Seen
       then
          Output_File_Name_Seen := True;
@@ -6511,7 +6511,7 @@ package body Make is
       --  (that is we have seen a -D), then the next argument is
       --  the path name of the object directory..
 
-      elsif Opt.Object_Directory_Present
+      elsif Object_Directory_Present
         and then not Object_Directory_Seen
       then
          Object_Directory_Seen := True;
@@ -6581,7 +6581,7 @@ package body Make is
 
          if Argv'Length > 2 and then Argv (1 .. 2) = "-I" then
             if Argv (3 .. Argv'Last) = "-" then
-               Opt.Look_In_Primary_Dir := False;
+               Look_In_Primary_Dir := False;
 
             elsif Program_Args = Compiler then
                if Argv (3 .. Argv'Last) /= "-" then
@@ -6683,9 +6683,9 @@ package body Make is
 
                --  Valid --RTS switch
 
-               Opt.No_Stdinc := True;
-               Opt.No_Stdlib := True;
-               Opt.RTS_Switch := True;
+               No_Stdinc := True;
+               No_Stdlib := True;
+               RTS_Switch := True;
 
                declare
                   Src_Path_Name : constant String_Ptr :=
@@ -6737,7 +6737,7 @@ package body Make is
          --  -I-
 
          elsif Argv (2 .. Argv'Last) = "I-" then
-            Opt.Look_In_Primary_Dir := False;
+            Look_In_Primary_Dir := False;
 
          --  Forbid  -?-  or  -??-  where ? is any character
 
@@ -6835,7 +6835,7 @@ package body Make is
          elsif Argv (2) = 'd'
            and then Argv'Last = 2
          then
-            Opt.Display_Compilation_Progress := True;
+            Display_Compilation_Progress := True;
 
          --  -i
 
@@ -6862,7 +6862,7 @@ package body Make is
          elsif Argv (2) = 'm'
            and then Argv'Last = 2
          then
-            Opt.Minimal_Recompilation := True;
+            Minimal_Recompilation := True;
 
          --  -u
 
@@ -6870,7 +6870,7 @@ package body Make is
            and then Argv'Last = 2
          then
             Unique_Compile   := True;
-            Opt.Compile_Only := True;
+            Compile_Only := True;
             Do_Bind_Step     := False;
             Do_Link_Step     := False;
 
@@ -6881,7 +6881,7 @@ package body Make is
          then
             Unique_Compile_All_Projects := True;
             Unique_Compile   := True;
-            Opt.Compile_Only := True;
+            Compile_Only := True;
             Do_Bind_Step     := False;
             Do_Link_Step     := False;
 
@@ -6962,9 +6962,9 @@ package body Make is
             --  step are not executed.
 
             Add_Switch (Argv, Compiler, And_Save => And_Save);
-            Opt.Operating_Mode := Opt.Check_Semantics;
-            Opt.Check_Object_Consistency := False;
-            Opt.Compile_Only             := True;
+            Operating_Mode := Check_Semantics;
+            Check_Object_Consistency := False;
+            Compile_Only             := True;
             Do_Bind_Step                 := False;
             Do_Link_Step                 := False;
 
@@ -6973,7 +6973,7 @@ package body Make is
             --  Don't pass -nostdlib to gnatlink, it will disable
             --  linking with all standard library files.
 
-            Opt.No_Stdlib := True;
+            No_Stdlib := True;
 
             Add_Switch (Argv, Compiler, And_Save => And_Save);
             Add_Switch (Argv, Binder, And_Save => And_Save);
@@ -6982,19 +6982,20 @@ package body Make is
 
             --  Pass -nostdinc to the Compiler and to gnatbind
 
-            Opt.No_Stdinc := True;
+            No_Stdinc := True;
             Add_Switch (Argv, Compiler, And_Save => And_Save);
             Add_Switch (Argv, Binder, And_Save => And_Save);
 
             --  By default all switches with more than one character
             --  or one character switches which are not in 'a' .. 'z'
-            --  (except 'C', 'F', and 'M') are passed to the compiler,
+            --  (except 'C', 'F', 'M' and 'B') are passed to the compiler,
             --  unless we are dealing with a debug switch (starts with 'd')
 
          elsif Argv (2) /= 'd'
            and then Argv (2 .. Argv'Last) /= "C"
            and then Argv (2 .. Argv'Last) /= "F"
            and then Argv (2 .. Argv'Last) /= "M"
+           and then Argv (2 .. Argv'Last) /= "B"
            and then (Argv'Length > 2 or else Argv (2) not in 'a' .. 'z')
          then
             Add_Switch (Argv, Compiler, And_Save => And_Save);
@@ -7214,7 +7215,7 @@ package body Make is
       Prefix : String := "  -> ")
    is
    begin
-      if not Opt.Verbose_Mode then
+      if not Verbose_Mode then
          return;
       end if;
 
index 1aa4725e46ca6ac82518412c05843c90fb82b9be..2415a3f31d1c825900f79328c7e301e6041f54cc 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
+--          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -26,7 +26,7 @@
 
 with Err_Vars; use Err_Vars;
 with Namet;    use Namet;
-with Opt;
+with Opt;      use Opt;
 with Osint;    use Osint;
 with Output;   use Output;
 with Prj.Com;  use Prj.Com;
@@ -167,6 +167,7 @@ package body Prj.Part is
 
    procedure Parse_Single_Project
      (Project       : out Project_Node_Id;
+      Extends_All   : out Boolean;
       Path_Name     : String;
       Extended      : Boolean;
       From_Extended : Extension_Origin);
@@ -431,6 +432,7 @@ package body Prj.Part is
       Store_Comments         : Boolean := False)
    is
       Current_Directory : constant String := Get_Current_Dir;
+      Dummy : Boolean;
 
    begin
       --  Save the Packages_To_Check in Prj, so that it is visible from
@@ -467,6 +469,7 @@ package body Prj.Part is
 
          Parse_Single_Project
            (Project       => Project,
+            Extends_All   => Dummy,
             Path_Name     => Path_Name,
             Extended      => False,
             From_Extended => None);
@@ -678,6 +681,7 @@ package body Prj.Part is
 
       Current_With : With_Record;
       Limited_With : Boolean := False;
+      Extends_All  : Boolean := False;
 
    begin
       Imported_Projects := Empty_Node;
@@ -775,9 +779,13 @@ package body Prj.Part is
                if Withed_Project = Empty_Node then
                   Parse_Single_Project
                     (Project       => Withed_Project,
+                     Extends_All   => Extends_All,
                      Path_Name     => Imported_Path_Name,
                      Extended      => False,
                      From_Extended => From_Extended);
+
+               else
+                  Extends_All := Is_Extending_All (Withed_Project);
                end if;
 
                if Withed_Project = Empty_Node then
@@ -805,6 +813,10 @@ package body Prj.Part is
                   Name_Len := Imported_Path_Name'Length;
                   Name_Buffer (1 .. Name_Len) := Imported_Path_Name;
                   Set_Path_Name_Of (Current_Project, Name_Find);
+
+                  if Extends_All then
+                     Set_Is_Extending_All (Current_Project);
+                  end if;
                end if;
             end if;
          end;
@@ -817,6 +829,7 @@ package body Prj.Part is
 
    procedure Parse_Single_Project
      (Project       : out Project_Node_Id;
+      Extends_All   : out Boolean;
       Path_Name     : String;
       Extended      : Boolean;
       From_Extended : Extension_Origin)
@@ -843,6 +856,8 @@ package body Prj.Part is
       Project_Comment_State : Tree.Comment_State;
 
    begin
+      Extends_All := False;
+
       declare
          Normed : String := Normalize_Pathname (Path_Name);
       begin
@@ -908,6 +923,8 @@ package body Prj.Part is
                end if;
 
             elsif A_Project_Name_And_Node.Extended then
+               Extends_All := Is_Extending_All (A_Project_Name_And_Node.Node);
+
                --  If the imported project is an extended project A, and we are
                --  in an extended project, replace A with the ultimate project
                --  extending A.
@@ -1136,13 +1153,14 @@ package body Prj.Part is
 
          --  Make sure that gnatmake will use mapping files
 
-         Opt.Create_Mapping_File := True;
+         Create_Mapping_File := True;
 
          --  We are extending another project
 
          Scan; -- scan past EXTENDS
 
          if Token = Tok_All then
+            Extends_All := True;
             Set_Is_Extending_All (Project);
             Scan; --  scan past ALL
          end if;
@@ -1196,6 +1214,7 @@ package body Prj.Part is
 
                      Parse_Single_Project
                        (Project       => Extended_Project,
+                        Extends_All   => Extends_All,
                         Path_Name     => Extended_Project_Path_Name,
                         Extended      => True,
                         From_Extended => From_Extended);
@@ -1226,14 +1245,15 @@ package body Prj.Part is
             With_Clause_Loop :
             while With_Clause /= Empty_Node loop
                Imported := Project_Node_Of (With_Clause);
-               With_Clause := Next_With_Clause_Of (With_Clause);
 
-               if Is_Extending_All (Imported) then
+               if Is_Extending_All (With_Clause) then
                   Error_Msg_Name_1 := Name_Of (Imported);
                   Error_Msg ("cannot import extending-all project {",
                              Token_Ptr);
                   exit With_Clause_Loop;
                end if;
+
+               With_Clause := Next_With_Clause_Of (With_Clause);
             end loop With_Clause_Loop;
          end;
       end if;
index e75057a883df9f4aa486bbd70cf2297b4a92277f..bb550b1b538fca3d4fe88cb15f34f8f1104c78a2 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
+--          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -817,8 +817,9 @@ package body Prj.Proc is
       From_Project_Node : Project_Node_Id;
       Report_Error      : Put_Line_Access)
    is
-      Obj_Dir   : Name_Id;
-      Extending : Project_Id;
+      Obj_Dir    : Name_Id;
+      Extending  : Project_Id;
+      Extending2 : Project_Id;
 
    begin
       Error_Report := Report_Error;
@@ -861,7 +862,7 @@ package body Prj.Proc is
       end if;
 
       --  Check that no extended project shares its object directory with
-      --  another project.
+      --  another extended project or with its extending project(s).
 
       if Project /= No_Project then
          for Extended in 1 .. Projects.Last loop
@@ -870,45 +871,95 @@ package body Prj.Proc is
             if Extending /= No_Project then
                Obj_Dir := Projects.Table (Extended).Object_Directory;
 
-               for Prj in 1 .. Projects.Last loop
-                  if Prj /= Extended
-                    and then Projects.Table (Prj).Sources_Present
-                    and then Projects.Table (Prj).Object_Directory = Obj_Dir
+               --  Check that a project being extended does not share its
+               --  object directory with any project that extends it, directly
+               --  or indirectly, including a virtual extending project.
+
+               --  Start with the project directly extending it
+
+               Extending2 := Extending;
+
+               while Extending2 /= No_Project loop
+                  if Projects.Table (Extending2).Sources_Present
+                    and then
+                      Projects.Table (Extending2).Object_Directory = Obj_Dir
                   then
-                     if Projects.Table (Extending).Virtual then
+                     if Projects.Table (Extending2).Virtual then
                         Error_Msg_Name_1 := Projects.Table (Extended).Name;
 
                         if Error_Report = null then
                            Error_Msg
-                             ("project % cannot be extended by " &
-                              "a virtual project",
-                              Projects.Table (Extending).Location);
+                             ("project % cannot be extended by a virtual " &
+                              "project with the same object directory",
+                              Projects.Table (Extended).Location);
 
                         else
                            Error_Report
                              ("project """ &
                               Get_Name_String (Error_Msg_Name_1) &
-                              """ cannot be extended by a virtual project",
+                              """ cannot be extended by a virtual " &
+                              "project with the same object directory",
                               Project);
                         end if;
 
                      else
-                        Error_Msg_Name_1 := Projects.Table (Extending).Name;
+                        Error_Msg_Name_1 :=
+                          Projects.Table (Extending2).Name;
                         Error_Msg_Name_2 := Projects.Table (Extended).Name;
 
                         if Error_Report = null then
-                           Error_Msg ("project % cannot extend project %",
-                                      Projects.Table (Extending).Location);
+                           Error_Msg
+                             ("project % cannot extend project %",
+                              Projects.Table (Extending2).Location);
+                           Error_Msg
+                             ("\they share the same object directory",
+                              Projects.Table (Extending2).Location);
 
                         else
                            Error_Report
                              ("project """ &
                               Get_Name_String (Error_Msg_Name_1) &
                               """ cannot extend project """ &
-                              Get_Name_String (Error_Msg_Name_2) & '"',
+                              Get_Name_String (Error_Msg_Name_2) & """",
+                              Project);
+                           Error_Report
+                             ("they share the same object directory",
                               Project);
                         end if;
                      end if;
+                  end if;
+
+                  --  Continue with the next extending project, if any
+
+                  Extending2 := Projects.Table (Extending2).Extended_By;
+               end loop;
+
+               --  Check that two projects being extended do not share their
+               --  project directories.
+
+               for Prj in Extended + 1 .. Projects.Last loop
+                  Extending2 := Projects.Table (Prj).Extended_By;
+
+                  if Extending2 /= No_Project
+                    and then Projects.Table (Prj).Sources_Present
+                    and then Projects.Table (Prj).Object_Directory = Obj_Dir
+                    and then not Projects.Table (Extending).Virtual
+                  then
+                     Error_Msg_Name_1 := Projects.Table (Extending).Name;
+                     Error_Msg_Name_2 := Projects.Table (Extended).Name;
+
+                     if Error_Report = null then
+                        Error_Msg ("project % cannot extend project %",
+                                   Projects.Table (Extending).Location);
+
+                     else
+                        Error_Report
+                          ("project """ &
+                           Get_Name_String (Error_Msg_Name_1) &
+                           """ cannot extend project """ &
+                           Get_Name_String (Error_Msg_Name_2) & '"',
+                           Project);
+                     end if;
 
                      Error_Msg_Name_1 := Projects.Table (Extended).Name;
                      Error_Msg_Name_2 := Projects.Table (Prj).Name;
@@ -924,7 +975,21 @@ package body Prj.Proc is
                           ("project """ &
                              Get_Name_String (Error_Msg_Name_1) &
                              """ has the same object directory as project """ &
-                             Get_Name_String (Error_Msg_Name_2) & '"',
+                             Get_Name_String (Error_Msg_Name_2) & """,",
+                           Project);
+                     end if;
+
+                     Error_Msg_Name_1 := Projects.Table (Extending2).Name;
+
+                     if Error_Report = null then
+                        Error_Msg
+                          ("\which is extended by project %",
+                           Projects.Table (Extending).Location);
+
+                     else
+                        Error_Report
+                          ("which is extended by project """ &
+                           Get_Name_String (Error_Msg_Name_1) & '"',
                            Project);
                      end if;
 
index 735b3fee9e902075f8848abafe9e8230a7633e92..e8603c67bfb508737671071f410b0d99c6f365ae 100644 (file)
@@ -933,7 +933,9 @@ package body Prj.Tree is
       pragma Assert
         (Node /= Empty_Node
           and then
-            Project_Nodes.Table (Node).Kind = N_Project);
+           (Project_Nodes.Table (Node).Kind = N_Project
+              or else
+            Project_Nodes.Table (Node).Kind = N_With_Clause));
       return Project_Nodes.Table (Node).Flag2;
    end Is_Extending_All;
 
@@ -1947,7 +1949,9 @@ package body Prj.Tree is
       pragma Assert
         (Node /= Empty_Node
           and then
-            Project_Nodes.Table (Node).Kind = N_Project);
+            (Project_Nodes.Table (Node).Kind = N_Project
+               or else
+             Project_Nodes.Table (Node).Kind = N_With_Clause));
       Project_Nodes.Table (Node).Flag2 := True;
    end Set_Is_Extending_All;
 
index 942c10be0b91601f65aecd2ed1c1181fa397600d..7192fcee796aa2b7f31ef489edaca7205f23fbf2 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---             Copyright (C) 2001-2003 Free Software Foundation, Inc.       --
+--             Copyright (C) 2001-2004 Free Software Foundation, Inc.       --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -245,7 +245,7 @@ package Prj.Tree is
 
    function Is_Extending_All (Node  : Project_Node_Id) return Boolean;
    pragma Inline (Is_Extending_All);
-   --  Only valid for N_Project
+   --  Only valid for N_Project and N_With_Clause
 
    function First_Variable_Of
      (Node : Project_Node_Id) return Variable_Node_Id;
@@ -798,7 +798,7 @@ package Prj.Tree is
          --    N_Project - it indicates that there are comments in the project
          --                source that cannot be kept in the tree.
          --    N_Project_Declaration
-         --              - it indixates that there are unkept comment in the
+         --              - it indicates that there are unkept comments in the
          --                project.
 
          Flag2 : Boolean := False;
@@ -807,6 +807,9 @@ package Prj.Tree is
          --                project.
          --    N_Comment - it indicates that the comment is followed by an
          --                empty line.
+         --    N_With_Clause
+         --              - it indicates that the originally imported project
+         --                is an extending all project.
 
          Comments : Project_Node_Id := Empty_Node;
          --  For nodes other that N_Comment_Zones or N_Comment, designates the
index ca7ca0fb6c87092d7a686171b4dc62b1e6fa217e..7e4428f776259a84d00a39d6e14291e00f607431 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -265,8 +265,14 @@ package body Sem_Ch13 is
          U_Ent := Ent;
 
       elsif Ekind (Ent) = E_Incomplete_Type then
+
+         --  The attribute applies to the full view, set the entity
+         --  of the attribute definition accordingly.
+
          Ent := Underlying_Type (Ent);
          U_Ent := Ent;
+         Set_Entity (Nam, Ent);
+
       else
          U_Ent := Underlying_Type (Ent);
       end if;
@@ -3035,8 +3041,7 @@ package body Sem_Ch13 is
 
    function Minimum_Size
      (T      : Entity_Id;
-      Biased : Boolean := False)
-      return   Nat
+      Biased : Boolean := False) return Nat
    is
       Lo     : Uint    := No_Uint;
       Hi     : Uint    := No_Uint;
@@ -3253,7 +3258,7 @@ package body Sem_Ch13 is
       -- Build_Spec --
       ----------------
 
-      function  Build_Spec return Node_Id is
+      function Build_Spec return Node_Id is
       begin
          Subp_Id := Make_Defining_Identifier (Loc, Sname);
 
@@ -3327,7 +3332,7 @@ package body Sem_Ch13 is
       -- Build_Spec --
       ----------------
 
-      function  Build_Spec return Node_Id is
+      function Build_Spec return Node_Id is
       begin
          Subp_Id := Make_Defining_Identifier (Loc, Sname);
 
@@ -3394,9 +3399,8 @@ package body Sem_Ch13 is
    ------------------------
 
    function Rep_Item_Too_Early
-     (T     : Entity_Id;
-      N     : Node_Id)
-      return  Boolean
+     (T : Entity_Id;
+      N : Node_Id) return Boolean
    is
    begin
       --  Cannot apply rep items that are not operational items
@@ -3446,8 +3450,7 @@ package body Sem_Ch13 is
    function Rep_Item_Too_Late
      (T     : Entity_Id;
       N     : Node_Id;
-      FOnly : Boolean := False)
-      return  Boolean
+      FOnly : Boolean := False) return Boolean
    is
       S           : Entity_Id;
       Parent_Type : Entity_Id;
This page took 0.117911 seconds and 5 git commands to generate.