Nothing -> return (extendOccEnv occs name_occ (name, ie))
Just (name', ie')
- | name == name' -- Duplicate export
- -> do { warn_dup_exports <- doptM Opt_WarnDuplicateExports ;
- warnIf warn_dup_exports (dupExportWarn name_occ ie ie') ;
- return occs }
+ | name == name' -- Duplicate export
+ -- But we don't want to warn if the same thing is exported
+ -- by two different module exports. See ticket #4478.
+ -> do unless (diffModules ie ie') $ do
+ warn_dup_exports <- doptM Opt_WarnDuplicateExports
+ warnIf warn_dup_exports (dupExportWarn name_occ ie ie')
+ return occs
| otherwise -- Same occ name but different names: an error
-> do { global_env <- getGlobalRdrEnv ;
return occs }
where
name_occ = nameOccName name
+ -- True if the two IE RdrName are different module exports.
+ diffModules (IEModuleContents n1) (IEModuleContents n2) = n1 /= n2
+ diffModules _ _ = False
\end{code}
%*********************************************************