+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
-- with delay of visibility for the expression analysis.
-- 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
- 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
-- declarations in body.
else
if No (Pragmas_After (Aux)) then
- Set_Pragmas_After (Aux, Empty_List);
+ Set_Pragmas_After (Aux, New_List);
end if;
Append (Aitem, Pragmas_After (Aux));