OSDN Git Service

2007-01-28 Thomas Koenig <Thomas.Koenig@online.de>
authortkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 28 Jan 2007 10:44:47 +0000 (10:44 +0000)
committertkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 28 Jan 2007 10:44:47 +0000 (10:44 +0000)
PR libfortran/30389
* gfortran.h:  Remove gfc_simplify_init_1.
* arith.h:  Remove third argument from gfc_compare_string.
* arith.c(gfc_compare_expression):  Remove third argument
from call to gfc_compare_string.
(gfc_compare_string):  Remove third argument xcoll_table.
Remove use of xcoll_table.
* misc.c(gfc_init_1):  Remove call to gfc_simplify_init_1.
* simplify.c(ascii_table):  Remove.
(xascii_table): Likewise.
(gfc_simplify_achar):  ICE if extract_int fails.  Remove use of
ascii_table.  Warn if -Wsurprising and value < 0 or > 127.
(gfc_simplify_char):  ICE if extract_int fails. Error if
value < 0 or value > 255.
(gfc_simplify_iachar):  Remove use of xascii_table.
Char values outside of 0..255 are an ICE.
(gfc_simplify_lge):  Remove use of xascii_table.
(gfc_simplify_lgt):  Likewise.
(gfc_simplify_lle):  Likewise.
(gfc_simplify_llt):  Likewise.
(invert_table):  Remove.
(gfc_simplify_init_1):  Remove.

2007-01-28  Thomas Koenig  <Thomas.Koenig@online.de>

PR libfortran/30389
* gfortran.dg/achar_2.f90:  New test.
* gfortran.dg/achar_3.f90:  New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121255 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/arith.c
gcc/fortran/arith.h
gcc/fortran/gfortran.h
gcc/fortran/misc.c
gcc/fortran/simplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/achar_2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/achar_3.f90 [new file with mode: 0644]

index 963031d..12287bf 100644 (file)
@@ -1,3 +1,28 @@
+2007-01-28  Thomas Koenig  <Thomas.Koenig@online.de>
+
+       PR libfortran/30389
+       * gfortran.h:  Remove gfc_simplify_init_1.
+       * arith.h:  Remove third argument from gfc_compare_string.
+       * arith.c(gfc_compare_expression):  Remove third argument
+       from call to gfc_compare_string.
+       (gfc_compare_string):  Remove third argument xcoll_table.
+       Remove use of xcoll_table.
+       * misc.c(gfc_init_1):  Remove call to gfc_simplify_init_1.
+       * simplify.c(ascii_table):  Remove.
+       (xascii_table): Likewise.
+       (gfc_simplify_achar):  ICE if extract_int fails.  Remove use of
+       ascii_table.  Warn if -Wsurprising and value < 0 or > 127.
+       (gfc_simplify_char):  ICE if extract_int fails. Error if
+       value < 0 or value > 255.
+       (gfc_simplify_iachar):  Remove use of xascii_table.
+       Char values outside of 0..255 are an ICE.
+       (gfc_simplify_lge):  Remove use of xascii_table.
+       (gfc_simplify_lgt):  Likewise.
+       (gfc_simplify_lle):  Likewise.
+       (gfc_simplify_llt):  Likewise.
+       (invert_table):  Remove.
+       (gfc_simplify_init_1):  Remove.
+
 2007-01-27  Roger Sayle  <roger@eyesopen.com>
 
        * trans-stmt.c (forall_info): Replace the next_nest and outer
index f92de48..39bc4b9 100644 (file)
@@ -1055,7 +1055,7 @@ gfc_compare_expr (gfc_expr *op1, gfc_expr *op2)
       break;
 
     case BT_CHARACTER:
-      rc = gfc_compare_string (op1, op2, NULL);
+      rc = gfc_compare_string (op1, op2);
       break;
 
     case BT_LOGICAL:
@@ -1083,11 +1083,11 @@ compare_complex (gfc_expr *op1, gfc_expr *op2)
 
 
 /* Given two constant strings and the inverse collating sequence, compare the
-   strings.  We return -1 for a < b, 0 for a == b and 1 for a > b.  If the
-   xcoll_table is NULL, we use the processor's default collating sequence.  */
+   strings.  We return -1 for a < b, 0 for a == b and 1 for a > b. 
+   We use the processor's default collating sequence.  */
 
 int
-gfc_compare_string (gfc_expr *a, gfc_expr *b, const int *xcoll_table)
+gfc_compare_string (gfc_expr *a, gfc_expr *b)
 {
   int len, alen, blen, i, ac, bc;
 
@@ -1103,12 +1103,6 @@ gfc_compare_string (gfc_expr *a, gfc_expr *b, const int *xcoll_table)
       ac = (unsigned char) ((i < alen) ? a->value.character.string[i] : ' ');
       bc = (unsigned char) ((i < blen) ? b->value.character.string[i] : ' ');
 
-      if (xcoll_table != NULL)
-       {
-         ac = xcoll_table[ac];
-         bc = xcoll_table[bc];
-       }
-
       if (ac < bc)
        return -1;
       if (ac > bc)
index 60fd2e0..04d37dc 100644 (file)
@@ -40,7 +40,7 @@ gfc_expr *gfc_constant_result (bt, int, locus *);
 arith gfc_range_check (gfc_expr *);
 
 int gfc_compare_expr (gfc_expr *, gfc_expr *);
-int gfc_compare_string (gfc_expr *, gfc_expr *, const int *);
+int gfc_compare_string (gfc_expr *, gfc_expr *);
 
 /* Constant folding for gfc_expr trees.  */
 gfc_expr *gfc_uplus (gfc_expr * op);
index 05b7ebc..b4beef9 100644 (file)
@@ -1970,9 +1970,6 @@ gfc_intrinsic_sym *gfc_find_function (const char *);
 match gfc_intrinsic_func_interface (gfc_expr *, int);
 match gfc_intrinsic_sub_interface (gfc_code *, int);
 
-/* simplify.c */
-void gfc_simplify_init_1 (void);
-
 /* match.c -- FIXME */
 void gfc_free_iterator (gfc_iterator *, int);
 void gfc_free_forall_iterator (gfc_forall_iterator *);
index bdc515c..c0150ed 100644 (file)
@@ -249,7 +249,6 @@ gfc_init_1 (void)
   gfc_scanner_init_1 ();
   gfc_arith_init_1 ();
   gfc_intrinsic_init_1 ();
-  gfc_simplify_init_1 ();
 }
 
 
index 612bfe3..0ceb022 100644 (file)
@@ -64,31 +64,6 @@ gfc_expr gfc_bad_expr;
    everything is reasonably straight-forward.  The Standard, chapter 13
    is the best comment you'll find for this file anyway.  */
 
-/* Static table for converting non-ascii character sets to ascii.
-   The xascii_table[] is the inverse table.  */
-
-static int ascii_table[256] = {
-  '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
-  '\b', '\t', '\n', '\v', '\0', '\r', '\0', '\0',
-  '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
-  '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
-  ' ', '!', '"', '#', '$', '%', '&', '\'',
-  '(', ')', '*', '+', ',', '-', '.', '/',
-  '0', '1', '2', '3', '4', '5', '6', '7',
-  '8', '9', ':', ';', '<', '=', '>', '?',
-  '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
-  'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
-  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
-  'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
-  '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
-  'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
-  'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
-  'x', 'y', 'z', '{', '|', '}', '~', '\?'
-};
-
-static int xascii_table[256];
-
-
 /* Range checks an expression node.  If all goes well, returns the
    node, otherwise returns &gfc_bad_expr and frees the node.  */
 
@@ -266,24 +241,27 @@ gfc_simplify_abs (gfc_expr *e)
   return result;
 }
 
+/* We use the processor's collating sequence, because all
+   sytems that gfortran currently works on are ASCII.  */
 
 gfc_expr *
 gfc_simplify_achar (gfc_expr *e)
 {
   gfc_expr *result;
-  int index;
+  int c;
+  const char *ch;
 
   if (e->expr_type != EXPR_CONSTANT)
     return NULL;
 
-  /* We cannot assume that the native character set is ASCII in this
-     function.  */
-  if (gfc_extract_int (e, &index) != NULL || index < 0 || index > 127)
-    {
-      gfc_error ("Extended ASCII not implemented: argument of ACHAR at %L "
-                "must be between 0 and 127", &e->where);
-      return &gfc_bad_expr;
-    }
+  ch = gfc_extract_int (e, &c);
+
+  if (ch != NULL)
+    gfc_internal_error ("gfc_simplify_achar: %s", ch);
+
+  if (gfc_option.warn_surprising && (c < 0 || c > 127))
+    gfc_warning ("Argument of ACHAR function at %L outside of range [0,127]",
+                &e->where);
 
   result = gfc_constant_result (BT_CHARACTER, gfc_default_character_kind,
                                &e->where);
@@ -291,7 +269,7 @@ gfc_simplify_achar (gfc_expr *e)
   result->value.character.string = gfc_getmem (2);
 
   result->value.character.length = 1;
-  result->value.character.string[0] = ascii_table[index];
+  result->value.character.string[0] = c;
   result->value.character.string[1] = '\0';    /* For debugger */
   return result;
 }
@@ -700,6 +678,7 @@ gfc_simplify_char (gfc_expr *e, gfc_expr *k)
 {
   gfc_expr *result;
   int c, kind;
+  const char *ch;
 
   kind = get_kind (BT_CHARACTER, k, "CHAR", gfc_default_character_kind);
   if (kind == -1)
@@ -708,11 +687,14 @@ gfc_simplify_char (gfc_expr *e, gfc_expr *k)
   if (e->expr_type != EXPR_CONSTANT)
     return NULL;
 
-  if (gfc_extract_int (e, &c) != NULL || c < 0 || c > UCHAR_MAX)
-    {
-      gfc_error ("Bad character in CHAR function at %L", &e->where);
-      return &gfc_bad_expr;
-    }
+  ch = gfc_extract_int (e, &c);
+
+  if (ch != NULL)
+    gfc_internal_error ("gfc_simplify_char: %s", ch);
+
+  if (c < 0 || c > UCHAR_MAX)
+    gfc_error ("Argument of CHAR function at %L outside of range [0,255]",
+              &e->where);
 
   result = gfc_constant_result (BT_CHARACTER, kind, &e->where);
 
@@ -1212,6 +1194,8 @@ gfc_simplify_huge (gfc_expr *e)
   return result;
 }
 
+/* We use the processor's collating sequence, because all
+   sytems that gfortran currently works on are ASCII.  */
 
 gfc_expr *
 gfc_simplify_iachar (gfc_expr *e)
@@ -1228,7 +1212,11 @@ gfc_simplify_iachar (gfc_expr *e)
       return &gfc_bad_expr;
     }
 
-  index = xascii_table[(int) e->value.character.string[0] & 0xFF];
+  index = (unsigned char) e->value.character.string[0];
+
+  if (gfc_option.warn_surprising && index > 127)
+    gfc_warning ("Argument of IACHAR function at %L outside of range 0..127",
+                &e->where);
 
   result = gfc_int_expr (index);
   result->where = e->where;
@@ -1409,11 +1397,7 @@ gfc_simplify_ichar (gfc_expr *e)
   index = (unsigned char) e->value.character.string[0];
 
   if (index < 0 || index > UCHAR_MAX)
-    {
-      gfc_error ("Argument of ICHAR at %L out of range of this processor",
-                &e->where);
-      return &gfc_bad_expr;
-    }
+    gfc_internal_error("Argument of ICHAR at %L out of range", &e->where);
 
   result = gfc_int_expr (index);
   result->where = e->where;
@@ -2126,8 +2110,7 @@ gfc_simplify_lge (gfc_expr *a, gfc_expr *b)
   if (a->expr_type != EXPR_CONSTANT || b->expr_type != EXPR_CONSTANT)
     return NULL;
 
-  return gfc_logical_expr (gfc_compare_string (a, b, xascii_table) >= 0,
-                          &a->where);
+  return gfc_logical_expr (gfc_compare_string (a, b) >= 0, &a->where);
 }
 
 
@@ -2137,7 +2120,7 @@ gfc_simplify_lgt (gfc_expr *a, gfc_expr *b)
   if (a->expr_type != EXPR_CONSTANT || b->expr_type != EXPR_CONSTANT)
     return NULL;
 
-  return gfc_logical_expr (gfc_compare_string (a, b, xascii_table) > 0,
+  return gfc_logical_expr (gfc_compare_string (a, b) > 0,
                           &a->where);
 }
 
@@ -2148,8 +2131,7 @@ gfc_simplify_lle (gfc_expr *a, gfc_expr *b)
   if (a->expr_type != EXPR_CONSTANT || b->expr_type != EXPR_CONSTANT)
     return NULL;
 
-  return gfc_logical_expr (gfc_compare_string (a, b, xascii_table) <= 0,
-                          &a->where);
+  return gfc_logical_expr (gfc_compare_string (a, b) <= 0, &a->where);
 }
 
 
@@ -2159,8 +2141,7 @@ gfc_simplify_llt (gfc_expr *a, gfc_expr *b)
   if (a->expr_type != EXPR_CONSTANT || b->expr_type != EXPR_CONSTANT)
     return NULL;
 
-  return gfc_logical_expr (gfc_compare_string (a, b, xascii_table) < 0,
-                          &a->where);
+  return gfc_logical_expr (gfc_compare_string (a, b) < 0, &a->where);
 }
 
 
@@ -4083,27 +4064,3 @@ gfc_convert_constant (gfc_expr *e, bt type, int kind)
 
   return result;
 }
