34static bool IsMainFile(llvm::StringRef main, llvm::StringRef other) {
41 if (llvm::sys::fs::equivalent(main, other))
44 llvm::SmallString<64> normalized(other);
45 llvm::sys::path::native(normalized);
46 return main.equals_insensitive(normalized);
63 BuildInfoSym bis(SymbolRecordKind::BuildInfoSym);
64 llvm::cantFail(SymbolDeserializer::deserializeAs<BuildInfoSym>(sym, bis));
68 LazyRandomTypeCollection &types = index.
ipi().typeCollection();
69 std::optional<CVType> cvt = types.tryGetType(bis.BuildId);
71 if (!cvt || cvt->kind() != LF_BUILDINFO)
75 llvm::cantFail(TypeDeserializer::deserializeAs<BuildInfoRecord>(*cvt, bir));
76 cci.
m_build_info.assign(bir.ArgIndices.begin(), bir.ArgIndices.end());
110 for (
const auto &ss : item.
m_debug_stream.getSubsectionsArray()) {
111 if (ss.kind() != DebugSubsectionKind::InlineeLines)
114 DebugInlineeLinesSubsectionRef inlinee_lines;
115 llvm::BinaryStreamReader reader(ss.getRecordData());
116 if (llvm::Error
error = inlinee_lines.initialize(reader)) {
117 consumeError(std::move(
error));
121 for (
const InlineeSourceLine &Line : inlinee_lines) {
136 return *result.first->second;
140 const DbiModuleList &modules =
m_index.dbi().modules();
141 llvm::pdb::DbiModuleDescriptor descriptor = modules.getModuleDescriptor(modi);
142 uint16_t stream = descriptor.getModuleStreamIndex();
143 std::unique_ptr<llvm::msf::MappedBlockStream> stream_data =
144 m_index.pdb().createIndexedStream(stream);
147 std::unique_ptr<CompilandIndexItem>& cci = result.first->second;
150 llvm::pdb::ModuleDebugStreamRef debug_stream(descriptor,
nullptr);
151 cci = std::make_unique<CompilandIndexItem>(
PdbCompilandId{ modi }, debug_stream, std::move(descriptor));
155 llvm::pdb::ModuleDebugStreamRef debug_stream(descriptor,
156 std::move(stream_data));
158 cantFail(debug_stream.reload());
160 cci = std::make_unique<CompilandIndexItem>(
161 PdbCompilandId{modi}, std::move(debug_stream), std::move(descriptor));
165 auto strings =
m_index.pdb().getStringTable();
167 cci->m_strings.initialize(cci->m_debug_stream.getSubsectionsArray());
168 cci->m_strings.setStrings(strings->getStringTable());
170 consumeError(strings.takeError());
180 llvm::sys::path::native(main_file);
182 uint32_t file_count = modules.getSourceFileCount(modi);
183 cci->m_file_list.reserve(file_count);
184 bool found_main_file =
false;
185 for (llvm::StringRef file : modules.source_files(modi)) {
186 if (!found_main_file &&
IsMainFile(main_file, file)) {
187 cci->m_file_list.insert(cci->m_file_list.begin(), file);
188 found_main_file =
true;
191 cci->m_file_list.push_back(file);
227 LazyRandomTypeCollection &types =
m_index.ipi().typeCollection();
229 StringIdRecord working_dir;
230 StringIdRecord file_name;
234 TypeDeserializer::deserializeAs<StringIdRecord>(dir_cvt, working_dir));
236 TypeDeserializer::deserializeAs<StringIdRecord>(file_cvt, file_name));
238 llvm::sys::path::Style style = working_dir.String.starts_with(
"/")
239 ? llvm::sys::path::Style::posix
240 : llvm::sys::path::Style::windows;
241 if (llvm::sys::path::is_absolute(file_name.String, style))
242 return file_name.String;
244 llvm::SmallString<64> absolute_path = working_dir.String;
245 llvm::sys::path::append(absolute_path, file_name.String);
246 return absolute_path;