[commit: ghc] master: Fix -dynamic-too on Windows (5734f7a)

Ian Lynagh igloo at earth.li
Mon May 20 19:00:06 CEST 2013


Repository : http://darcs.haskell.org/ghc.git/

On branch  : master

https://github.com/ghc/ghc/commit/5734f7afcc2b9acf857f8e0f745185bf01b91148

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

commit 5734f7afcc2b9acf857f8e0f745185bf01b91148
Author: Ian Lynagh <ian at well-typed.com>
Date:   Mon May 20 17:06:01 2013 +0100

    Fix -dynamic-too on Windows
    
    If we're building the dynamic way too, then hasCafRefs needs to check
    whether the dynamic way would use a dynamic name.

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

 compiler/main/TidyPgm.lhs | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/compiler/main/TidyPgm.lhs b/compiler/main/TidyPgm.lhs
index 1c6bb39..6213663 100644
--- a/compiler/main/TidyPgm.lhs
+++ b/compiler/main/TidyPgm.lhs
@@ -1180,7 +1180,20 @@ hasCafRefs dflags this_pkg this_mod p arity expr
   | otherwise               = NoCafRefs
  where
   mentions_cafs = isFastTrue (cafRefsE dflags p expr)
-  is_dynamic_name = isDllName dflags this_pkg this_mod
+  is_dynamic_name n = if gopt Opt_BuildDynamicToo dflags
+                      then -- If we're building the dynamic way too,
+                           -- then we need to check whether it's a
+                           -- dynamic name there too. Note that this
+                           -- means that the vanila code is more
+                           -- pessimistic on Windows when -dynamic-too
+                           -- is used, but the alternative is that
+                           -- -dynamic-too is unusable on Windows
+                           -- as even the interfaces in the integer
+                           -- package don't match.
+                           is_dynamic_name' dflags n ||
+                           is_dynamic_name' (doDynamicToo dflags) n
+                      else is_dynamic_name' dflags n
+  is_dynamic_name' dflags' = isDllName dflags' this_pkg this_mod
   is_caf = not (arity > 0 || rhsIsStatic (targetPlatform dflags) is_dynamic_name expr)
 
   -- NB. we pass in the arity of the expression, which is expected





More information about the ghc-commits mailing list