]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR modula2/102989: reimplement overflow detection in ztype though WIDE_INT_MAX_PRECISION
authorGaius Mulley <gaiusmod2@gmail.com>
Wed, 1 Nov 2023 09:05:10 +0000 (09:05 +0000)
committerGaius Mulley <gaiusmod2@gmail.com>
Wed, 1 Nov 2023 09:05:10 +0000 (09:05 +0000)
The ZTYPE in iso modula2 is used to denote intemediate ordinal type const
expressions and these are always converted into the
approriate language or user ordinal type prior to code generation.
The increase of bits supported by _BitInt causes the modula2 largeconst.mod
regression failure tests to pass.  The largeconst.mod test has been
increased to fail, however the char at a time overflow check is now too slow
to detect failure.  The overflow detection for the ZTYPE has been
rewritten to check against exceeding WIDE_INT_MAX_PRECISION (many orders of
magnitude faster).

gcc/m2/ChangeLog:

PR modula2/102989
* gm2-compiler/SymbolTable.mod (OverflowZType): Import from m2expr.
(ConstantStringExceedsZType): Remove import.
(GetConstLitType): Replace ConstantStringExceedsZType with OverflowZType.
* gm2-gcc/m2decl.cc (m2decl_ConstantStringExceedsZType): Remove.
(m2decl_BuildConstLiteralNumber): Re-write.
* gm2-gcc/m2decl.def (ConstantStringExceedsZType): Remove.
* gm2-gcc/m2decl.h (m2decl_ConstantStringExceedsZType): Remove.
* gm2-gcc/m2expr.cc (m2expr_StrToWideInt): Rewrite to check overflow.
(m2expr_OverflowZType): New function.
(ToWideInt): New function.
* gm2-gcc/m2expr.def (OverflowZType): New procedure function declaration.
* gm2-gcc/m2expr.h (m2expr_OverflowZType): New prototype.

gcc/testsuite/ChangeLog:

PR modula2/102989
* gm2/pim/fail/largeconst.mod: Updated foo to an outrageous value.
* gm2/pim/fail/largeconst2.mod: Duplicate test removed.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
gcc/m2/gm2-compiler/SymbolTable.mod
gcc/m2/gm2-gcc/m2decl.cc
gcc/m2/gm2-gcc/m2decl.def
gcc/m2/gm2-gcc/m2decl.h
gcc/m2/gm2-gcc/m2expr.cc
gcc/m2/gm2-gcc/m2expr.def
gcc/m2/gm2-gcc/m2expr.h
gcc/testsuite/gm2/pim/fail/largeconst.mod
gcc/testsuite/gm2/pim/fail/largeconst2.mod [deleted file]

index c2ed90f2a0cbb5efdc088d3f181e994c7f45e6fb..d82a38c48f35d5d0c2a26dd8c01d7d44a084508c 100644 (file)
@@ -76,7 +76,7 @@ FROM M2Base IMPORT MixTypes, InitBase, Char, Integer, LongReal,
                    Cardinal, LongInt, LongCard, ZType, RType ;
 
 FROM M2System IMPORT Address ;
-FROM m2decl IMPORT ConstantStringExceedsZType ;
+FROM m2expr IMPORT OverflowZType ;
 FROM m2tree IMPORT Tree ;
 FROM m2linemap IMPORT BuiltinsLocation ;
 FROM StrLib IMPORT StrEqual ;
@@ -6588,12 +6588,12 @@ BEGIN
       loc := TokenToLocation (tok) ;
       CASE char (s, -1) OF
 
-      'H':  overflow := ConstantStringExceedsZType (loc, string (s), 16, issueError) |
-      'B':  overflow := ConstantStringExceedsZType (loc, string (s), 8, issueError) |
-      'A':  overflow := ConstantStringExceedsZType (loc, string (s), 2, issueError)
+      'H':  overflow := OverflowZType (loc, string (s), 16, issueError) |
+      'B':  overflow := OverflowZType (loc, string (s), 8, issueError) |
+      'A':  overflow := OverflowZType (loc, string (s), 2, issueError)
 
       ELSE
-         overflow := ConstantStringExceedsZType (loc, string (s), 10, issueError)
+         overflow := OverflowZType (loc, string (s), 10, issueError)
       END ;
       s := KillString (s) ;
       RETURN ZType
index 535e3a6349772c6c9e8702505830caaaba03a820..24fff752d0adfec9a0001bb991d46e9f997c3afc 100644 (file)
@@ -284,17 +284,6 @@ m2decl_DeclareModuleCtor (tree decl)
   return decl;
 }
 
