If on w32 default-directory is something like c:\top\sub then the subprocess started by compilation-start will get pwd=c:\top. This can be cured by the attached patch for this special case, but it is only a demonstration of the problem, not the right fix for this problem. The attached patch only does (let ((default-directory (file-name-as-directory default-directory)) just before calling `start-file-process-shell-command'. A slightly better fix would probably be to add the same thing in `start-file-process', but it seems to me that this should handled at the C level to catch all cases. I do not know where to do that but it must be done somewhere before make_process in start-process. In GNU Emacs 23.0.60.1 (i386-mingw-nt5.1.2600) of 2008-08-10 Windowing system distributor `Microsoft Corp.', version 5.1.2600 configured using `configure --with-gcc (3.4) --no-opt --cflags -Ic:/g/include -fno-crossjumping'