Commit 5884c232 by Arnaud Charlet

[multiple changes]

2013-07-08  Robert Dewar  <dewar@adacore.com>

	* rtsfind.adb: Minor comment fix.

2013-07-08  Hristian Kirtchev  <kirtchev@adacore.com>

	* sem_ch4.adb (Check_Ghost_Subprogram_Call): Do not check the placement
	of a Ghost function call when the enclosing context is being
	preanalyzed.

2013-07-08  Ed Schonberg  <schonberg@adacore.com>

	* exp_ch6.adb (Expand_Inlined_Call, Process_Formals): If the
	expression in a return statement is a numeric literal, qualify
	it with the return type for proper resolution.

From-SVN: r200772
parent 2cbac6c6
2013-07-08 Robert Dewar <dewar@adacore.com> 2013-07-08 Robert Dewar <dewar@adacore.com>
* rtsfind.adb: Minor comment fix.
2013-07-08 Hristian Kirtchev <kirtchev@adacore.com>
* sem_ch4.adb (Check_Ghost_Subprogram_Call): Do not check the placement
of a Ghost function call when the enclosing context is being
preanalyzed.
2013-07-08 Ed Schonberg <schonberg@adacore.com>
* exp_ch6.adb (Expand_Inlined_Call, Process_Formals): If the
expression in a return statement is a numeric literal, qualify
it with the return type for proper resolution.
2013-07-08 Robert Dewar <dewar@adacore.com>
* sem.ads: Minor comment updates. * sem.ads: Minor comment updates.
* s-restri.ads, exp_ch6.adb, lib-load.ads, exp_ch3.adb, sem_ch10.adb: * s-restri.ads, exp_ch6.adb, lib-load.ads, exp_ch3.adb, sem_ch10.adb:
Minor reformatting. Minor reformatting.
......
...@@ -4680,7 +4680,8 @@ package body Exp_Ch6 is ...@@ -4680,7 +4680,8 @@ package body Exp_Ch6 is
function Process_Formals (N : Node_Id) return Traverse_Result; function Process_Formals (N : Node_Id) return Traverse_Result;
-- Replace occurrence of a formal with the corresponding actual, or the -- Replace occurrence of a formal with the corresponding actual, or the
-- thunk generated for it. -- thunk generated for it. Replace a return statement with an assignment
-- to the target of the call, with appropriate conversions if needed.
function Process_Sloc (Nod : Node_Id) return Traverse_Result; function Process_Sloc (Nod : Node_Id) return Traverse_Result;
-- If the call being expanded is that of an internal subprogram, set the -- If the call being expanded is that of an internal subprogram, set the
...@@ -4808,9 +4809,14 @@ package body Exp_Ch6 is ...@@ -4808,9 +4809,14 @@ package body Exp_Ch6 is
-- errors, e.g. when the expression is a numeric literal and -- errors, e.g. when the expression is a numeric literal and
-- the context is private. If the expression is an aggregate, -- the context is private. If the expression is an aggregate,
-- use a qualified expression, because an aggregate is not a -- use a qualified expression, because an aggregate is not a
-- legal argument of a conversion. -- legal argument of a conversion. Ditto for numeric literals,
-- which must be resolved to a specific type.
if Nkind_In (Expression (N), N_Aggregate, N_Null) then if Nkind_In (Expression (N), N_Aggregate,
N_Null,
N_Real_Literal,
N_Integer_Literal)
then
Ret := Ret :=
Make_Qualified_Expression (Sloc (N), Make_Qualified_Expression (Sloc (N),
Subtype_Mark => New_Occurrence_Of (Ret_Type, Sloc (N)), Subtype_Mark => New_Occurrence_Of (Ret_Type, Sloc (N)),
......
...@@ -839,8 +839,8 @@ package body Rtsfind is ...@@ -839,8 +839,8 @@ package body Rtsfind is
return; return;
end if; end if;
-- Add the with_clause, if not already in the context of the current -- Add the with_clause, if we have not already added an implicit with
-- compilation unit. -- for this unit to the current compilation unit.
declare declare
LibUnit : constant Node_Id := Unit (Cunit (U.Unum)); LibUnit : constant Node_Id := Unit (Cunit (U.Unum));
......
...@@ -881,12 +881,24 @@ package body Sem_Ch4 is ...@@ -881,12 +881,24 @@ package body Sem_Ch4 is
S : Entity_Id; S : Entity_Id;
begin begin
-- Do not perform the check while preanalyzing the enclosing context
-- because the call is not in its final place. Premature attempts to
-- verify the placement lead to bogus errors.
if In_Spec_Expression then
return;
-- The ghost subprogram appears inside an assertion expression -- The ghost subprogram appears inside an assertion expression
-- which is one of the allowed cases.
if In_Assertion_Expression (N) then elsif In_Assertion_Expression (N) then
return; return;
-- Otherwise see if it inside another ghost subprogram
else else
-- Loop to climb scopes
S := Current_Scope; S := Current_Scope;
while Present (S) and then S /= Standard_Standard loop while Present (S) and then S /= Standard_Standard loop
...@@ -898,11 +910,14 @@ package body Sem_Ch4 is ...@@ -898,11 +910,14 @@ package body Sem_Ch4 is
S := Scope (S); S := Scope (S);
end loop; end loop;
end if;
-- If we fall through the loop it was not within another
-- ghost subprogram, so we have bad placement.
Error_Msg_N Error_Msg_N
("call to ghost subprogram must appear in assertion expression or " ("call to ghost subprogram must appear in assertion expression "
& "another ghost subprogram", N); & "or another ghost subprogram", N);
end if;
end Check_Ghost_Subprogram_Call; end Check_Ghost_Subprogram_Call;
-------------------------------------------------- --------------------------------------------------
......
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