-/* ConstantStringExceedsZType return TRUE if str cannot be represented in the ZTYPE.  */
-
-bool
-m2decl_ConstantStringExceedsZType (location_t location,
-                                  const char *str, unsigned int base,
-                                  bool issueError)
-{
-  widest_int wval;
-  return m2expr_StrToWideInt (location, str, base, wval, issueError);
-}
-
 /* BuildConstLiteralNumber - returns a GCC TREE built from the
    string, str.  It assumes that, str, represents a legal number in
    Modula-2.  It always returns a positive value.  */
@@ -305,12 +294,22 @@ m2decl_BuildConstLiteralNumber (location_t location, const char *str,
 {
   widest_int wval;
   tree value;
-  bool overflow = m2expr_StrToWideInt (location, str, base, wval, issueError);
-  value = wide_int_to_tree (m2type_GetM2ZType (), wval);
-
-  if (issueError && (overflow || m2expr_TreeOverflow (value)))
+  bool overflow = m2expr_OverflowZType (location, str, base, issueError);
+  if (overflow)
+    value = m2expr_GetIntegerZero (location);
+  else
+    {
+      overflow = m2expr_StrToWideInt (location, str, base, wval, issueError);
+      if (overflow)
+       value = m2expr_GetIntegerZero (location);
+      else
+       {
+         value = wide_int_to_tree (m2type_GetM2ZType (), wval);
+         overflow = m2expr_TreeOverflow (value);
+       }
+    }
+  if (issueError && overflow)
     error_at (location, "constant %qs is too large", str);
-
   return m2block_RememberConstant (value);
 }
 
index 2fe44341b857306d9075b3220fea5812f297bd2b..4bfeb15fe6715ea1fd3e3adea943639f5c5ec249 100644 (file)
@@ -160,15 +160,6 @@ PROCEDURE BuildEndFunctionDeclaration (location_begin, location_end: location_t;
 PROCEDURE RememberVariables (l: Tree) ;
 
 
-(*
-   ConstantStringExceedsZType - return TRUE if str exceeds the ZTYPE range.
-*)
-
-PROCEDURE ConstantStringExceedsZType (location: location_t;
-                                      str: ADDRESS; base: CARDINAL;
-                                      issueError: BOOLEAN) : BOOLEAN ;
-
-
 (*
     BuildConstLiteralNumber - returns a GCC TREE built from the string, str.
                               It assumes that, str, represents a legal
index 375697672c58c1fa7553d49159db8d7d8be38151..31e6bc71c24a7d76f54844be860be921ec7110a2 100644 (file)
@@ -51,9 +51,6 @@ EXTERN tree m2decl_BuildConstLiteralNumber (location_t location,
                                            const char *str,
                                             unsigned int base,
                                            bool issueError);
-EXTERN bool m2decl_ConstantStringExceedsZType (location_t location,
-                                              const char *str, unsigned int base,
-                                              bool issueError);
 EXTERN void m2decl_RememberVariables (tree l);
 
 EXTERN tree m2decl_BuildEndFunctionDeclaration (
index bb56a572320b986cef39f1c5f35c61bf227eba9f..a19aed5778542fe97e796464722ca40dcb20ce05 100644 (file)
@@ -40,6 +40,7 @@ along with GNU Modula-2; see the file COPYING3.  If not see
 #include "m2treelib.h"
 #include "m2type.h"
 #include "m2linemap.h"
+#include "math.h"
 
 static void m2expr_checkRealOverflow (location_t location, enum tree_code code,
                                       tree result);
@@ -3873,13 +3874,54 @@ m2expr_BuildBinaryForeachWordDo (location_t location, tree type, tree op1,
 }
 
 
-/* StrToWideInt return true if an overflow occurs when attempting to convert
-   str to an unsigned ZTYPE the value is contained in the widest_int result.
-   The value result is undefined if true is returned.  */
+/* OverflowZType returns true if the ZTYPE str will exceed the
+   internal representation.  This routine is much faster (at
+   least 2 orders of magnitude faster) than the char at a time overflow
+   detection used in ToWideInt and so it should be
+   used to filter out erroneously large constants before calling ToWideInt
+   allowing a quick fail.  */
 
 bool
-m2expr_StrToWideInt (location_t location, const char *str, unsigned int base,
-                    widest_int &result, bool issueError)
+m2expr_OverflowZType (location_t location, const char *str, unsigned int base,
+                     bool issueError)
+{
+  int length = strlen (str);
+  bool overflow = false;
+
+  switch (base)
+    {
+    case 2:
+      overflow = ((length -1) > WIDE_INT_MAX_PRECISION);
+      break;
+    case 8:
+      overflow = (((length -1) * 3) > WIDE_INT_MAX_PRECISION);
+      break;
+    case 10:
+      {
+       int str_log10 = length;
+       int bits_str = (int) (((float) (str_log10)) / log10f (2.0)) + 1;
+       overflow = (bits_str > WIDE_INT_MAX_PRECISION);
+      }
+      break;
+    case 16:
+      overflow = (((length -1) * 4) > WIDE_INT_MAX_PRECISION);
+      break;
+    default:
+      gcc_unreachable ();
+    }
+  if (issueError && overflow)
+    error_at (location,
+             "constant literal %qs exceeds internal ZTYPE range", str);
+  return overflow;
+}
+
+
+/* ToWideInt converts a ZTYPE str value into result.  */
+
+static
+bool
+ToWideInt (location_t location, const char *str, unsigned int base,
+          widest_int &result, bool issueError)
 {
   tree type = m2type_GetM2ZType ();
   unsigned int i = 0;
@@ -3990,6 +4032,20 @@ m2expr_StrToWideInt (location_t location, const char *str, unsigned int base,
 }
 
 
+/* StrToWideInt return true if an overflow occurs when attempting to convert
+   str to an unsigned ZTYPE the value is contained in the widest_int result.
+   The value result is undefined if true is returned.  */
+
+bool
+m2expr_StrToWideInt (location_t location, const char *str, unsigned int base,
+                    widest_int &result, bool issueError)
+{
+  if (m2expr_OverflowZType (location, str, base, issueError))
+    return true;
+  return ToWideInt (location, str, base, result, issueError);
+}
+
+
 /* GetSizeOfInBits return the number of bits used to contain, type.  */
 
 tree
index e1ae799a7dbf094fefebf19a1fd7ffd0b3819c71..e941d732b7bf7d0126aa89d67e50b68c27dd50b1 100644 (file)
@@ -729,4 +729,13 @@ PROCEDURE BuildAddAddress (location: location_t; op1, op2: Tree) : Tree ;
 PROCEDURE calcNbits (location: location_t; min, max: Tree) : Tree ;
 
 
+(*
+   OverflowZType - return TRUE if str exceeds the ZTYPE range.
+*)
+
+PROCEDURE OverflowZType (location: location_t;
+                         str: ADDRESS; base: CARDINAL;
+                         issueError: BOOLEAN) : BOOLEAN ;
+
+
 END m2expr.
index bf5e0b81d575ac6ee9bb9bb7a568541d121cf15b..0eef3be3f2a0fc573af459dfdd54e5174458f9b1 100644 (file)
@@ -241,6 +241,8 @@ EXTERN tree m2expr_BuildRDiv (location_t location, tree op1, tree op2,
                               bool needconvert);
 EXTERN int m2expr_GetCstInteger (tree cst);
 EXTERN tree m2expr_calcNbits (location_t location, tree min, tree max);
+EXTERN bool m2expr_OverflowZType (location_t location, const char *str,
+                                 unsigned int base, bool issueError);
 EXTERN void m2expr_init (location_t location);
 
 #undef EXTERN
index befb93eb2db022a0e6e4a704abc33b689dd03119..0c1ca6398e52ca919be452a208ec845bca5547c2 100644 (file)
@@ -1,7 +1,7 @@
 MODULE largeconst ;
 
 CONST
-   foo = 12345678912345678912345679123456789123456789123456789123456789123456791234567891234567891234567891234567891234567912345678912345678912345678912345678912345679123456789123456789 ;
+   foo = 123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890123456789012345678901234567901234567890123456789012345678901234567890123456790123456789012345678901234567890123456789012345679012345678901234567890 ;
 
 BEGIN
 END largeconst.
\ No newline at end of file
diff --git a/gcc/testsuite/gm2/pim/fail/largeconst2.mod b/gcc/testsuite/gm2/pim/fail/largeconst2.mod
deleted file mode 100644 (file)
index f961388..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-MODULE largeconst2 ;
-
-CONST
-   foo = 123456789123456789123456791234567891234567891234567891234567891234567912345678912345678912345678912345678912345679123456789123456789123456789123456789123456791234567891234567891234567891234567891234567912345678912345678912345678912345678912345679123456789123456789 ;
-
-BEGIN
-END largeconst2.
\ No newline at end of file