Recognize huge unsigned long long values as integers when cross compiling.
authorMichał Masłowski <mtjm@mtjm.eu>
Fri, 11 May 2012 13:18:06 +0000 (15:18 +0200)
committerPaolo Capriotti <p.capriotti@gmail.com>
Tue, 15 May 2012 09:52:25 +0000 (10:52 +0100)
MIPS N32 has RLIM_INFINITY in resource.h defined as
0x7fffffffffffffffULL which doesn't fit in a 32 bit unsigned long to
which it was casted before applying this patch, so a cross build of
libraries/unix for mips64el failed.

CrossCodegen.hs

index b4f648f..7fbd20a 100644 (file)
@@ -499,7 +499,7 @@ checkConditional _ = error "checkConditional argument isn't a Special"
 -- Make sure the value we're trying to binary search isn't floating point.
 checkValueIsIntegral :: ZCursor Token -> Bool -> TestMonad Bool
 checkValueIsIntegral z@(ZCursor (Special _ _ value) _ _) nonNegative = do
-    let intType = if nonNegative then "unsigned long" else "long"
+    let intType = if nonNegative then "unsigned long long" else "long long"
     testLog ("checking if " ++ value ++ " is an integer") $ do
         success <- runCompileBooleanTest z $ "(" ++ intType ++ ")(" ++ value ++ ") == (" ++ value ++ ")"
         testLog' $ "result: " ++ (if success then "integer" else "floating")