Commit 5734f7af authored by ian@well-typed.com's avatar ian@well-typed.com
Browse files

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.
parent 12276005
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment