summaryrefslogtreecommitdiff
path: root/compiler/ghci/ObjLink.lhs
diff options
context:
space:
mode:
authorsimonpj@microsoft.com <unknown>2006-11-07 17:13:36 +0000
committersimonpj@microsoft.com <unknown>2006-11-07 17:13:36 +0000
commit6ef2fc2ebf11755a54386f8e317d83cb19913be1 (patch)
treee57aa149463a07c234abdf0740059054d5e3a61e /compiler/ghci/ObjLink.lhs
parent604121dfc02eaf2ba60d018bbc7f4c7b3e0698dd (diff)
downloadhaskell-6ef2fc2ebf11755a54386f8e317d83cb19913be1.tar.gz
Comment out deeply suspicious (and unused) function insertStableSymbol
The function insertStableSymbol looks utterly wrong, because it coerces a value of type 'a' to an Addr#! That was in turn making the code generator get confused (now improved), but since insertStableSymbol isn't used at all, I'm just commenting it out. Meanwhile, this patch also enhances CoreToStg to report the most egregious cases where an unsafe coerce is going to confuse the code generator.
Diffstat (limited to 'compiler/ghci/ObjLink.lhs')
-rw-r--r--compiler/ghci/ObjLink.lhs10
1 files changed, 7 insertions, 3 deletions
diff --git a/compiler/ghci/ObjLink.lhs b/compiler/ghci/ObjLink.lhs
index d5e0f7bd92..48deb46783 100644
--- a/compiler/ghci/ObjLink.lhs
+++ b/compiler/ghci/ObjLink.lhs
@@ -17,7 +17,8 @@ module ObjLink (
loadObj, -- :: String -> IO ()
unloadObj, -- :: String -> IO ()
insertSymbol, -- :: String -> String -> Ptr a -> IO ()
- insertStableSymbol, -- :: String -> String -> a -> IO ()
+-- Suspicious; see defn
+-- insertStableSymbol, -- :: String -> String -> a -> IO ()
lookupSymbol, -- :: String -> IO (Maybe (Ptr a))
resolveObjs -- :: IO SuccessFlag
) where
@@ -43,12 +44,14 @@ insertSymbol obj_name key symbol
withCString str $ \c_str ->
c_insertSymbol c_obj_name c_str symbol
+{- Deeply suspicious use of unsafeCoerce#; should use makeStablePtr#
insertStableSymbol :: String -> String -> a -> IO ()
insertStableSymbol obj_name key symbol
= let str = prefixUnderscore key
in withCString obj_name $ \c_obj_name ->
withCString str $ \c_str ->
c_insertStableSymbol c_obj_name c_str (Ptr (unsafeCoerce# symbol))
+-}
lookupSymbol :: String -> IO (Maybe (Ptr a))
lookupSymbol str_in = do
@@ -98,8 +101,9 @@ resolveObjs = do
foreign import ccall unsafe "addDLL" c_addDLL :: CString -> IO CString
foreign import ccall unsafe "initLinker" initObjLinker :: IO ()
foreign import ccall unsafe "insertSymbol" c_insertSymbol :: CString -> CString -> Ptr a -> IO ()
-foreign import ccall unsafe "insertStableSymbol" c_insertStableSymbol
- :: CString -> CString -> Ptr a -> IO ()
+-- Suspicious: should take a stable pointer
+-- foreign import ccall unsafe "insertStableSymbol" c_insertStableSymbol
+-- :: CString -> CString -> Ptr a -> IO ()
foreign import ccall unsafe "lookupSymbol" c_lookupSymbol :: CString -> IO (Ptr a)
foreign import ccall unsafe "loadObj" c_loadObj :: CString -> IO Int
foreign import ccall unsafe "unloadObj" c_unloadObj :: CString -> IO Int