manmanren added a comment.

In https://reviews.llvm.org/D22636#491679, @benlangmuir wrote:

> > B.pcm becomes out of date when we try to load module "A", because another 
> > instance overwrites "B.pcm"
>
>
> How can this happen?  We intentionally keep the file descriptors of modules 
> open.  If you just built A, then you will have B.pcm still open.  When you 
> read A, you will use the same B that you used when you built A even if the 
> file on disk has been replaced (and we use rename to replace the file, so the 
> existing one is never modified).


Can you point me to the source codes where we use rename to replace the file? I 
am curious on how this all works out.

What I described is a scenario I thought possible that can cause "out-of-date" 
error:
module "B" is out of date and needs to be rebuilt
note: imported by module "A"

The only invocation of ReadAST that reads a module file and can't handle 
out-of-date modules, is the path where we just built module "A" and tries to 
load module "A" (here ModuleLoadCapabilities will be ARR_Missing).

I am still working with the project owner to collect more debugging messages.

If this is not a possible scenario, do you have any suggestion on what can 
cause this error?

Cheers,
Manman


https://reviews.llvm.org/D22636



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to