aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/exp_imgv.adb9
-rw-r--r--gcc/ada/s-imgwch.adb17
-rw-r--r--gcc/ada/s-imgwch.ads8
3 files changed, 30 insertions, 4 deletions
diff --git a/gcc/ada/exp_imgv.adb b/gcc/ada/exp_imgv.adb
index 1fdbced..2f76d63 100644
--- a/gcc/ada/exp_imgv.adb
+++ b/gcc/ada/exp_imgv.adb
@@ -32,6 +32,7 @@ with Exp_Util; use Exp_Util;
with Namet; use Namet;
with Nmake; use Nmake;
with Nlists; use Nlists;
+with Opt; use Opt;
with Rtsfind; use Rtsfind;
with Sem_Res; use Sem_Res;
with Sinfo; use Sinfo;
@@ -148,7 +149,6 @@ package body Exp_Imgv is
Make_Aggregate (Loc,
Expressions => Ind))),
Suppress => All_Checks);
-
end Build_Enumeration_Image_Tables;
----------------------------
@@ -191,6 +191,7 @@ package body Exp_Imgv is
-- For types whose root type is Wide_Character
-- xx = Wide_Character
-- tv = Wide_Character (Expr)
+ -- pm = Boolean, true if Ada 2005 mode, False otherwise
-- For types whose root type is Wide_Wide_Character
-- xx = Wide_Wide_haracter
@@ -398,6 +399,12 @@ package body Exp_Imgv is
Set_Conversion_OK (First (Arglist));
Set_Etype (First (Arglist), Tent);
+
+ -- For Wide_Character, append Ada 2005 indication
+
+ elsif Rtyp = Standard_Wide_Character then
+ Append_To (Arglist,
+ New_Reference_To (Boolean_Literals (Ada_Version >= Ada_05), Loc));
end if;
Rewrite (N,
diff --git a/gcc/ada/s-imgwch.adb b/gcc/ada/s-imgwch.adb
index dc524da..a408ef6 100644
--- a/gcc/ada/s-imgwch.adb
+++ b/gcc/ada/s-imgwch.adb
@@ -42,9 +42,24 @@ package body System.Img_WChar is
--------------------------
function Image_Wide_Character
- (V : Wide_Character) return String
+ (V : Wide_Character;
+ Ada_2005 : Boolean) return String
is
begin
+ -- Annoying Ada 95 incompatibility with FFFE/FFFF
+
+ if V >= Wide_Character'Val (16#FFFE#)
+ and then not Ada_2005
+ then
+ if V = Wide_Character'Val (16#FFFE#) then
+ return "FFFE";
+ else
+ return "FFFF";
+ end if;
+ end if;
+
+ -- Normal case, same as Wide_Wide_Character
+
return
Image_Wide_Wide_Character
(Wide_Wide_Character'Val (Wide_Character'Pos (V)));
diff --git a/gcc/ada/s-imgwch.ads b/gcc/ada/s-imgwch.ads
index 61f4441..b827b80 100644
--- a/gcc/ada/s-imgwch.ads
+++ b/gcc/ada/s-imgwch.ads
@@ -36,8 +36,12 @@
package System.Img_WChar is
pragma Pure;
- function Image_Wide_Character (V : Wide_Character) return String;
- -- Computes Wide_Character'Image (V) and returns the computed result
+ function Image_Wide_Character
+ (V : Wide_Character;
+ Ada_2005 : Boolean) return String;
+ -- Computes Wide_Character'Image (V) and returns the computed result. The
+ -- parameter Ada_2005 is True if operating in Ada 2005 mode (or beyond).
+ -- This is needed for the annoying FFFE/FFFF incompatibility.
function Image_Wide_Wide_Character (V : Wide_Wide_Character) return String;
-- Computes Wide_Wide_Character'Image (V) and returns the computed result