[GHC] #8859: import conditionalization in System.Posix.Files.Common is wrong
GHC
ghc-devs at haskell.org
Sat Mar 8 01:54:07 UTC 2014
#8859: import conditionalization in System.Posix.Files.Common is wrong
------------------------------------+---------------------------------
Reporter: rwbarton | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: libraries/unix | Version: 7.8.1-rc2
Keywords: | Operating System: Other
Architecture: Unknown/Multiple | Type of failure: None/Unknown
Difficulty: Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: |
------------------------------------+---------------------------------
`System/Posix/Files/Common.hsc` imports `Data.Int` and `Data.Ratio`
conditionally, to avoid "unused import" compiler warnings:
{{{
#if defined(HAVE_STRUCT_STAT_ST_CTIM) || \
defined(HAVE_STRUCT_STAT_ST_MTIM) || \
defined(HAVE_STRUCT_STAT_ST_ATIM) || \
defined(HAVE_STRUCT_STAT_ST_ATIMESPEC) || \
defined(HAVE_STRUCT_STAT_ST_MTIMESPEC) || \
defined(HAVE_STRUCT_STAT_ST_CTIMESPEC)
import Data.Int
import Data.Ratio
#endif
}}}
but those modules are actually used in functions like
{{{
accessTimeHiRes (FileStatus stat) =
unsafePerformIO $ withForeignPtr stat $ \stat_ptr -> do
sec <- (#peek struct stat, st_atime) stat_ptr :: IO EpochTime
#ifdef HAVE_STRUCT_STAT_ST_ATIM
nsec <- (#peek struct stat, st_atim.tv_nsec) stat_ptr :: IO (#type
long)
let frac = toInteger nsec % 10^(9::Int)
#elif HAVE_STRUCT_STAT_ST_ATIMESPEC
nsec <- (#peek struct stat, st_atimespec.tv_nsec) stat_ptr :: IO
(#type long)
let frac = toInteger nsec % 10^(9::Int)
#elif HAVE_STRUCT_STAT_ST_ATIMENSEC
nsec <- (#peek struct stat, st_atimensec) stat_ptr :: IO (#type long)
let frac = toInteger nsec % 10^(9::Int)
#elif HAVE_STRUCT_STAT_ST_ATIME_N
nsec <- (#peek struct stat, st_atime_n) stat_ptr :: IO (#type int)
let frac = toInteger nsec % 10^(9::Int)
#elif HAVE_STRUCT_STAT_ST_UATIME
usec <- (#peek struct stat, st_uatime) stat_ptr :: IO (#type int)
let frac = toInteger usec % 10^(6::Int)
#else
let frac = 0
#endif
return $ fromRational $ toRational sec + frac
}}}
so there should be additional tests for
`defined(HAVE_STRUCT_STAT_ST_ATIMENSEC)`,
`defined(HAVE_STRUCT_STAT_ST_ATIME_N)`, ... (15 total).
Or, maybe there's a better alternative, since this is very long-winded and
fragile...
This breaks the build on Android, which has `st_atimensec`.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8859>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list