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