diff --git a/compiler/main/TidyPgm.lhs b/compiler/main/TidyPgm.lhs index 1c6bb397eae4..621366399709 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