diff options
Diffstat (limited to 'gcc/ada')
47 files changed, 639 insertions, 284 deletions
diff --git a/gcc/ada/5qsystem.ads b/gcc/ada/5qsystem.ads index cfbba6d5c53..c8b94936ded 100644 --- a/gcc/ada/5qsystem.ads +++ b/gcc/ada/5qsystem.ads @@ -63,9 +63,6 @@ pragma Pure (System); -- Storage-related Declarations type Address is new Long_Integer; - subtype Short_Address is Address - range -2 ** (32 - 1) .. +2 ** (32 - 1) - 1; - for Short_Address'Object_Size use 32; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/5vinmaop.adb b/gcc/ada/5vinmaop.adb index 42207a1ce10..2cbfd0eb715 100644 --- a/gcc/ada/5vinmaop.adb +++ b/gcc/ada/5vinmaop.adb @@ -37,6 +37,9 @@ with System.OS_Interface; -- used for various type, constant, and operations +with System.Aux_DEC; +-- used for Short_Address + with System.Parameters; with System.Tasking; @@ -114,7 +117,7 @@ package body System.Interrupt_Management.Operations is -------------------- function To_unsigned_long is new - Unchecked_Conversion (System.Short_Address, unsigned_long); + Unchecked_Conversion (System.Aux_DEC.Short_Address, unsigned_long); function Interrupt_Wait (Mask : access Interrupt_Mask) return Interrupt_ID diff --git a/gcc/ada/5vsystem.ads b/gcc/ada/5vsystem.ads index 9bf3b5f2698..fc4fb2e6d6f 100644 --- a/gcc/ada/5vsystem.ads +++ b/gcc/ada/5vsystem.ads @@ -63,7 +63,6 @@ pragma Pure (System); -- Storage-related Declarations type Address is private; - subtype Short_Address is Address; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/5xsystem.ads b/gcc/ada/5xsystem.ads index a716fa1a708..3ba5e692195 100644 --- a/gcc/ada/5xsystem.ads +++ b/gcc/ada/5xsystem.ads @@ -63,7 +63,6 @@ pragma Pure (System); -- Storage-related Declarations type Address is private; - subtype Short_Address is Address; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index c1531aa9093..6c3ddc3eef9 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,147 @@ +2004-05-10 Doug Rupp <rupp@gnat.com> + + * 5qsystem.ads: Remove Short_Address subtype declaration. Moved to + system.aux_dec. + + * s-auxdec.ads: Add Short_Address subtype (moved here from System). + + * Makefile.in: [VMS]: Add translation for 5qauxdec.ads. + + * init.c: [VMS] Macroize LIB$ calls for IA64 and Alpha. + Fixes undefined symbols in IA64 gnatlib. + + * 5vinmaop.adb: Reference s-auxdec for Short_Address. + + * 5xsystem.ads, 5vsystem.ads: Back out last change (addition of subtype + Short_Address). This will be moved to system.auxdec. + +2004-05-10 Thomas Quinot <quinot@act-europe.fr> + + * sem_util.adb: Replace test for presence of a node that is always + present with a call to Discard_Node. + + * sem_ch10.adb (Analyze_Compilation_Unit): Remove superfluous call to + Analyze on the library unit node after generation of distribution stub + constructs. The call was a no-op because Unit_Node has already been + Analyzed, and the tree fragments for the distribution stubs are + analyzed as they are inserted in Exp_Dist. + Update comment regarding to distribution stubs to reflect that we + do not generate stub in separate files anymore. + + * einfo.ads: Clarify the fact that a tagged private type has the + E_Record_Type_With_Private Ekind. + + * erroutc.adb: Minor reformatting + + * erroutc.ads (Max_Msg_Length): Increase to cover possible larger + values if line length is increased using -gnatyM (noticed during code + reading). + + * eval_fat.adb: Minor reformatting + Put spaces around exponentiation operator + +2004-05-10 Ed Schonberg <schonberg@gnat.com> + + PR ada/15005 + * sem_util.adb (Is_Dependent_Component_Of_Mutable_Object): If prefix + has been rewritten as an explicit dereference, retrieve type of + original node to check for possibly unconstrained record type. + +2004-05-10 Ed Schonberg <schonberg@gnat.com> + + * exp_ch7.adb (Check_Visibly_Controlled): If given operation is not + overriding, use the operation of the parent unconditionally. + + * sem_ch4.adb (Remove_Address_Interpretations): Remove address + operation when either operand is a literal, to avoid further + ambiguities. + + * sem_ch6.adb (New_Overloaded_Entity): If new entity is inherited and + overridden by a previous explicit declaration, mark the previous entity + as overriding. + + * sem_disp.adb (Check_Dispatching_Operation): New predicate + Is_Visibly_Controlled, to determine whether a declaration of a + primitive control operation for a derived type overrides an inherited + one. Add warning if the explicit declaration does not override. + +2004-05-10 Vincent Celier <celier@gnat.com> + + * gnatls.adb (Gnatls): Initialize Snames, to avoid assertion error in + some cases when the sources are no longer present. + + * make.adb (Collect_Arguments): Fail if an external source, not part + of any project need to be compiled, when switch -x has not been + specified. + + * makeusg.adb: Document new switch -x + + * opt.ads (External_Unit_Compilation_Allowed): New Boolean flag, + defaulted to False. + + * switch-m.adb (Scan_Make_Switches): New switch -x + + * vms_data.ads: Add VMS qualifier /NON_PROJECT_UNIT_COMPILATION for + gnatmake switch -x. + + * gnat_ugn.texi: Document new gnatmake switch -x + +2004-05-10 Eric Botcazou <ebotcazou@act-europe.fr> + + * misc.c (gnat_init_options): Set flag_zero_initialized_in_bss to 0. + + * utils.c (create_var_decl): Do not modify the DECL_COMMON flag. + (process_attributes): Likewise. + +2004-05-10 Joel Brobecker <brobecker@gnat.com> + + * s-inmaop.ads: Fix spelling mistake in one of the comments. + +2004-05-10 Robert Dewar <dewar@gnat.com> + + * gnat_ugn.texi: Document that for config pragma files, the maximum + line length is always 32767. + + * gnat_rm.texi: For pragma Eliminate, note that concatenation of string + literals is now allowed. + + * gnat-style.texi: Remove statement about splitting long lines before + an operator rather than after, since we do not follow this rule at all. + Clarify rule (really lack of rule) for spaces around exponentiation + + * sem_elim.adb: Allow concatenation of string literals as well as a + single string literal for pragma arguments. + + * sem_prag.ads, sem_prag.adb: (Is_Config_Static_String): New function + + * a-textio.adb (Terminate_Line): Do not add line feed if nothing + written for append case. + + * frontend.adb: Changes to avoid checking max line length in config + pragma files. + + * g-os_lib.ads: Minor reformatting + + * mlib-utl.adb: Do not define Max_Line_Length locally (definition was + wrong in any case. Instead use standard value. Noticed during code + reading. + + * opt.ads (Max_Line_Length): New field, used to implement removal of + limitation on length of lines when scanning config pragma files. + + * osint.ads, prj-dect.adb, prj-strt.adb, prj-tree.adb, + makeutl.ads, makeutl.adb: Minor reformatting + + * scn.adb: Do not check line length while scanning config pragma files + Do not check line length while scanning out license information + + * scng.adb: Changes to avoid line length checks while parsing config + pragma files. + +2004-05-10 GNAT Script <nobody@gnat.com> + + * Make-lang.in: Makefile automatically updated + 2004-05-05 Arnaud Charlet <charlet@act-europe.fr> * osint.adb (Find_Program_Name): Fix handling of VMS version diff --git a/gcc/ada/Make-lang.in b/gcc/ada/Make-lang.in index 5cf5d62d425..0a6775a438f 100644 --- a/gcc/ada/Make-lang.in +++ b/gcc/ada/Make-lang.in @@ -1698,10 +1698,9 @@ ada/exp_ch7.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/erroutc.ads ada/exp_ch11.ads ada/exp_ch7.ads ada/exp_ch7.adb \ ada/exp_ch9.ads ada/exp_dbug.ads ada/exp_tss.ads ada/exp_util.ads \ ada/exp_util.adb ada/fname.ads ada/fname-uf.ads ada/freeze.ads \ - ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads \ - ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ - ada/inline.ads ada/itypes.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \ - ada/lib-sort.adb ada/namet.ads ada/nlists.ads ada/nlists.adb \ + ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \ + ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ + ada/itypes.ads ada/lib.ads ada/namet.ads ada/nlists.ads ada/nlists.adb \ ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/sem.ads \ ada/sem_ch3.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_eval.ads \ @@ -3261,14 +3260,15 @@ ada/sem_elim.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads \ ada/errout.ads ada/erroutc.ads ada/gnat.ads ada/g-htable.ads \ ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ ada/namet.ads ada/nlists.ads ada/nlists.adb ada/opt.ads ada/output.ads \ - ada/sem_elim.ads ada/sem_elim.adb ada/sinfo.ads ada/sinfo.adb \ - ada/sinput.ads ada/sinput.adb ada/snames.ads ada/stand.ads \ - ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-htable.adb ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/sem_elim.ads ada/sem_elim.adb ada/sem_prag.ads ada/sinfo.ads \ + ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \ + ada/stand.ads ada/stringt.ads ada/system.ads ada/s-exctab.ads \ + ada/s-htable.ads ada/s-htable.adb ada/s-imgenu.ads ada/s-memory.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/sem_eval.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ diff --git a/gcc/ada/Makefile.in b/gcc/ada/Makefile.in index f35622436fe..6b075b8a3d3 100644 --- a/gcc/ada/Makefile.in +++ b/gcc/ada/Makefile.in @@ -1145,6 +1145,7 @@ endif ifeq ($(strip $(filter-out alpha% ia64 dec hp vms% openvms% alphavms%,$(targ))),) ifeq ($(strip $(filter-out ia64 hp vms% openvms%,$(targ))),) LIBGNAT_TARGET_PAIRS_AUX1 = \ + s-auxdec.ads<5qauxdec.ads \ s-crtl.ads<5xcrtl.ads \ s-osinte.adb<5xosinte.adb \ s-osinte.ads<5xosinte.ads \ diff --git a/gcc/ada/a-textio.adb b/gcc/ada/a-textio.adb index 98766ce9bf3..7afb804ff9c 100644 --- a/gcc/ada/a-textio.adb +++ b/gcc/ada/a-textio.adb @@ -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- -- @@ -1678,8 +1678,12 @@ package body Ada.Text_IO is -- because it is too much of a nuisance to have these odd line -- feeds when nothing has been written to the file. + -- We also avoid this for files opened in append mode, in + -- accordance with (RM A.8.2(10)) + elsif (File /= Standard_Err and then File /= Standard_Out) and then (File.Line = 1 and then File.Page = 1) + and then Mode (File) = Out_File then New_Line (File); end if; diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads index 9548da438ff..6487a22012e 100644 --- a/gcc/ada/einfo.ads +++ b/gcc/ada/einfo.ads @@ -3383,18 +3383,19 @@ package Einfo is -- A record subtype, created by a record subtype declaration. E_Record_Type_With_Private, - -- Used for types defined by a private extension declaration. Includes - -- the fields for both private types and for record types (with the - -- sole exception of Corresponding_Concurrent_Type which is obviously - -- not needed). This entity is considered to be both a record type and + -- Used for types defined by a private extension declaration, and + -- for tagged private types. Includes the fields for both private + -- types and for record types (with the sole exception of + -- Corresponding_Concurrent_Type which is obviously not needed). + -- This entity is considered to be both a record type and -- a private type. E_Record_Subtype_With_Private, -- A subtype of a type defined by a private extension declaration. E_Private_Type, - -- A private type, created by a private type declaration that does - -- not have the keyword limited. + -- A private type, created by a private type declaration + -- that has neither the keyword limited nor the keyword tagged. E_Private_Subtype, -- A subtype of a private type, created by a subtype declaration used @@ -3402,7 +3403,7 @@ package Einfo is E_Limited_Private_Type, -- A limited private type, created by a private type declaration that - -- has the keyword limited. + -- has the keyword limited, but not the keyword tagged. E_Limited_Private_Subtype, -- A subtype of a limited private type, created by a subtype declaration diff --git a/gcc/ada/erroutc.adb b/gcc/ada/erroutc.adb index e46c7cd6314..31c97d5bc55 100644 --- a/gcc/ada/erroutc.adb +++ b/gcc/ada/erroutc.adb @@ -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- -- @@ -33,7 +33,6 @@ with Casing; use Casing; with Debug; use Debug; with Err_Vars; use Err_Vars; -with Hostparm; with Namet; use Namet; with Opt; use Opt; with Output; use Output; @@ -71,7 +70,6 @@ package body Erroutc is function Buffer_Ends_With (S : String) return Boolean is Len : constant Natural := S'Length; - begin return Msglen > Len @@ -466,6 +464,10 @@ package body Erroutc is -- Returns True for a message that is to be purged. Also adjusts -- error counts appropriately. + ------------------ + -- To_Be_Purged -- + ------------------ + function To_Be_Purged (E : Error_Msg_Id) return Boolean is begin if E /= No_Error_Msg diff --git a/gcc/ada/erroutc.ads b/gcc/ada/erroutc.ads index b0af72df446..cde38932df3 100644 --- a/gcc/ada/erroutc.ads +++ b/gcc/ada/erroutc.ads @@ -27,7 +27,6 @@ -- This packages contains global variables and routines common to error -- reporting packages, including Errout and Prj.Err. -with Hostparm; with Table; with Types; use Types; @@ -77,11 +76,12 @@ package Erroutc is Manual_Quote_Mode : Boolean := False; -- Set True in manual quotation mode - Max_Msg_Length : constant := 256 + 2 * Hostparm.Max_Line_Length; - -- Maximum length of error message. The addition of Max_Line_Length + Max_Msg_Length : constant := 1024 + 2 * Int (Column_Number'Last); + -- Maximum length of error message. The addition of 2 * Column_Number'Last -- ensures that two insertion tokens of maximum length can be accomodated. - -- The value of 256 is an arbitrary value that should be more than long - -- enough to accomodate any reasonable message. + -- The value of 1024 is an arbitrary value that should be more than long + -- enough to accomodate any reasonable message (and for that matter, some + -- pretty unreasonable messages!) Msg_Buffer : String (1 .. Max_Msg_Length); -- Buffer used to prepare error messages diff --git a/gcc/ada/eval_fat.adb b/gcc/ada/eval_fat.adb index d083c32ba5c..2d439930301 100644 --- a/gcc/ada/eval_fat.adb +++ b/gcc/ada/eval_fat.adb @@ -40,8 +40,8 @@ package body Eval_Fat is type Radix_Power_Table is array (Int range 1 .. 4) of Int; - Radix_Powers : constant Radix_Power_Table - := (Radix**1, Radix**2, Radix**3, Radix**4); + Radix_Powers : constant Radix_Power_Table := + (Radix ** 1, Radix ** 2, Radix ** 3, Radix ** 4); function Float_Radix return T renames Ureal_2; -- Radix expressed in real form diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index e78d9954082..287b4efc792 100644 --- a/gcc/ada/exp_ch7.adb +++ b/gcc/ada/exp_ch7.adb @@ -37,10 +37,8 @@ with Exp_Ch11; use Exp_Ch11; with Exp_Dbug; use Exp_Dbug; with Exp_Tss; use Exp_Tss; with Exp_Util; use Exp_Util; -with Fname; use Fname; with Freeze; use Freeze; with Hostparm; use Hostparm; -with Lib; use Lib; with Nlists; use Nlists; with Nmake; use Nmake; with Opt; use Opt; @@ -818,28 +816,16 @@ package body Exp_Ch7 is begin if Is_Derived_Type (Typ) and then Comes_From_Source (E) - and then Is_Overriding_Operation (E) - and then - (not Is_Predefined_File_Name - (Unit_File_Name (Get_Source_Unit (Root_Type (Typ))))) + and then not Is_Overriding_Operation (E) then - -- We know that the explicit operation on the type overrode + -- We know that the explicit operation on the type does not override -- the inherited operation of the parent, and that the derivation -- is from a private type that is not visibly controlled. Parent_Type := Etype (Typ); Op := Find_Prim_Op (Parent_Type, Name_Of (Prim)); - if Present (Op) - and then Is_Hidden (Op) - and then Scope (Scope (Typ)) /= Scope (Op) - and then not In_Open_Scopes (Scope (Typ)) - then - -- If the parent operation is not visible, and the derived - -- type is not declared in a child unit, then the explicit - -- operation does not override, and we must use the operation - -- of the parent. - + if Present (Op) then E := Op; -- Wrap the object to be initialized into the proper diff --git a/gcc/ada/frontend.adb b/gcc/ada/frontend.adb index f4f36f56aaf..35645bd0812 100644 --- a/gcc/ada/frontend.adb +++ b/gcc/ada/frontend.adb @@ -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- -- @@ -124,10 +124,12 @@ begin begin -- We always analyze config files with style checks off, since -- we don't want a miscellaneous gnat.adc that is around to - -- discombobulate intended -gnatg or -gnaty compilations. + -- discombobulate intended -gnatg or -gnaty compilations. We + -- also disconnect checking for maximum line length. Opt.Style_Check := False; Style_Check := False; + Opt.Max_Line_Length := Int (Column_Number'Last); -- Capture current suppress options, which may get modified @@ -191,6 +193,7 @@ begin -- Restore style check, but if config file turned on checks, leave on! Opt.Style_Check := Save_Style_Check or Style_Check; + Opt.Max_Line_Length := Hostparm.Max_Line_Length; -- Capture any modifications to suppress options from config pragmas diff --git a/gcc/ada/g-os_lib.ads b/gcc/ada/g-os_lib.ads index a8968c25c6c..bd4201fc5f7 100644 --- a/gcc/ada/g-os_lib.ads +++ b/gcc/ada/g-os_lib.ads @@ -93,6 +93,7 @@ pragma Elaborate_Body (OS_Lib); -- Time/Date Stuff -- --------------------- + type OS_Time is private; -- The OS's notion of time is represented by the private type OS_Time. -- This is the type returned by the File_Time_Stamp functions to obtain -- the time stamp of a specified file. Functions and a procedure (modeled @@ -102,8 +103,8 @@ pragma Elaborate_Body (OS_Lib); -- cases but rather the actual (time-zone independent) time stamp of the -- file (of course in Unix systems, this *is* in GMT form). - type OS_Time is private; Invalid_Time : constant OS_Time; + -- A special unique value used to flag an invalid time stamp value subtype Year_Type is Integer range 1900 .. 2099; subtype Month_Type is Integer range 1 .. 12; @@ -111,6 +112,8 @@ pragma Elaborate_Body (OS_Lib); subtype Hour_Type is Integer range 0 .. 23; subtype Minute_Type is Integer range 0 .. 59; subtype Second_Type is Integer range 0 .. 59; + -- Declarations similar to those in Calendar, breaking down the time + function GM_Year (Date : OS_Time) return Year_Type; function GM_Month (Date : OS_Time) return Month_Type; @@ -118,6 +121,7 @@ pragma Elaborate_Body (OS_Lib); function GM_Hour (Date : OS_Time) return Hour_Type; function GM_Minute (Date : OS_Time) return Minute_Type; function GM_Second (Date : OS_Time) return Second_Type; + -- Functions to extract information from OS_Time value function "<" (X, Y : OS_Time) return Boolean; function ">" (X, Y : OS_Time) return Boolean; @@ -135,6 +139,8 @@ pragma Elaborate_Body (OS_Lib); Hour : out Hour_Type; Minute : out Minute_Type; Second : out Second_Type); + -- Analogous to the routine of similar name in Calendar, takes an OS_Time + -- and splits it into its component parts with obvious meanings. ---------------- -- File Stuff -- diff --git a/gcc/ada/gnat-style.texi b/gcc/ada/gnat-style.texi index 2fa09412589..ee425de5f29 100644 --- a/gcc/ada/gnat-style.texi +++ b/gcc/ada/gnat-style.texi @@ -382,8 +382,11 @@ one context, where comments explain their purpose. @itemize @bullet @item -Every operator must be surrounded by spaces, except for the -exponentiation operator. +Every operator must be surrounded by spaces. An exception is that +this rule does not apply to the exponentiation operator, for which +there are no specific layout rules. The reason for this exception +is that sometimes it makes clearer reading to leave out the spaces +around exponentiation. @cindex Operators @smallexample @c adanocomment @@ -391,9 +394,6 @@ exponentiation operator. @end smallexample @item -When folding a long line, fold before an operator, not after. - -@item Use parentheses where they clarify the intended association of operands with operators: @cindex Parenthesization of expressions diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index ec766614392..614064ff313 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -1356,10 +1356,12 @@ FUNCTION_PROFILE ::= [Parameter_Types => PARAMETER_TYPES,] Result_Type => result_SUBTYPE_NAME] PARAMETER_TYPES ::= (SUBTYPE_NAME @{, SUBTYPE_NAME@}) -SUBTYPE_NAME ::= STRING_LITERAL +SUBTYPE_NAME ::= STRING_VALUE SOURCE_LOCATION ::= Source_Location => SOURCE_TRACE -SOURCE_TRACE ::= STRING_LITERAL +SOURCE_TRACE ::= STRING_VALUE + +STRING_VALUE ::= STRING_LITERAL @{& STRING_LITERAL@} @end smallexample @noindent @@ -1388,7 +1390,7 @@ subprograms denoted by the first two parameters. Use PARAMETER_AND_RESULT_TYPE_PROFILE to specify the profile of the subprogram to be eliminated in a manner similar to that used for the extended @code{Import} and @code{Export} pragmas, except that the subtype names are -always given as string literals. At the moment, this form of distinguishing +always given as strings. At the moment, this form of distinguishing overloaded subprograms is implemented only partially, so we do not recommend using it for practical subprogram elimination. @@ -1398,8 +1400,8 @@ as @code{Parameter_Types => ("")} Alternatively, the @code{Source_Location} parameter is used to specify which overloaded alternative is to be eliminated by pointing to the location of the DEFINING_PROGRAM_UNIT_NAME of this subprogram in the -source text. The string literal submitted as SOURCE_TRACE should have -the following format: +source text. The string literal (or concatenation of string literals) +given as SOURCE_TRACE must have the following format: @smallexample @c ada SOURCE_TRACE ::= SOURCE_LOCATION@{LBRACKET SOURCE_LOCATION RBRACKET@} diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index 2b908fb2e8b..5ae1a892124 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -8334,6 +8334,15 @@ decides are necessary. Indicates the verbosity of the parsing of GNAT project files. See @ref{Switches Related to Project Files}. +@item ^-x^/NON_PROJECT_UNIT_COMPILATION^ +@cindex @option{^-x^/NON_PROJECT_UNIT_COMPILATION^} (@code{gnatmake}) +Indicates that sources that are not part of any Project File may be compiled. +Normally, when using Project Files, only sources that are part of a Project +File may be compile. When this switch is used, a source outside of all Project +Files may be compiled. The ALI file and the object file will be put in the +object directory of the main Project. The compilation switches used will only +be those specified on the command line. + @item ^-X^/EXTERNAL_REFERENCE=^@var{name=value} Indicates that external variable @var{name} has the value @var{value}. The Project Manager will use this value for occurrences of @@ -17566,7 +17575,9 @@ by @command{gnatstub} to compile an argument source file. @cindex @option{^-gnatyM^/MAX_LINE_LENGTH^} (@command{gnatstub}) (@var{n} is a non-negative integer). Set the maximum line length in the body stub to @var{n}; the default is 79. The maximum value that can be -specified is 32767. +specified is 32767. Note that in the special case of configuration +pragma files, the maximum is always 32767 regardless of whether or +not this switch appears. @item ^-gnaty^/STYLE_CHECKS=^@var{n} @cindex @option{^-gnaty^/STYLE_CHECKS=^} (@command{gnatstub}) diff --git a/gcc/ada/gnatls.adb b/gcc/ada/gnatls.adb index 6b3d07e7065..1e491f2a7d3 100644 --- a/gcc/ada/gnatls.adb +++ b/gcc/ada/gnatls.adb @@ -38,6 +38,7 @@ with Osint; use Osint; with Osint.L; use Osint.L; with Output; use Output; with Rident; use Rident; +with Snames; with Targparm; use Targparm; with Types; use Types; @@ -938,6 +939,7 @@ begin Namet.Initialize; Csets.Initialize; + Snames.Initialize; -- Loop to scan out arguments diff --git a/gcc/ada/init.c b/gcc/ada/init.c index e43821eab67..b27e059ed9d 100644 --- a/gcc/ada/init.c +++ b/gcc/ada/init.c @@ -1281,7 +1281,17 @@ __gnat_initialize (void) #elif defined (VMS) -#ifdef IN_RTS +#ifdef __IA64 +#define lib_get_curr_invo_context LIB$I64_GET_CURR_INVO_CONTEXT +#define lib_get_prev_invo_context LIB$I64_GET_PREV_INVO_CONTEXT +#define lib_get_invo_handle LIB$I64_GET_INVO_HANDLE +#else +#define lib_get_curr_invo_context LIB$GET_CURR_INVO_CONTEXT +#define lib_get_prev_invo_context LIB$GET_PREV_INVO_CONTEXT +#define lib_get_invo_handle LIB$GET_INVO_HANDLE +#endif + +#if defined (IN_RTS) && !defined (__IA64) /* The prehandler actually gets control first on a condition. It swaps the stack pointer and calls the handler (__gnat_error_handler). */ @@ -1464,10 +1474,10 @@ __gnat_error_handler (int *sigargs, void *mechargs) mstate = (long *) (*Get_Machine_State_Addr) (); if (mstate != 0) { - LIB$GET_CURR_INVO_CONTEXT (&curr_icb); - LIB$GET_PREV_INVO_CONTEXT (&curr_icb); - LIB$GET_PREV_INVO_CONTEXT (&curr_icb); - curr_invo_handle = LIB$GET_INVO_HANDLE (&curr_icb); + lib_get_curr_invo_context (&curr_icb); + lib_get_prev_invo_context (&curr_icb); + lib_get_prev_invo_context (&curr_icb); + curr_invo_handle = lib_get_invo_handle (&curr_icb); *mstate = curr_invo_handle; } Raise_From_Signal_Handler (exception, msg); @@ -1477,7 +1487,7 @@ void __gnat_install_handler (void) { long prvhnd; -#ifdef IN_RTS +#if defined (IN_RTS) && !defined (__IA64) char *c; c = (char *) xmalloc (2049); diff --git a/gcc/ada/make.adb b/gcc/ada/make.adb index ee0926c5464..a4b2a41ff9f 100644 --- a/gcc/ada/make.adb +++ b/gcc/ada/make.adb @@ -1727,10 +1727,16 @@ package body Make is Project => Arguments_Project, Path => Arguments_Path_Name); - -- If the source is not a source of a project file, - -- we simply add the saved gcc switches. + -- If the source is not a source of a project file, check if + -- this is allowed. if Arguments_Project = No_Project then + if not External_Unit_Compilation_Allowed then + Make_Failed ("external source, not part of any projects, " & + "cannot be compiled (", Source_File_Name, ")"); + end if; + + -- If it is allowed, simply add the saved gcc switches Add_Arguments (The_Saved_Gcc_Switches.all); diff --git a/gcc/ada/makeusg.adb b/gcc/ada/makeusg.adb index 268f75492eb..ed7140f84d7 100644 --- a/gcc/ada/makeusg.adb +++ b/gcc/ada/makeusg.adb @@ -191,6 +191,12 @@ begin Write_Str (" -vPx Specify verbosity when parsing GNAT Project Files"); Write_Eol; + -- Line for -x + + Write_Str (" -x " & + "Allow compilation of needed units external to the projects"); + Write_Eol; + -- Line for -X Write_Str (" -Xnm=val Specify an external reference for GNAT " & diff --git a/gcc/ada/makeutl.adb b/gcc/ada/makeutl.adb index eb92cd76daf..926affc54c7 100644 --- a/gcc/ada/makeutl.adb +++ b/gcc/ada/makeutl.adb @@ -24,14 +24,14 @@ -- -- ------------------------------------------------------------------------------ -with Namet; use Namet; -with Osint; use Osint; -with Prj; use Prj; +with Namet; use Namet; +with Osint; use Osint; +with Prj; use Prj; with Prj.Ext; with Prj.Util; -with Snames; use Snames; +with Snames; use Snames; with Table; -with Types; use Types; +with Types; use Types; with System.HTable; @@ -44,6 +44,8 @@ package body Makeutl is -- Identify either a mono-unit source (when Index = 0) or a specific unit -- in a multi-unit source. + -- There follow many global undocumented declarations, comments needed ??? + Max_Mask_Num : constant := 2048; subtype Mark_Num is Union_Id range 0 .. Max_Mask_Num - 1; @@ -91,9 +93,9 @@ package body Makeutl is if Last_Linker_Option = Linker_Options_Buffer'Last then declare New_Buffer : constant String_List_Access := - new String_List - (1 .. Linker_Options_Buffer'Last + - Linker_Option_Initial_Count); + new String_List + (1 .. Linker_Options_Buffer'Last + + Linker_Option_Initial_Count); begin New_Buffer (Linker_Options_Buffer'Range) := Linker_Options_Buffer.all; @@ -158,7 +160,6 @@ package body Makeutl is or else Equal_Pos >= Finish then return False; - else Prj.Ext.Add (External_Name => Argv (Start .. Equal_Pos - 1), @@ -173,8 +174,7 @@ package body Makeutl is function Is_Marked (Source_File : File_Name_Type; - Index : Int := 0) - return Boolean + Index : Int := 0) return Boolean is begin return Marks.Get (K => (File => Source_File, Index => Index)); @@ -185,21 +185,21 @@ package body Makeutl is ----------------------------- function Linker_Options_Switches - (Project : Project_Id) - return String_List + (Project : Project_Id) return String_List is + procedure Recursive_Add_Linker_Options (Proj : Project_Id); + -- The recursive routine used to add linker options ---------------------------------- -- Recursive_Add_Linker_Options -- ---------------------------------- - procedure Recursive_Add_Linker_Options (Proj : Project_Id); - procedure Recursive_Add_Linker_Options (Proj : Project_Id) is - Data : Project_Data; + Data : Project_Data; Linker_Package : Package_Id; - Options : Variable_Value; - Imported : Project_List; + Options : Variable_Value; + Imported : Project_List; + begin if Proj /= No_Project then Data := Projects.Table (Proj); @@ -239,6 +239,8 @@ package body Makeutl is end if; end Recursive_Add_Linker_Options; + -- Start of processing for Linker_Options_Switches + begin Linker_Opts.Init; @@ -382,7 +384,6 @@ package body Makeutl is is begin if Switch /= null then - declare Sw : String (1 .. Switch'Length); Start : Positive; @@ -458,6 +459,7 @@ package body Makeutl is Start : Natural; Finish : Natural; Result : Int := 0; + begin Get_Name_String (ALI_File); @@ -486,9 +488,9 @@ package body Makeutl is -- the character that precedes a unit index, this is not the ALI file -- of a unit in a multi-unit source. - if Start > Finish or else - Start = 1 or else - Name_Buffer (Start - 1) /= Multi_Unit_Index_Character + if Start > Finish + or else Start = 1 + or else Name_Buffer (Start - 1) /= Multi_Unit_Index_Character then return 0; end if; @@ -496,8 +498,8 @@ package body Makeutl is -- Build the index from the digit(s) while Start <= Finish loop - Result := (Result * 10) + Character'Pos (Name_Buffer (Start)) - - Character'Pos ('0'); + Result := Result * 10 + + Character'Pos (Name_Buffer (Start)) - Character'Pos ('0'); Start := Start + 1; end loop; diff --git a/gcc/ada/makeutl.ads b/gcc/ada/makeutl.ads index b5cfaf7be3d..0a3f11a0aaf 100644 --- a/gcc/ada/makeutl.ads +++ b/gcc/ada/makeutl.ads @@ -24,37 +24,45 @@ -- -- ------------------------------------------------------------------------------ -with GNAT.OS_Lib; use GNAT.OS_Lib; with Osint; -with Prj; use Prj; -with Types; use Types; +with Prj; use Prj; +with Types; use Types; + +with GNAT.OS_Lib; use GNAT.OS_Lib; package Makeutl is type Fail_Proc is access procedure - (S1 : String; S2 : String := ""; S3 : String := ""); + (S1 : String; + S2 : String := ""; + S3 : String := ""); Do_Fail : Fail_Proc := Osint.Fail'Access; + -- Comment required ??? function Unit_Index_Of (ALI_File : File_Name_Type) return Int; -- Find the index of a unit in a source file. Return zero if the file -- is not a multi-unit source file. function Is_External_Assignment (Argv : String) return Boolean; - -- Verify that an external assignment switch is syntactically correct. - -- Correct forms are + -- Verify that an external assignment switch is syntactically correct + -- + -- Correct forms are: + -- -- -Xname=value -- -X"name=other value" + -- -- Assumptions: 'First = 1, Argv (1 .. 2) = "-X" -- When this function returns True, the external assignment has -- been entered by a call to Prj.Ext.Add, so that in a project -- file, External ("name") will return "value". + function Linker_Options_Switches (Project : Project_Id) return String_List; + -- Comment required ??? + -- Package Mains is used to store the mains specified on the command line -- and to retrieve them when a project file is used, to verify that the -- files exist and that they belong to a project file. - function Linker_Options_Switches (Project : Project_Id) return String_List; - package Mains is -- Mains are stored in a table. An index is used to retrieve the mains @@ -100,8 +108,7 @@ package Makeutl is function Is_Marked (Source_File : File_Name_Type; - Index : Int := 0) - return Boolean; + Index : Int := 0) return Boolean; -- Returns True if the unit was previously marked. procedure Delete_All_Marks; diff --git a/gcc/ada/misc.c b/gcc/ada/misc.c index f40d2728367..dca2b0fe9f2 100644 --- a/gcc/ada/misc.c +++ b/gcc/ada/misc.c @@ -320,6 +320,9 @@ gnat_init_options (unsigned int argc, const char **argv) save_argc = argc; save_argv = argv; + /* Uninitialized really means uninitialized in Ada. */ + flag_zero_initialized_in_bss = 0; + return CL_Ada; } @@ -972,4 +975,3 @@ fp_size_to_prec (int size) abort (); } - diff --git a/gcc/ada/mlib-utl.adb b/gcc/ada/mlib-utl.adb index 7c3a4ee707f..152d272b035 100644 --- a/gcc/ada/mlib-utl.adb +++ b/gcc/ada/mlib-utl.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002-2003, Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2004, Ada Core Technologies, 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- -- @@ -64,7 +64,6 @@ package body MLib.Utl is Success : Boolean; Line_Length : Natural := 0; - Max_Line_Length : constant := 200; -- arbitrary begin Initialize; @@ -82,9 +81,12 @@ package body MLib.Utl is Line_Length := Ar_Name'Length; for J in Arguments'Range loop + -- Make sure the Output buffer does not overflow - if Line_Length + 1 + Arguments (J)'Length > Max_Line_Length then + if Line_Length + 1 + Arguments (J)'Length > + Integer (Opt.Max_Line_Length) + then Write_Eol; Line_Length := 0; end if; diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads index 90babc28861..eb34e50f3fc 100644 --- a/gcc/ada/opt.ads +++ b/gcc/ada/opt.ads @@ -398,6 +398,11 @@ package Opt is -- effect if an explicit Link_Name is supplied (a link name is always -- used exactly as given). + External_Unit_Compilation_Allowed : Boolean := False; + -- GNATMAKE + -- When True (set by gnatmake switch -x), allow compilation of sources + -- that are not part of any project file. + Float_Format : Character := ' '; -- GNAT -- A non-blank value indicates that a Float_Format pragma has been @@ -659,6 +664,15 @@ package Opt is -- extension, as set by the appropriate switch. If no switch is given, -- then this value is initialized by Osint to the appropriate value. + Max_Line_Length : Int := Hostparm.Max_Line_Length; + -- This is a copy of Max_Line_Length used by the scanner. It is usually + -- set to be a copy of Hostparm.Max_Line_Length, and is used to check + -- the maximum line length in the scanner when style checking is inactive. + -- The only time it is set to a different value is during the scanning of + -- configuration pragma files, where we want to turn off all checking and + -- in particular we want to allow long lines. So we reset this value to + -- Column_Number'Last during scanning of configuration pragma files. + Maximum_Processes : Positive := 1; -- GNATMAKE -- Maximum number of processes that should be spawned to carry out diff --git a/gcc/ada/osint.adb b/gcc/ada/osint.adb index 0e83dbb7d06..aa45a7a03b4 100644 --- a/gcc/ada/osint.adb +++ b/gcc/ada/osint.adb @@ -1029,7 +1029,6 @@ package body Osint is if Command_Name (Cindex2) in '0' .. '9' then for J in reverse Cindex1 .. Cindex2 loop - if Command_Name (J) = '.' or Command_Name (J) = ';' then Cindex2 := J - 1; exit; diff --git a/gcc/ada/osint.ads b/gcc/ada/osint.ads index f6e69c74814..6e5672d1aca 100644 --- a/gcc/ada/osint.ads +++ b/gcc/ada/osint.ads @@ -93,10 +93,14 @@ package Osint is -- gives the total number of filenames found on the command line. No_Index : constant := -1; + -- Value used in Add_File to indicate that no index is specified + -- for a main. procedure Add_File (File_Name : String; Index : Int := No_Index); -- Called by the subprogram processing the command line for each - -- file name found. + -- file name found. The index, when not defaulted to No_Index + -- is the index of the subprogram in its source, zero indicating + -- that the source is not multi-unit. procedure Find_Program_Name; -- Put simple name of current program being run (excluding the directory diff --git a/gcc/ada/prj-dect.adb b/gcc/ada/prj-dect.adb index 89233fa90eb..0db8d9150bd 100644 --- a/gcc/ada/prj-dect.adb +++ b/gcc/ada/prj-dect.adb @@ -197,8 +197,8 @@ package body Prj.Dect is -- Set, if appropriate the index case insensitivity flag elsif Attributes.Table (Current_Attribute).Kind_2 in - Case_Insensitive_Associative_Array .. - Optional_Index_Case_Insensitive_Associative_Array + Case_Insensitive_Associative_Array .. + Optional_Index_Case_Insensitive_Associative_Array then Set_Case_Insensitive (Attribute, To => True); end if; @@ -257,15 +257,16 @@ package body Prj.Dect is Expect (Tok_Integer_Literal, "integer literal"); if Token = Tok_Integer_Literal then + + -- Set the source index value from given literal + declare Index : constant Int := UI_To_Int (Int_Literal_Value); begin if Index = 0 then Error_Msg ("index cannot be zero", Token_Ptr); - else - -- Set the index Set_Source_Index_Of (Attribute, To => Index); end if; end; diff --git a/gcc/ada/prj-strt.adb b/gcc/ada/prj-strt.adb index 8dade507915..cc1bd83db80 100644 --- a/gcc/ada/prj-strt.adb +++ b/gcc/ada/prj-strt.adb @@ -1205,6 +1205,8 @@ package body Prj.Strt is Scan; + -- Check for possible index expression + if Token = Tok_At then if not Optional_Index then Error_Msg ("index not allowed here", Token_Ptr); @@ -1214,6 +1216,8 @@ package body Prj.Strt is Scan; end if; + -- Set the index value + else Scan; Expect (Tok_Integer_Literal, "integer literal"); @@ -1224,9 +1228,7 @@ package body Prj.Strt is begin if Index = 0 then Error_Msg ("index cannot be zero", Token_Ptr); - else - -- Set the index Set_Source_Index_Of (Term_Id, To => Index); end if; end; diff --git a/gcc/ada/prj-tree.adb b/gcc/ada/prj-tree.adb index 993d1ecf451..2a67b57c5b1 100644 --- a/gcc/ada/prj-tree.adb +++ b/gcc/ada/prj-tree.adb @@ -2361,8 +2361,8 @@ package body Prj.Tree is (Project_Nodes.Table (Node).Kind = N_Variable_Reference or else Project_Nodes.Table (Node).Kind = N_Typed_Variable_Declaration) - and then - Project_Nodes.Table (To).Kind = N_String_Type_Declaration); + and then + Project_Nodes.Table (To).Kind = N_String_Type_Declaration); if Project_Nodes.Table (Node).Kind = N_Variable_Reference then Project_Nodes.Table (Node).Field3 := To; @@ -2400,9 +2400,9 @@ package body Prj.Tree is pragma Assert (Node /= Empty_Node and then - (Project_Nodes.Table (Node).Kind = N_Literal_String - or else - Project_Nodes.Table (Node).Kind = N_Attribute_Declaration)); + (Project_Nodes.Table (Node).Kind = N_Literal_String + or else + Project_Nodes.Table (Node).Kind = N_Attribute_Declaration)); return Project_Nodes.Table (Node).Src_Index; end Source_Index_Of; @@ -2410,9 +2410,7 @@ package body Prj.Tree is -- String_Type_Of -- -------------------- - function String_Type_Of - (Node : Project_Node_Id) return Project_Node_Id - is + function String_Type_Of (Node : Project_Node_Id) return Project_Node_Id is begin pragma Assert (Node /= Empty_Node diff --git a/gcc/ada/s-auxdec.ads b/gcc/ada/s-auxdec.ads index c517ae5ee30..2d34ff111c9 100644 --- a/gcc/ada/s-auxdec.ads +++ b/gcc/ada/s-auxdec.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1996-2002 Free Software Foundation, Inc. -- +-- Copyright (C) 1996-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- -- @@ -42,6 +42,16 @@ with Unchecked_Conversion; package System.Aux_DEC is pragma Elaborate_Body (Aux_DEC); + subtype Short_Address is Address; + -- In some versions of System.Aux_DEC, notably that for VMS on the + -- ia64, there are two address types (64-bit and 32-bit), and the + -- name Short_Address is used for the short address form. To avoid + -- difficulties (in regression tests and elsewhere) with units that + -- reference Short_Address, it is provided for other targets as a + -- synonum for the normal Address type, and, as in the case where + -- the lengths are different, Address and Short_Address can be + -- freely inter-converted. + type Integer_8 is range -2 ** (8 - 1) .. +2 ** (8 - 1) - 1; for Integer_8'Size use 8; diff --git a/gcc/ada/s-inmaop.ads b/gcc/ada/s-inmaop.ads index d83f12184af..2bb8ef0caa1 100644 --- a/gcc/ada/s-inmaop.ads +++ b/gcc/ada/s-inmaop.ads @@ -7,7 +7,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-1998, 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- -- @@ -35,78 +35,82 @@ package System.Interrupt_Management.Operations is procedure Thread_Block_Interrupt (Interrupt : Interrupt_ID); - -- Mask the calling thread for the interrupt pragma Inline (Thread_Block_Interrupt); + -- Mask the calling thread for the interrupt procedure Thread_Unblock_Interrupt (Interrupt : Interrupt_ID); - -- Unmask the calling thread for the interrupt pragma Inline (Thread_Unblock_Interrupt); + -- Unmask the calling thread for the interrupt procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask); -- Set the interrupt mask of the calling thread + procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask; OMask : access Interrupt_Mask); + pragma Inline (Set_Interrupt_Mask); -- Set the interrupt mask of the calling thread while returning the -- previous Mask. - pragma Inline (Set_Interrupt_Mask); procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask); - -- Get the interrupt mask of the calling thread pragma Inline (Get_Interrupt_Mask); + -- Get the interrupt mask of the calling thread function Interrupt_Wait (Mask : access Interrupt_Mask) return Interrupt_ID; - -- Wait for the interrupts specified in Mask and return - -- the interrupt received. Upon error it return 0. pragma Inline (Interrupt_Wait); + -- Wait for the interrupts specified in Mask and return + -- the interrupt received. Return 0 upon error. procedure Install_Default_Action (Interrupt : Interrupt_ID); - -- Set the sigaction of the Interrupt to default (SIG_DFL). pragma Inline (Install_Default_Action); + -- Set the sigaction of the Interrupt to default (SIG_DFL). procedure Install_Ignore_Action (Interrupt : Interrupt_ID); - -- Set the sigaction of the Interrupt to ignore (SIG_IGN). pragma Inline (Install_Ignore_Action); + -- Set the sigaction of the Interrupt to ignore (SIG_IGN). procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask); - -- Get a Interrupt_Mask with all the interrupt masked pragma Inline (Fill_Interrupt_Mask); + -- Get a Interrupt_Mask with all the interrupt masked procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask); - -- Get a Interrupt_Mask with all the interrupt unmasked pragma Inline (Empty_Interrupt_Mask); + -- Get a Interrupt_Mask with all the interrupt unmasked procedure Add_To_Interrupt_Mask (Mask : access Interrupt_Mask; Interrupt : Interrupt_ID); - -- Mask the given interrupt in the Interrupt_Mask pragma Inline (Add_To_Interrupt_Mask); + -- Mask the given interrupt in the Interrupt_Mask procedure Delete_From_Interrupt_Mask (Mask : access Interrupt_Mask; Interrupt : Interrupt_ID); - -- Unmask the given interrupt in the Interrupt_Mask pragma Inline (Delete_From_Interrupt_Mask); + -- Unmask the given interrupt in the Interrupt_Mask function Is_Member (Mask : access Interrupt_Mask; Interrupt : Interrupt_ID) return Boolean; - -- See if a given interrupt is masked in the Interrupt_Mask pragma Inline (Is_Member); + -- See if a given interrupt is masked in the Interrupt_Mask procedure Copy_Interrupt_Mask (X : out Interrupt_Mask; Y : Interrupt_Mask); - -- Assigment needed for limited private type Interrupt_Mask. pragma Inline (Copy_Interrupt_Mask); + -- Assigment needed for limited private type Interrupt_Mask. procedure Interrupt_Self_Process (Interrupt : Interrupt_ID); - -- raise an Interrupt process-level pragma Inline (Interrupt_Self_Process); + -- Raise an Interrupt process-level -- The following objects serve as constants, but are initialized -- in the body to aid portability. These actually belong to the -- System.Interrupt_Management but since Interrupt_Mask is a -- private type we can not have them declared there. + -- Why not make these deferred constants that are initialized using + -- function calls in the private part??? + Environment_Mask : aliased Interrupt_Mask; -- This mask represents the mask of Environment task when this package -- is being elaborated, except the signals being diff --git a/gcc/ada/scn.adb b/gcc/ada/scn.adb index 0398551d5dd..5e8fbbf2298 100644 --- a/gcc/ada/scn.adb +++ b/gcc/ada/scn.adb @@ -26,7 +26,6 @@ with Atree; use Atree; with Csets; use Csets; -with Hostparm; with Namet; use Namet; with Opt; use Opt; with Scans; use Scans; @@ -99,13 +98,11 @@ package body Scn is procedure Check_End_Of_Line is Len : constant Int := Int (Scan_Ptr) - Int (Current_Line_Start); - begin - if Len > Hostparm.Max_Line_Length then - Error_Long_Line; - - elsif Style_Check then + if Style_Check then Style.Check_Line_Terminator (Len); + elsif Len > Opt.Max_Line_Length then + Error_Long_Line; end if; end Check_End_Of_Line; @@ -115,6 +112,7 @@ package body Scn is function Determine_License return License_Type is GPL_Found : Boolean := False; + Result : License_Type; function Contains (S : String) return Boolean; -- See if current comment contains successive non-blank characters @@ -191,14 +189,17 @@ package body Scn is or else Source (Scan_Ptr + 1) /= '-' then if GPL_Found then - return GPL; + Result := GPL; + exit; else - return Unknown; + Result := Unknown; + exit; end if; elsif Contains ("Asaspecialexception") then if GPL_Found then - return Modified_GPL; + Result := Modified_GPL; + exit; end if; elsif Contains ("GNUGeneralPublicLicense") then @@ -211,7 +212,8 @@ package body Scn is Contains ("ThisspecificationisderivedfromtheAdaReferenceManual") then - return Unrestricted; + Result := Unrestricted; + exit; end if; Skip_EOL; @@ -240,6 +242,8 @@ package body Scn is end; end if; end loop; + + return Result; end Determine_License; ---------------------------- @@ -259,7 +263,7 @@ package body Scn is begin Error_Msg ("this line is too long", - Current_Line_Start + Hostparm.Max_Line_Length); + Current_Line_Start + Source_Ptr (Opt.Max_Line_Length)); end Error_Long_Line; ------------------------ diff --git a/gcc/ada/scng.adb b/gcc/ada/scng.adb index 93e340f54ac..92b3c74810d 100644 --- a/gcc/ada/scng.adb +++ b/gcc/ada/scng.adb @@ -26,7 +26,6 @@ with Csets; use Csets; with Err_Vars; use Err_Vars; -with Hostparm; use Hostparm; with Namet; use Namet; with Opt; use Opt; with Scans; use Scans; @@ -302,7 +301,14 @@ package body Scng is if Style_Check and Style_Check_Max_Line_Length then Style.Check_Line_Terminator (Len); - elsif Len > Hostparm.Max_Line_Length then + -- If style checking is inactive, check maximum line length against + -- standard value. Note that we take this from Opt.Max_Line_Length + -- rather than Hostparm.Max_Line_Length because we do not want to + -- impose any limit during scanning of configuration pragma files, + -- and Opt.Max_Line_Length (normally set to Hostparm.Max_Line_Length) + -- is reset to Column_Number'Max during scanning of such files. + + elsif Len > Opt.Max_Line_Length then Error_Long_Line; end if; end Check_End_Of_Line; @@ -359,7 +365,7 @@ package body Scng is begin Error_Msg ("this line is too long", - Current_Line_Start + Hostparm.Max_Line_Length); + Current_Line_Start + Source_Ptr (Opt.Max_Line_Length)); end Error_Long_Line; ------------------------------- diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb index c821c7c2fc0..9c0da7f97f7 100644 --- a/gcc/ada/sem_ch10.adb +++ b/gcc/ada/sem_ch10.adb @@ -511,7 +511,7 @@ package body Sem_Ch10 is end; end if; - -- Generate distribution stub files if requested and no error + -- Generate distribution stubs if requested and no error if N = Main_Cunit and then (Distribution_Stub_Mode = Generate_Receiver_Stub_Body @@ -546,9 +546,6 @@ package body Sem_Ch10 is Add_Stub_Constructs (N); end if; - -- Reanalyze the unit with the new constructs - - Analyze (Unit_Node); end if; if Nkind (Unit_Node) = N_Package_Declaration diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 954d4d343cb..4f9383142e5 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -4359,17 +4359,19 @@ package body Sem_Ch4 is -- subprograms are used to hide its operators, they will be -- truly hidden. - procedure Remove_Address_Interpretations; + type Operand_Position is (First_Op, Second_Op); + + procedure Remove_Address_Interpretations (Op : Operand_Position); -- Ambiguities may arise when the operands are literal and the -- address operations in s-auxdec are visible. In that case, remove -- the interpretation of a literal as Address, to retain the semantics -- of Address as a private type. ------------------------------------ - -- Remove_Address_Intereprtations -- + -- Remove_Address_Interpretations -- ------------------------------------ - procedure Remove_Address_Interpretations is + procedure Remove_Address_Interpretations (Op : Operand_Position) is Formal : Entity_Id; begin @@ -4378,13 +4380,11 @@ package body Sem_Ch4 is while Present (It.Nam) loop Formal := First_Entity (It.Nam); - if Is_Descendent_Of_Address (Etype (Formal)) - or else - (Present (Next_Entity (Formal)) - and then - Is_Descendent_Of_Address - (Etype (Next_Entity (Formal)))) - then + if Op = Second_Op then + Formal := Next_Entity (Formal); + end if; + + if Is_Descendent_Of_Address (Etype (Formal)) then Remove_Interp (I); end if; @@ -4417,38 +4417,43 @@ package body Sem_Ch4 is Get_Next_Interp (I, It); end loop; - -- Remove corresponding predefined operator, which is - -- always added to the overload set, unless it is a universal - -- operation. - if No (Abstract_Op) then return; - -- Remove address interpretations if we have a universal - -- interpretation. This avoids literals being interpreted - -- as type Address, which is never appropriate. - elsif Nkind (N) in N_Op then - if Nkind (N) in N_Unary_Op - and then Present (Universal_Interpretation (Right_Opnd (N))) - then - Remove_Address_Interpretations; + -- Remove interpretations that treat literals as addresses. + -- This is never appropriate. - elsif Nkind (N) in N_Binary_Op - and then Present (Universal_Interpretation (Right_Opnd (N))) - and then Present (Universal_Interpretation (Left_Opnd (N))) - then - Remove_Address_Interpretations; + if Nkind (N) in N_Binary_Op then + declare + U1 : constant Boolean := + Present (Universal_Interpretation (Right_Opnd (N))); + U2 : constant Boolean := + Present (Universal_Interpretation (Left_Opnd (N))); - else - Get_First_Interp (N, I, It); - while Present (It.Nam) loop - if Scope (It.Nam) = Standard_Standard then - Remove_Interp (I); + begin + if U1 and then not U2 then + Remove_Address_Interpretations (Second_Op); + + elsif U2 and then not U1 then + Remove_Address_Interpretations (First_Op); end if; - Get_Next_Interp (I, It); - end loop; + if not (U1 and U2) then + + -- Remove corresponding predefined operator, which is + -- always added to the overload set. + + Get_First_Interp (N, I, It); + while Present (It.Nam) loop + if Scope (It.Nam) = Standard_Standard then + Remove_Interp (I); + end if; + + Get_Next_Interp (I, It); + end loop; + end if; + end; end if; elsif Nkind (N) = N_Function_Call @@ -4459,18 +4464,24 @@ package body Sem_Ch4 is and then Nkind (Selector_Name (Name (N))) = N_Operator_Symbol)) then + declare Arg1 : constant Node_Id := First (Parameter_Associations (N)); + U1 : constant Boolean := + Present (Universal_Interpretation (Arg1)); + U2 : constant Boolean := + Present (Next (Arg1)) and then + Present (Universal_Interpretation (Next (Arg1))); begin - if Present (Universal_Interpretation (Arg1)) - and then - (No (Next (Arg1)) - or else Present (Universal_Interpretation (Next (Arg1)))) - then - Remove_Address_Interpretations; + if U1 and then not U2 then + Remove_Address_Interpretations (First_Op); - else + elsif U2 and then not U1 then + Remove_Address_Interpretations (Second_Op); + end if; + + if not (U1 and U2) then Get_First_Interp (N, I, It); while Present (It.Nam) loop if Scope (It.Nam) = Standard_Standard @@ -4486,7 +4497,7 @@ package body Sem_Ch4 is end if; -- If the removal has left no valid interpretations, emit - -- error message now an label node as illegal. + -- error message now and label node as illegal. if Present (Abstract_Op) then Get_First_Interp (N, I, It); diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index 3d4f02eef6f..89512b51c7e 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -4599,8 +4599,9 @@ package body Sem_Ch6 is end if; -- In any case the implicit operation remains hidden by - -- the existing declaration. + -- the existing declaration, which is overriding. + Set_Is_Overriding_Operation (E); return; -- Within an instance, the renaming declarations for diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb index 4c538b0ff40..5c85af2d600 100644 --- a/gcc/ada/sem_disp.adb +++ b/gcc/ada/sem_disp.adb @@ -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- -- @@ -41,6 +41,7 @@ with Sem_Ch6; use Sem_Ch6; with Sem_Eval; use Sem_Eval; with Sem_Util; use Sem_Util; with Snames; use Snames; +with Stand; use Stand; with Sinfo; use Sinfo; with Uintp; use Uintp; @@ -423,6 +424,27 @@ package body Sem_Disp is Has_Dispatching_Parent : Boolean := False; Body_Is_Last_Primitive : Boolean := False; + function Is_Visibly_Controlled (T : Entity_Id) return Boolean; + -- Check whether T is derived from a visibly controlled type. + -- This is true if the root type is declared in Ada.Finalization. + -- If T is derived instead from a private type whose full view + -- is controlled, an explicit Initialize/Adjust/Finalize subprogram + -- does not override the inherited one. + + --------------------------- + -- Is_Visibly_Controlled -- + --------------------------- + + function Is_Visibly_Controlled (T : Entity_Id) return Boolean is + Root : constant Entity_Id := Root_Type (T); + begin + return Chars (Scope (Root)) = Name_Finalization + and then Chars (Scope (Scope (Root))) = Name_Ada + and then Scope (Scope (Scope (Root))) = Standard_Standard; + end Is_Visibly_Controlled; + + -- Start of processing for Check_Dispatching_Operation + begin if Ekind (Subp) /= E_Procedure and then Ekind (Subp) /= E_Function then return; @@ -595,8 +617,19 @@ package body Sem_Disp is if Present (Old_Subp) then Check_Subtype_Conformant (Subp, Old_Subp); - Override_Dispatching_Operation (Tagged_Type, Old_Subp, Subp); - Set_Is_Overriding_Operation (Subp); + if (Chars (Subp) = Name_Initialize + or else Chars (Subp) = Name_Adjust + or else Chars (Subp) = Name_Finalize) + and then Is_Controlled (Tagged_Type) + and then not Is_Visibly_Controlled (Tagged_Type) + then + Set_Is_Overriding_Operation (Subp, False); + Error_Msg_NE + ("operation does not override inherited&?", Subp, Subp); + else + Override_Dispatching_Operation (Tagged_Type, Old_Subp, Subp); + Set_Is_Overriding_Operation (Subp); + end if; else Add_Dispatching_Operation (Tagged_Type, Subp); end if; diff --git a/gcc/ada/sem_elim.adb b/gcc/ada/sem_elim.adb index 9f138ebf7ce..cb07a921c87 100644 --- a/gcc/ada/sem_elim.adb +++ b/gcc/ada/sem_elim.adb @@ -24,19 +24,21 @@ -- -- ------------------------------------------------------------------------------ -with Atree; use Atree; -with Einfo; use Einfo; -with Errout; use Errout; -with Namet; use Namet; -with Nlists; use Nlists; -with Sinput; use Sinput; -with Sinfo; use Sinfo; -with Snames; use Snames; -with Stand; use Stand; -with Stringt; use Stringt; +with Atree; use Atree; +with Einfo; use Einfo; +with Errout; use Errout; +with Namet; use Namet; +with Nlists; use Nlists; +with Sem_Prag; use Sem_Prag; +with Sinput; use Sinput; +with Sinfo; use Sinfo; +with Snames; use Snames; +with Stand; use Stand; +with Stringt; use Stringt; with Table; with GNAT.HTable; use GNAT.HTable; + package body Sem_Elim is No_Elimination : Boolean; @@ -774,15 +776,11 @@ package body Sem_Elim is Data.Entity_Scope (1) := Chars (Arg_Ent); - elsif Nkind (Arg_Entity) = N_String_Literal then - String_To_Name_Buffer (Strval (Arg_Entity)); + elsif Is_Config_Static_String (Arg_Entity) then Data.Entity_Name := Name_Find; Data.Entity_Node := Arg_Entity; else - Error_Msg_N - ("wrong form for Entity_Argument parameter of pragma%", - Arg_Unit_Name); return; end if; else @@ -794,12 +792,33 @@ package body Sem_Elim is if Present (Arg_Parameter_Types) then - -- Case of one name, which looks like a parenthesized literal - -- rather than an aggregate. + -- Here for aggregate case - if Nkind (Arg_Parameter_Types) = N_String_Literal - and then Paren_Count (Arg_Parameter_Types) = 1 - then + if Nkind (Arg_Parameter_Types) = N_Aggregate then + Data.Parameter_Types := + new Names + (1 .. List_Length (Expressions (Arg_Parameter_Types))); + + Lit := First (Expressions (Arg_Parameter_Types)); + for J in Data.Parameter_Types'Range loop + if Is_Config_Static_String (Lit) then + Data.Parameter_Types (J) := Name_Find; + Next (Lit); + else + return; + end if; + end loop; + + -- Otherwise we must have case of one name, which looks like a + -- parenthesized literal rather than an aggregate. + + elsif Paren_Count (Arg_Parameter_Types) /= 1 then + Error_Msg_N + ("wrong form for argument of pragma Eliminate", + Arg_Parameter_Types); + return; + + elsif Is_Config_Static_String (Arg_Parameter_Types) then String_To_Name_Buffer (Strval (Arg_Parameter_Types)); if Name_Len = 0 then @@ -812,53 +831,21 @@ package body Sem_Elim is Data.Parameter_Types := new Names'(1 => Name_Find); end if; - -- Otherwise must be an aggregate - - elsif Nkind (Arg_Parameter_Types) /= N_Aggregate - or else Present (Component_Associations (Arg_Parameter_Types)) - or else No (Expressions (Arg_Parameter_Types)) - then - Error_Msg_N - ("Parameter_Types for pragma% must be list of string literals", - Arg_Parameter_Types); - return; - - -- Here for aggregate case - else - Data.Parameter_Types := - new Names - (1 .. List_Length (Expressions (Arg_Parameter_Types))); - - Lit := First (Expressions (Arg_Parameter_Types)); - for J in Data.Parameter_Types'Range loop - if Nkind (Lit) /= N_String_Literal then - Error_Msg_N - ("parameter types for pragma% must be string literals", - Lit); - return; - end if; - - String_To_Name_Buffer (Strval (Lit)); - Data.Parameter_Types (J) := Name_Find; - Next (Lit); - end loop; + return; end if; end if; -- Process Result_Types argument if Present (Arg_Result_Type) then - - if Nkind (Arg_Result_Type) /= N_String_Literal then - Error_Msg_N - ("Result_Type argument for pragma% must be string literal", - Arg_Result_Type); + if Is_Config_Static_String (Arg_Result_Type) then + Data.Result_Type := Name_Find; + else return; end if; - String_To_Name_Buffer (Strval (Arg_Result_Type)); - Data.Result_Type := Name_Find; + -- Here if no Result_Types argument else Data.Result_Type := No_Name; @@ -867,17 +854,11 @@ package body Sem_Elim is -- Process Source_Location argument if Present (Arg_Source_Location) then - - if Nkind (Arg_Source_Location) /= N_String_Literal then - Error_Msg_N - ("Source_Location argument for pragma% must be string literal", - Arg_Source_Location); + if Is_Config_Static_String (Arg_Source_Location) then + Data.Source_Location := Name_Find; + else return; end if; - - String_To_Name_Buffer (Strval (Arg_Source_Location)); - Data.Source_Location := Name_Find; - else Data.Source_Location := No_Name; end if; diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index b7c3cafa0b5..5ab5bdeed45 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -9916,7 +9916,6 @@ package body Sem_Prag is when Unknown_Pragma => raise Program_Error; - end case; exception @@ -9948,7 +9947,7 @@ package body Sem_Prag is and then (Is_Generic_Instance (Result) or else Nkind (Parent (Declaration_Node (Result))) = - N_Subprogram_Renaming_Declaration) + N_Subprogram_Renaming_Declaration) and then Present (Alias (Result)) loop Result := Alias (Result); @@ -9957,6 +9956,65 @@ package body Sem_Prag is return Result; end Get_Base_Subprogram; + ----------------------------- + -- Is_Config_Static_String -- + ----------------------------- + + function Is_Config_Static_String (Arg : Node_Id) return Boolean is + + function Add_Config_Static_String (Arg : Node_Id) return Boolean; + -- This is an internal recursive function that is just like the + -- outer function except that it adds the string to the name buffer + -- rather than placing the string in the name buffer. + + ------------------------------ + -- Add_Config_Static_String -- + ------------------------------ + + function Add_Config_Static_String (Arg : Node_Id) return Boolean is + N : Node_Id; + C : Char_Code; + + begin + N := Arg; + + if Nkind (N) = N_Op_Concat then + if Add_Config_Static_String (Left_Opnd (N)) then + N := Right_Opnd (N); + else + return False; + end if; + end if; + + if Nkind (N) /= N_String_Literal then + Error_Msg_N ("string literal expected for pragma argument", N); + return False; + + else + for J in 1 .. String_Length (Strval (N)) loop + C := Get_String_Char (Strval (N), J); + + if not In_Character_Range (C) then + Error_Msg + ("string literal contains invalid wide character", + Sloc (N) + 1 + Source_Ptr (J)); + return False; + end if; + + Add_Char_To_Name_Buffer (Get_Character (C)); + end loop; + end if; + + return True; + end Add_Config_Static_String; + + -- Start of prorcessing for Is_Config_Static_String + + begin + Name_Len := 0; + return Add_Config_Static_String (Arg); + end Is_Config_Static_String; + ----------------------------------------- -- Is_Non_Significant_Pragma_Reference -- ----------------------------------------- diff --git a/gcc/ada/sem_prag.ads b/gcc/ada/sem_prag.ads index 9ff4ede80a2..fe5cd93320a 100644 --- a/gcc/ada/sem_prag.ads +++ b/gcc/ada/sem_prag.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2002 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- -- @@ -59,6 +59,17 @@ package Sem_Prag is -- False is returned, then the argument is treated as an entity reference -- to the operator. + function Is_Config_Static_String (Arg : Node_Id) return Boolean; + -- This is called for a configuration pragma that requires either a + -- string literal or a concatenation of string literals. We cannot + -- use normal static string processing because it is too early in + -- the case of the pragma appearing in a configuration pragmas file. + -- If Arg is of an appropriate form, then this call obtains the string + -- (doing any necessary concatenations) and places it in Name_Buffer, + -- setting Name_Len to its length, and then returns True. If it is + -- not of the correct form, then an appropriate error message is + -- posted, and False is returned. + procedure Process_Compilation_Unit_Pragmas (N : Node_Id); -- Called at the start of processing compilation unit N to deal with -- any special issues regarding pragmas. In particular, we have to diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index db85ab27c95..263e701e11d 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -136,9 +136,10 @@ package body Sem_Util is Rtyp := Typ; end if; - if No (Compile_Time_Constraint_Error (N, Msg, Ent, Loc, Warn => Warn)) - or else not Rep - then + Discard_Node ( + Compile_Time_Constraint_Error (N, Msg, Ent, Loc, Warn => Warn)); + + if not Rep then return; end if; @@ -3309,9 +3310,21 @@ package body Sem_Util is P_Aliased := True; end if; + -- A discriminant check on a selected component may be + -- expanded into a dereference when removing side-effects. + -- Recover the original node and its type, which may be + -- unconstrained. + + elsif Nkind (P) = N_Explicit_Dereference + and then not (Comes_From_Source (P)) + then + P := Original_Node (P); + Prefix_Type := Etype (P); + else -- Check for prefix being an aliased component ??? null; + end if; if Is_Access_Type (Prefix_Type) diff --git a/gcc/ada/switch-m.adb b/gcc/ada/switch-m.adb index 67cee510139..5215fe15029 100644 --- a/gcc/ada/switch-m.adb +++ b/gcc/ada/switch-m.adb @@ -672,6 +672,12 @@ package body Switch.M is Ptr := Ptr + 1; Verbose_Mode := True; + -- Processing for x switch + + when 'x' => + Ptr := Ptr + 1; + External_Unit_Compilation_Allowed := True; + -- Processing for z switch when 'z' => diff --git a/gcc/ada/utils.c b/gcc/ada/utils.c index 01be1603930..4213e8a3a15 100644 --- a/gcc/ada/utils.c +++ b/gcc/ada/utils.c @@ -1348,7 +1348,6 @@ create_var_decl (tree var_name, || (static_flag && ! init_const))) assign_init = var_init, var_init = 0; - DECL_COMMON (var_decl) = !flag_no_common; DECL_INITIAL (var_decl) = var_init; TREE_READONLY (var_decl) = const_flag; DECL_EXTERNAL (var_decl) = extern_flag; @@ -1621,7 +1620,6 @@ process_attributes (tree decl, struct attrib *attr_list) DECL_SECTION_NAME (decl) = build_string (IDENTIFIER_LENGTH (attr_list->name), IDENTIFIER_POINTER (attr_list->name)); - DECL_COMMON (decl) = 0; } else post_error ("?section attributes are not supported for this target", diff --git a/gcc/ada/vms_data.ads b/gcc/ada/vms_data.ads index 256d8a64a51..ca621b033b6 100644 --- a/gcc/ada/vms_data.ads +++ b/gcc/ada/vms_data.ads @@ -3839,6 +3839,14 @@ package VMS_Data is -- will execute the elaboration routines of the package and its closure, -- then the finalization routines. + S_Make_Nonpro : aliased constant S := "/NON_PROJECT_UNIT_COMPILATION " & + "-x"; + -- /NON_PROJECT_UNIT_COMPILATION + -- + -- Normally, when using project files, a unit that is not part of any + -- project file, cannot be compile. These units may be compile, when + -- needed, if this qualifier is specified. + S_Make_Nostinc : aliased constant S := "/NOSTD_INCLUDES " & "-nostdinc"; -- /NOSTD_INCLUDES @@ -3988,6 +3996,7 @@ package VMS_Data is S_Make_Minimal 'Access, S_Make_Nolink 'Access, S_Make_Nomain 'Access, + S_Make_Nonpro 'Access, S_Make_Nostinc 'Access, S_Make_Nostlib 'Access, S_Make_Object 'Access, |