aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2014-07-30 13:46:35 +0000
committerArnaud Charlet <charlet@gcc.gnu.org>2014-07-30 15:46:35 +0200
commit274d2584e534a5e63be48999c794e90a73d420cb (patch)
treeb9dd594866f029f8cb02de684dc83e809212b720 /gcc
parent2afa8fdd1b6c2757b6d73660c10801647b7c0a18 (diff)
downloadgcc-274d2584e534a5e63be48999c794e90a73d420cb.zip
gcc-274d2584e534a5e63be48999c794e90a73d420cb.tar.gz
gcc-274d2584e534a5e63be48999c794e90a73d420cb.tar.bz2
sem_ch5.adb: Improve error recovery.
2014-07-30 Ed Schonberg <schonberg@adacore.com> * sem_ch5.adb: Improve error recovery. * inline.adb (Build_Body_To_Inline): Set Full_Analysis to false before analyzing the body, so that in GNATprove mode there is no light expansion. Whatever expansion is required by SPARK will be performed when analysing the inlined code. From-SVN: r213267
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog8
-rw-r--r--gcc/ada/inline.adb7
-rw-r--r--gcc/ada/sem_ch5.adb7
3 files changed, 22 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 68f15b7..c7e1696 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,11 @@
+2014-07-30 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch5.adb: Improve error recovery.
+ * inline.adb (Build_Body_To_Inline): Set Full_Analysis to false
+ before analyzing the body, so that in GNATprove mode there is
+ no light expansion. Whatever expansion is required by SPARK will
+ be performed when analysing the inlined code.
+
2014-07-30 Bob Duff <duff@adacore.com>
* s-tataat.adb, s-tataat.ads, a-tasatt.adb: Minor comment fixes.
diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb
index 44cdec4..b2ff243 100644
--- a/gcc/ada/inline.adb
+++ b/gcc/ada/inline.adb
@@ -833,6 +833,7 @@ package body Inline is
procedure Build_Body_To_Inline (N : Node_Id; Subp : Entity_Id) is
Decl : constant Node_Id := Unit_Declaration_Node (Subp);
+ Analysis_Status : constant Boolean := Full_Analysis;
Original_Body : Node_Id;
Body_To_Analyze : Node_Id;
Max_Size : constant := 10;
@@ -1388,7 +1389,12 @@ package body Inline is
Append (Body_To_Analyze, Declarations (N));
end if;
+ -- The body to inline is pre-analyzed. In GNATprove mode we must
+ -- disable full analysis as well so that light expansion does not
+ -- take place either, and name resolution is unaffected.
+
Expander_Mode_Save_And_Set (False);
+ Full_Analysis := False;
Remove_Pragmas;
Analyze (Body_To_Analyze);
@@ -1398,6 +1404,7 @@ package body Inline is
Remove (Body_To_Analyze);
Expander_Mode_Restore;
+ Full_Analysis := Analysis_Status;
-- Restore environment if previously saved
diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb
index 863d488..a961bb7 100644
--- a/gcc/ada/sem_ch5.adb
+++ b/gcc/ada/sem_ch5.adb
@@ -2841,6 +2841,13 @@ package body Sem_Ch5 is
Error_Msg_Sloc := Sloc (Ent);
Error_Msg_N ("implicit label declaration for & is hidden#", Id);
+ if Present (Homonym (Ent))
+ and then Ekind (Homonym (Ent)) = E_Label
+ then
+ Set_Entity (Id, Ent);
+ Set_Ekind (Ent, E_Loop);
+ end if;
+
else
Generate_Reference (Ent, N, ' ');
Generate_Definition (Ent);