[commit: ghc] master: Check for Int constants that are too large in mkDerivedConstants (291da8a)

Ian Lynagh <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.ghc
Message-ID <[email protected]>
Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/291da8a0624d3844d30931d0e89f51e3daf03a61

>---------------------------------------------------------------

commit 291da8a0624d3844d30931d0e89f51e3daf03a61
Author: Ian Lynagh <[email protected]>
Date:   Fri Sep 14 12:53:13 2012 +0100

    Check for Int constants that are too large in mkDerivedConstants

>---------------------------------------------------------------

 includes/mkDerivedConstants.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/includes/mkDerivedConstants.c b/includes/mkDerivedConstants.c
index 92024d3..28377ef 100644
--- a/includes/mkDerivedConstants.c
+++ b/includes/mkDerivedConstants.c
@@ -294,6 +294,20 @@ enum Mode { Gen_Haskell_Type, Gen_Haskell_Value, Gen_Haskell_Wrappers, Gen_Haske
 #define FUN_OFFSET(sym) (OFFSET(Capability,f.sym) - OFFSET(Capability,r))
 
 void constantInt(char *name, intptr_t val) {
+    /* If the value is larger than 2^28 or smaller than -2^28, then fail.
+       This test is a bit conservative, but if any constants are roughly
+       maxBoun or minBound then we probably need them to be Integer
+       rather than Int so that cross-compiling between 32bit and 64bit
+       platforms works. */
+    if (val > 268435456) {
+        printf("Value too large for constantInt: %" PRIdPTR "\n", val);
+        exit(1);
+    }
+    if (val < -268435456) {
+        printf("Value too small for constantInt: %" PRIdPTR "\n", val);
+        exit(1);
+    }
+
     switch (mode) {
     case Gen_Haskell_Type:
         printf("    , pc_%s :: Int\n", name);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.