================
@@ -3311,11 +3312,22 @@ ASTReader::ReadControlBlock(ModuleFile &F,
                                                    SignatureBytes.end());
         Blob = Blob.substr(ASTFileSignature::size);
 
+        // Use BaseDirectoryAsWritten to ensure we use the same path in the
+        // ModuleCache as when writing.
+        StoredFile = ReadPathBlob(BaseDirectoryAsWritten, Record, Idx, Blob);
         if (ImportedFile.empty()) {
-          // Use BaseDirectoryAsWritten to ensure we use the same path in the
-          // ModuleCache as when writing.
-          ImportedFile =
-              ReadPathBlob(BaseDirectoryAsWritten, Record, Idx, Blob);
+          ImportedFile = StoredFile;
+        } else {
+          auto ImportedFileRef =
+              PP.getFileManager().getOptionalFileRef(ImportedFile);
+          auto StoredFileRef =
+              PP.getFileManager().getOptionalFileRef(StoredFile);
+          if ((ImportedFileRef && StoredFileRef) &&
+              (*ImportedFileRef != *StoredFileRef)) {
+            Diag(diag::warn_lazy_pcm_mismatch) << ImportedFile << StoredFile;
+            Diag(diag::note_module_file_imported_by)
----------------
cyndyishida wrote:

e.g. 

```
$ /Users/cishida/Builds/llvm-build/bin/clang -cc1 -internal-isystem 
/Users/cishida/Builds/llvm-build/lib/clang/21/include -nostdsysteminc -x c 
-fmodules -fno-implicit-modules -isysroot 
/Users/cishida/Builds/llvm-build/tools/clang/test/Modules/Output/invalid-module-dep.c.tmp/Sysroot
 
-I/Users/cishida/Builds/llvm-build/tools/clang/test/Modules/Output/invalid-module-dep.c.tmp/BuildDir
 
-I/Users/cishida/Builds/llvm-build/tools/clang/test/Modules/Output/invalid-module-dep.c.tmp/Sysroot/usr/include
 
-fmodule-map-file=/Users/cishida/Builds/llvm-build/tools/clang/test/Modules/Output/invalid-module-dep.c.tmp/BuildDir/A/module.modulemap
 
-fmodule-map-file=/Users/cishida/Builds/llvm-build/tools/clang/test/Modules/Output/invalid-module-dep.c.tmp/Sysroot/usr/include/B/module.modulemap
 
-fmodule-file=A=/Users/cishida/Builds/llvm-build/tools/clang/test/Modules/Output/invalid-module-dep.c.tmp/A-2.pcm
 
-fmodule-file=B=/Users/cishida/Builds/llvm-build/tools/clang/test/Modules/Output/invalid-module-dep.c.tmp/B-1.pcm
  
/Users/cishida/Projects/llvm/monorepo/llvm-project/clang/test/Modules/invalid-module-dep.c
  -Wlazy-pcm-mismatch
/Users/cishida/Projects/llvm/monorepo/llvm-project/clang/test/Modules/invalid-module-dep.c:38:2:
 warning: loaded module file 
'/Users/cishida/Builds/llvm-build/tools/clang/test/Modules/Output/invalid-module-dep.c.tmp/A-2.pcm'
 conflicts with imported file 
'/Users/cishida/Builds/llvm-build/tools/clang/test/Modules/Output/invalid-module-dep.c.tmp/A-1.pcm'
 [-Wlazy-pcm-mismatch]
   38 | #include <B/B.h>
      |  ^
/Users/cishida/Projects/llvm/monorepo/llvm-project/clang/test/Modules/invalid-module-dep.c:38:2:
 note: imported by module 'B' in 
'/Users/cishida/Builds/llvm-build/tools/clang/test/Modules/Output/invalid-module-dep.c.tmp/B-1.pcm'
/Users/cishida/Projects/llvm/monorepo/llvm-project/clang/test/Modules/invalid-module-dep.c:38:2:
 fatal error: module file 
'/Users/cishida/Builds/llvm-build/tools/clang/test/Modules/Output/invalid-module-dep.c.tmp/A-2.pcm'
 is out of date and needs to be rebuilt: module file has a different size or 
mtime than expected
   38 | #include <B/B.h>
      |  ^
/Users/cishida/Projects/llvm/monorepo/llvm-project/clang/test/Modules/invalid-module-dep.c:38:2:
 note: imported by module 'B' in 
'/Users/cishida/Builds/llvm-build/tools/clang/test/Modules/Output/invalid-module-dep.c.tmp/B-1.pcm'
1 warning and 1 error generated.

```

https://github.com/llvm/llvm-project/pull/137068
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to