aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2017-10-09 20:19:13 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2017-10-09 20:19:13 +0000
commitf192ca5eea6a1b12e0cdf1e4342faa52744c5a25 (patch)
treebd49fc1a5ccf18c31a07ede07efcf6c54cae3dea /gcc/ada
parent98b779ae494df7c615787a95774e41a99654ad39 (diff)
downloadgcc-f192ca5eea6a1b12e0cdf1e4342faa52744c5a25.zip
gcc-f192ca5eea6a1b12e0cdf1e4342faa52744c5a25.tar.gz
gcc-f192ca5eea6a1b12e0cdf1e4342faa52744c5a25.tar.bz2
[multiple changes]
2017-10-09 Hristian Kirtchev <kirtchev@adacore.com> * sem_elab.adb (Is_Suitable_Access): This scenario is now only relevant in the static model. (Is_Suitable_Variable_Assignment): This scenario is now only relevant in the static model. (Is_Suitable_Variable_Reference): This scenario is now only relevant in the static model. 2017-10-09 Ed Schonberg <schonberg@adacore.com> * sem_ch3.adb (Analyze_Declarations): In ASIS mode, resolve aspect expressions when the enclosing scope is a subprogram body and the next declaration is a body that freezes entities previously declared in the scope. 2017-10-09 Justin Squirek <squirek@adacore.com> * sem_ch8.adb (Analyze_Use_Package): Remove checking of mixture between ghost packages and living packages in use clauses. (Use_One_Type, Note_Redundant_Use): Correct warning messages 2017-10-09 Justin Squirek <squirek@adacore.com> * osint.ads: Document new parameter FD for Read_Source_File. From-SVN: r253564
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog26
-rw-r--r--gcc/ada/osint.ads9
-rw-r--r--gcc/ada/sem_ch3.adb9
-rw-r--r--gcc/ada/sem_ch8.adb25
-rw-r--r--gcc/ada/sem_elab.adb64
5 files changed, 91 insertions, 42 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 31b6dc0..20d60c3 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,29 @@
+2017-10-09 Hristian Kirtchev <kirtchev@adacore.com>
+
+ * sem_elab.adb (Is_Suitable_Access): This scenario is now only relevant
+ in the static model.
+ (Is_Suitable_Variable_Assignment): This scenario is now only relevant
+ in the static model.
+ (Is_Suitable_Variable_Reference): This scenario is now only relevant in
+ the static model.
+
+2017-10-09 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch3.adb (Analyze_Declarations): In ASIS mode, resolve aspect
+ expressions when the enclosing scope is a subprogram body and the next
+ declaration is a body that freezes entities previously declared in the
+ scope.
+
+2017-10-09 Justin Squirek <squirek@adacore.com>
+
+ * sem_ch8.adb (Analyze_Use_Package): Remove checking of mixture between
+ ghost packages and living packages in use clauses.
+ (Use_One_Type, Note_Redundant_Use): Correct warning messages
+
+2017-10-09 Justin Squirek <squirek@adacore.com>
+
+ * osint.ads: Document new parameter FD for Read_Source_File.
+
2017-10-09 Ed Schonberg <schonberg@adacore.com>
* exp_util.adb (Make_Predicate_Call): If the type of the expression to
diff --git a/gcc/ada/osint.ads b/gcc/ada/osint.ads
index 4d6a4a4..b8edeec 100644
--- a/gcc/ada/osint.ads
+++ b/gcc/ada/osint.ads
@@ -405,7 +405,8 @@ package Osint is
T : File_Type := Source);
-- Allocates a Source_Buffer of appropriate length and then reads the
-- entire contents of the source file N into the buffer. The address of
- -- the allocated buffer is returned in Src.
+ -- the allocated buffer is returned in Src. FD is used for extended error
+ -- information in the case the read fails.
--
-- Each line of text is terminated by one of the sequences:
--
@@ -427,7 +428,11 @@ package Osint is
-- failure to find the file is a fatal error, an error message is output,
-- and program execution is terminated. Otherwise (for the case of a
-- subsidiary source loaded directly or indirectly using with), a file
- -- not found condition causes null to be set as the result value.
+ -- not found condition causes null to be set as the result value and a
+ -- value of No_Source_File (0) to be set as the FD value. In the related
+ -- case of a file with no read permissions the result is the same except FD
+ -- is set to No_Access_To_Source_File (-1). Upon success FD is set to a
+ -- positive Source_File_Index.
--
-- Note that the name passed to this function is the simple file name,
-- without any directory information. The implementation is responsible
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 7f54daa..2e4134c 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -2231,7 +2231,8 @@ package body Sem_Ch3 is
procedure Resolve_Aspects;
-- Utility to resolve the expressions of aspects at the end of a list of
- -- declarations.
+ -- declarations, or before a declaration that freezes previous entities,
+ -- such as in a subprogram body.
function Uses_Unseen_Priv (Pkg : Entity_Id) return Boolean;
-- Check if a nested package has entities within it that rely on library
@@ -2789,6 +2790,12 @@ package body Sem_Ch3 is
if Nkind (Next_Decl) = N_Subprogram_Body then
Handle_Late_Controlled_Primitive (Next_Decl);
end if;
+
+ else
+ -- In ASIS mode, if the next declaration is a body, complete
+ -- the analysis of declarations so far.
+
+ Resolve_Aspects;
end if;
Adjust_Decl;
diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb
index d0c417b..26714c8 100644
--- a/gcc/ada/sem_ch8.adb
+++ b/gcc/ada/sem_ch8.adb
@@ -3836,25 +3836,6 @@ package body Sem_Ch8 is
end if;
end if;
end if;
-
- -- Detect a mixture of Ghost packages and living packages within the
- -- same use_package_clause. Ideally one would split a use_package_clause
- -- with multiple names into multiple use_package_clauses with a single
- -- name, however clients of the front end would have to adapt to this
- -- change.
-
- if Present (Ghost_Id) and then Present (Living_Id) then
- Error_Msg_N
- ("use clause cannot mention ghost and non-ghost ghost units", N);
-
- Error_Msg_Sloc := Sloc (Ghost_Id);
- Error_Msg_NE ("\& # declared as ghost", N, Ghost_Id);
-
- Error_Msg_Sloc := Sloc (Living_Id);
- Error_Msg_NE ("\& # declared as non-ghost", N, Living_Id);
- end if;
-
- Mark_Ghost_Clause (N);
end Analyze_Use_Package;
----------------------
@@ -9354,7 +9335,7 @@ package body Sem_Ch8 is
Error_Msg_Sloc := Sloc (Prev_Use);
Error_Msg_NE -- CODEFIX
- ("& is already use-visible through previous use clause #??",
+ ("& is already use-visible through previous use_clause #??",
Redundant, Pack_Name);
end if;
end Note_Redundant_Use;
@@ -10001,7 +9982,7 @@ package body Sem_Ch8 is
else
Error_Msg_NE -- CODEFIX
("& is already use-visible through previous "
- & "use type clause??", Id, T);
+ & "use_type_clause??", Id, T);
end if;
end Use_Clause_Known;
@@ -10011,7 +9992,7 @@ package body Sem_Ch8 is
else
Error_Msg_NE -- CODEFIX
("& is already use-visible through previous "
- & "use type clause??", Id, T);
+ & "use_type_clause??", Id, T);
end if;
-- The package where T is declared is already used
diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb
index e1ef3f8..909a500 100644
--- a/gcc/ada/sem_elab.adb
+++ b/gcc/ada/sem_elab.adb
@@ -4995,10 +4995,26 @@ package body Sem_Elab is
Subp_Id : Entity_Id;
begin
- if Nkind (N) /= N_Attribute_Reference then
+ -- This scenario is relevant only when the static model is in effect
+ -- because it is graph-dependent and does not involve any run-time
+ -- checks. Allowing it in the dynamic model would create confusing
+ -- noise.
+
+ if not Static_Elaboration_Checks then
+ return False;
+
+ -- Nothing to do when switch -gnatd.U (ignore 'Access) is in effect
+
+ elsif Debug_Flag_Dot_UU then
return False;
- -- Internally-generated attributes are assumed to be ABE safe
+ -- Nothing to do when the scenario is not an attribute reference
+
+ elsif Nkind (N) /= N_Attribute_Reference then
+ return False;
+
+ -- Nothing to do for internally-generated attributes because they are
+ -- assumed to be ABE safe.
elsif not Comes_From_Source (N) then
return False;
@@ -5031,16 +5047,10 @@ package body Sem_Elab is
return
- -- This particular scenario is relevant only in the static model when
- -- switch -gnatd.U (ignore 'Access) is not in effect.
-
- Static_Elaboration_Checks
- and then not Debug_Flag_Dot_UU
+ -- The prefix must denote a source entry, operator, or subprogram
+ -- which is not imported.
- -- The prefix must denote an entry, operator, or subprogram which is
- -- not imported.
-
- and then Comes_From_Source (Subp_Id)
+ Comes_From_Source (Subp_Id)
and then Is_Subprogram_Or_Entry (Subp_Id)
and then not Is_Bodiless_Subprogram (Subp_Id)
@@ -5109,10 +5119,21 @@ package body Sem_Elab is
Var_Unit_Id : Entity_Id;
begin
- if Nkind (N) /= N_Assignment_Statement then
+ -- This scenario is relevant only when the static model is in effect
+ -- because it is graph-dependent and does not involve any run-time
+ -- checks. Allowing it in the dynamic model would create confusing
+ -- noise.
+
+ if not Static_Elaboration_Checks then
return False;
- -- Internally-generated assigments are assumed to be ABE safe
+ -- Nothing to do when the scenario is not an assignment
+
+ elsif Nkind (N) /= N_Assignment_Statement then
+ return False;
+
+ -- Nothing to do for internally-generated assignments because they are
+ -- assumed to be ABE safe.
elsif not Comes_From_Source (N) then
return False;
@@ -5161,10 +5182,10 @@ package body Sem_Elab is
-- To qualify, the assignment must meet the following prerequisites:
return
- Comes_From_Source (Var_Id)
- -- The variable must be susceptible to warnings
+ -- The variable must be a source entity and susceptible to warnings
+ Comes_From_Source (Var_Id)
and then not Has_Warnings_Off (Var_Id)
-- The variable must be declared in the spec of compilation unit U
@@ -5232,14 +5253,23 @@ package body Sem_Elab is
-- Start of processing for Is_Suitable_Variable_Reference
begin
+ -- This scenario is relevant only when the static model is in effect
+ -- because it is graph-dependent and does not involve any run-time
+ -- checks. Allowing it in the dynamic model would create confusing
+ -- noise.
+
+ if not Static_Elaboration_Checks then
+ return False;
+
-- Attributes and operator sumbols are not considered to be suitable
-- references to variables even though they are part of predicate
-- Is_Entity_Name.
- if not Nkind_In (N, N_Expanded_Name, N_Identifier) then
+ elsif not Nkind_In (N, N_Expanded_Name, N_Identifier) then
return False;
- -- Internally generated references are assumed to be ABE safe
+ -- Nothing to do for internally-generated references because they are
+ -- assumed to be ABE safe.
elsif not Comes_From_Source (N) then
return False;