From d4b0a294694a145aa33a25d1f923f4085b8f7d99 Mon Sep 17 00:00:00 2001
From: Piotr Trojanek <trojanek@adacore.com>
Date: Sat, 2 Jan 2021 00:51:21 +0100
Subject: [PATCH] [Ada] Fix inconsistent handling of character set control
 switches

gcc/ada/

	* csets.adb (Initialize): Refactor into CASE statement; raise
	exception on unsupported code of character set (it will be
	gently rejected earlier when scanning command line switches).
	* switch-b.adb (Scan_Binder_Switches): Refactor into a
	membership expression; add missing '9' choice; reorder as
	described by GNAT UG, section 4.3.11.
	* switch-c.adb (Scan_Front_End_Switches): Refactor into a
	membership expression and reorder as above.
	* doc/gnat_ugn/building_executable_programs_with_gnat.rst
	(gnatic): Mention '5' as an allowed value for "c".
	* gnat_ugn.texi: Regenerate.
---
 gcc/ada/csets.adb                             | 48 ++++++++++---------
 ...building_executable_programs_with_gnat.rst |  2 +-
 gcc/ada/gnat_ugn.texi                         |  4 +-
 gcc/ada/switch-b.adb                          |  8 +---
 gcc/ada/switch-c.adb                          |  9 +---
 5 files changed, 30 insertions(+), 41 deletions(-)

diff --git a/gcc/ada/csets.adb b/gcc/ada/csets.adb
index 1961fcd5f034..29a15920998f 100644
--- a/gcc/ada/csets.adb
+++ b/gcc/ada/csets.adb
@@ -1091,38 +1091,40 @@ package body Csets is
    begin
       --  Set Fold_Upper table from source code indication
 
-      if Identifier_Character_Set = '1'
-        or else Identifier_Character_Set = 'w'
-      then
-         Fold_Upper := Fold_Latin_1;
+      case Identifier_Character_Set is
+         when '1' | 'w' =>
+            Fold_Upper := Fold_Latin_1;
 
-      elsif Identifier_Character_Set = '2' then
-         Fold_Upper := Fold_Latin_2;
+         when '2' =>
+            Fold_Upper := Fold_Latin_2;
 
-      elsif Identifier_Character_Set = '3' then
-         Fold_Upper := Fold_Latin_3;
+         when '3' =>
+            Fold_Upper := Fold_Latin_3;
 
-      elsif Identifier_Character_Set = '4' then
-         Fold_Upper := Fold_Latin_4;
+         when '4' =>
+            Fold_Upper := Fold_Latin_4;
 
-      elsif Identifier_Character_Set = '5' then
-         Fold_Upper := Fold_Cyrillic;
+         when '5' =>
+            Fold_Upper := Fold_Cyrillic;
 
-      elsif Identifier_Character_Set = 'p' then
-         Fold_Upper := Fold_IBM_PC_437;
+         when '9' =>
+            Fold_Upper := Fold_Latin_9;
 
-      elsif Identifier_Character_Set = '8' then
-         Fold_Upper := Fold_IBM_PC_850;
+         when 'p' =>
+            Fold_Upper := Fold_IBM_PC_437;
 
-      elsif Identifier_Character_Set = '9' then
-         Fold_Upper := Fold_Latin_9;
+         when '8' =>
+            Fold_Upper := Fold_IBM_PC_850;
 
-      elsif Identifier_Character_Set = 'f' then
-         Fold_Upper := Fold_Full_Upper_Half;
+         when 'f' =>
+            Fold_Upper := Fold_Full_Upper_Half;
 
-      else -- Identifier_Character_Set = 'n'
-         Fold_Upper := Fold_No_Upper_Half;
-      end if;
+         when 'n' =>
+            Fold_Upper := Fold_No_Upper_Half;
+
+         when others =>
+            raise Program_Error;
+      end case;
 
       --  Use Fold_Upper table to compute Fold_Lower table
 
diff --git a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
index 82e992a50414..91fae31c4e89 100644
--- a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
+++ b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
@@ -1896,7 +1896,7 @@ Alphabetical List of All Switches
 .. index:: -gnati  (gcc)
 
 :switch:`-gnati{c}`
-  Identifier character set (``c`` = 1/2/3/4/8/9/p/f/n/w).
+  Identifier character set (``c`` = 1/2/3/4/5/9/p/8/f/n/w).
   For details of the possible selections for ``c``,
   see :ref:`Character_Set_Control`.
 
diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi
index ae8f75803553..559231415d49 100644
--- a/gcc/ada/gnat_ugn.texi
+++ b/gcc/ada/gnat_ugn.texi
@@ -21,7 +21,7 @@
 
 @copying
 @quotation
-GNAT User's Guide for Native Platforms , Dec 11, 2020
+GNAT User's Guide for Native Platforms , Apr 12, 2021
 
 AdaCore
 
@@ -9462,7 +9462,7 @@ For further details see @ref{f,,Elaboration Order Handling in GNAT}.
 
 @item @code{-gnati@emph{c}}
 
-Identifier character set (@code{c} = 1/2/3/4/8/9/p/f/n/w).
+Identifier character set (@code{c} = 1/2/3/4/5/9/p/8/f/n/w).
 For details of the possible selections for @code{c},
 see @ref{31,,Character Set Control}.
 @end table
diff --git a/gcc/ada/switch-b.adb b/gcc/ada/switch-b.adb
index 012f4eed3d4c..a7359789e5aa 100644
--- a/gcc/ada/switch-b.adb
+++ b/gcc/ada/switch-b.adb
@@ -369,13 +369,7 @@ package body Switch.B is
             Ptr := Ptr + 1;
             C := Switch_Chars (Ptr);
 
-            if C in '1' .. '5'
-              or else C = '8'
-              or else C = 'p'
-              or else C = 'f'
-              or else C = 'n'
-              or else C = 'w'
-            then
+            if C in '1' .. '5' | '9' | 'p' | '8' | 'f' | 'n' | 'w' then
                Identifier_Character_Set := C;
                Ptr := Ptr + 1;
             else
diff --git a/gcc/ada/switch-c.adb b/gcc/ada/switch-c.adb
index ff6c81a6cf1b..b97e0d6e5538 100644
--- a/gcc/ada/switch-c.adb
+++ b/gcc/ada/switch-c.adb
@@ -929,14 +929,7 @@ package body Switch.C is
                Ptr := Ptr + 1;
                C := Switch_Chars (Ptr);
 
-               if C in '1' .. '5'
-                 or else C = '8'
-                 or else C = '9'
-                 or else C = 'p'
-                 or else C = 'f'
-                 or else C = 'n'
-                 or else C = 'w'
-               then
+               if C in '1' .. '5' | '8' | 'p' | '9' | 'f' | 'n' | 'w' then
                   Identifier_Character_Set := C;
                   Ptr := Ptr + 1;
 
-- 
GitLab