diff --git a/ghc/driver/Main.hs b/ghc/driver/Main.hs
index 1008127153c3729c1f23ee50b7ed0167c47448fe..6cb80f97f6e35eddcf05aaecf23f2f8242d8d81c 100644
--- a/ghc/driver/Main.hs
+++ b/ghc/driver/Main.hs
@@ -1,6 +1,6 @@
 {-# OPTIONS -W -fno-warn-incomplete-patterns #-}
 -----------------------------------------------------------------------------
--- $Id: Main.hs,v 1.60 2000/09/14 09:58:00 simonmar Exp $
+-- $Id: Main.hs,v 1.61 2000/09/25 12:30:44 simonmar Exp $
 --
 -- GHC Driver program
 --
@@ -1400,14 +1400,14 @@ run_pipeline ((phase, keep, o_suffix):phases)
 	input_fn do_linking use_ofile orig_basename orig_suffix
   = do
 
-     output_fn <- outputFileName (null phases) o_suffix
+     output_fn <- outputFileName (null phases) keep o_suffix
 
      carry_on <- run_phase phase orig_basename orig_suffix input_fn output_fn
 	-- sometimes we bail out early, eg. when the compiler's recompilation
 	-- checker has determined that recompilation isn't necessary.
      if not carry_on 
-	then do let (_,_,final_suffix) = last phases
-	        ofile <- outputFileName True final_suffix
+	then do let (_,keep,final_suffix) = last phases
+	        ofile <- outputFileName True keep final_suffix
 		return ofile
 	else do -- carry on ...
 
@@ -1420,20 +1420,18 @@ run_pipeline ((phase, keep, o_suffix):phases)
      run_pipeline phases output_fn do_linking use_ofile orig_basename orig_suffix
 
   where
-     outputFileName last_phase suffix
-  	= if last_phase && not do_linking && use_ofile
-	    then do o_file <- readIORef output_file
-		    case o_file of 
-		        Just s  -> return s
-			Nothing -> do
-			    f <- odir_ify (orig_basename ++ '.':suffix)
-			    osuf_ify f
-
-	    else if keep == Persistent
-			then odir_ify (orig_basename ++ '.':suffix)
-			else do filename <- newTempName o_suffix
-				add files_to_clean filename
-				return filename
+     outputFileName last_phase keep suffix
+  	= do o_file <- readIORef output_file
+   	     if last_phase && not do_linking && use_ofile && isJust o_file
+   	       then case o_file of 
+   		       Just s  -> return s
+   		       Nothing -> error "outputFileName"
+   	       else if keep == Persistent
+   			   then do f <- odir_ify (orig_basename ++ '.':suffix)
+   				   osuf_ify f
+   			   else do filename <- newTempName suffix
+   				   add files_to_clean filename
+   				   return filename
 
 -- find a temporary name that doesn't already exist.
 newTempName :: String -> IO String