Commit 6a04272a by Thomas Quinot Committed by Arnaud Charlet

sem_ch13.adb (Analyze_Aspect_Specifications): For a Pre/Post aspect that applies…

sem_ch13.adb (Analyze_Aspect_Specifications): For a Pre/Post aspect that applies to a library subprogram...

2013-01-02  Thomas Quinot  <quinot@adacore.com>

	* sem_ch13.adb (Analyze_Aspect_Specifications): For a Pre/Post
	aspect that applies to a library subprogram, prepend corresponding
	pragma to the Pragmas_After list, in order for split AND THEN
	sections to be processed in the expected order.

From-SVN: r194783
parent c5d00db0
2013-01-02 Thomas Quinot <quinot@adacore.com> 2013-01-02 Thomas Quinot <quinot@adacore.com>
* sem_ch13.adb (Analyze_Aspect_Specifications): For a Pre/Post
aspect that applies to a library subprogram, prepend corresponding
pragma to the Pragmas_After list, in order for split AND THEN
sections to be processed in the expected order.
2013-01-02 Thomas Quinot <quinot@adacore.com>
* exp_prag.adb (Expand_Pragma_Check): The statements generated * exp_prag.adb (Expand_Pragma_Check): The statements generated
for the pragma must have the sloc of the pragma, not the for the pragma must have the sloc of the pragma, not the
sloc of the condition, otherwise this creates anomalies in the sloc of the condition, otherwise this creates anomalies in the
......
...@@ -1602,10 +1602,21 @@ package body Sem_Ch13 is ...@@ -1602,10 +1602,21 @@ package body Sem_Ch13 is
-- with delay of visibility for the expression analysis. -- with delay of visibility for the expression analysis.
-- If the entity is a library-level subprogram, the pre/ -- If the entity is a library-level subprogram, the pre/
-- postconditions must be treated as late pragmas. -- postconditions must be treated as late pragmas. Note
-- that they must be prepended, not appended, to the list,
-- so that split AND THEN sections are processed in the
-- correct order.
if Nkind (Parent (N)) = N_Compilation_Unit then if Nkind (Parent (N)) = N_Compilation_Unit then
Add_Global_Declaration (Aitem); declare
Aux : constant Node_Id := Aux_Decls_Node (Parent (N));
begin
if No (Pragmas_After (Aux)) then
Set_Pragmas_After (Aux, New_List);
end if;
Prepend (Aitem, Pragmas_After (Aux));
end;
-- If it is a subprogram body, add pragmas to list of -- If it is a subprogram body, add pragmas to list of
-- declarations in body. -- declarations in body.
...@@ -1930,7 +1941,7 @@ package body Sem_Ch13 is ...@@ -1930,7 +1941,7 @@ package body Sem_Ch13 is
else else
if No (Pragmas_After (Aux)) then if No (Pragmas_After (Aux)) then
Set_Pragmas_After (Aux, Empty_List); Set_Pragmas_After (Aux, New_List);
end if; end if;
Append (Aitem, Pragmas_After (Aux)); Append (Aitem, Pragmas_After (Aux));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment