This patch enables the recognition/processing of pragma Restrictions (No_Dependence => unit) in system.ads, allowing more flexibility in configuring specialized versions of System.
Given a system.ads that contains the line pragma Restrictions (No_Dependence => Ada.Text_IO); Compiling the following program gives the indicated error: 1. with Ada.Text_IO; | >>> violation of restriction "No_Dependence => Ada.Text_Io" in package System 2. procedure SysRest is 3. begin 4. Ada.Text_IO.Put_Line ("hello"); 5. end; Tested on x86_64-pc-linux-gnu, committed on trunk 2014-06-13 Robert Dewar <de...@adacore.com> * back_end.adb (Make_Id): New function. (Make_SC): New function. (Set_RND): New procedure. * back_end.ads (Make_Id): New function. (Make_SC): New function. (Set_RND): New procedure. * einfo.ads: Minor comment updates. * frontend.adb: Move Atree.Initialize call to Gnat1drv. * gnat1drv.adb (Gnat1drv): New calling sequence for Get_Target_Parameters. (Gnat1drv): Move Atree.Initialize here from Frontend. * targparm.adb (Get_Target_Parameters): New calling sequence (Get_Target_Parameters): Handle pragma Restriction (No_Dependence,..) * targparm.ads (Get_Target_Parameters): New calling sequence.
Index: frontend.adb =================================================================== --- frontend.adb (revision 211445) +++ frontend.adb (working copy) @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2013, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, 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- -- @@ -80,7 +80,6 @@ -- since it uses names table entries. Rtsfind.Initialize; - Atree.Initialize; Nlists.Initialize; Elists.Initialize; Lib.Load.Initialize; Index: einfo.ads =================================================================== --- einfo.ads (revision 211465) +++ einfo.ads (working copy) @@ -101,9 +101,9 @@ -- pragma Inline declarations -- This order must be observed. There are no restrictions on the procedures, --- since the C header file only includes functions (Gigi is not allowed to --- modify the generated tree). However, functions are required to have headers --- that fit on a single line. +-- since the C header file only includes functions (The back end is not +-- allowed to modify the generated tree). However, functions are required to +-- have headers that fit on a single line. -- XEINFO reads and processes the function specs and the pragma Inlines. For -- functions that are declared as inlined, XEINFO reads the corresponding body @@ -121,7 +121,7 @@ -- For functions that are not inlined, there is no restriction on the body, -- and XEINFO generates a direct reference in the C header file which allows --- the C code in Gigi to directly call the corresponding Ada body. +-- the C code in the backend to directly call the corresponding Ada body. ---------------------------------- -- Handling of Type'Size Values -- @@ -378,16 +378,16 @@ -- the N_Attribute_Definition_Clause node. Empty if no Address clause. -- The expression in the address clause is always a constant that is -- defined before the entity to which the address clause applies. --- Note: Gigi references this field in E_Task_Type entities??? +-- Note: The backend references this field in E_Task_Type entities??? -- Address_Taken (Flag104) -- Defined in all entities. Set if the Address or Unrestricted_Access -- attribute is applied directly to the entity, i.e. the entity is the -- entity of the prefix of the attribute reference. Also set if the -- entity is the second argument of an Asm_Input or Asm_Output attribute, --- as the construct may entail taking its address. Used by Gigi to make --- sure that the address can be meaningfully taken, and also in the case --- of subprograms to control output of certain warnings. +-- as the construct may entail taking its address. Used by the backend to +-- make sure that the address can be meaningfully taken, and also in the +-- case of subprograms to control output of certain warnings. -- Aft_Value (synthesized) -- Applies to fixed and decimal types. Computes a universal integer @@ -415,7 +415,7 @@ -- object. A value of zero (Uint_0) indicates that the alignment has not -- been set yet. The alignment can be set by an explicit alignment -- clause, or set by the front-end in package Layout, or set by the --- back-end as part of the back end back-annotation process. The +-- back-end as part of the back-end back-annotation process. The -- alignment field is also defined in E_Exception entities, but there it -- is used only by the back-end for back annotation. @@ -534,13 +534,13 @@ -- Can_Use_Internal_Rep (Flag229) [base type only] -- Defined in Access_Subprogram_Kind nodes. This flag is set by the --- front end and used by the back end. False means that the back end +-- front end and used by the backend. False means that the backend -- must represent the type in the same way as Convention-C types (and -- other foreign-convention types). On many targets, this means that --- the back end will use dynamically generated trampolines for nested --- subprograms. True means that the back end can represent the type in +-- the backend will use dynamically generated trampolines for nested +-- subprograms. True means that the backend can represent the type in -- some internal way. On the aforementioned targets, this means that the --- back end will not use dynamically generated trampolines. This flag +-- backend will not use dynamically generated trampolines. This flag -- must be False if Has_Foreign_Convention is True; otherwise, the front -- end is free to set the policy. -- @@ -568,11 +568,11 @@ -- table that has the character string of the identifier, character -- literal or operator symbol. See Namet for further details. Note that -- throughout the processing of the front end, this name is the simple --- unqualified name. However, just before gigi is called, a call is made --- to Qualify_All_Entity_Names. This causes entity names to be qualified --- using the encoding described in exp_dbug.ads, and from that point on --- (including post gigi steps such as cross-reference generation), the --- entities will contain the encoded qualified names. +-- unqualified name. However, just before the backend is called, a call +-- is made to Qualify_All_Entity_Names. This causes entity names to be +-- qualified using the encoding described in exp_dbug.ads, and from that +-- point (including post backend steps, e.g. cross-reference generation), +-- the entities will contain the encoded qualified names. -- Checks_May_Be_Suppressed (Flag31) -- Defined in all entities. Set if a pragma Suppress or Unsuppress @@ -639,7 +639,7 @@ -- Note: Component_Bit_Offset is redundant with respect to the fields -- Normalized_First_Bit and Normalized_Position, and could in principle -- be eliminated, but it is convenient in several situations, including --- use in Gigi, to have this redundant field. +-- use in the backend, to have this redundant field. -- Component_Clause (Node13) -- Defined in record components and discriminants. If a record @@ -733,7 +733,7 @@ -- to the entity, or if internal processing in the compiler determines -- that suppression of debug information is desirable. Note that this -- flag is only for use by the front end as part of the processing for --- determining if Needs_Debug_Info should be set. The back end should +-- determining if Needs_Debug_Info should be set. The backend should -- always test Needs_Debug_Info, it should never test Debug_Info_Off. -- Debug_Renaming_Link (Node25) @@ -1088,7 +1088,7 @@ -- Defined in class wide types and subtypes, access to protected -- subprogram types, and in exception types. For a classwide type, it -- is always Empty. For a class wide subtype, it points to an entity --- created by the expander which gives Gigi an easily understandable +-- created by the expander which gives the backend an understandable -- equivalent of the class subtype with a known size (given by an -- initial value). See Exp_Util.Expand_Class_Wide_Subtype for further -- details. For E_Exception_Type, this points to the record containing @@ -1111,8 +1111,8 @@ -- of a component to be set without a component clause defined, which -- means that the component size is specified, but not the position. -- See also RM_Size and the section on "Handling of Type'Size Values". --- During gigi processing, the value is back annotated for all zero --- values, so that after the call to gigi, the value is properly set. +-- During backend processing, the value is back annotated for all zero +-- values, so that after the call to the backend, the value is set. -- Etype (Node5) -- Defined in all entities. Represents the type of the entity, which @@ -1309,7 +1309,7 @@ -- Thread_Local_Storage pragma -- -- If any of these items are present, then the flag Has_Gigi_Rep_Item is --- set, indicating that Gigi should search the chain. +-- set, indicating that the backend should search the chain. -- -- Other representation items are included in the chain so that error -- messages can easily locate the relevant nodes for posting errors. @@ -1558,8 +1558,8 @@ -- Has_Gigi_Rep_Item (Flag82) -- Defined in all entities. Set if the rep item chain (referenced by -- First_Rep_Item and linked through the Next_Rep_Item chain) contains a --- representation item that needs to be specially processed by Gigi, i.e. --- one of the following items: +-- representation item that needs to be specially processed by the back +-- end, i.e. one of the following items: -- -- Machine_Attribute pragma -- Linker_Alias pragma @@ -1568,13 +1568,13 @@ -- Weak_External pragma -- Thread_Local_Storage pragma -- --- If this flag is set, then Gigi should scan the rep item chain to --- process any of these items that appear. At least one such item will +-- If this flag is set, then the backend should scan the rep item chain +-- to process any of these items that appear. At least one such item will -- be present. -- -- Has_Homonym (Flag56) -- Defined in all entities. Set if an entity has a homonym in the same --- scope. Used by Gigi to generate unique names for such entities. +-- scope. Used by the backend to generate unique names for all entities. -- Has_Implicit_Dereference (Flag251) -- Defined in types and discriminants. Set if the type has an aspect @@ -1646,7 +1646,7 @@ -- scope that has an exception handler and the two scopes are in the -- same procedure. This is used by the backend for controlling certain -- optimizations to ensure that they are consistent with exceptions. --- See documentation in Gigi for further details. +-- See documentation in backend for further details. -- Has_Non_Null_Refinement (synth) -- Defined in E_Abstract_State entities. True if the state has at least @@ -2185,9 +2185,9 @@ -- by the expander to represent a task or protected type. For every -- concurrent type, such as record type is constructed, and task and -- protected objects are instances of this record type at runtime --- (Gigi will replace declarations of the concurrent type using the --- declarations of the corresponding record type). See package Exp_Ch9 --- for further details. +-- (The backend will replace declarations of the concurrent type using +-- the declarations of the corresponding record type). See Exp_Ch9 for +-- further details. -- Is_Concurrent_Type (synthesized) -- Applies to all entities, true for task types and subtypes and for @@ -2212,7 +2212,7 @@ -- Defined in all types and subtypes. This flag can be set only if -- Is_Constr_Subt_For_U_Nominal is also set. It indicates that in -- addition the object concerned is aliased. This flag is used by --- Gigi to determine whether a template must be constructed. +-- the backend to determine whether a template must be constructed. -- Is_Constructor (Flag76) -- Defined in function and procedure entities. Set if a pragma @@ -2497,9 +2497,9 @@ -- Is_Itype (Flag91) -- Defined in all entities. Set to indicate that a type is an Itype, -- which means that the declaration for the type does not appear --- explicitly in the tree. Instead gigi will elaborate the type when it --- is first used. Has_Delayed_Freeze can be set for Itypes, and the --- meaning is that the first use (the one which causes the type to be +-- explicitly in the tree. Instead the backend will elaborate the type +-- when it is first used. Has_Delayed_Freeze can be set for Itypes, and +-- the meaning is that the first use (the one which causes the type to be -- defined) will be the freeze node. Note that an important restriction -- on Itypes is that the first use of such a type (the one that causes it -- to be defined) must be in the same scope as the type. @@ -2523,7 +2523,7 @@ -- The flag is dynamically set and reset as semantic analysis and -- expansion proceeds. Its value is meaningless once the tree is -- fully constructed, since it simply indicates the last state. --- Thus this flag has no meaning to the back end. +-- Thus this flag has no meaning to the backend. -- Is_Known_Null (Flag204) -- Defined in all entities. Relevant (and can be set ) only for @@ -2552,7 +2552,7 @@ -- -- For objects, the flag indicates the state of knowledge about the -- current value of the object. This may be modified during expansion, --- and thus the final value is not relevant to gigi. +-- and thus the final value is not relevant to the backend. -- -- For types and subtypes, the flag is set if all possible bit patterns -- of length Object_Size (i.e. Esize of the type) represent valid values @@ -2567,7 +2567,7 @@ -- The flag is dynamically set and reset as semantic analysis and -- expansion proceeds. Its value is meaningless once the tree is -- fully constructed, since it simply indicates the last state. --- Thus this flag has no meaning to the back end. +-- Thus this flag has no meaning to the backend. -- Is_Limited_Composite (Flag106) -- Defined in all entities. Set for composite types that have a limited @@ -2709,11 +2709,11 @@ -- used to implement a packed array (either a modular type, or a subtype -- of Packed_Bytes{1,2,4} as appropriate). The flag is set if and only -- if the type appears in the Packed_Array_Type field of some other type --- entity. It is used by Gigi to activate the special processing for such --- types (unchecked conversions that would not otherwise be allowed are --- allowed for such types). If the Is_Packed_Array_Type flag is set in --- an entity, then the Original_Array_Type field of this entity points --- to the original array type for which this is the packed array type. +-- entity. It is used by the backend to activate the special processing +-- for such types (unchecked conversions that would not otherwise be +-- allowed are allowed for such types). If the Is_Packed_Array_Type flag +-- is set in an entity, then the Original_Array_Type field of this entity +-- points to the array type for which this is the packed array type. -- Is_Potentially_Use_Visible (Flag9) -- Defined in all entities. Set if entity is potentially use visible, @@ -2797,8 +2797,8 @@ -- Defined in all entities. Set to indicate that an entity defined in -- one compilation unit can be referenced from other compilation units. -- If this reference causes a reference in the generated variable, for --- example in the case of a variable name, then Gigi will generate an --- appropriate external name for use by the linker. +-- example in the case of a variable name, then the backend will generate +-- an appropriate external name for use by the linker. -- Is_Protected_Record_Type (synthesized) -- Applies to all entities, true if Is_Concurrent_Record_Type is true and @@ -3011,7 +3011,7 @@ -- and full view. The flag is not set reliably on private subtypes, -- and is always retrieved from the base type (but this is not a base- -- type-only attribute because it applies to other entities). Note that --- the back end should use Treat_As_Volatile, rather than Is_Volatile +-- the backend should use Treat_As_Volatile, rather than Is_Volatile -- to indicate code generation requirements for volatile variables. -- Similarly, any front end test which is concerned with suppressing -- optimizations on volatile objects should test Treat_As_Volatile @@ -3158,7 +3158,7 @@ -- Defined in entities for types and subtypes. Set if objects of the type -- must always be allocated on a byte boundary (more accurately a storage -- unit boundary). The front end checks that component clauses respect --- this rule, and the back end ensures that record packing does not +-- this rule, and the backend ensures that record packing does not -- violate this rule. Currently the flag is set only for packed arrays -- longer than 64 bits where the component size is not a power of 2. @@ -3175,7 +3175,7 @@ -- Comes_From_Source set, and also transitively for entities associated -- with such components (e.g. their types). It is true for all entities -- in Debug_Generated_Code mode (-gnatD switch). This is the flag that --- the back end should check to determine whether or not to generate +-- the backend should check to determine whether or not to generate -- debugging information for an entity. Note that callers should always -- use Sem_Util.Set_Debug_Info_Needed, rather than Set_Needs_Debug_Info, -- so that the flag is set properly on subsidiary entities. @@ -3283,7 +3283,7 @@ -- Next_Inlined_Subprogram (Node12) -- Defined in subprograms. Used to chain inlined subprograms used in -- the current compilation, in the order in which they must be compiled --- by Gigi to insure that all inlinings are performed. +-- by the backend to insure that all inlinings are performed. -- Next_Literal (synthesized) -- Applies to enumeration literals, returns the next literal, or @@ -3339,10 +3339,10 @@ -- there are default discriminants, and also for the 'Size value). -- No_Strict_Aliasing (Flag136) [base type only] --- Defined in access types. Set to direct the back end to avoid any +-- Defined in access types. Set to direct the backend to avoid any -- optimizations based on an assumption about the aliasing status of -- objects designated by the access type. For the case of the gcc --- back end, the effect is as though all references to objects of +-- backend, the effect is as though all references to objects of -- the type were compiled with -fno-strict-aliasing. This flag is -- set if an unchecked conversion with the access type as a target -- type occurs in the same source unit as the declaration of the @@ -3372,7 +3372,7 @@ -- types, it is cheaper to do the copy. -- OK_To_Reorder_Components (Flag239) [base type only] --- Defined in record types. Set if the back end is permitted to reorder +-- Defined in record types. Set if the backend is permitted to reorder -- the components. If not set, the record must be layed out in the order -- in which the components are declared textually. Currently this flag -- can only be set by debug switches. @@ -3413,9 +3413,9 @@ -- In base tagged types: -- When the component is inherited in a record extension, it points -- to the original component (the entity of the ancestor component --- which is not itself inherited) otherwise it points to itself. --- Gigi uses this attribute to implement the automatic dereference in --- the extension and to apply the transformation: +-- which is not itself inherited) otherwise it points to itself. The +-- backend uses this attribute to implement the automatic dereference +-- in the extension and to apply the transformation: -- -- Rec_Ext.Comp -> Rec_Ext.Parent. ... .Parent.Comp -- @@ -3999,7 +3999,7 @@ -- be set as a result of situations (such as address overlays) where -- the front end wishes to force volatile handling to inhibit aliasing -- optimization which might be legally ok, but is undesirable. Note --- that the back end always tests this flag rather than Is_Volatile. +-- that the backend always tests this flag rather than Is_Volatile. -- The front end tests Is_Volatile if it is concerned with legality -- checks associated with declared volatile variables, but if the test -- is for the purposes of suppressing optimizations, then the front @@ -4029,7 +4029,7 @@ -- the full view of a private type T is derived from another private type -- with discriminants Td, the full view of T is also private, and there -- is no way to attach to it a further full view that would convey the --- structure of T to the back end. The Underlying_Full_ View is an +-- structure of T to the backend. The Underlying_Full_ View is an -- attribute of the full view that is a subtype of Td with the same -- constraint as the declaration for T. The declaration for this subtype -- is built at the point of the declaration of T, either as completion, @@ -4222,7 +4222,7 @@ -- In addition, we define the kind E_Allocator_Type to label allocators. -- This is because special resolution rules apply to this construct. -- Eventually the constructs are labeled with the access type imposed by --- the context. Gigi should never see types with this Ekind. +-- the context. The backend should never see types with this Ekind. -- Similarly, the type E_Access_Attribute_Type is used as the initial kind -- associated with an access attribute. After resolution a specific access @@ -4409,8 +4409,8 @@ -- objects using 'Reference. This is needed because special resolution -- rules apply to these constructs. On the resolution pass, this type -- is almost always replaced by the actual access type, but if the - -- context does not provide one Gigi can handle the Allocator_Type - -- itself as long as it has been frozen. + -- context does not provide one, the backend will see Allocator_Type + -- itself (which will already have been frozen). E_General_Access_Type, -- An access type created by an access type declaration with the all Index: gnat1drv.adb =================================================================== --- gnat1drv.adb (revision 211445) +++ gnat1drv.adb (working copy) @@ -81,6 +81,10 @@ with System.Assertions; +-------------- +-- Gnat1drv -- +-------------- + procedure Gnat1drv is Main_Unit_Node : Node_Id; -- Compilation unit node for main unit @@ -763,6 +767,7 @@ Scan_Compiler_Arguments; Osint.Add_Default_Search_Dirs; + Atree.Initialize; Nlists.Initialize; Sinput.Initialize; Sem.Initialize; @@ -785,7 +790,7 @@ -- Acquire target parameters from system.ads (source of package System) - declare + Targparm_Acquire : declare use Sinput; S : Source_File_Index; @@ -812,13 +817,18 @@ Targparm.Get_Target_Parameters (System_Text => Source_Text (S), Source_First => Source_First (S), - Source_Last => Source_Last (S)); + Source_Last => Source_Last (S), + Make_Id => Back_End.Make_Id'Unrestricted_Access, + Make_SC => Back_End.Make_SC'Unrestricted_Access, + Set_RND => Back_End.Set_RND'Unrestricted_Access); -- Acquire configuration pragma information from Targparm Restrict.Restrictions := Targparm.Restrictions_On_Target; - end; + end Targparm_Acquire; + -- Perform various adjustments and settings of global switches + Adjust_Global_Switches; -- Output copyright notice if full list mode unless we have a list Index: targparm.adb =================================================================== --- targparm.adb (revision 211445) +++ targparm.adb (working copy) @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2013, Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2014, 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- -- @@ -160,7 +160,11 @@ -- Version which reads in system.ads - procedure Get_Target_Parameters is + procedure Get_Target_Parameters + (Make_Id : Make_Id_Type := null; + Make_SC : Make_SC_Type := null; + Set_RND : Set_RND_Type := null) + is Text : Source_Buffer_Ptr; Hi : Source_Ptr; @@ -183,7 +187,10 @@ Get_Target_Parameters (System_Text => Text, Source_First => 0, - Source_Last => Hi); + Source_Last => Hi, + Make_Id => Make_Id, + Make_SC => Make_SC, + Set_RND => Set_RND); end Get_Target_Parameters; -- Version where caller supplies system.ads text @@ -191,7 +198,10 @@ procedure Get_Target_Parameters (System_Text : Source_Buffer_Ptr; Source_First : Source_Ptr; - Source_Last : Source_Ptr) + Source_Last : Source_Ptr; + Make_Id : Make_Id_Type := null; + Make_SC : Make_SC_Type := null; + Set_RND : Set_RND_Type := null) is P : Source_Ptr; -- Scans source buffer containing source of system.ads @@ -341,6 +351,61 @@ null; end loop Ploop; + -- No_Dependence case + + if System_Text (P .. P + 16) = "No_Dependence => " then + P := P + 17; + + -- Skip this processing (and simply ignore No_Dependence lines) + -- if caller did not supply the three subprograms we need to + -- process these lines. + + if Make_Id = null then + goto Line_Loop_Continue; + end if; + + -- We have scanned out "pragma Restrictions (No_Dependence =>" + + declare + Unit : Node_Id; + Id : Node_Id; + Start : Source_Ptr; + + begin + Unit := Empty; + + -- Loop through components of name, building up Unit + + loop + Start := P; + while System_Text (P) /= '.' + and then + System_Text (P) /= ')' + loop + P := P + 1; + end loop; + + Id := Make_Id (System_Text (Start .. P - 1)); + + -- If first name, just capture the identifier + + if Unit = Empty then + Unit := Id; + else + Unit := Make_SC (Unit, Id); + end if; + + exit when System_Text (P) = ')'; + P := P + 1; + end loop; + + Set_RND (Unit); + goto Line_Loop_Continue; + end; + end if; + + -- Here if unrecognizable restrictions pragma form + Set_Standard_Error; Write_Line ("fatal error: system.ads is incorrectly formatted"); Index: targparm.ads =================================================================== --- targparm.ads (revision 211445) +++ targparm.ads (working copy) @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1999-2013, Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2014, 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- -- @@ -612,17 +612,42 @@ -- These subprograms are used to initialize the target parameter values -- from the system.ads file. Note that this is only done once, so if more -- than one call is made to either routine, the second and subsequent - -- calls are ignored. + -- calls are ignored. It also reads restriction pragmas from system.ads + -- and records them, though as further detailed below, the caller has some + -- control over the handling of No_Dependence restrictions. + type Make_Id_Type is access function (Str : Text_Buffer) return Node_Id; + -- Parameter type for Get_Target_Parameters for function that creates an + -- identifier node with Sloc value System_Location and given string as the + -- Chars value. + + type Make_SC_Type is access function (Pre, Sel : Node_Id) return Node_Id; + -- Parameter type for Get_Target_Parameters for function that creates a + -- selected component with Sloc value System_Location and given Prefix + -- (Pre) and Selector (Sel) values. + + type Set_RND_Type is access procedure (Unit : Node_Id); + -- Parameter type for Get_Target_Parameters that records a Restriction + -- No_Dependence for the given unit (identifier or selected component). + procedure Get_Target_Parameters (System_Text : Source_Buffer_Ptr; Source_First : Source_Ptr; - Source_Last : Source_Ptr); + Source_Last : Source_Ptr; + Make_Id : Make_Id_Type := null; + Make_SC : Make_SC_Type := null; + Set_RND : Set_RND_Type := null); -- Called at the start of execution to obtain target parameters from -- the source of package System. The parameters provide the source -- text to be scanned (in System_Text (Source_First .. Source_Last)). + -- if the three subprograms are left at their default value of null, + -- Get_Target_Parameters will ignore pragma Restrictions No_Dependence + -- lines, otherwise it will use these three subprograms to record them. - procedure Get_Target_Parameters; + procedure Get_Target_Parameters + (Make_Id : Make_Id_Type := null; + Make_SC : Make_SC_Type := null; + Set_RND : Set_RND_Type := null); -- This version reads in system.ads using Osint. The idea is that the -- caller uses the first version if they have to read system.ads anyway -- (e.g. the compiler) and uses this simpler interface if system.ads is Index: back_end.adb =================================================================== --- back_end.adb (revision 211445) +++ back_end.adb (working copy) @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2013, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, 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- -- @@ -24,6 +24,7 @@ ------------------------------------------------------------------------------ with Atree; use Atree; +with Csets; use Csets; with Debug; use Debug; with Elists; use Elists; with Errout; use Errout; @@ -33,13 +34,14 @@ with Osint.C; use Osint.C; with Namet; use Namet; with Nlists; use Nlists; +with Nmake; use Nmake; +with Restrict; use Restrict; with Stand; use Stand; with Sinput; use Sinput; with Stringt; use Stringt; with Switch; use Switch; with Switch.C; use Switch.C; with System; use System; -with Types; use Types; with System.OS_Lib; use System.OS_Lib; @@ -163,6 +165,15 @@ gigi_operating_mode => Mode); end Call_Back_End; + ------------------------------- + -- Gen_Or_Update_Object_File -- + ------------------------------- + + procedure Gen_Or_Update_Object_File is + begin + null; + end Gen_Or_Update_Object_File; + ------------- -- Len_Arg -- ------------- @@ -178,6 +189,36 @@ raise Program_Error; end Len_Arg; + ------------- + -- Make_Id -- + ------------- + + function Make_Id (Str : Text_Buffer) return Node_Id is + begin + Name_Len := 0; + + for J in Str'Range loop + Name_Len := Name_Len + 1; + Name_Buffer (Name_Len) := Fold_Lower (Str (J)); + end loop; + + return + Make_Identifier (System_Location, + Chars => Name_Find); + end Make_Id; + + ------------- + -- Make_SC -- + ------------- + + function Make_SC (Pre, Sel : Node_Id) return Node_Id is + begin + return + Make_Selected_Component (System_Location, + Prefix => Pre, + Selector_Name => Sel); + end Make_SC; + ----------------------------- -- Scan_Compiler_Arguments -- ----------------------------- @@ -342,13 +383,13 @@ end loop; end Scan_Compiler_Arguments; - ------------------------------- - -- Gen_Or_Update_Object_File -- - ------------------------------- + ------------- + -- Set_RND -- + ------------- - procedure Gen_Or_Update_Object_File is + procedure Set_RND (Unit : Node_Id) is begin - null; - end Gen_Or_Update_Object_File; + Restrict.Set_Restriction_No_Dependence (Unit, Warn => False); + end Set_RND; end Back_End; Index: back_end.ads =================================================================== --- back_end.ads (revision 211445) +++ back_end.ads (working copy) @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2013, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, 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- -- @@ -24,7 +24,11 @@ ------------------------------------------------------------------------------ -- Call the back end with all the information needed +-- Note: there are multiple bodies/variants of this package, so do not +-- modify this spec without coordination. +with Types; use Types; + package Back_End is type Back_End_Mode_Type is ( @@ -82,4 +86,13 @@ -- object file's timestamp is correct when compared with the corresponding -- ali file by gnatmake. + function Make_Id (Str : Text_Buffer) return Node_Id; + function Make_SC (Pre, Sel : Node_Id) return Node_Id; + procedure Set_RND (Unit : Node_Id); + -- Subprograms for call to Get_Target_Parameters, see spec of package + -- Targparm for full description of these three subprograms. These are + -- parked in this package because they are have to be at the top level + -- because of accessibility issues, and Gnat1drv, which is where they + -- are used, is a subprogram. + end Back_End;