+2016-07-04 Justin Squirek <squirek@adacore.com>
+
+ * sem_prag.adb (Analyze_Unmodified_Or_Unused and
+ Analyze_Unreferenced_Or_Unused): Change warning message to be
+ more clear about pragma duplicates.
+
+2016-07-04 Yannick Moy <moy@adacore.com>
+
+ * sinput-l.adb (Create_Instantiation_Source): Set component
+ Inlined_Call for inherited pragma case.
+ * sinput.adb, sinput.ads (Instantiation): Return component
+ Inlined_Call for inherited pragma case.
+
+2016-07-04 Bob Duff <duff@adacore.com>
+
+ * sem_type.adb (Remove_Conversions): Protect
+ the call to Left_Opnd by checking for Nkind in N_Unary_Op --
+ unary operators do not have a left operand.
+
+2016-07-04 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch3.adb (Analyze_Object_Declaration): A declaration of a
+ constant in a protected operation may be a homonym of a private
+ component of the enclosing protected type. This declaration hides
+ the component renaming constructed within the protected operation.
+
2016-07-04 Bob Duff <duff@adacore.com>
* xref_lib.adb (Parse_X_Filename, Parse_Identifier_Info): Ignore
N_Package_Renaming_Declaration
and then not Comes_From_Source (Prev_Entity)
and then
- Is_Generic_Instance (Renamed_Entity (Prev_Entity))))
+ Is_Generic_Instance (Renamed_Entity (Prev_Entity)))
+
+ -- The entity may be a homonym of a private component of the
+ -- enclosing protected object, for which we create a local
+ -- renaming declaration. The declaration is legal, even
+ -- if useless when it just captures that component.
+
+ or else
+ (Ekind (Scope (Current_Scope)) = E_Protected_Type
+ and then Nkind (Parent (Prev_Entity)) =
+ N_Object_Renaming_Declaration))
then
Prev_Entity := Empty;
end if;
elsif Has_Pragma_Unmodified (Arg_Id) then
if Has_Pragma_Unused (Arg_Id) then
Error_Msg_NE
- ("??pragma Unused given for &!", Arg_Expr, Arg_Id);
+ ("??pragma Unused already given for &!", Arg_Expr,
+ Arg_Id);
else
Error_Msg_NE
- ("??pragma Unmodified given for &!", Arg_Expr, Arg_Id);
+ ("??pragma Unmodified already given for &!", Arg_Expr,
+ Arg_Id);
end if;
-- Otherwise the pragma referenced an illegal entity
if Has_Pragma_Unreferenced (Arg_Id) then
if Has_Pragma_Unused (Arg_Id) then
Error_Msg_NE
- ("??pragma Unused given for &!", Arg_Expr, Arg_Id);
+ ("??pragma Unused already given for &!", Arg_Expr,
+ Arg_Id);
else
Error_Msg_NE
- ("??pragma Unreferenced given for &!", Arg_Expr,
- Arg_Id);
+ ("??pragma Unreferenced already given for &!",
+ Arg_Expr, Arg_Id);
end if;
-- Apply Unreferenced to the entity
if Nkind (Act1) in N_Op
and then Is_Overloaded (Act1)
- and then Nkind_In (Left_Opnd (Act1), N_Integer_Literal,
- N_Real_Literal)
+ and then (Nkind (Act1) in N_Unary_Op
+ or else Nkind_In
+ (Left_Opnd (Act1), N_Integer_Literal,
+ N_Real_Literal))
and then Nkind_In (Right_Opnd (Act1), N_Integer_Literal,
N_Real_Literal)
and then Has_Compatible_Type (Act1, Standard_Boolean)
Snew.Template := Xold;
-- For a genuine generic instantiation, assign new instance id. For
- -- inlined bodies, we retain that of the template, but we save the
- -- call location. For inherited pragmas, we simply retain that of
- -- the template.
+ -- inlined bodies or inherited pragmas, we retain that of the
+ -- template, but we save the call location.
- if Inlined_Body then
+ if Inlined_Body or Inherited_Pragma then
Snew.Inlined_Call := Sloc (Inst_Node);
- elsif Inherited_Pragma then
- null;
-
else
-- If the spec has been instantiated already, and we are now
-- creating the instance source for the corresponding body now,
function Instantiation (S : SFI) return Source_Ptr is
SIE : Source_File_Record renames Source_File.Table (S);
begin
- if SIE.Inlined_Body then
+ if SIE.Inlined_Body or SIE.Inherited_Pragma then
return SIE.Inlined_Call;
else
return Instances.Table (SIE.Instance);
-- Inlined_Call : Source_Ptr;
-- Source file location of the subprogram call if this source file entry
- -- represents an inlined body. Set to No_Location otherwise.
- -- This field is read-only for clients.
+ -- represents an inlined body or an inherited pragma. Set to No_Location
+ -- otherwise. This field is read-only for clients.
-- Inlined_Body : Boolean;
-- This can only be set True if Instantiation has a value other than
-- No_Location. If true it indicates that the instantiation is actually
-- an instance of an inlined body.
- -- ??? Redundant, always equal to (Inlined_Call /= No_Location)
-- Inherited_Pragma : Boolean;
-- This can only be set True if Instantiation has a value other than
function Instantiation (S : SFI) return Source_Ptr;
-- For a source file entry that represents an inlined body, source location
- -- of the inlined call. Otherwise, for a source file entry that represents
- -- a generic instantiation, source location of the instantiation. Returns
- -- No_Location in all other cases.
+ -- of the inlined call. For a source file entry that represents an
+ -- inherited pragma, source location of the declaration to which the
+ -- overriding subprogram for the inherited pragma is attached. Otherwise,
+ -- for a source file entry that represents a generic instantiation, source
+ -- location of the instantiation. Returns No_Location in all other cases.
-----------------
-- Global Data --