aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2022-09-07 15:02:04 +0200
committerMarc Poulhiès <poulhies@adacore.com>2022-11-07 09:36:29 +0100
commit74056e9411e0457c33ff5546a3563edb9ed09c99 (patch)
tree0133c4dae22535870b8f4a7aaf89f075595b0e67
parentc7dc111e9d8e2eb83e45870a98c193f2fd681313 (diff)
ada: Reject misplaced pragma Obsolescent
Pragma Obsolescent appearing before declaration was putting the Obsolescent flag on the Standard package, which is certainly wrong. The problem was that we relied on the Find_Lib_Unit_Name routine without sanitizing the pragma placement with Check_Valid_Library_Unit_Pragma. Part of cleaning up the warnings machinery to better handle references to unset objects. gcc/ada/ * sem_prag.adb (Analyze_Pragma [Pragma_Obsolescent]): Reject misplaced pragma.
-rw-r--r--gcc/ada/sem_prag.adb10
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index 60ea681001a..471ef870fa7 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -20502,10 +20502,16 @@ package body Sem_Prag is
if No (Decl) then
- -- First case: library level compilation unit declaration with
+ -- Case 0: library level compilation unit declaration with
+ -- the pragma preceding the declaration.
+
+ if Nkind (Parent (N)) = N_Compilation_Unit then
+ Pragma_Misplaced;
+
+ -- Case 1: library level compilation unit declaration with
-- the pragma immediately following the declaration.
- if Nkind (Parent (N)) = N_Compilation_Unit_Aux then
+ elsif Nkind (Parent (N)) = N_Compilation_Unit_Aux then
Set_Obsolescent
(Defining_Entity (Unit (Parent (Parent (N)))));
return;