-
-
-/****************** Helper functions ***********************/
-
-/* Given a collating table, create the inverse table.  */
-
-static void
-invert_table (const int *table, int *xtable)
-{
-  int i;
-
-  for (i = 0; i < 256; i++)
-    xtable[i] = 0;
-
-  for (i = 0; i < 256; i++)
-    xtable[table[i]] = i;
-}
-
-
-void
-gfc_simplify_init_1 (void)
-{
-  invert_table (ascii_table, xascii_table);
-}
index 7278fb7..c576955 100644 (file)
@@ -1,3 +1,9 @@
+2007-01-28  Thomas Koenig  <Thomas.Koenig@online.de>
+
+       PR libfortran/30389
+       * gfortran.dg/achar_2.f90:  New test.
+       * gfortran.dg/achar_3.f90:  New test.
+
 2007-01-27  Ian Lance Taylor  <iant@google.com>
 
        * gcc.dg/strict-overflow-1.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/achar_2.f90 b/gcc/testsuite/gfortran.dg/achar_2.f90
new file mode 100644 (file)
index 0000000..fa3a258
--- /dev/null
@@ -0,0 +1,2026 @@
+! { dg-do run }
+! PR 30389 - we now treat ACHAR equivalent to CHAR (except for
+!            out of range-values) and IACHAR equivalent to ICHAR.
+program main
+  integer :: i
+  character(len=1) :: c
+  if (iachar(achar(1)) /= 1) call abort
+  if (iachar ("\ 1")/= 1) call abort
+  if (achar (1) /= "\ 1") call abort
+  if ("\ 1" /= achar ( ichar ( "\ 1"))) call abort
+  i = 1
+  c = "\ 1"
+  if (achar(i) /= "\ 1") call abort
+  if (iachar(c) /= iachar("\ 1")) call abort
+  if (iachar(achar(2)) /= 2) call abort
+  if (iachar ("\ 2")/= 2) call abort
+  if (achar (2) /= "\ 2") call abort
+  if ("\ 2" /= achar ( ichar ( "\ 2"))) call abort
+  i = 2
+  c = "\ 2"
+  if (achar(i) /= "\ 2") call abort
+  if (iachar(c) /= iachar("\ 2")) call abort
+  if (iachar(achar(3)) /= 3) call abort
+  if (iachar ("\ 3")/= 3) call abort
+  if (achar (3) /= "\ 3") call abort
+  if ("\ 3" /= achar ( ichar ( "\ 3"))) call abort
+  i = 3
+  c = "\ 3"
+  if (achar(i) /= "\ 3") call abort
+  if (iachar(c) /= iachar("\ 3")) call abort
+  if (iachar(achar(4)) /= 4) call abort
+  if (iachar ("\ 4")/= 4) call abort
+  if (achar (4) /= "\ 4") call abort
+  if ("\ 4" /= achar ( ichar ( "\ 4"))) call abort
+  i = 4
+  c = "\ 4"
+  if (achar(i) /= "\ 4") call abort
+  if (iachar(c) /= iachar("\ 4")) call abort
+  if (iachar(achar(5)) /= 5) call abort
+  if (iachar ("\ 5")/= 5) call abort
+  if (achar (5) /= "\ 5") call abort
+  if ("\ 5" /= achar ( ichar ( "\ 5"))) call abort
+  i = 5
+  c = "\ 5"
+  if (achar(i) /= "\ 5") call abort
+  if (iachar(c) /= iachar("\ 5")) call abort
+  if (iachar(achar(6)) /= 6) call abort
+  if (iachar ("\ 6")/= 6) call abort
+  if (achar (6) /= "\ 6") call abort
+  if ("\ 6" /= achar ( ichar ( "\ 6"))) call abort
+  i = 6
+  c = "\ 6"
+  if (achar(i) /= "\ 6") call abort
+  if (iachar(c) /= iachar("\ 6")) call abort
+  if (iachar(achar(7)) /= 7) call abort
+  if (iachar ("\a")/= 7) call abort
+  if (achar (7) /= "\a") call abort
+  if ("\a" /= achar ( ichar ( "\a"))) call abort
+  i = 7
+  c = "\a"
+  if (achar(i) /= "\a") call abort
+  if (iachar(c) /= iachar("\a")) call abort
+  if (iachar(achar(8)) /= 8) call abort
+  if (iachar ("\b")/= 8) call abort
+  if (achar (8) /= "\b") call abort
+  if ("\b" /= achar ( ichar ( "\b"))) call abort
+  i = 8
+  c = "\b"
+  if (achar(i) /= "\b") call abort
+  if (iachar(c) /= iachar("\b")) call abort
+  if (iachar(achar(9)) /= 9) call abort
+  if (iachar ("        ")/= 9) call abort
+  if (achar (9) /= "   ") call abort
+  if ("        " /= achar ( ichar ( "  "))) call abort
+  i = 9
+  c = "        "
+  if (achar(i) /= "    ") call abort
+  if (iachar(c) /= iachar("    ")) call abort
+  if (iachar(achar(10)) /= 10) call abort
+  if (iachar(achar(11)) /= 11) call abort
+  if (iachar ("\v")/= 11) call abort
+  if (achar (11) /= "\v") call abort
+  if ("\v" /= achar ( ichar ( "\v"))) call abort
+  i = 11
+  c = "\v"
+  if (achar(i) /= "\v") call abort
+  if (iachar(c) /= iachar("\v")) call abort
+  if (iachar(achar(12)) /= 12) call abort
+  if (iachar ("\f")/= 12) call abort
+  if (achar (12) /= "\f") call abort
+  if ("\f" /= achar ( ichar ( "\f"))) call abort
+  i = 12
+  c = "\f"
+  if (achar(i) /= "\f") call abort
+  if (iachar(c) /= iachar("\f")) call abort
+  if (iachar(achar(13)) /= 13) call abort
+  if (iachar(achar(14)) /= 14) call abort
+  if (iachar ("\ e")/= 14) call abort
+  if (achar (14) /= "\ e") call abort
+  if ("\ e" /= achar ( ichar ( "\ e"))) call abort
+  i = 14
+  c = "\ e"
+  if (achar(i) /= "\ e") call abort
+  if (iachar(c) /= iachar("\ e")) call abort
+  if (iachar(achar(15)) /= 15) call abort
+  if (iachar ("\ f")/= 15) call abort
+  if (achar (15) /= "\ f") call abort
+  if ("\ f" /= achar ( ichar ( "\ f"))) call abort
+  i = 15
+  c = "\ f"
+  if (achar(i) /= "\ f") call abort
+  if (iachar(c) /= iachar("\ f")) call abort
+  if (iachar(achar(16)) /= 16) call abort
+  if (iachar ("\10")/= 16) call abort
+  if (achar (16) /= "\10") call abort
+  if ("\10" /= achar ( ichar ( "\10"))) call abort
+  i = 16
+  c = "\10"
+  if (achar(i) /= "\10") call abort
+  if (iachar(c) /= iachar("\10")) call abort
+  if (iachar(achar(17)) /= 17) call abort
+  if (iachar ("\11")/= 17) call abort
+  if (achar (17) /= "\11") call abort
+  if ("\11" /= achar ( ichar ( "\11"))) call abort
+  i = 17
+  c = "\11"
+  if (achar(i) /= "\11") call abort
+  if (iachar(c) /= iachar("\11")) call abort
+  if (iachar(achar(18)) /= 18) call abort
+  if (iachar ("\12")/= 18) call abort
+  if (achar (18) /= "\12") call abort
+  if ("\12" /= achar ( ichar ( "\12"))) call abort
+  i = 18
+  c = "\12"
+  if (achar(i) /= "\12") call abort
+  if (iachar(c) /= iachar("\12")) call abort
+  if (iachar(achar(19)) /= 19) call abort
+  if (iachar ("\13")/= 19) call abort
+  if (achar (19) /= "\13") call abort
+  if ("\13" /= achar ( ichar ( "\13"))) call abort
+  i = 19
+  c = "\13"
+  if (achar(i) /= "\13") call abort
+  if (iachar(c) /= iachar("\13")) call abort
+  if (iachar(achar(20)) /= 20) call abort
+  if (iachar ("\14")/= 20) call abort
+  if (achar (20) /= "\14") call abort
+  if ("\14" /= achar ( ichar ( "\14"))) call abort
+  i = 20
+  c = "\14"
+  if (achar(i) /= "\14") call abort
+  if (iachar(c) /= iachar("\14")) call abort
+  if (iachar(achar(21)) /= 21) call abort
+  if (iachar ("\15")/= 21) call abort
+  if (achar (21) /= "\15") call abort
+  if ("\15" /= achar ( ichar ( "\15"))) call abort
+  i = 21
+  c = "\15"
+  if (achar(i) /= "\15") call abort
+  if (iachar(c) /= iachar("\15")) call abort
+  if (iachar(achar(22)) /= 22) call abort
+  if (iachar ("\16")/= 22) call abort
+  if (achar (22) /= "\16") call abort
+  if ("\16" /= achar ( ichar ( "\16"))) call abort
+  i = 22
+  c = "\16"
+  if (achar(i) /= "\16") call abort
+  if (iachar(c) /= iachar("\16")) call abort
+  if (iachar(achar(23)) /= 23) call abort
+  if (iachar ("\17")/= 23) call abort
+  if (achar (23) /= "\17") call abort
+  if ("\17" /= achar ( ichar ( "\17"))) call abort
+  i = 23
+  c = "\17"
+  if (achar(i) /= "\17") call abort
+  if (iachar(c) /= iachar("\17")) call abort
+  if (iachar(achar(24)) /= 24) call abort
+  if (iachar ("\18")/= 24) call abort
+  if (achar (24) /= "\18") call abort
+  if ("\18" /= achar ( ichar ( "\18"))) call abort
+  i = 24
+  c = "\18"
+  if (achar(i) /= "\18") call abort
+  if (iachar(c) /= iachar("\18")) call abort
+  if (iachar(achar(25)) /= 25) call abort
+  if (iachar ("\19")/= 25) call abort
+  if (achar (25) /= "\19") call abort
+  if ("\19" /= achar ( ichar ( "\19"))) call abort
+  i = 25
+  c = "\19"
+  if (achar(i) /= "\19") call abort
+  if (iachar(c) /= iachar("\19")) call abort
+  if (iachar(achar(26)) /= 26) call abort
+  if (iachar(achar(27)) /= 27) call abort
+  if (iachar ("\e")/= 27) call abort
+  if (achar (27) /= "\e") call abort
+  if ("\e" /= achar ( ichar ( "\e"))) call abort
+  i = 27
+  c = "\e"
+  if (achar(i) /= "\e") call abort
+  if (iachar(c) /= iachar("\e")) call abort
+  if (iachar(achar(28)) /= 28) call abort
+  if (iachar ("\1c")/= 28) call abort
+  if (achar (28) /= "\1c") call abort
+  if ("\1c" /= achar ( ichar ( "\1c"))) call abort
+  i = 28
+  c = "\1c"
+  if (achar(i) /= "\1c") call abort
+  if (iachar(c) /= iachar("\1c")) call abort
+  if (iachar(achar(29)) /= 29) call abort
+  if (iachar ("\1d")/= 29) call abort
+  if (achar (29) /= "\1d") call abort
+  if ("\1d" /= achar ( ichar ( "\1d"))) call abort
+  i = 29
+  c = "\1d"
+  if (achar(i) /= "\1d") call abort
+  if (iachar(c) /= iachar("\1d")) call abort
+  if (iachar(achar(30)) /= 30) call abort
+  if (iachar ("\1e")/= 30) call abort
+  if (achar (30) /= "\1e") call abort
+  if ("\1e" /= achar ( ichar ( "\1e"))) call abort
+  i = 30
+  c = "\1e"
+  if (achar(i) /= "\1e") call abort
+  if (iachar(c) /= iachar("\1e")) call abort
+  if (iachar(achar(31)) /= 31) call abort
+  if (iachar ("\1f")/= 31) call abort
+  if (achar (31) /= "\1f") call abort
+  if ("\1f" /= achar ( ichar ( "\1f"))) call abort
+  i = 31
+  c = "\1f"
+  if (achar(i) /= "\1f") call abort
+  if (iachar(c) /= iachar("\1f")) call abort
+  if (iachar(achar(32)) /= 32) call abort
+  if (iachar (" ")/= 32) call abort
+  if (achar (32) /= " ") call abort
+  if (" " /= achar ( ichar ( " "))) call abort
+  i = 32
+  c = " "
+  if (achar(i) /= " ") call abort
+  if (iachar(c) /= iachar(" ")) call abort
+  if (iachar(achar(33)) /= 33) call abort
+  if (iachar ("!")/= 33) call abort
+  if (achar (33) /= "!") call abort
+  if ("!" /= achar ( ichar ( "!"))) call abort
+  i = 33
+  c = "!"
+  if (achar(i) /= "!") call abort
+  if (iachar(c) /= iachar("!")) call abort
+  if (iachar(achar(34)) /= 34) call abort
+  if (iachar ('"')/= 34) call abort
+  if (achar (34) /= '"') call abort
+  if ('"' /= achar ( ichar ( '"'))) call abort
+  i = 34
+  c = '"'
+  if (achar(i) /= '"') call abort
+  if (iachar(c) /= iachar('"')) call abort
+  if (iachar(achar(35)) /= 35) call abort
+  if (iachar ("#")/= 35) call abort
+  if (achar (35) /= "#") call abort
+  if ("#" /= achar ( ichar ( "#"))) call abort
+  i = 35
+  c = "#"
+  if (achar(i) /= "#") call abort
+  if (iachar(c) /= iachar("#")) call abort
+  if (iachar(achar(36)) /= 36) call abort
+  if (iachar ("$")/= 36) call abort
+  if (achar (36) /= "$") call abort
+  if ("$" /= achar ( ichar ( "$"))) call abort
+  i = 36
+  c = "$"
+  if (achar(i) /= "$") call abort
+  if (iachar(c) /= iachar("$")) call abort
+  if (iachar(achar(37)) /= 37) call abort
+  if (iachar ("%")/= 37) call abort
+  if (achar (37) /= "%") call abort
+  if ("%" /= achar ( ichar ( "%"))) call abort
+  i = 37
+  c = "%"
+  if (achar(i) /= "%") call abort
+  if (iachar(c) /= iachar("%")) call abort
+  if (iachar(achar(38)) /= 38) call abort
+  if (iachar ("&")/= 38) call abort
+  if (achar (38) /= "&") call abort
+  if ("&" /= achar ( ichar ( "&"))) call abort
+  i = 38
+  c = "&"
+  if (achar(i) /= "&") call abort
+  if (iachar(c) /= iachar("&")) call abort
+  if (iachar(achar(39)) /= 39) call abort
+  if (iachar ("'")/= 39) call abort
+  if (achar (39) /= "'") call abort
+  if ("'" /= achar ( ichar ( "'"))) call abort
+  i = 39
+  c = "'"
+  if (achar(i) /= "'") call abort
+  if (iachar(c) /= iachar("'")) call abort
+  if (iachar(achar(40)) /= 40) call abort
+  if (iachar ("(")/= 40) call abort
+  if (achar (40) /= "(") call abort
+  if ("(" /= achar ( ichar ( "("))) call abort
+  i = 40
+  c = "("
+  if (achar(i) /= "(") call abort
+  if (iachar(c) /= iachar("(")) call abort
+  if (iachar(achar(41)) /= 41) call abort
+  if (iachar (")")/= 41) call abort
+  if (achar (41) /= ")") call abort
+  if (")" /= achar ( ichar ( ")"))) call abort
+  i = 41
+  c = ")"
+  if (achar(i) /= ")") call abort
+  if (iachar(c) /= iachar(")")) call abort
+  if (iachar(achar(42)) /= 42) call abort
+  if (iachar ("*")/= 42) call abort
+  if (achar (42) /= "*") call abort
+  if ("*" /= achar ( ichar ( "*"))) call abort
+  i = 42
+  c = "*"
+  if (achar(i) /= "*") call abort
+  if (iachar(c) /= iachar("*")) call abort
+  if (iachar(achar(43)) /= 43) call abort
+  if (iachar ("+")/= 43) call abort
+  if (achar (43) /= "+") call abort
+  if ("+" /= achar ( ichar ( "+"))) call abort
+  i = 43
+  c = "+"
+  if (achar(i) /= "+") call abort
+  if (iachar(c) /= iachar("+")) call abort
+  if (iachar(achar(44)) /= 44) call abort
+  if (iachar (",")/= 44) call abort
+  if (achar (44) /= ",") call abort
+  if ("," /= achar ( ichar ( ","))) call abort
+  i = 44
+  c = ","
+  if (achar(i) /= ",") call abort
+  if (iachar(c) /= iachar(",")) call abort
+  if (iachar(achar(45)) /= 45) call abort
+  if (iachar ("-")/= 45) call abort
+  if (achar (45) /= "-") call abort
+  if ("-" /= achar ( ichar ( "-"))) call abort
+  i = 45
+  c = "-"
+  if (achar(i) /= "-") call abort
+  if (iachar(c) /= iachar("-")) call abort
+  if (iachar(achar(46)) /= 46) call abort
+  if (iachar (".")/= 46) call abort
+  if (achar (46) /= ".") call abort
+  if ("." /= achar ( ichar ( "."))) call abort
+  i = 46
+  c = "."
+  if (achar(i) /= ".") call abort
+  if (iachar(c) /= iachar(".")) call abort
+  if (iachar(achar(47)) /= 47) call abort
+  if (iachar ("/")/= 47) call abort
+  if (achar (47) /= "/") call abort
+  if ("/" /= achar ( ichar ( "/"))) call abort
+  i = 47
+  c = "/"
+  if (achar(i) /= "/") call abort
+  if (iachar(c) /= iachar("/")) call abort
+  if (iachar(achar(48)) /= 48) call abort
+  if (iachar ("0")/= 48) call abort
+  if (achar (48) /= "0") call abort
+  if ("0" /= achar ( ichar ( "0"))) call abort
+  i = 48
+  c = "0"
+  if (achar(i) /= "0") call abort
+  if (iachar(c) /= iachar("0")) call abort
+  if (iachar(achar(49)) /= 49) call abort
+  if (iachar ("1")/= 49) call abort
+  if (achar (49) /= "1") call abort
+  if ("1" /= achar ( ichar ( "1"))) call abort
+  i = 49
+  c = "1"
+  if (achar(i) /= "1") call abort
+  if (iachar(c) /= iachar("1")) call abort
+  if (iachar(achar(50)) /= 50) call abort
+  if (iachar ("2")/= 50) call abort
+  if (achar (50) /= "2") call abort
+  if ("2" /= achar ( ichar ( "2"))) call abort
+  i = 50
+  c = "2"
+  if (achar(i) /= "2") call abort
+  if (iachar(c) /= iachar("2")) call abort
+  if (iachar(achar(51)) /= 51) call abort
+  if (iachar ("3")/= 51) call abort
+  if (achar (51) /= "3") call abort
+  if ("3" /= achar ( ichar ( "3"))) call abort
+  i = 51
+  c = "3"
+  if (achar(i) /= "3") call abort
+  if (iachar(c) /= iachar("3")) call abort
+  if (iachar(achar(52)) /= 52) call abort
+  if (iachar ("4")/= 52) call abort
+  if (achar (52) /= "4") call abort
+  if ("4" /= achar ( ichar ( "4"))) call abort
+  i = 52
+  c = "4"
+  if (achar(i) /= "4") call abort
+  if (iachar(c) /= iachar("4")) call abort
+  if (iachar(achar(53)) /= 53) call abort
+  if (iachar ("5")/= 53) call abort
+  if (achar (53) /= "5") call abort
+  if ("5" /= achar ( ichar ( "5"))) call abort
+  i = 53
+  c = "5"
+  if (achar(i) /= "5") call abort
+  if (iachar(c) /= iachar("5")) call abort
+  if (iachar(achar(54)) /= 54) call abort
+  if (iachar ("6")/= 54) call abort
+  if (achar (54) /= "6") call abort
+  if ("6" /= achar ( ichar ( "6"))) call abort
+  i = 54
+  c = "6"
+  if (achar(i) /= "6") call abort
+  if (iachar(c) /= iachar("6")) call abort
+  if (iachar(achar(55)) /= 55) call abort
+  if (iachar ("7")/= 55) call abort
+  if (achar (55) /= "7") call abort
+  if ("7" /= achar ( ichar ( "7"))) call abort
+  i = 55
+  c = "7"
+  if (achar(i) /= "7") call abort
+  if (iachar(c) /= iachar("7")) call abort
+  if (iachar(achar(56)) /= 56) call abort
+  if (iachar ("8")/= 56) call abort
+  if (achar (56) /= "8") call abort
+  if ("8" /= achar ( ichar ( "8"))) call abort
+  i = 56
+  c = "8"
+  if (achar(i) /= "8") call abort
+  if (iachar(c) /= iachar("8")) call abort
+  if (iachar(achar(57)) /= 57) call abort
+  if (iachar ("9")/= 57) call abort
+  if (achar (57) /= "9") call abort
+  if ("9" /= achar ( ichar ( "9"))) call abort
+  i = 57
+  c = "9"
+  if (achar(i) /= "9") call abort
+  if (iachar(c) /= iachar("9")) call abort
+  if (iachar(achar(58)) /= 58) call abort
+  if (iachar (":")/= 58) call abort
+  if (achar (58) /= ":") call abort
+  if (":" /= achar ( ichar ( ":"))) call abort
+  i = 58
+  c = ":"
+  if (achar(i) /= ":") call abort
+  if (iachar(c) /= iachar(":")) call abort
+  if (iachar(achar(59)) /= 59) call abort
+  if (iachar (";")/= 59) call abort
+  if (achar (59) /= ";") call abort
+  if (";" /= achar ( ichar ( ";"))) call abort
+  i = 59
+  c = ";"
+  if (achar(i) /= ";") call abort
+  if (iachar(c) /= iachar(";")) call abort
+  if (iachar(achar(60)) /= 60) call abort
+  if (iachar ("<")/= 60) call abort
+  if (achar (60) /= "<") call abort
+  if ("<" /= achar ( ichar ( "<"))) call abort
+  i = 60
+  c = "<"
+  if (achar(i) /= "<") call abort
+  if (iachar(c) /= iachar("<")) call abort
+  if (iachar(achar(61)) /= 61) call abort
+  if (iachar ("=")/= 61) call abort
+  if (achar (61) /= "=") call abort
+  if ("=" /= achar ( ichar ( "="))) call abort
+  i = 61
+  c = "="
+  if (achar(i) /= "=") call abort
+  if (iachar(c) /= iachar("=")) call abort
+  if (iachar(achar(62)) /= 62) call abort
+  if (iachar (">")/= 62) call abort
+  if (achar (62) /= ">") call abort
+  if (">" /= achar ( ichar ( ">"))) call abort
+  i = 62
+  c = ">"
+  if (achar(i) /= ">") call abort
+  if (iachar(c) /= iachar(">")) call abort
+  if (iachar(achar(63)) /= 63) call abort
+  if (iachar ("?")/= 63) call abort
+  if (achar (63) /= "?") call abort
+  if ("?" /= achar ( ichar ( "?"))) call abort
+  i = 63
+  c = "?"
+  if (achar(i) /= "?") call abort
+  if (iachar(c) /= iachar("?")) call abort
+  if (iachar(achar(64)) /= 64) call abort
+  if (iachar ("@")/= 64) call abort
+  if (achar (64) /= "@") call abort
+  if ("@" /= achar ( ichar ( "@"))) call abort
+  i = 64
+  c = "@"
+  if (achar(i) /= "@") call abort
+  if (iachar(c) /= iachar("@")) call abort
+  if (iachar(achar(65)) /= 65) call abort
+  if (iachar ("A")/= 65) call abort
+  if (achar (65) /= "A") call abort
+  if ("A" /= achar ( ichar ( "A"))) call abort
+  i = 65
+  c = "A"
+  if (achar(i) /= "A") call abort
+  if (iachar(c) /= iachar("A")) call abort
+  if (iachar(achar(66)) /= 66) call abort
+  if (iachar ("B")/= 66) call abort
+  if (achar (66) /= "B") call abort
+  if ("B" /= achar ( ichar ( "B"))) call abort
+  i = 66
+  c = "B"
+  if (achar(i) /= "B") call abort
+  if (iachar(c) /= iachar("B")) call abort
+  if (iachar(achar(67)) /= 67) call abort
+  if (iachar ("C")/= 67) call abort
+  if (achar (67) /= "C") call abort
+  if ("C" /= achar ( ichar ( "C"))) call abort
+  i = 67
+  c = "C"
+  if (achar(i) /= "C") call abort
+  if (iachar(c) /= iachar("C")) call abort
+  if (iachar(achar(68)) /= 68) call abort
+  if (iachar ("D")/= 68) call abort
+  if (achar (68) /= "D") call abort
+  if ("D" /= achar ( ichar ( "D"))) call abort
+  i = 68
+  c = "D"
+  if (achar(i) /= "D") call abort
+  if (iachar(c) /= iachar("D")) call abort
+  if (iachar(achar(69)) /= 69) call abort
+  if (iachar ("E")/= 69) call abort
+  if (achar (69) /= "E") call abort
+  if ("E" /= achar ( ichar ( "E"))) call abort
+  i = 69
+  c = "E"
+  if (achar(i) /= "E") call abort
+  if (iachar(c) /= iachar("E")) call abort
+  if (iachar(achar(70)) /= 70) call abort
+  if (iachar ("F")/= 70) call abort
+  if (achar (70) /= "F") call abort
+  if ("F" /= achar ( ichar ( "F"))) call abort
+  i = 70
+  c = "F"
+  if (achar(i) /= "F") call abort
+  if (iachar(c) /= iachar("F")) call abort
+  if (iachar(achar(71)) /= 71) call abort
+  if (iachar ("G")/= 71) call abort
+  if (achar (71) /= "G") call abort
+  if ("G" /= achar ( ichar ( "G"))) call abort
+  i = 71
+  c = "G"
+  if (achar(i) /= "G") call abort
+  if (iachar(c) /= iachar("G")) call abort
+  if (iachar(achar(72)) /= 72) call abort
+  if (iachar ("H")/= 72) call abort
+  if (achar (72) /= "H") call abort
+  if ("H" /= achar ( ichar ( "H"))) call abort
+  i = 72
+  c = "H"
+  if (achar(i) /= "H") call abort
+  if (iachar(c) /= iachar("H")) call abort
+  if (iachar(achar(73)) /= 73) call abort
+  if (iachar ("I")/= 73) call abort
+  if (achar (73) /= "I") call abort
+  if ("I" /= achar ( ichar ( "I"))) call abort
+  i = 73
+  c = "I"
+  if (achar(i) /= "I") call abort
+  if (iachar(c) /= iachar("I")) call abort
+  if (iachar(achar(74)) /= 74) call abort
+  if (iachar ("J")/= 74) call abort
+  if (achar (74) /= "J") call abort
+  if ("J" /= achar ( ichar ( "J"))) call abort
+  i = 74
+  c = "J"
+  if (achar(i) /= "J") call abort
+  if (iachar(c) /= iachar("J")) call abort
+  if (iachar(achar(75)) /= 75) call abort
+  if (iachar ("K")/= 75) call abort
+  if (achar (75) /= "K") call abort
+  if ("K" /= achar ( ichar ( "K"))) call abort
+  i = 75
+  c = "K"
+  if (achar(i) /= "K") call abort
+  if (iachar(c) /= iachar("K")) call abort
+  if (iachar(achar(76)) /= 76) call abort
+  if (iachar ("L")/= 76) call abort
+  if (achar (76) /= "L") call abort
+  if ("L" /= achar ( ichar ( "L"))) call abort
+  i = 76
+  c = "L"
+  if (achar(i) /= "L") call abort
+  if (iachar(c) /= iachar("L")) call abort
+  if (iachar(achar(77)) /= 77) call abort
+  if (iachar ("M")/= 77) call abort
+  if (achar (77) /= "M") call abort
+  if ("M" /= achar ( ichar ( "M"))) call abort
+  i = 77
+  c = "M"
+  if (achar(i) /= "M") call abort
+  if (iachar(c) /= iachar("M")) call abort
+  if (iachar(achar(78)) /= 78) call abort
+  if (iachar ("N")/= 78) call abort
+  if (achar (78) /= "N") call abort
+  if ("N" /= achar ( ichar ( "N"))) call abort
+  i = 78
+  c = "N"
+  if (achar(i) /= "N") call abort
+  if (iachar(c) /= iachar("N")) call abort
+  if (iachar(achar(79)) /= 79) call abort
+  if (iachar ("O")/= 79) call abort
+  if (achar (79) /= "O") call abort
+  if ("O" /= achar ( ichar ( "O"))) call abort
+  i = 79
+  c = "O"
+  if (achar(i) /= "O") call abort
+  if (iachar(c) /= iachar("O")) call abort
+  if (iachar(achar(80)) /= 80) call abort
+  if (iachar ("P")/= 80) call abort
+  if (achar (80) /= "P") call abort
+  if ("P" /= achar ( ichar ( "P"))) call abort
+  i = 80
+  c = "P"
+  if (achar(i) /= "P") call abort
+  if (iachar(c) /= iachar("P")) call abort
+  if (iachar(achar(81)) /= 81) call abort
+  if (iachar ("Q")/= 81) call abort
+  if (achar (81) /= "Q") call abort
+  if ("Q" /= achar ( ichar ( "Q"))) call abort
+  i = 81
+  c = "Q"
+  if (achar(i) /= "Q") call abort
+  if (iachar(c) /= iachar("Q")) call abort
+  if (iachar(achar(82)) /= 82) call abort
+  if (iachar ("R")/= 82) call abort
+  if (achar (82) /= "R") call abort
+  if ("R" /= achar ( ichar ( "R"))) call abort
+  i = 82
+  c = "R"
+  if (achar(i) /= "R") call abort
+  if (iachar(c) /= iachar("R")) call abort
+  if (iachar(achar(83)) /= 83) call abort
+  if (iachar ("S")/= 83) call abort
+  if (achar (83) /= "S") call abort
+  if ("S" /= achar ( ichar ( "S"))) call abort
+  i = 83
+  c = "S"
+  if (achar(i) /= "S") call abort
+  if (iachar(c) /= iachar("S")) call abort
+  if (iachar(achar(84)) /= 84) call abort
+  if (iachar ("T")/= 84) call abort
+  if (achar (84) /= "T") call abort
+  if ("T" /= achar ( ichar ( "T"))) call abort
+  i = 84
+  c = "T"
+  if (achar(i) /= "T") call abort
+  if (iachar(c) /= iachar("T")) call abort
+  if (iachar(achar(85)) /= 85) call abort
+  if (iachar ("U")/= 85) call abort
+  if (achar (85) /= "U") call abort
+  if ("U" /= achar ( ichar ( "U"))) call abort
+  i = 85
+  c = "U"
+  if (achar(i) /= "U") call abort
+  if (iachar(c) /= iachar("U")) call abort
+  if (iachar(achar(86)) /= 86) call abort
+  if (iachar ("V")/= 86) call abort
+  if (achar (86) /= "V") call abort
+  if ("V" /= achar ( ichar ( "V"))) call abort
+  i = 86
+  c = "V"
+  if (achar(i) /= "V") call abort
+  if (iachar(c) /= iachar("V")) call abort
+  if (iachar(achar(87)) /= 87) call abort
+  if (iachar ("W")/= 87) call abort
+  if (achar (87) /= "W") call abort
+  if ("W" /= achar ( ichar ( "W"))) call abort
+  i = 87
+  c = "W"
+  if (achar(i) /= "W") call abort
+  if (iachar(c) /= iachar("W")) call abort
+  if (iachar(achar(88)) /= 88) call abort
+  if (iachar ("X")/= 88) call abort
+  if (achar (88) /= "X") call abort
+  if ("X" /= achar ( ichar ( "X"))) call abort
+  i = 88
+  c = "X"
+  if (achar(i) /= "X") call abort
+  if (iachar(c) /= iachar("X")) call abort
+  if (iachar(achar(89)) /= 89) call abort
+  if (iachar ("Y")/= 89) call abort
+  if (achar (89) /= "Y") call abort
+  if ("Y" /= achar ( ichar ( "Y"))) call abort
+  i = 89
+  c = "Y"
+  if (achar(i) /= "Y") call abort
+  if (iachar(c) /= iachar("Y")) call abort
+  if (iachar(achar(90)) /= 90) call abort
+  if (iachar ("Z")/= 90) call abort
+  if (achar (90) /= "Z") call abort
+  if ("Z" /= achar ( ichar ( "Z"))) call abort
+  i = 90
+  c = "Z"
+  if (achar(i) /= "Z") call abort
+  if (iachar(c) /= iachar("Z")) call abort
+  if (iachar(achar(91)) /= 91) call abort
+  if (iachar ("[")/= 91) call abort
+  if (achar (91) /= "[") call abort
+  if ("[" /= achar ( ichar ( "["))) call abort
+  i = 91
+  c = "["
+  if (achar(i) /= "[") call abort
+  if (iachar(c) /= iachar("[")) call abort
+  if (iachar(achar(92)) /= 92) call abort
+  if (iachar ("\")/= 92) call abort
+  if (achar (92) /= "\") call abort
+  if ("\" /= achar ( ichar ( "\"))) call abort
+  i = 92
+  c = "\"
+  if (achar(i) /= "\") call abort
+  if (iachar(c) /= iachar("\")) call abort
+  if (iachar(achar(93)) /= 93) call abort
+  if (iachar ("]")/= 93) call abort
+  if (achar (93) /= "]") call abort
+  if ("]" /= achar ( ichar ( "]"))) call abort
+  i = 93
+  c = "]"
+  if (achar(i) /= "]") call abort
+  if (iachar(c) /= iachar("]")) call abort
+  if (iachar(achar(94)) /= 94) call abort
+  if (iachar ("^")/= 94) call abort
+  if (achar (94) /= "^") call abort
+  if ("^" /= achar ( ichar ( "^"))) call abort
+  i = 94
+  c = "^"
+  if (achar(i) /= "^") call abort
+  if (iachar(c) /= iachar("^")) call abort
+  if (iachar(achar(95)) /= 95) call abort
+  if (iachar ("_")/= 95) call abort
+  if (achar (95) /= "_") call abort
+  if ("_" /= achar ( ichar ( "_"))) call abort
+  i = 95
+  c = "_"
+  if (achar(i) /= "_") call abort
+  if (iachar(c) /= iachar("_")) call abort
+  if (iachar(achar(96)) /= 96) call abort
+  if (iachar ("`")/= 96) call abort
+  if (achar (96) /= "`") call abort
+  if ("`" /= achar ( ichar ( "`"))) call abort
+  i = 96
+  c = "`"
+  if (achar(i) /= "`") call abort
+  if (iachar(c) /= iachar("`")) call abort
+  if (iachar(achar(97)) /= 97) call abort
+  if (iachar ("a")/= 97) call abort
+  if (achar (97) /= "a") call abort
+  if ("a" /= achar ( ichar ( "a"))) call abort
+  i = 97
+  c = "a"
+  if (achar(i) /= "a") call abort
+  if (iachar(c) /= iachar("a")) call abort
+  if (iachar(achar(98)) /= 98) call abort
+  if (iachar ("b")/= 98) call abort
+  if (achar (98) /= "b") call abort
+  if ("b" /= achar ( ichar ( "b"))) call abort
+  i = 98
+  c = "b"
+  if (achar(i) /= "b") call abort
+  if (iachar(c) /= iachar("b")) call abort
+  if (iachar(achar(99)) /= 99) call abort
+  if (iachar ("c")/= 99) call abort
+  if (achar (99) /= "c") call abort
+  if ("c" /= achar ( ichar ( "c"))) call abort
+  i = 99
+  c = "c"
+  if (achar(i) /= "c") call abort
+  if (iachar(c) /= iachar("c")) call abort
+  if (iachar(achar(100)) /= 100) call abort
+  if (iachar ("d")/= 100) call abort
+  if (achar (100) /= "d") call abort
+  if ("d" /= achar ( ichar ( "d"))) call abort
+  i = 100
+  c = "d"
+  if (achar(i) /= "d") call abort
+  if (iachar(c) /= iachar("d")) call abort
+  if (iachar(achar(101)) /= 101) call abort
+  if (iachar ("e")/= 101) call abort
+  if (achar (101) /= "e") call abort
+  if ("e" /= achar ( ichar ( "e"))) call abort
+  i = 101
+  c = "e"
+  if (achar(i) /= "e") call abort
+  if (iachar(c) /= iachar("e")) call abort
+  if (iachar(achar(102)) /= 102) call abort
+  if (iachar ("f")/= 102) call abort
+  if (achar (102) /= "f") call abort
+  if ("f" /= achar ( ichar ( "f"))) call abort
+  i = 102
+  c = "f"
+  if (achar(i) /= "f") call abort
+  if (iachar(c) /= iachar("f")) call abort
+  if (iachar(achar(103)) /= 103) call abort
+  if (iachar ("g")/= 103) call abort
+  if (achar (103) /= "g") call abort
+  if ("g" /= achar ( ichar ( "g"))) call abort
+  i = 103
+  c = "g"
+  if (achar(i) /= "g") call abort
+  if (iachar(c) /= iachar("g")) call abort
+  if (iachar(achar(104)) /= 104) call abort
+  if (iachar ("h")/= 104) call abort
+  if (achar (104) /= "h") call abort
+  if ("h" /= achar ( ichar ( "h"))) call abort
+  i = 104
+  c = "h"
+  if (achar(i) /= "h") call abort
+  if (iachar(c) /= iachar("h")) call abort
+  if (iachar(achar(105)) /= 105) call abort
+  if (iachar ("i")/= 105) call abort
+  if (achar (105) /= "i") call abort
+  if ("i" /= achar ( ichar ( "i"))) call abort
+  i = 105
+  c = "i"
+  if (achar(i) /= "i") call abort
+  if (iachar(c) /= iachar("i")) call abort
+  if (iachar(achar(106)) /= 106) call abort
+  if (iachar ("j")/= 106) call abort
+  if (achar (106) /= "j") call abort
+  if ("j" /= achar ( ichar ( "j"))) call abort
+  i = 106
+  c = "j"
+  if (achar(i) /= "j") call abort
+  if (iachar(c) /= iachar("j")) call abort
+  if (iachar(achar(107)) /= 107) call abort
+  if (iachar ("k")/= 107) call abort
+  if (achar (107) /= "k") call abort
+  if ("k" /= achar ( ichar ( "k"))) call abort
+  i = 107
+  c = "k"
+  if (achar(i) /= "k") call abort
+  if (iachar(c) /= iachar("k")) call abort
+  if (iachar(achar(108)) /= 108) call abort
+  if (iachar ("l")/= 108) call abort
+  if (achar (108) /= "l") call abort
+  if ("l" /= achar ( ichar ( "l"))) call abort
+  i = 108
+  c = "l"
+  if (achar(i) /= "l") call abort
+  if (iachar(c) /= iachar("l")) call abort
+  if (iachar(achar(109)) /= 109) call abort
+  if (iachar ("m")/= 109) call abort
+  if (achar (109) /= "m") call abort
+  if ("m" /= achar ( ichar ( "m"))) call abort
+  i = 109
+  c = "m"
+  if (achar(i) /= "m") call abort
+  if (iachar(c) /= iachar("m")) call abort
+  if (iachar(achar(110)) /= 110) call abort
+  if (iachar ("n")/= 110) call abort
+  if (achar (110) /= "n") call abort
+  if ("n" /= achar ( ichar ( "n"))) call abort
+  i = 110
+  c = "n"
+  if (achar(i) /= "n") call abort
+  if (iachar(c) /= iachar("n")) call abort
+  if (iachar(achar(111)) /= 111) call abort
+  if (iachar ("o")/= 111) call abort
+  if (achar (111) /= "o") call abort
+  if ("o" /= achar ( ichar ( "o"))) call abort
+  i = 111
+  c = "o"
+  if (achar(i) /= "o") call abort
+  if (iachar(c) /= iachar("o")) call abort
+  if (iachar(achar(112)) /= 112) call abort
+  if (iachar ("p")/= 112) call abort
+  if (achar (112) /= "p") call abort
+  if ("p" /= achar ( ichar ( "p"))) call abort
+  i = 112
+  c = "p"
+  if (achar(i) /= "p") call abort
+  if (iachar(c) /= iachar("p")) call abort
+  if (iachar(achar(113)) /= 113) call abort
+  if (iachar ("q")/= 113) call abort
+  if (achar (113) /= "q") call abort
+  if ("q" /= achar ( ichar ( "q"))) call abort
+  i = 113
+  c = "q"
+  if (achar(i) /= "q") call abort
+  if (iachar(c) /= iachar("q")) call abort
+  if (iachar(achar(114)) /= 114) call abort
+  if (iachar ("r")/= 114) call abort
+  if (achar (114) /= "r") call abort
+  if ("r" /= achar ( ichar ( "r"))) call abort
+  i = 114
+  c = "r"
+  if (achar(i) /= "r") call abort
+  if (iachar(c) /= iachar("r")) call abort
+  if (iachar(achar(115)) /= 115) call abort
+  if (iachar ("s")/= 115) call abort
+  if (achar (115) /= "s") call abort
+  if ("s" /= achar ( ichar ( "s"))) call abort
+  i = 115
+  c = "s"
+  if (achar(i) /= "s") call abort
+  if (iachar(c) /= iachar("s")) call abort
+  if (iachar(achar(116)) /= 116) call abort
+  if (iachar ("t")/= 116) call abort
+  if (achar (116) /= "t") call abort
+  if ("t" /= achar ( ichar ( "t"))) call abort
+  i = 116
+  c = "t"
+  if (achar(i) /= "t") call abort
+  if (iachar(c) /= iachar("t")) call abort
+  if (iachar(achar(117)) /= 117) call abort
+  if (iachar ("u")/= 117) call abort
+  if (achar (117) /= "u") call abort
+  if ("u" /= achar ( ichar ( "u"))) call abort
+  i = 117
+  c = "u"
+  if (achar(i) /= "u") call abort
+  if (iachar(c) /= iachar("u")) call abort
+  if (iachar(achar(118)) /= 118) call abort
+  if (iachar ("v")/= 118) call abort
+  if (achar (118) /= "v") call abort
+  if ("v" /= achar ( ichar ( "v"))) call abort
+  i = 118
+  c = "v"
+  if (achar(i) /= "v") call abort
+  if (iachar(c) /= iachar("v")) call abort
+  if (iachar(achar(119)) /= 119) call abort
+  if (iachar ("w")/= 119) call abort
+  if (achar (119) /= "w") call abort
+  if ("w" /= achar ( ichar ( "w"))) call abort
+  i = 119
+  c = "w"
+  if (achar(i) /= "w") call abort
+  if (iachar(c) /= iachar("w")) call abort
+  if (iachar(achar(120)) /= 120) call abort
+  if (iachar ("x")/= 120) call abort
+  if (achar (120) /= "x") call abort
+  if ("x" /= achar ( ichar ( "x"))) call abort
+  i = 120
+  c = "x"
+  if (achar(i) /= "x") call abort
+  if (iachar(c) /= iachar("x")) call abort
+  if (iachar(achar(121)) /= 121) call abort
+  if (iachar ("y")/= 121) call abort
+  if (achar (121) /= "y") call abort
+  if ("y" /= achar ( ichar ( "y"))) call abort
+  i = 121
+  c = "y"
+  if (achar(i) /= "y") call abort
+  if (iachar(c) /= iachar("y")) call abort
+  if (iachar(achar(122)) /= 122) call abort
+  if (iachar ("z")/= 122) call abort
+  if (achar (122) /= "z") call abort
+  if ("z" /= achar ( ichar ( "z"))) call abort
+  i = 122
+  c = "z"
+  if (achar(i) /= "z") call abort
+  if (iachar(c) /= iachar("z")) call abort
+  if (iachar(achar(123)) /= 123) call abort
+  if (iachar ("{")/= 123) call abort
+  if (achar (123) /= "{") call abort
+  if ("{" /= achar ( ichar ( "{"))) call abort
+  i = 123
+  c = "{"
+  if (achar(i) /= "{") call abort
+  if (iachar(c) /= iachar("{")) call abort
+  if (iachar(achar(124)) /= 124) call abort
+  if (iachar ("|")/= 124) call abort
+  if (achar (124) /= "|") call abort
+  if ("|" /= achar ( ichar ( "|"))) call abort
+  i = 124
+  c = "|"
+  if (achar(i) /= "|") call abort
+  if (iachar(c) /= iachar("|")) call abort
+  if (iachar(achar(125)) /= 125) call abort
+  if (iachar ("}")/= 125) call abort
+  if (achar (125) /= "}") call abort
+  if ("}" /= achar ( ichar ( "}"))) call abort
+  i = 125
+  c = "}"
+  if (achar(i) /= "}") call abort
+  if (iachar(c) /= iachar("}")) call abort
+  if (iachar(achar(126)) /= 126) call abort
+  if (iachar ("~")/= 126) call abort
+  if (achar (126) /= "~") call abort
+  if ("~" /= achar ( ichar ( "~"))) call abort
+  i = 126
+  c = "~"
+  if (achar(i) /= "~") call abort
+  if (iachar(c) /= iachar("~")) call abort
+  if (iachar(achar(127)) /= 127) call abort
+  if (iachar ("\7f")/= 127) call abort
+  if (achar (127) /= "\7f") call abort
+  if ("\7f" /= achar ( ichar ( "\7f"))) call abort
+  i = 127
+  c = "\7f"
+  if (achar(i) /= "\7f") call abort
+  if (iachar(c) /= iachar("\7f")) call abort
+  if (iachar(achar(128)) /= 128) call abort
+  if (iachar ("\80")/= 128) call abort
+  if (achar (128) /= "\80") call abort
+  if ("\80" /= achar ( ichar ( "\80"))) call abort
+  i = 128
+  c = "\80"
+  if (achar(i) /= "\80") call abort
+  if (iachar(c) /= iachar("\80")) call abort
+  if (iachar(achar(129)) /= 129) call abort
+  if (iachar ("\81")/= 129) call abort
+  if (achar (129) /= "\81") call abort
+  if ("\81" /= achar ( ichar ( "\81"))) call abort
+  i = 129
+  c = "\81"
+  if (achar(i) /= "\81") call abort
+  if (iachar(c) /= iachar("\81")) call abort
+  if (iachar(achar(130)) /= 130) call abort
+  if (iachar ("\82")/= 130) call abort
+  if (achar (130) /= "\82") call abort
+  if ("\82" /= achar ( ichar ( "\82"))) call abort
+  i = 130
+  c = "\82"
+  if (achar(i) /= "\82") call abort
+  if (iachar(c) /= iachar("\82")) call abort
+  if (iachar(achar(131)) /= 131) call abort
+  if (iachar ("\83")/= 131) call abort
+  if (achar (131) /= "\83") call abort
+  if ("\83" /= achar ( ichar ( "\83"))) call abort
+  i = 131
+  c = "\83"
+  if (achar(i) /= "\83") call abort
+  if (iachar(c) /= iachar("\83")) call abort
+  if (iachar(achar(132)) /= 132) call abort
+  if (iachar ("\84")/= 132) call abort
+  if (achar (132) /= "\84") call abort
+  if ("\84" /= achar ( ichar ( "\84"))) call abort
+  i = 132
+  c = "\84"
+  if (achar(i) /= "\84") call abort
+  if (iachar(c) /= iachar("\84")) call abort
+  if (iachar(achar(133)) /= 133) call abort
+  if (iachar ("\85")/= 133) call abort
+  if (achar (133) /= "\85") call abort
+  if ("\85" /= achar ( ichar ( "\85"))) call abort
+  i = 133
+  c = "\85"
+  if (achar(i) /= "\85") call abort
+  if (iachar(c) /= iachar("\85")) call abort
+  if (iachar(achar(134)) /= 134) call abort
+  if (iachar ("\86")/= 134) call abort
+  if (achar (134) /= "\86") call abort
+  if ("\86" /= achar ( ichar ( "\86"))) call abort
+  i = 134
+  c = "\86"
+  if (achar(i) /= "\86") call abort
+  if (iachar(c) /= iachar("\86")) call abort
+  if (iachar(achar(135)) /= 135) call abort
+  if (iachar ("\87")/= 135) call abort
+  if (achar (135) /= "\87") call abort
+  if ("\87" /= achar ( ichar ( "\87"))) call abort
+  i = 135
+  c = "\87"
+  if (achar(i) /= "\87") call abort
+  if (iachar(c) /= iachar("\87")) call abort
+  if (iachar(achar(136)) /= 136) call abort
+  if (iachar ("\88")/= 136) call abort
+  if (achar (136) /= "\88") call abort
+  if ("\88" /= achar ( ichar ( "\88"))) call abort
+  i = 136
+  c = "\88"
+  if (achar(i) /= "\88") call abort
+  if (iachar(c) /= iachar("\88")) call abort
+  if (iachar(achar(137)) /= 137) call abort
+  if (iachar ("\89")/= 137) call abort
+  if (achar (137) /= "\89") call abort
+  if ("\89" /= achar ( ichar ( "\89"))) call abort
+  i = 137
+  c = "\89"
+  if (achar(i) /= "\89") call abort
+  if (iachar(c) /= iachar("\89")) call abort
+  if (iachar(achar(138)) /= 138) call abort
+  if (iachar ("\8a")/= 138) call abort
+  if (achar (138) /= "\8a") call abort
+  if ("\8a" /= achar ( ichar ( "\8a"))) call abort
+  i = 138
+  c = "\8a"
+  if (achar(i) /= "\8a") call abort
+  if (iachar(c) /= iachar("\8a")) call abort
+  if (iachar(achar(139)) /= 139) call abort
+  if (iachar ("\8b")/= 139) call abort
+  if (achar (139) /= "\8b") call abort
+  if ("\8b" /= achar ( ichar ( "\8b"))) call abort
+  i = 139
+  c = "\8b"
+  if (achar(i) /= "\8b") call abort
+  if (iachar(c) /= iachar("\8b")) call abort
+  if (iachar(achar(140)) /= 140) call abort
+  if (iachar ("\8c")/= 140) call abort
+  if (achar (140) /= "\8c") call abort
+  if ("\8c" /= achar ( ichar ( "\8c"))) call abort
+  i = 140
+  c = "\8c"
+  if (achar(i) /= "\8c") call abort
+  if (iachar(c) /= iachar("\8c")) call abort
+  if (iachar(achar(141)) /= 141) call abort
+  if (iachar ("\8d")/= 141) call abort
+  if (achar (141) /= "\8d") call abort
+  if ("\8d" /= achar ( ichar ( "\8d"))) call abort
+  i = 141
+  c = "\8d"
+  if (achar(i) /= "\8d") call abort
+  if (iachar(c) /= iachar("\8d")) call abort
+  if (iachar(achar(142)) /= 142) call abort
+  if (iachar ("\8e")/= 142) call abort
+  if (achar (142) /= "\8e") call abort
+  if ("\8e" /= achar ( ichar ( "\8e"))) call abort
+  i = 142
+  c = "\8e"
+  if (achar(i) /= "\8e") call abort
+  if (iachar(c) /= iachar("\8e")) call abort
+  if (iachar(achar(143)) /= 143) call abort
+  if (iachar ("\8f")/= 143) call abort
+  if (achar (143) /= "\8f") call abort
+  if ("\8f" /= achar ( ichar ( "\8f"))) call abort
+  i = 143
+  c = "\8f"
+  if (achar(i) /= "\8f") call abort
+  if (iachar(c) /= iachar("\8f")) call abort
+  if (iachar(achar(144)) /= 144) call abort
+  if (iachar ("\90")/= 144) call abort
+  if (achar (144) /= "\90") call abort
+  if ("\90" /= achar ( ichar ( "\90"))) call abort
+  i = 144
+  c = "\90"
+  if (achar(i) /= "\90") call abort
+  if (iachar(c) /= iachar("\90")) call abort
+  if (iachar(achar(145)) /= 145) call abort
+  if (iachar ("\91")/= 145) call abort
+  if (achar (145) /= "\91") call abort
+  if ("\91" /= achar ( ichar ( "\91"))) call abort
+  i = 145
+  c = "\91"
+  if (achar(i) /= "\91") call abort
+  if (iachar(c) /= iachar("\91")) call abort
+  if (iachar(achar(146)) /= 146) call abort
+  if (iachar ("\92")/= 146) call abort
+  if (achar (146) /= "\92") call abort
+  if ("\92" /= achar ( ichar ( "\92"))) call abort
+  i = 146
+  c = "\92"
+  if (achar(i) /= "\92") call abort
+  if (iachar(c) /= iachar("\92")) call abort
+  if (iachar(achar(147)) /= 147) call abort
+  if (iachar ("\93")/= 147) call abort
+  if (achar (147) /= "\93") call abort
+  if ("\93" /= achar ( ichar ( "\93"))) call abort
+  i = 147
+  c = "\93"
+  if (achar(i) /= "\93") call abort
+  if (iachar(c) /= iachar("\93")) call abort
+  if (iachar(achar(148)) /= 148) call abort
+  if (iachar ("\94")/= 148) call abort
+  if (achar (148) /= "\94") call abort
+  if ("\94" /= achar ( ichar ( "\94"))) call abort
+  i = 148
+  c = "\94"
+  if (achar(i) /= "\94") call abort
+  if (iachar(c) /= iachar("\94")) call abort
+  if (iachar(achar(149)) /= 149) call abort
+  if (iachar ("\95")/= 149) call abort
+  if (achar (149) /= "\95") call abort
+  if ("\95" /= achar ( ichar ( "\95"))) call abort
+  i = 149
+  c = "\95"
+  if (achar(i) /= "\95") call abort
+  if (iachar(c) /= iachar("\95")) call abort
+  if (iachar(achar(150)) /= 150) call abort
+  if (iachar ("\96")/= 150) call abort
+  if (achar (150) /= "\96") call abort
+  if ("\96" /= achar ( ichar ( "\96"))) call abort
+  i = 150
+  c = "\96"
+  if (achar(i) /= "\96") call abort
+  if (iachar(c) /= iachar("\96")) call abort
+  if (iachar(achar(151)) /= 151) call abort
+  if (iachar ("\97")/= 151) call abort
+  if (achar (151) /= "\97") call abort
+  if ("\97" /= achar ( ichar ( "\97"))) call abort
+  i = 151
+  c = "\97"
+  if (achar(i) /= "\97") call abort
+  if (iachar(c) /= iachar("\97")) call abort
+  if (iachar(achar(152)) /= 152) call abort
+  if (iachar ("\98")/= 152) call abort
+  if (achar (152) /= "\98") call abort
+  if ("\98" /= achar ( ichar ( "\98"))) call abort
+  i = 152
+  c = "\98"
+  if (achar(i) /= "\98") call abort
+  if (iachar(c) /= iachar("\98")) call abort
+  if (iachar(achar(153)) /= 153) call abort
+  if (iachar ("\99")/= 153) call abort
+  if (achar (153) /= "\99") call abort
+  if ("\99" /= achar ( ichar ( "\99"))) call abort
+  i = 153
+  c = "\99"
+  if (achar(i) /= "\99") call abort
+  if (iachar(c) /= iachar("\99")) call abort
+  if (iachar(achar(154)) /= 154) call abort
+  if (iachar ("\9a")/= 154) call abort
+  if (achar (154) /= "\9a") call abort
+  if ("\9a" /= achar ( ichar ( "\9a"))) call abort
+  i = 154
+  c = "\9a"
+  if (achar(i) /= "\9a") call abort
+  if (iachar(c) /= iachar("\9a")) call abort
+  if (iachar(achar(155)) /= 155) call abort
+  if (iachar ("\9b")/= 155) call abort
+  if (achar (155) /= "\9b") call abort
+  if ("\9b" /= achar ( ichar ( "\9b"))) call abort
+  i = 155
+  c = "\9b"
+  if (achar(i) /= "\9b") call abort
+  if (iachar(c) /= iachar("\9b")) call abort
+  if (iachar(achar(156)) /= 156) call abort
+  if (iachar ("\9c")/= 156) call abort
+  if (achar (156) /= "\9c") call abort
+  if ("\9c" /= achar ( ichar ( "\9c"))) call abort
+  i = 156
+  c = "\9c"
+  if (achar(i) /= "\9c") call abort
+  if (iachar(c) /= iachar("\9c")) call abort
+  if (iachar(achar(157)) /= 157) call abort
+  if (iachar ("\9d")/= 157) call abort
+  if (achar (157) /= "\9d") call abort
+  if ("\9d" /= achar ( ichar ( "\9d"))) call abort
+  i = 157
+  c = "\9d"
+  if (achar(i) /= "\9d") call abort
+  if (iachar(c) /= iachar("\9d")) call abort
+  if (iachar(achar(158)) /= 158) call abort
+  if (iachar ("\9e")/= 158) call abort
+  if (achar (158) /= "\9e") call abort
+  if ("\9e" /= achar ( ichar ( "\9e"))) call abort
+  i = 158
+  c = "\9e"
+  if (achar(i) /= "\9e") call abort
+  if (iachar(c) /= iachar("\9e")) call abort
+  if (iachar(achar(159)) /= 159) call abort
+  if (iachar ("\9f")/= 159) call abort
+  if (achar (159) /= "\9f") call abort
+  if ("\9f" /= achar ( ichar ( "\9f"))) call abort
+  i = 159
+  c = "\9f"
+  if (achar(i) /= "\9f") call abort
+  if (iachar(c) /= iachar("\9f")) call abort
+  if (iachar(achar(160)) /= 160) call abort
+  if (iachar (" ")/= 160) call abort
+  if (achar (160) /= " ") call abort
+  if (" " /= achar ( ichar ( " "))) call abort
+  i = 160
+  c = " "
+  if (achar(i) /= " ") call abort
+  if (iachar(c) /= iachar(" ")) call abort
+  if (iachar(achar(161)) /= 161) call abort
+  if (iachar ("¡")/= 161) call abort
+  if (achar (161) /= "¡") call abort
+  if ("¡" /= achar ( ichar ( "¡"))) call abort
+  i = 161
+  c = "¡"
+  if (achar(i) /= "¡") call abort
+  if (iachar(c) /= iachar("¡")) call abort
+  if (iachar(achar(162)) /= 162) call abort
+  if (iachar ("¢")/= 162) call abort
+  if (achar (162) /= "¢") call abort
+  if ("¢" /= achar ( ichar ( "¢"))) call abort
+  i = 162
+  c = "¢"
+  if (achar(i) /= "¢") call abort
+  if (iachar(c) /= iachar("¢")) call abort
+  if (iachar(achar(163)) /= 163) call abort
+  if (iachar ("£")/= 163) call abort
+  if (achar (163) /= "£") call abort
+  if ("£" /= achar ( ichar ( "£"))) call abort
+  i = 163
+  c = "£"
+  if (achar(i) /= "£") call abort
+  if (iachar(c) /= iachar("£")) call abort
+  if (iachar(achar(164)) /= 164) call abort
+  if (iachar ("¤")/= 164) call abort
+  if (achar (164) /= "¤") call abort
+  if ("¤" /= achar ( ichar ( "¤"))) call abort
+  i = 164
+  c = "¤"
+  if (achar(i) /= "¤") call abort
+  if (iachar(c) /= iachar("¤")) call abort
+  if (iachar(achar(165)) /= 165) call abort
+  if (iachar ("¥")/= 165) call abort
+  if (achar (165) /= "¥") call abort
+  if ("¥" /= achar ( ichar ( "¥"))) call abort
+  i = 165
+  c = "¥"
+  if (achar(i) /= "¥") call abort
+  if (iachar(c) /= iachar("¥")) call abort
+  if (iachar(achar(166)) /= 166) call abort
+  if (iachar ("¦")/= 166) call abort
+  if (achar (166) /= "¦") call abort
+  if ("¦" /= achar ( ichar ( "¦"))) call abort
+  i = 166
+  c = "¦"
+  if (achar(i) /= "¦") call abort
+  if (iachar(c) /= iachar("¦")) call abort
+  if (iachar(achar(167)) /= 167) call abort
+  if (iachar ("§")/= 167) call abort
+  if (achar (167) /= "§") call abort
+  if ("§" /= achar ( ichar ( "§"))) call abort
+  i = 167
+  c = "§"
+  if (achar(i) /= "§") call abort
+  if (iachar(c) /= iachar("§")) call abort
+  if (iachar(achar(168)) /= 168) call abort
+  if (iachar ("¨")/= 168) call abort
+  if (achar (168) /= "¨") call abort
+  if ("¨" /= achar ( ichar ( "¨"))) call abort
+  i = 168
+  c = "¨"
+  if (achar(i) /= "¨") call abort
+  if (iachar(c) /= iachar("¨")) call abort
+  if (iachar(achar(169)) /= 169) call abort
+  if (iachar ("©")/= 169) call abort
+  if (achar (169) /= "©") call abort
+  if ("©" /= achar ( ichar ( "©"))) call abort
+  i = 169
+  c = "©"
+  if (achar(i) /= "©") call abort
+  if (iachar(c) /= iachar("©")) call abort
+  if (iachar(achar(170)) /= 170) call abort
+  if (iachar ("ª")/= 170) call abort
+  if (achar (170) /= "ª") call abort
+  if ("ª" /= achar ( ichar ( "ª"))) call abort
+  i = 170
+  c = "ª"
+  if (achar(i) /= "ª") call abort
+  if (iachar(c) /= iachar("ª")) call abort
+  if (iachar(achar(171)) /= 171) call abort
+  if (iachar ("«")/= 171) call abort
+  if (achar (171) /= "«") call abort
+  if ("«" /= achar ( ichar ( "«"))) call abort
+  i = 171
+  c = "«"
+  if (achar(i) /= "«") call abort
+  if (iachar(c) /= iachar("«")) call abort
+  if (iachar(achar(172)) /= 172) call abort
+  if (iachar ("¬")/= 172) call abort
+  if (achar (172) /= "¬") call abort
+  if ("¬" /= achar ( ichar ( "¬"))) call abort
+  i = 172
+  c = "¬"
+  if (achar(i) /= "¬") call abort
+  if (iachar(c) /= iachar("¬")) call abort
+  if (iachar(achar(173)) /= 173) call abort
+  if (iachar ("­")/= 173) call abort
+  if (achar (173) /= "­") call abort
+  if ("­" /= achar ( ichar ( "­"))) call abort
+  i = 173
+  c = "­"
+  if (achar(i) /= "­") call abort
+  if (iachar(c) /= iachar("­")) call abort
+  if (iachar(achar(174)) /= 174) call abort
+  if (iachar ("®")/= 174) call abort
+  if (achar (174) /= "®") call abort
+  if ("®" /= achar ( ichar ( "®"))) call abort
+  i = 174
+  c = "®"
+  if (achar(i) /= "®") call abort
+  if (iachar(c) /= iachar("®")) call abort
+  if (iachar(achar(175)) /= 175) call abort
+  if (iachar ("¯")/= 175) call abort
+  if (achar (175) /= "¯") call abort
+  if ("¯" /= achar ( ichar ( "¯"))) call abort
+  i = 175
+  c = "¯"
+  if (achar(i) /= "¯") call abort
+  if (iachar(c) /= iachar("¯")) call abort
+  if (iachar(achar(176)) /= 176) call abort
+  if (iachar ("°")/= 176) call abort
+  if (achar (176) /= "°") call abort
+  if ("°" /= achar ( ichar ( "°"))) call abort
+  i = 176
+  c = "°"
+  if (achar(i) /= "°") call abort
+  if (iachar(c) /= iachar("°")) call abort
+  if (iachar(achar(177)) /= 177) call abort
+  if (iachar ("±")/= 177) call abort
+  if (achar (177) /= "±") call abort
+  if ("±" /= achar ( ichar ( "±"))) call abort
+  i = 177
+  c = "±"
+  if (achar(i) /= "±") call abort
+  if (iachar(c) /= iachar("±")) call abort
+  if (iachar(achar(178)) /= 178) call abort
+  if (iachar ("²")/= 178) call abort
+  if (achar (178) /= "²") call abort
+  if ("²" /= achar ( ichar ( "²"))) call abort
+  i = 178
+  c = "²"
+  if (achar(i) /= "²") call abort
+  if (iachar(c) /= iachar("²")) call abort
+  if (iachar(achar(179)) /= 179) call abort
+  if (iachar ("³")/= 179) call abort
+  if (achar (179) /= "³") call abort
+  if ("³" /= achar ( ichar ( "³"))) call abort
+  i = 179
+  c = "³"
+  if (achar(i) /= "³") call abort
+  if (iachar(c) /= iachar("³")) call abort
+  if (iachar(achar(180)) /= 180) call abort
+  if (iachar ("´")/= 180) call abort
+  if (achar (180) /= "´") call abort
+  if ("´" /= achar ( ichar ( "´"))) call abort
+  i = 180
+  c = "´"
+  if (achar(i) /= "´") call abort
+  if (iachar(c) /= iachar("´")) call abort
+  if (iachar(achar(181)) /= 181) call abort
+  if (iachar ("µ")/= 181) call abort
+  if (achar (181) /= "µ") call abort
+  if ("µ" /= achar ( ichar ( "µ"))) call abort
+  i = 181
+  c = "µ"
+  if (achar(i) /= "µ") call abort
+  if (iachar(c) /= iachar("µ")) call abort
+  if (iachar(achar(182)) /= 182) call abort
+  if (iachar ("¶")/= 182) call abort
+  if (achar (182) /= "¶") call abort
+  if ("¶" /= achar ( ichar ( "¶"))) call abort
+  i = 182
+  c = "¶"
+  if (achar(i) /= "¶") call abort
+  if (iachar(c) /= iachar("¶")) call abort
+  if (iachar(achar(183)) /= 183) call abort
+  if (iachar ("·")/= 183) call abort
+  if (achar (183) /= "·") call abort
+  if ("·" /= achar ( ichar ( "·"))) call abort
+  i = 183
+  c = "·"
+  if (achar(i) /= "·") call abort
+  if (iachar(c) /= iachar("·")) call abort
+  if (iachar(achar(184)) /= 184) call abort
+  if (iachar ("¸")/= 184) call abort
+  if (achar (184) /= "¸") call abort
+  if ("¸" /= achar ( ichar ( "¸"))) call abort
+  i = 184
+  c = "¸"
+  if (achar(i) /= "¸") call abort
+  if (iachar(c) /= iachar("¸")) call abort
+  if (iachar(achar(185)) /= 185) call abort
+  if (iachar ("¹")/= 185) call abort
+  if (achar (185) /= "¹") call abort
+  if ("¹" /= achar ( ichar ( "¹"))) call abort
+  i = 185
+  c = "¹"
+  if (achar(i) /= "¹") call abort
+  if (iachar(c) /= iachar("¹")) call abort
+  if (iachar(achar(186)) /= 186) call abort
+  if (iachar ("º")/= 186) call abort
+  if (achar (186) /= "º") call abort
+  if ("º" /= achar ( ichar ( "º"))) call abort
+  i = 186
+  c = "º"
+  if (achar(i) /= "º") call abort
+  if (iachar(c) /= iachar("º")) call abort
+  if (iachar(achar(187)) /= 187) call abort
+  if (iachar ("»")/= 187) call abort
+  if (achar (187) /= "»") call abort
+  if ("»" /= achar ( ichar ( "»"))) call abort
+  i = 187
+  c = "»"
+  if (achar(i) /= "»") call abort
+  if (iachar(c) /= iachar("»")) call abort
+  if (iachar(achar(188)) /= 188) call abort
+  if (iachar ("¼")/= 188) call abort
+  if (achar (188) /= "¼") call abort
+  if ("¼" /= achar ( ichar ( "¼"))) call abort
+  i = 188
+  c = "¼"
+  if (achar(i) /= "¼") call abort
+  if (iachar(c) /= iachar("¼")) call abort
+  if (iachar(achar(189)) /= 189) call abort
+  if (iachar ("½")/= 189) call abort
+  if (achar (189) /= "½") call abort
+  if ("½" /= achar ( ichar ( "½"))) call abort
+  i = 189
+  c = "½"
+  if (achar(i) /= "½") call abort
+  if (iachar(c) /= iachar("½")) call abort
+  if (iachar(achar(190)) /= 190) call abort
+  if (iachar ("¾")/= 190) call abort
+  if (achar (190) /= "¾") call abort
+  if ("¾" /= achar ( ichar ( "¾"))) call abort
+  i = 190
+  c = "¾"
+  if (achar(i) /= "¾") call abort
+  if (iachar(c) /= iachar("¾")) call abort
+  if (iachar(achar(191)) /= 191) call abort
+  if (iachar ("¿")/= 191) call abort
+  if (achar (191) /= "¿") call abort
+  if ("¿" /= achar ( ichar ( "¿"))) call abort
+  i = 191
+  c = "¿"
+  if (achar(i) /= "¿") call abort
+  if (iachar(c) /= iachar("¿")) call abort
+  if (iachar(achar(192)) /= 192) call abort
+  if (iachar ("À")/= 192) call abort
+  if (achar (192) /= "À") call abort
+  if ("À" /= achar ( ichar ( "À"))) call abort
+  i = 192
+  c = "À"
+  if (achar(i) /= "À") call abort
+  if (iachar(c) /= iachar("À")) call abort
+  if (iachar(achar(193)) /= 193) call abort
+  if (iachar ("Á")/= 193) call abort
+  if (achar (193) /= "Á") call abort
+  if ("Á" /= achar ( ichar ( "Á"))) call abort
+  i = 193
+  c = "Á"
+  if (achar(i) /= "Á") call abort
+  if (iachar(c) /= iachar("Á")) call abort
+  if (iachar(achar(194)) /= 194) call abort
+  if (iachar ("Â")/= 194) call abort
+  if (achar (194) /= "Â") call abort
+  if ("Â" /= achar ( ichar ( "Â"))) call abort
+  i = 194
+  c = "Â"
+  if (achar(i) /= "Â") call abort
+  if (iachar(c) /= iachar("Â")) call abort
+  if (iachar(achar(195)) /= 195) call abort
+  if (iachar ("Ã")/= 195) call abort
+  if (achar (195) /= "Ã") call abort
+  if ("Ã" /= achar ( ichar ( "Ã"))) call abort
+  i = 195
+  c = "Ã"
+  if (achar(i) /= "Ã") call abort
+  if (iachar(c) /= iachar("Ã")) call abort
+  if (iachar(achar(196)) /= 196) call abort
+  if (iachar ("Ä")/= 196) call abort
+  if (achar (196) /= "Ä") call abort
+  if ("Ä" /= achar ( ichar ( "Ä"))) call abort
+  i = 196
+  c = "Ä"
+  if (achar(i) /= "Ä") call abort
+  if (iachar(c) /= iachar("Ä")) call abort
+  if (iachar(achar(197)) /= 197) call abort
+  if (iachar ("Å")/= 197) call abort
+  if (achar (197) /= "Å") call abort
+  if ("Å" /= achar ( ichar ( "Å"))) call abort
+  i = 197
+  c = "Å"
+  if (achar(i) /= "Å") call abort
+  if (iachar(c) /= iachar("Å")) call abort
+  if (iachar(achar(198)) /= 198) call abort
+  if (iachar ("Æ")/= 198) call abort
+  if (achar (198) /= "Æ") call abort
+  if ("Æ" /= achar ( ichar ( "Æ"))) call abort
+  i = 198
+  c = "Æ"
+  if (achar(i) /= "Æ") call abort
+  if (iachar(c) /= iachar("Æ")) call abort
+  if (iachar(achar(199)) /= 199) call abort
+  if (iachar ("Ç")/= 199) call abort
+  if (achar (199) /= "Ç") call abort
+  if ("Ç" /= achar ( ichar ( "Ç"))) call abort
+  i = 199
+  c = "Ç"
+  if (achar(i) /= "Ç") call abort
+  if (iachar(c) /= iachar("Ç")) call abort
+  if (iachar(achar(200)) /= 200) call abort
+  if (iachar ("È")/= 200) call abort
+  if (achar (200) /= "È") call abort
+  if ("È" /= achar ( ichar ( "È"))) call abort
+  i = 200
+  c = "È"
+  if (achar(i) /= "È") call abort
+  if (iachar(c) /= iachar("È")) call abort
+  if (iachar(achar(201)) /= 201) call abort
+  if (iachar ("É")/= 201) call abort
+  if (achar (201) /= "É") call abort
+  if ("É" /= achar ( ichar ( "É"))) call abort
+  i = 201
+  c = "É"
+  if (achar(i) /= "É") call abort
+  if (iachar(c) /= iachar("É")) call abort
+  if (iachar(achar(202)) /= 202) call abort
+  if (iachar ("Ê")/= 202) call abort
+  if (achar (202) /= "Ê") call abort
+  if ("Ê" /= achar ( ichar ( "Ê"))) call abort
+  i = 202
+  c = "Ê"
+  if (achar(i) /= "Ê") call abort
+  if (iachar(c) /= iachar("Ê")) call abort
+  if (iachar(achar(203)) /= 203) call abort
+  if (iachar ("Ë")/= 203) call abort
+  if (achar (203) /= "Ë") call abort
+  if ("Ë" /= achar ( ichar ( "Ë"))) call abort
+  i = 203
+  c = "Ë"
+  if (achar(i) /= "Ë") call abort
+  if (iachar(c) /= iachar("Ë")) call abort
+  if (iachar(achar(204)) /= 204) call abort
+  if (iachar ("Ì")/= 204) call abort
+  if (achar (204) /= "Ì") call abort
+  if ("Ì" /= achar ( ichar ( "Ì"))) call abort
+  i = 204
+  c = "Ì"
+  if (achar(i) /= "Ì") call abort
+  if (iachar(c) /= iachar("Ì")) call abort
+  if (iachar(achar(205)) /= 205) call abort
+  if (iachar ("Í")/= 205) call abort
+  if (achar (205) /= "Í") call abort
+  if ("Í" /= achar ( ichar ( "Í"))) call abort
+  i = 205
+  c = "Í"
+  if (achar(i) /= "Í") call abort
+  if (iachar(c) /= iachar("Í")) call abort
+  if (iachar(achar(206)) /= 206) call abort
+  if (iachar ("Î")/= 206) call abort
+  if (achar (206) /= "Î") call abort
+  if ("Î" /= achar ( ichar ( "Î"))) call abort
+  i = 206
+  c = "Î"
+  if (achar(i) /= "Î") call abort
+  if (iachar(c) /= iachar("Î")) call abort
+  if (iachar(achar(207)) /= 207) call abort
+  if (iachar ("Ï")/= 207) call abort
+  if (achar (207) /= "Ï") call abort
+  if ("Ï" /= achar ( ichar ( "Ï"))) call abort
+  i = 207
+  c = "Ï"
+  if (achar(i) /= "Ï") call abort
+  if (iachar(c) /= iachar("Ï")) call abort
+  if (iachar(achar(208)) /= 208) call abort
+  if (iachar ("Ð")/= 208) call abort
+  if (achar (208) /= "Ð") call abort
+  if ("Ð" /= achar ( ichar ( "Ð"))) call abort
+  i = 208
+  c = "Ð"
+  if (achar(i) /= "Ð") call abort
+  if (iachar(c) /= iachar("Ð")) call abort
+  if (iachar(achar(209)) /= 209) call abort
+  if (iachar ("Ñ")/= 209) call abort
+  if (achar (209) /= "Ñ") call abort
+  if ("Ñ" /= achar ( ichar ( "Ñ"))) call abort
+  i = 209
+  c = "Ñ"
+  if (achar(i) /= "Ñ") call abort
+  if (iachar(c) /= iachar("Ñ")) call abort
+  if (iachar(achar(210)) /= 210) call abort
+  if (iachar ("Ò")/= 210) call abort
+  if (achar (210) /= "Ò") call abort
+  if ("Ò" /= achar ( ichar ( "Ò"))) call abort
+  i = 210
+  c = "Ò"
+  if (achar(i) /= "Ò") call abort
+  if (iachar(c) /= iachar("Ò")) call abort
+  if (iachar(achar(211)) /= 211) call abort
+  if (iachar ("Ó")/= 211) call abort
+  if (achar (211) /= "Ó") call abort
+  if ("Ó" /= achar ( ichar ( "Ó"))) call abort
+  i = 211
+  c = "Ó"
+  if (achar(i) /= "Ó") call abort
+  if (iachar(c) /= iachar("Ó")) call abort
+  if (iachar(achar(212)) /= 212) call abort
+  if (iachar ("Ô")/= 212) call abort
+  if (achar (212) /= "Ô") call abort
+  if ("Ô" /= achar ( ichar ( "Ô"))) call abort
+  i = 212
+  c = "Ô"
+  if (achar(i) /= "Ô") call abort
+  if (iachar(c) /= iachar("Ô")) call abort
+  if (iachar(achar(213)) /= 213) call abort
+  if (iachar ("Õ")/= 213) call abort
+  if (achar (213) /= "Õ") call abort
+  if ("Õ" /= achar ( ichar ( "Õ"))) call abort
+  i = 213
+  c = "Õ"
+  if (achar(i) /= "Õ") call abort
+  if (iachar(c) /= iachar("Õ")) call abort
+  if (iachar(achar(214)) /= 214) call abort
+  if (iachar ("Ö")/= 214) call abort
+  if (achar (214) /= "Ö") call abort
+  if ("Ö" /= achar ( ichar ( "Ö"))) call abort
+  i = 214
+  c = "Ö"
+  if (achar(i) /= "Ö") call abort
+  if (iachar(c) /= iachar("Ö")) call abort
+  if (iachar(achar(215)) /= 215) call abort
+  if (iachar ("×")/= 215) call abort
+  if (achar (215) /= "×") call abort
+  if ("×" /= achar ( ichar ( "×"))) call abort
+  i = 215
+  c = "×"
+  if (achar(i) /= "×") call abort
+  if (iachar(c) /= iachar("×")) call abort
+  if (iachar(achar(216)) /= 216) call abort
+  if (iachar ("Ø")/= 216) call abort
+  if (achar (216) /= "Ø") call abort
+  if ("Ø" /= achar ( ichar ( "Ø"))) call abort
+  i = 216
+  c = "Ø"
+  if (achar(i) /= "Ø") call abort
+  if (iachar(c) /= iachar("Ø")) call abort
+  if (iachar(achar(217)) /= 217) call abort
+  if (iachar ("Ù")/= 217) call abort
+  if (achar (217) /= "Ù") call abort
+  if ("Ù" /= achar ( ichar ( "Ù"))) call abort
+  i = 217
+  c = "Ù"
+  if (achar(i) /= "Ù") call abort
+  if (iachar(c) /= iachar("Ù")) call abort
+  if (iachar(achar(218)) /= 218) call abort
+  if (iachar ("Ú")/= 218) call abort
+  if (achar (218) /= "Ú") call abort
+  if ("Ú" /= achar ( ichar ( "Ú"))) call abort
+  i = 218
+  c = "Ú"
+  if (achar(i) /= "Ú") call abort
+  if (iachar(c) /= iachar("Ú")) call abort
+  if (iachar(achar(219)) /= 219) call abort
+  if (iachar ("Û")/= 219) call abort
+  if (achar (219) /= "Û") call abort
+  if ("Û" /= achar ( ichar ( "Û"))) call abort
+  i = 219
+  c = "Û"
+  if (achar(i) /= "Û") call abort
+  if (iachar(c) /= iachar("Û")) call abort
+  if (iachar(achar(220)) /= 220) call abort
+  if (iachar ("Ü")/= 220) call abort
+  if (achar (220) /= "Ü") call abort
+  if ("Ü" /= achar ( ichar ( "Ü"))) call abort
+  i = 220
+  c = "Ü"
+  if (achar(i) /= "Ü") call abort
+  if (iachar(c) /= iachar("Ü")) call abort
+  if (iachar(achar(221)) /= 221) call abort
+  if (iachar ("Ý")/= 221) call abort
+  if (achar (221) /= "Ý") call abort
+  if ("Ý" /= achar ( ichar ( "Ý"))) call abort
+  i = 221
+  c = "Ý"
+  if (achar(i) /= "Ý") call abort
+  if (iachar(c) /= iachar("Ý")) call abort
+  if (iachar(achar(222)) /= 222) call abort
+  if (iachar ("Þ")/= 222) call abort
+  if (achar (222) /= "Þ") call abort
+  if ("Þ" /= achar ( ichar ( "Þ"))) call abort
+  i = 222
+  c = "Þ"
+  if (achar(i) /= "Þ") call abort
+  if (iachar(c) /= iachar("Þ")) call abort
+  if (iachar(achar(223)) /= 223) call abort
+  if (iachar ("ß")/= 223) call abort
+  if (achar (223) /= "ß") call abort
+  if ("ß" /= achar ( ichar ( "ß"))) call abort
+  i = 223
+  c = "ß"
+  if (achar(i) /= "ß") call abort
+  if (iachar(c) /= iachar("ß")) call abort
+  if (iachar(achar(224)) /= 224) call abort
+  if (iachar ("à")/= 224) call abort
+  if (achar (224) /= "à") call abort
+  if ("à" /= achar ( ichar ( "à"))) call abort
+  i = 224
+  c = "à"
+  if (achar(i) /= "à") call abort
+  if (iachar(c) /= iachar("à")) call abort
+  if (iachar(achar(225)) /= 225) call abort
+  if (iachar ("á")/= 225) call abort
+  if (achar (225) /= "á") call abort
+  if ("á" /= achar ( ichar ( "á"))) call abort
+  i = 225
+  c = "á"
+  if (achar(i) /= "á") call abort
+  if (iachar(c) /= iachar("á")) call abort
+  if (iachar(achar(226)) /= 226) call abort
+  if (iachar ("â")/= 226) call abort
+  if (achar (226) /= "â") call abort
+  if ("â" /= achar ( ichar ( "â"))) call abort
+  i = 226
+  c = "â"
+  if (achar(i) /= "â") call abort
+  if (iachar(c) /= iachar("â")) call abort
+  if (iachar(achar(227)) /= 227) call abort
+  if (iachar ("ã")/= 227) call abort
+  if (achar (227) /= "ã") call abort
+  if ("ã" /= achar ( ichar ( "ã"))) call abort
+  i = 227
+  c = "ã"
+  if (achar(i) /= "ã") call abort
+  if (iachar(c) /= iachar("ã")) call abort
+  if (iachar(achar(228)) /= 228) call abort
+  if (iachar ("ä")/= 228) call abort
+  if (achar (228) /= "ä") call abort
+  if ("ä" /= achar ( ichar ( "ä"))) call abort
+  i = 228
+  c = "ä"
+  if (achar(i) /= "ä") call abort
+  if (iachar(c) /= iachar("ä")) call abort
+  if (iachar(achar(229)) /= 229) call abort
+  if (iachar ("å")/= 229) call abort
+  if (achar (229) /= "å") call abort
+  if ("å" /= achar ( ichar ( "å"))) call abort
+  i = 229
+  c = "å"
+  if (achar(i) /= "å") call abort
+  if (iachar(c) /= iachar("å")) call abort
+  if (iachar(achar(230)) /= 230) call abort
+  if (iachar ("æ")/= 230) call abort
+  if (achar (230) /= "æ") call abort
+  if ("æ" /= achar ( ichar ( "æ"))) call abort
+  i = 230
+  c = "æ"
+  if (achar(i) /= "æ") call abort
+  if (iachar(c) /= iachar("æ")) call abort
+  if (iachar(achar(231)) /= 231) call abort
+  if (iachar ("ç")/= 231) call abort
+  if (achar (231) /= "ç") call abort
+  if ("ç" /= achar ( ichar ( "ç"))) call abort
+  i = 231
+  c = "ç"
+  if (achar(i) /= "ç") call abort
+  if (iachar(c) /= iachar("ç")) call abort
+  if (iachar(achar(232)) /= 232) call abort
+  if (iachar ("è")/= 232) call abort
+  if (achar (232) /= "è") call abort
+  if ("è" /= achar ( ichar ( "è"))) call abort
+  i = 232
+  c = "è"
+  if (achar(i) /= "è") call abort
+  if (iachar(c) /= iachar("è")) call abort
+  if (iachar(achar(233)) /= 233) call abort
+  if (iachar ("é")/= 233) call abort
+  if (achar (233) /= "é") call abort
+  if ("é" /= achar ( ichar ( "é"))) call abort
+  i = 233
+  c = "é"
+  if (achar(i) /= "é") call abort
+  if (iachar(c) /= iachar("é")) call abort
+  if (iachar(achar(234)) /= 234) call abort
+  if (iachar ("ê")/= 234) call abort
+  if (achar (234) /= "ê") call abort
+  if ("ê" /= achar ( ichar ( "ê"))) call abort
+  i = 234
+  c = "ê"
+  if (achar(i) /= "ê") call abort
+  if (iachar(c) /= iachar("ê")) call abort
+  if (iachar(achar(235)) /= 235) call abort
+  if (iachar ("ë")/= 235) call abort
+  if (achar (235) /= "ë") call abort
+  if ("ë" /= achar ( ichar ( "ë"))) call abort
+  i = 235
+  c = "ë"
+  if (achar(i) /= "ë") call abort
+  if (iachar(c) /= iachar("ë")) call abort
+  if (iachar(achar(236)) /= 236) call abort
+  if (iachar ("ì")/= 236) call abort
+  if (achar (236) /= "ì") call abort
+  if ("ì" /= achar ( ichar ( "ì"))) call abort
+  i = 236
+  c = "ì"
+  if (achar(i) /= "ì") call abort
+  if (iachar(c) /= iachar("ì")) call abort
+  if (iachar(achar(237)) /= 237) call abort
+  if (iachar ("í")/= 237) call abort
+  if (achar (237) /= "í") call abort
+  if ("í" /= achar ( ichar ( "í"))) call abort
+  i = 237
+  c = "í"
+  if (achar(i) /= "í") call abort
+  if (iachar(c) /= iachar("í")) call abort
+  if (iachar(achar(238)) /= 238) call abort
+  if (iachar ("î")/= 238) call abort
+  if (achar (238) /= "î") call abort
+  if ("î" /= achar ( ichar ( "î"))) call abort
+  i = 238
+  c = "î"
+  if (achar(i) /= "î") call abort
+  if (iachar(c) /= iachar("î")) call abort
+  if (iachar(achar(239)) /= 239) call abort
+  if (iachar ("ï")/= 239) call abort
+  if (achar (239) /= "ï") call abort
+  if ("ï" /= achar ( ichar ( "ï"))) call abort
+  i = 239
+  c = "ï"
+  if (achar(i) /= "ï") call abort
+  if (iachar(c) /= iachar("ï")) call abort
+  if (iachar(achar(240)) /= 240) call abort
+  if (iachar ("ð")/= 240) call abort
+  if (achar (240) /= "ð") call abort
+  if ("ð" /= achar ( ichar ( "ð"))) call abort
+  i = 240
+  c = "ð"
+  if (achar(i) /= "ð") call abort
+  if (iachar(c) /= iachar("ð")) call abort
+  if (iachar(achar(241)) /= 241) call abort
+  if (iachar ("ñ")/= 241) call abort
+  if (achar (241) /= "ñ") call abort
+  if ("ñ" /= achar ( ichar ( "ñ"))) call abort
+  i = 241
+  c = "ñ"
+  if (achar(i) /= "ñ") call abort
+  if (iachar(c) /= iachar("ñ")) call abort
+  if (iachar(achar(242)) /= 242) call abort
+  if (iachar ("ò")/= 242) call abort
+  if (achar (242) /= "ò") call abort
+  if ("ò" /= achar ( ichar ( "ò"))) call abort
+  i = 242
+  c = "ò"
+  if (achar(i) /= "ò") call abort
+  if (iachar(c) /= iachar("ò")) call abort
+  if (iachar(achar(243)) /= 243) call abort
+  if (iachar ("ó")/= 243) call abort
+  if (achar (243) /= "ó") call abort
+  if ("ó" /= achar ( ichar ( "ó"))) call abort
+  i = 243
+  c = "ó"
+  if (achar(i) /= "ó") call abort
+  if (iachar(c) /= iachar("ó")) call abort
+  if (iachar(achar(244)) /= 244) call abort
+  if (iachar ("ô")/= 244) call abort
+  if (achar (244) /= "ô") call abort
+  if ("ô" /= achar ( ichar ( "ô"))) call abort
+  i = 244
+  c = "ô"
+  if (achar(i) /= "ô") call abort
+  if (iachar(c) /= iachar("ô")) call abort
+  if (iachar(achar(245)) /= 245) call abort
+  if (iachar ("õ")/= 245) call abort
+  if (achar (245) /= "õ") call abort
+  if ("õ" /= achar ( ichar ( "õ"))) call abort
+  i = 245
+  c = "õ"
+  if (achar(i) /= "õ") call abort
+  if (iachar(c) /= iachar("õ")) call abort
+  if (iachar(achar(246)) /= 246) call abort
+  if (iachar ("ö")/= 246) call abort
+  if (achar (246) /= "ö") call abort
+  if ("ö" /= achar ( ichar ( "ö"))) call abort
+  i = 246
+  c = "ö"
+  if (achar(i) /= "ö") call abort
+  if (iachar(c) /= iachar("ö")) call abort
+  if (iachar(achar(247)) /= 247) call abort
+  if (iachar ("÷")/= 247) call abort
+  if (achar (247) /= "÷") call abort
+  if ("÷" /= achar ( ichar ( "÷"))) call abort
+  i = 247
+  c = "÷"
+  if (achar(i) /= "÷") call abort
+  if (iachar(c) /= iachar("÷")) call abort
+  if (iachar(achar(248)) /= 248) call abort
+  if (iachar ("ø")/= 248) call abort
+  if (achar (248) /= "ø") call abort
+  if ("ø" /= achar ( ichar ( "ø"))) call abort
+  i = 248
+  c = "ø"
+  if (achar(i) /= "ø") call abort
+  if (iachar(c) /= iachar("ø")) call abort
+  if (iachar(achar(249)) /= 249) call abort
+  if (iachar ("ù")/= 249) call abort
+  if (achar (249) /= "ù") call abort
+  if ("ù" /= achar ( ichar ( "ù"))) call abort
+  i = 249
+  c = "ù"
+  if (achar(i) /= "ù") call abort
+  if (iachar(c) /= iachar("ù")) call abort
+  if (iachar(achar(250)) /= 250) call abort
+  if (iachar ("ú")/= 250) call abort
+  if (achar (250) /= "ú") call abort
+  if ("ú" /= achar ( ichar ( "ú"))) call abort
+  i = 250
+  c = "ú"
+  if (achar(i) /= "ú") call abort
+  if (iachar(c) /= iachar("ú")) call abort
+  if (iachar(achar(251)) /= 251) call abort
+  if (iachar ("û")/= 251) call abort
+  if (achar (251) /= "û") call abort
+  if ("û" /= achar ( ichar ( "û"))) call abort
+  i = 251
+  c = "û"
+  if (achar(i) /= "û") call abort
+  if (iachar(c) /= iachar("û")) call abort
+  if (iachar(achar(252)) /= 252) call abort
+  if (iachar ("ü")/= 252) call abort
+  if (achar (252) /= "ü") call abort
+  if ("ü" /= achar ( ichar ( "ü"))) call abort
+  i = 252
+  c = "ü"
+  if (achar(i) /= "ü") call abort
+  if (iachar(c) /= iachar("ü")) call abort
+  if (iachar(achar(253)) /= 253) call abort
+  if (iachar ("ý")/= 253) call abort
+  if (achar (253) /= "ý") call abort
+  if ("ý" /= achar ( ichar ( "ý"))) call abort
+  i = 253
+  c = "ý"
+  if (achar(i) /= "ý") call abort
+  if (iachar(c) /= iachar("ý")) call abort
+  if (iachar(achar(254)) /= 254) call abort
+  if (iachar ("þ")/= 254) call abort
+  if (achar (254) /= "þ") call abort
+  if ("þ" /= achar ( ichar ( "þ"))) call abort
+  i = 254
+  c = "þ"
+  if (achar(i) /= "þ") call abort
+  if (iachar(c) /= iachar("þ")) call abort
+  if (iachar(achar(255)) /= 255) call abort
+  if (iachar ("ÿ")/= 255) call abort
+  if (achar (255) /= "ÿ") call abort
+  if ("ÿ" /= achar ( ichar ( "ÿ"))) call abort
+  i = 255
+  c = "ÿ"
+  if (achar(i) /= "ÿ") call abort
+  if (iachar(c) /= iachar("ÿ")) call abort
+end program main
diff --git a/gcc/testsuite/gfortran.dg/achar_3.f90 b/gcc/testsuite/gfortran.dg/achar_3.f90
new file mode 100644 (file)
index 0000000..3b6f902
--- /dev/null
@@ -0,0 +1,9 @@
+! { dg-do compile }
+! { dg-options "-Wall" }
+program main
+  print *,achar(-3)     ! { dg-warning "outside of range" }
+  print *,achar(200)    ! { dg-warning "outside of range" }
+  print *,char(222+221) ! { dg-error "outside of range" }
+  print *,char(-44)     ! { dg-error "outside of range" }
+  print *,iachar("ü")   ! { dg-warning "outside of range" }
+end program main