diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp --- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp +++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp @@ -263,8 +263,10 @@ DILocation *DIL = Loc.DL.get(); if (!DIL) return getOrCreateDefaultSrcLocStr(); - StringRef FileName = - !DIL->getFilename().empty() ? DIL->getFilename() : M.getName(); + StringRef FileName = M.getName(); + if (DIFile *DIF = DIL->getFile()) + if (Optional Source = DIF->getSource()) + FileName = *Source; StringRef Function = DIL->getScope()->getSubprogram()->getName(); Function = !Function.empty() ? Function : Loc.IP.getBlock()->getParent()->getName(); diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp --- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp +++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp @@ -34,7 +34,8 @@ BB = BasicBlock::Create(Ctx, "", F); DIBuilder DIB(*M); - auto File = DIB.createFile("test.dbg", "/"); + auto File = DIB.createFile("test.dbg", "/src", llvm::None, + Optional("/src/test.dbg")); auto CU = DIB.createCompileUnit(dwarf::DW_LANG_C, File, "llvm-C", true, "", 0); auto Type = DIB.createSubroutineType(DIB.getOrCreateTypeArray(None)); @@ -301,7 +302,7 @@ dyn_cast(SrcStrGlob->getInitializer()); if (!SrcSrc) return; - EXPECT_EQ(SrcSrc->getAsCString(), ";test.dbg;foo;3;7;;"); + EXPECT_EQ(SrcSrc->getAsCString(), ";/src/test.dbg;foo;3;7;;"); } TEST_F(OpenMPIRBuilderTest, ParallelSimple) {