In Alfa mode, protected subprogram calls are not expanded, so that unresolved
calls must be allowed in a place where they should not be allowed in normal
mode.
Tested on x86_64-pc-linux-gnu, committed on trunk
2011-09-02 Yannick Moy <[email protected]>
* exp_ch6.adb (Is_Build_In_Place_Function_Call): in Alfa mode, allow
unresolved calls.
Index: exp_ch6.adb
===================================================================
--- exp_ch6.adb (revision 178412)
+++ exp_ch6.adb (working copy)
@@ -6084,7 +6084,7 @@
Build_Protected_Subprogram_Call (N,
Name => New_Occurrence_Of (Subp, Sloc (N)),
- Rec => Convert_Concurrent (Rec, Etype (Rec)),
+ Rec => Convert_Concurrent (Rec, Etype (Rec)),
External => True);
else
@@ -6797,6 +6797,16 @@
elsif Nkind (Name (Exp_Node)) = N_Explicit_Dereference then
Function_Id := Etype (Name (Exp_Node));
+
+ -- In Alfa mode, protected subprogram calls are not expanded, so that
+ -- we may end up with a call that is neither resolved to an entity,
+ -- nor an indirect call.
+
+ elsif Alfa_Mode then
+ return False;
+
+ else
+ raise Program_Error;
end if;
return Is_Build_In_Place_Function (Function_Id);