[Ada] Warn on unknown aspect
authorArnaud Charlet <charlet@adacore.com>
Mon, 22 Jun 2020 06:59:37 +0000 (02:59 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Thu, 15 Oct 2020 09:39:07 +0000 (05:39 -0400)
gcc/ada/

* par-ch13.adb (Get_Aspect_Specifications): Generate a warning
rather than an error on unknown aspects unless -gnatd2 is used.
(Aspect_Specifications_Present): Improve detection of unknown
aspects.
* debug.adb (Debug_Flag_2): Update document.

gcc/ada/debug.adb
gcc/ada/par-ch13.adb

index 0e4a530a000dcb80dfaa18af6303f9fd1858f2f6..bbdaf3b3781f48c4d0e2c66ace222d1c3f0c3e4a 100644 (file)
@@ -1032,6 +1032,9 @@ package body Debug is
    --       flag also suppresses the additional messages explaining why a
    --       non-static expression is non-static (see Sem_Eval.Why_Not_Static).
    --       This avoids having to worry about these messages in ACATS testing.
+   --       Finally, this flag is also used for strict legality check, in
+   --       particular it will generate an error instead a warning when
+   --       encountering an unknown pragma.
 
    --  d3   Causes Comperr to dump the contents of the node for which an abort
    --       was detected (normally only the Node_Id of the node is output).
index 0b0319d50f44dd48d18c1ddf928bb02663c89133..459d7fe0701270ecc4413b6f18783b1ff3da6128 100644 (file)
@@ -153,9 +153,7 @@ package body Ch13 is
             Result := True;
          else
             Scan; -- past identifier
-            Result := Token = Tok_Arrow or else
-                      Token = Tok_Comma or else
-                      Token = Tok_Semicolon;
+            Result := Token in Tok_Arrow | Tok_Comma | Tok_Is | Tok_Semicolon;
          end if;
 
       --  If earlier than Ada 2012, check for valid aspect identifier (possibly
@@ -178,7 +176,7 @@ package body Ch13 is
             --  defaulted True value. Further checks when analyzing aspect
             --  specification, which may include further aspects.
 
-            elsif Token = Tok_Comma or else Token = Tok_Semicolon then
+            elsif Token in Tok_Comma | Tok_Semicolon then
                Result := True;
 
             elsif Token = Tok_Apostrophe then
@@ -265,7 +263,8 @@ package body Ch13 is
          --  The aspect mark is not recognized
 
          if A_Id = No_Aspect then
-            Error_Msg_N ("& is not a valid aspect identifier", Token_Node);
+            Error_Msg_Warn := not Debug_Flag_2;
+            Error_Msg_N ("<<& is not a valid aspect identifier", Token_Node);
             OK := False;
 
             --  Check bad spelling
@@ -274,7 +273,7 @@ package body Ch13 is
                if Is_Bad_Spelling_Of (Token_Name, Aspect_Names (J)) then
                   Error_Msg_Name_1 := Aspect_Names (J);
                   Error_Msg_N -- CODEFIX
-                    ("\possible misspelling of%", Token_Node);
+                    ("\<<possible misspelling of%", Token_Node);
                   exit;
                end if;
             end loop;