logo       

[ ghc-Bugs-1256533 ] Recompilation check should include flags: msg#00067

lang.haskell.glasgow.bugs

Subject: [ ghc-Bugs-1256533 ] Recompilation check should include flags

Bugs item #1256533, was opened at 2005-08-11 09:06
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=108032&aid=1256533&group_id=8032

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: None
Group: None
Status: Open
Resolution: None
Priority: 3
Submitted By: Simon Peyton Jones (simonpj)
Assigned to: Nobody/Anonymous (nobody)
Summary: Recompilation check should include flags

Initial Comment:
GHC skips recompilation of a module if the module code
hasn't changed, even if the flags in use *have* changed.
A benign version is that switching on -O won't recompile
modules that were compiled without -O. But here's a
nastier version: changing the -main-is flag can lead to an
obscure link error. Details below supplied by Niels
[cpjvelde@xxxxxxxx]

Simon

Actually, i reproduced it now and the reason is a bit
different. I have an
application Test and Test2. They both have a main
function. Test imports Test2
for some other function. So this is how those files look
like:

~/pancake > cat Test.hs
module Test where
import Test2 hiding (main)

main = doit

~/pancake > cat Test2.hs
module Test2 where

doit = print "Test2.doit"
main = print "Test2.main"

I then first compile the first app:
~/pancake > ghc --make -main-is Test.main Test.hs
Chasing modules from: Test.hs
Compiling Test2 ( ./Test2.hs, ./Test2.o )
Compiling Test ( Test.hs, Test.o )
Linking ...

then i compile the second app:
~/pancake > ghc --make -main-is Test2.main Test2.hs
Chasing modules from: Test2.hs
Skipping Test2 ( Test2.hs, Test2.o )
Linking ...
/usr/lib/ghc-6.4/libHSrts.a(Main.o)(.text+0xe): In function
`main':
: undefined reference to `__stginit_ZCMain'
/usr/lib/ghc-6.4/libHSrts.a(Main.o)(.text+0x28): In
function `main':
: undefined reference to `ZCMain_main_closure'
collect2: ld returned 1 exit status

So I guess generating Test2.o the first time and using -
main-is renamed the main
in Test2.o . Since it is not recompiled when I want to
compile the second app,
it fails because it cant find the main...I thought providing
a -main-is flag
again when compiling the second app would somehow
force recompilation of Test2.o
or at least fixing the 'renaming' that the first compilation
of Test2.o had
caused.

greetings, Niels.



----------------------------------------------------------------------

You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=108032&aid=1256533&group_id=8032


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise