[multiple changes]
2011-08-29 Thomas Quinot <quinot@adacore.com> * get_scos.adb: Ignore chaining indicators not currently supported by Ada. 2011-08-29 Arnaud Charlet <charlet@adacore.com> * system.ads: Minor editing. 2011-08-29 Arnaud Charlet <charlet@adacore.com> * bindgen.adb (Gen_Elab_Calls): Generate calls to subp'Elab_Subp_Body in CodePeer mode. * sem_attr.ads, sem_attr.adb, exp_Attr.adb, sem_ch6.adb: Add handling of Attribute_Elab_Subp_Body. * snames.ads-tmpl (Attribute_Elab_Subp_Body, Name_Elab_Subp_Body): New. * sem_util.adb: Update comments. From-SVN: r178165
This commit is contained in:
parent
828d4cf0c9
commit
0bfc9a64c3
|
@ -1,3 +1,21 @@
|
|||
2011-08-29 Thomas Quinot <quinot@adacore.com>
|
||||
|
||||
* get_scos.adb: Ignore chaining indicators not currently supported
|
||||
by Ada.
|
||||
|
||||
2011-08-29 Arnaud Charlet <charlet@adacore.com>
|
||||
|
||||
* system.ads: Minor editing.
|
||||
|
||||
2011-08-29 Arnaud Charlet <charlet@adacore.com>
|
||||
|
||||
* bindgen.adb (Gen_Elab_Calls): Generate calls to subp'Elab_Subp_Body in
|
||||
CodePeer mode.
|
||||
* sem_attr.ads, sem_attr.adb, exp_Attr.adb, sem_ch6.adb: Add handling of
|
||||
Attribute_Elab_Subp_Body.
|
||||
* snames.ads-tmpl (Attribute_Elab_Subp_Body, Name_Elab_Subp_Body): New.
|
||||
* sem_util.adb: Update comments.
|
||||
|
||||
2011-08-29 Thomas Quinot <quinot@adacore.com>
|
||||
|
||||
* par_sco.adb, scos.adb, scos.ads, put_scos.adb, get_scos.adb: Record
|
||||
|
|
|
@ -984,7 +984,12 @@ package body Bindgen is
|
|||
|
||||
-- Case of no elaboration code
|
||||
|
||||
elsif U.No_Elab then
|
||||
elsif U.No_Elab
|
||||
and then (not CodePeer_Mode
|
||||
or else U.Utype = Is_Spec
|
||||
or else U.Utype = Is_Spec_Only
|
||||
or else U.Unit_Kind /= 's')
|
||||
then
|
||||
|
||||
-- The only case in which we have to do something is if this
|
||||
-- is a body, with a separate spec, where the separate spec
|
||||
|
@ -1019,10 +1024,7 @@ package body Bindgen is
|
|||
-- The uname_E increment is skipped if this is a separate spec,
|
||||
-- since it will be done when we process the body.
|
||||
|
||||
-- Ignore subprograms in CodePeer mode, since no useful
|
||||
-- elaboration subprogram is needed by CodePeer.
|
||||
|
||||
elsif U.Unit_Kind /= 's' or else not CodePeer_Mode then
|
||||
else
|
||||
Check_Elab_Flag :=
|
||||
not CodePeer_Mode
|
||||
and then (Force_Checking_Of_Elaboration_Flags
|
||||
|
@ -1055,12 +1057,18 @@ package body Bindgen is
|
|||
if Name_Buffer (Name_Len) = 's' then
|
||||
Name_Buffer (Name_Len - 1 .. Name_Len + 8) :=
|
||||
"'elab_spec";
|
||||
Name_Len := Name_Len + 8;
|
||||
|
||||
elsif U.Unit_Kind = 's' and CodePeer_Mode then
|
||||
Name_Buffer (Name_Len - 1 .. Name_Len + 13) :=
|
||||
"'elab_subp_body";
|
||||
Name_Len := Name_Len + 13;
|
||||
|
||||
else
|
||||
Name_Buffer (Name_Len - 1 .. Name_Len + 8) :=
|
||||
"'elab_body";
|
||||
Name_Len := Name_Len + 8;
|
||||
end if;
|
||||
|
||||
Name_Len := Name_Len + 8;
|
||||
end if;
|
||||
|
||||
Set_Casing (U.Icasing);
|
||||
|
|
|
@ -1813,13 +1813,14 @@ package body Exp_Attr is
|
|||
-- and then the Elab_Body/Spec attribute is replaced by a reference
|
||||
-- to this defining identifier.
|
||||
|
||||
when Attribute_Elab_Body |
|
||||
Attribute_Elab_Spec =>
|
||||
when Attribute_Elab_Body |
|
||||
Attribute_Elab_Subp_Body |
|
||||
Attribute_Elab_Spec =>
|
||||
|
||||
-- Leave attribute unexpanded in CodePeer mode: the gnat2scil
|
||||
-- back-end knows how to handle this attribute directly.
|
||||
|
||||
if CodePeer_Mode then
|
||||
if CodePeer_Mode or else Id = Attribute_Elab_Subp_Body then
|
||||
return;
|
||||
end if;
|
||||
|
||||
|
|
|
@ -387,6 +387,18 @@ begin
|
|||
elsif C = ' ' then
|
||||
Skip_Spaces;
|
||||
|
||||
elsif C = 'T' or else C = 'F' then
|
||||
|
||||
-- Chaining indicator: skip for now???
|
||||
|
||||
declare
|
||||
Loc1, Loc2 : Source_Location;
|
||||
pragma Unreferenced (Loc1, Loc2);
|
||||
begin
|
||||
Skipc;
|
||||
Get_Source_Location_Range (Loc1, Loc2);
|
||||
end;
|
||||
|
||||
else
|
||||
raise Data_Error;
|
||||
end if;
|
||||
|
|
|
@ -1945,6 +1945,8 @@ package body Sem_Attr is
|
|||
and then
|
||||
Aname /= Name_Elab_Spec
|
||||
and then
|
||||
Aname /= Name_Elab_Subp_Body
|
||||
and then
|
||||
Aname /= Name_UET_Address
|
||||
and then
|
||||
Aname /= Name_Enabled
|
||||
|
@ -3014,7 +3016,10 @@ package body Sem_Attr is
|
|||
|
||||
-- Also handles processing for Elab_Spec
|
||||
|
||||
when Attribute_Elab_Body | Attribute_Elab_Spec =>
|
||||
when Attribute_Elab_Body |
|
||||
Attribute_Elab_Spec |
|
||||
Attribute_Elab_Subp_Body =>
|
||||
|
||||
Check_E0;
|
||||
Check_Unit_Name (P);
|
||||
Set_Etype (N, Standard_Void_Type);
|
||||
|
@ -7712,6 +7717,7 @@ package body Sem_Attr is
|
|||
Attribute_Elaborated |
|
||||
Attribute_Elab_Body |
|
||||
Attribute_Elab_Spec |
|
||||
Attribute_Elab_Subp_Body |
|
||||
Attribute_Enabled |
|
||||
Attribute_External_Tag |
|
||||
Attribute_Fast_Math |
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
-- --
|
||||
-- S p e c --
|
||||
-- --
|
||||
-- Copyright (C) 1992-2010, Free Software Foundation, Inc. --
|
||||
-- Copyright (C) 1992-2011, 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- --
|
||||
|
@ -172,6 +172,17 @@ package Sem_Attr is
|
|||
-- Ada code, e.g. if it is necessary to do selective reelaboration to
|
||||
-- fix some error.
|
||||
|
||||
--------------------
|
||||
-- Elab_Subp_Body --
|
||||
--------------------
|
||||
|
||||
Attribute_Elab_Subp_Body => True,
|
||||
-- This attribute can only be applied to a library level subprogram
|
||||
-- name and is only relevant in CodePeer mode. It returns the entity
|
||||
-- for the corresponding elaboration procedure for elaborating the body
|
||||
-- of the referenced subprogram unit. This is used in the main generated
|
||||
-- elaboration procedure by the binder in CodePeer mode only.
|
||||
|
||||
---------------
|
||||
-- Elab_Spec --
|
||||
---------------
|
||||
|
|
|
@ -1156,11 +1156,12 @@ package body Sem_Ch6 is
|
|||
end loop;
|
||||
end if;
|
||||
|
||||
-- Special processing for Elab_Spec and Elab_Body calls
|
||||
-- Special processing for Elab_Spec, Elab_Body and Elab_Subp_Body calls
|
||||
|
||||
if Nkind (P) = N_Attribute_Reference
|
||||
and then (Attribute_Name (P) = Name_Elab_Spec
|
||||
or else Attribute_Name (P) = Name_Elab_Body)
|
||||
or else Attribute_Name (P) = Name_Elab_Body
|
||||
or else Attribute_Name (P) = Name_Elab_Subp_Body)
|
||||
then
|
||||
if Present (Actuals) then
|
||||
Error_Msg_N
|
||||
|
|
|
@ -7584,9 +7584,9 @@ package body Sem_Util is
|
|||
|
||||
begin
|
||||
-- Verify that prefix is analyzed and has the proper form. Note that
|
||||
-- the attributes Elab_Spec, Elab_Body, and UET_Address, which also
|
||||
-- produce the address of an entity, do not analyze their prefix
|
||||
-- because they denote entities that are not necessarily visible.
|
||||
-- the attributes Elab_Spec, Elab_Body, Elab_Subp_Body and UET_Address,
|
||||
-- which also produce the address of an entity, do not analyze their
|
||||
-- prefix because they denote entities that are not necessarily visible.
|
||||
-- Neither of them can apply to a protected type.
|
||||
|
||||
return Ada_Version >= Ada_2005
|
||||
|
|
|
@ -882,6 +882,7 @@ package Snames is
|
|||
First_Entity_Attribute_Name : constant Name_Id := N + $;
|
||||
Name_Elab_Body : constant Name_Id := N + $; -- GNAT
|
||||
Name_Elab_Spec : constant Name_Id := N + $; -- GNAT
|
||||
Name_Elab_Subp_Body : constant Name_Id := N + $; -- GNAT
|
||||
Name_Storage_Pool : constant Name_Id := N + $;
|
||||
|
||||
-- These attributes are the ones that return types
|
||||
|
@ -1414,6 +1415,7 @@ package Snames is
|
|||
|
||||
Attribute_Elab_Body,
|
||||
Attribute_Elab_Spec,
|
||||
Attribute_Elab_Subp_Body,
|
||||
Attribute_Storage_Pool,
|
||||
|
||||
-- Type attributes
|
||||
|
|
|
@ -123,11 +123,11 @@ private
|
|||
-- System Implementation Parameters --
|
||||
--------------------------------------
|
||||
|
||||
-- These parameters provide information about the target that is used
|
||||
-- by the compiler. They are in the private part of System, where they
|
||||
-- can be accessed using the special circuitry in the Targparm unit
|
||||
-- whose source should be consulted for more detailed descriptions
|
||||
-- of the individual switch values.
|
||||
-- These parameters provide information about the target that is used by
|
||||
-- the compiler. They are in the private part of System, where they can be
|
||||
-- accessed using the special circuitry in the Targparm unit whose source
|
||||
-- should be consulted for more detailed descriptions of the individual
|
||||
-- switch values.
|
||||
|
||||
-- This version of system.ads is used only for building the compiler.
|
||||
-- We really ought to use the proper target system (i.e. the one that
|
||||
|
|
Loading…
Reference in New Issue