@@ -418,27 +418,27 @@ llvm::DIFile *IRGenDebugInfo::getOrCreateFile(StringRef Filename) {
418
418
if (Filename.empty ())
419
419
return MainFile;
420
420
421
- if (MainFile) {
422
- SmallString<256 > AbsMainFile, ThisFile;
423
- AbsMainFile = Filename;
424
- llvm::sys::fs::make_absolute (AbsMainFile);
425
- llvm::sys::path::append (ThisFile, MainFile->getDirectory (),
426
- MainFile->getFilename ());
427
- if (ThisFile == AbsMainFile) {
428
- DIFileCache[Filename] = llvm::TrackingMDNodeRef (MainFile);
429
- return MainFile;
430
- }
431
- }
432
-
433
421
// Look in the cache first.
434
422
auto CachedFile = DIFileCache.find (Filename);
435
-
436
423
if (CachedFile != DIFileCache.end ()) {
437
424
// Verify that the information still exists.
438
425
if (llvm::Metadata *V = CachedFile->second )
439
426
return cast<llvm::DIFile>(V);
440
427
}
441
428
429
+ // Detect the main file.
430
+ if (MainFile && Filename.endswith (MainFile->getFilename ())) {
431
+ SmallString<256 > AbsThisFile, AbsMainFile;
432
+ AbsThisFile = Filename;
433
+ llvm::sys::fs::make_absolute (AbsThisFile);
434
+ llvm::sys::path::append (AbsMainFile, MainFile->getDirectory (),
435
+ MainFile->getFilename ());
436
+ if (AbsThisFile == AbsMainFile) {
437
+ DIFileCache[Filename] = llvm::TrackingMDNodeRef (MainFile);
438
+ return MainFile;
439
+ }
440
+ }
441
+
442
442
// Create a new one.
443
443
StringRef File = llvm::sys::path::filename (Filename);
444
444
llvm::SmallString<512 > Path (Filename);
0 commit comments