+2016-04-27 Bob Duff <duff@adacore.com>
+
+ * a-chtgop.adb (Adjust): Zero the tampering counts on assignment,
+ as is done for the other containers.
+
+2016-04-27 Hristian Kirtchev <kirtchev@adacore.com>
+
+ * ghost.adb (In_Subprogram_Body_Profile): New routine.
+ (Is_OK_Declaration): Treat an unanalyzed expression
+ function as an OK context. Treat a reference to a Ghost entity
+ as OK when it appears within the profile of a subprogram body.
+
+2016-04-27 Bob Duff <duff@adacore.com>
+
+ * errout.ads: Document the fact that informational messages
+ don't have to be warnings.
+ * errout.adb (Error_Msg_Internal): In statistics counts, deal
+ correctly with informational messages that are not warnings.
+ (Error_Msg_NEL): Remove useless 'if' aroung Set_Posted, because
+ Set_Posted already checks for errors and ignores others.
+ * erroutc.adb (Prescan_Message): Set Is_Serious_Error to False
+ if Is_Info_Msg; the previous code was assuming that Is_Info_Msg
+ implies Is_Warning_Msg.
+ * errutil.adb (Error_Msg): In statistics counts, deal correctly
+ with informational messages that are not warnings.
+
2016-04-27 Ed Schonberg <schonberg@adacore.com>
* sem_util.ads, sem_util.adb (Is_Null_Record_Type): New predicate
-- --
-- B o d y --
-- --
--- Copyright (C) 2004-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 2004-2016, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
Dst_Prev : Node_Access;
begin
+ -- If the counts are nonzero, execution is technically erroneous, but
+ -- it seems friendly to allow things like concurrent "=" on shared
+ -- constants.
+
+ Zero_Counts (HT.TC);
+
HT.Buckets := null;
HT.Length := 0;
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
end if;
end if;
- -- Bump appropriate statistics count
+ -- Bump appropriate statistics counts
- if Errors.Table (Cur_Msg).Warn or else Errors.Table (Cur_Msg).Style then
- Warnings_Detected := Warnings_Detected + 1;
+ if Errors.Table (Cur_Msg).Info then
+ Info_Messages := Info_Messages + 1;
+
+ -- Could be (usually is) both "info" and "warning"
- if Errors.Table (Cur_Msg).Info then
- Info_Messages := Info_Messages + 1;
+ if Errors.Table (Cur_Msg).Warn then
+ Warnings_Detected := Warnings_Detected + 1;
end if;
+ elsif Errors.Table (Cur_Msg).Warn
+ or else Errors.Table (Cur_Msg).Style
+ then
+ Warnings_Detected := Warnings_Detected + 1;
+
elsif Errors.Table (Cur_Msg).Check then
Check_Messages := Check_Messages + 1;
Last_Killed := True;
end if;
- if not (Is_Warning_Msg or Is_Style_Msg) then
- Set_Posted (N);
- end if;
+ Set_Posted (N);
end Error_Msg_NEL;
------------------
begin
if Is_Serious_Error then
-
-- We always set Error_Posted on the node itself
Set_Error_Posted (N);
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
-- "[restriction warning]" at the end of the warning message. For
-- continuations, use this on each continuation message.
- -- Insertion character ?$? (elaboration information messages)
+ -- Insertion character ?$? (elaboration informational messages)
-- Like ?, but if the flag Warn_Doc_Switch is True, adds the string
-- "[-gnatel]" at the end of the info message. This is used for the
-- messages generated by the switch -gnatel. For continuations, use
-- message. Style messages are also considered to be warnings, but
-- they do not get a tag.
- -- Insertion sequence "info: " (information message)
+ -- Insertion sequence "info: " (informational message)
-- This appears only at the start of the message (and not any of its
-- continuations, if any), and indicates that the message is an info
-- message. The message will be output with this prefix, and if there
-- are continuations that are not printed using the -gnatj switch they
- -- will also have this prefix.
+ -- will also have this prefix. Informational messages are usually also
+ -- warnings, but they don't have to be.
-- Insertion sequence "low: " or "medium: " or "high: " (check message)
-- This appears only at the start of the message (and not any of its
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
-- Deal with warning case
- if Errors.Table (E).Warn then
+ if Errors.Table (E).Warn or else Errors.Table (E).Info then
-- For info messages, prefix message with "info: "
end if;
end loop;
- if Is_Warning_Msg or Is_Style_Msg or Is_Check_Msg then
+ if Is_Info_Msg or Is_Warning_Msg or Is_Style_Msg or Is_Check_Msg then
Is_Serious_Error := False;
end if;
end Prescan_Message;
-- --
-- B o d y --
-- --
--- Copyright (C) 1991-2014, Free Software Foundation, Inc. --
+-- Copyright (C) 1991-2016, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
Errors.Table (Cur_Msg).Next := Next_Msg;
- -- Bump appropriate statistics count
+ -- Bump appropriate statistics counts
- if Errors.Table (Cur_Msg).Warn
+ if Errors.Table (Cur_Msg).Info then
+ Info_Messages := Info_Messages + 1;
+
+ -- Could be (usually is) both "info" and "warning"
+
+ if Errors.Table (Cur_Msg).Warn then
+ Warnings_Detected := Warnings_Detected + 1;
+ end if;
+
+ elsif Errors.Table (Cur_Msg).Warn
or else
Errors.Table (Cur_Msg).Style
then
Warnings_Detected := Warnings_Detected + 1;
- if Errors.Table (Cur_Msg).Info then
- Info_Messages := Info_Messages + 1;
- end if;
-
elsif Errors.Table (Cur_Msg).Check then
Check_Messages := Check_Messages + 1;
-- --
-- B o d y --
-- --
--- Copyright (C) 2014-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 2014-2016, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
-----------------------
function Is_OK_Declaration (Decl : Node_Id) return Boolean is
+ function In_Subprogram_Body_Profile (N : Node_Id) return Boolean;
+ -- Determine whether node N appears in the profile of a subprogram
+ -- body.
+
function Is_Ghost_Renaming (Ren_Decl : Node_Id) return Boolean;
-- Determine whether node Ren_Decl denotes a renaming declaration
-- with a Ghost name.
+ --------------------------------
+ -- In_Subprogram_Body_Profile --
+ --------------------------------
+
+ function In_Subprogram_Body_Profile (N : Node_Id) return Boolean is
+ Spec : constant Node_Id := Parent (N);
+
+ begin
+ -- The node appears in a parameter specification in which case
+ -- it is either the parameter type or the default expression or
+ -- the node appears as the result definition of a function.
+
+ return
+ (Nkind (N) = N_Parameter_Specification
+ or else
+ (Nkind (Spec) = N_Function_Specification
+ and then N = Result_Definition (Spec)))
+ and then Nkind (Parent (Spec)) = N_Subprogram_Body;
+ end In_Subprogram_Body_Profile;
+
-----------------------
-- Is_Ghost_Renaming --
-----------------------
-- Special cases
- -- A reference to a Ghost entity may appear as the default
- -- expression of a formal parameter of a subprogram body. This
- -- context must be treated as suitable because the relation
- -- between the spec and the body has not been established and
- -- the body is not marked as Ghost yet. The real check was
- -- performed on the spec.
+ -- A reference to a Ghost entity may appear within the profile of
+ -- a subprogram body. This context is treated as suitable because
+ -- it duplicates the context of the corresponding spec. The real
+ -- check was already performed during the analysis of the spec.
+
+ elsif In_Subprogram_Body_Profile (Decl) then
+ return True;
+
+ -- A reference to a Ghost entity may appear within an expression
+ -- function which is still being analyzed. This context is treated
+ -- as suitable because it is not yet known whether the expression
+ -- function is an initial declaration or a completion. The real
+ -- check is performed when the expression function is expanded.
- elsif Nkind (Decl) = N_Parameter_Specification
- and then Nkind (Parent (Parent (Decl))) = N_Subprogram_Body
+ elsif Nkind (Decl) = N_Expression_Function
+ and then not Analyzed (Decl)
then
return True;