diff options
author | Arnaud Charlet <charlet@adacore.com> | 2021-07-26 04:16:06 -0400 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-09-22 15:01:48 +0000 |
commit | 3d2226f1730e027808b8f9c17d4f6b7ac1eb7c44 (patch) | |
tree | 01836f2f6aa788e8ca925bffe27e7451be9ada05 /gcc | |
parent | 1647bc2a78b2182007f011ff0a43f872086ee512 (diff) | |
download | gcc-3d2226f1730e027808b8f9c17d4f6b7ac1eb7c44.zip gcc-3d2226f1730e027808b8f9c17d4f6b7ac1eb7c44.tar.gz gcc-3d2226f1730e027808b8f9c17d4f6b7ac1eb7c44.tar.bz2 |
[Ada] More flexibility in preprocessor
gcc/ada/
* prep.adb (Preprocess): Allow for more flexibility when
Relaxed_RM_Semantics is set.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/prep.adb | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/gcc/ada/prep.adb b/gcc/ada/prep.adb index 37556d5..e01161c 100644 --- a/gcc/ada/prep.adb +++ b/gcc/ada/prep.adb @@ -1410,7 +1410,12 @@ package body Prep is Scan.all; - if Token /= Tok_If then + -- Ignore all recoverable errors if Relaxed_RM_Semantics + + if Relaxed_RM_Semantics then + null; + + elsif Token /= Tok_If then Error_Msg -- CODEFIX ("IF expected", Token_Ptr); No_Error_Found := False; @@ -1453,21 +1458,31 @@ package body Prep is -- Illegal preprocessor line when others => - No_Error_Found := False; - if Pp_States.Last = 0 then Error_Msg -- CODEFIX ("IF expected", Token_Ptr); + No_Error_Found := False; - elsif - Pp_States.Table (Pp_States.Last).Else_Ptr = 0 + elsif Relaxed_RM_Semantics + and then Get_Name_String (Token_Name) = "endif" then + -- In relaxed mode, accept "endif" instead of + -- "end if". + + -- Decrement the depth of the #if stack + + if Pp_States.Last > 0 then + Pp_States.Decrement_Last; + end if; + elsif Pp_States.Table (Pp_States.Last).Else_Ptr = 0 then Error_Msg ("IF, ELSIF, ELSE, or `END IF` expected", Token_Ptr); + No_Error_Found := False; else Error_Msg ("IF or `END IF` expected", Token_Ptr); + No_Error_Found := False; end if; -- Skip to the end of this illegal line |