https://github.com/speednoisemovement updated https://github.com/llvm/llvm-project/pull/176065
>From 8e7034f2d1c30a71a151e91b50de95afd6b51f81 Mon Sep 17 00:00:00 2001 From: Leonard Grey <[email protected]> Date: Wed, 14 Jan 2026 19:17:31 -0500 Subject: [PATCH 1/3] [LLDB][NativePDB] Add PdbAstBuilder null checks --- .../NativePDB/SymbolFileNativePDB.cpp | 54 ++++++++----------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp index 01556133a3ad0..c8e059affe428 100644 --- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp +++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp @@ -503,7 +503,8 @@ Block *SymbolFileNativePDB::CreateBlock(PdbCompilandSymId block_id) { block_id.modi, block_id.offset, block_base, block_base + block.CodeSize, func_base); } - ast_builder->EnsureBlock(block_id); + if (ast_builder) + ast_builder->EnsureBlock(block_id); m_blocks.insert({opaque_block_uid, child_block}); break; } @@ -516,7 +517,8 @@ Block *SymbolFileNativePDB::CreateBlock(PdbCompilandSymId block_id) { if (!parent_block) return nullptr; BlockSP child_block = parent_block->CreateChild(opaque_block_uid); - ast_builder->EnsureInlinedFunction(block_id); + if (ast_builder) + ast_builder->EnsureInlinedFunction(block_id); // Copy ranges from InlineSite to Block. for (size_t i = 0; i < inline_site->ranges.GetSize(); ++i) { auto *entry = inline_site->ranges.GetEntryAtIndex(i); @@ -585,9 +587,8 @@ lldb::FunctionSP SymbolFileNativePDB::CreateFunction(PdbCompilandSymId func_id, if (auto err = ts_or_err.takeError()) return func_sp; auto ts = *ts_or_err; - if (!ts) - return func_sp; - ts->GetNativePDBParser()->EnsureFunction(func_id); + if (ts && ts->GetNativePDBParser()) + ts->GetNativePDBParser()->EnsureFunction(func_id); return func_sp; } @@ -919,11 +920,9 @@ TypeSP SymbolFileNativePDB::CreateAndCacheType(PdbTypeSymId type_id) { if (auto err = ts_or_err.takeError()) return nullptr; auto ts = *ts_or_err; - if (!ts) + if (!ts || !ts->GetNativePDBParser()) return nullptr; - - PdbAstBuilder* ast_builder = ts->GetNativePDBParser(); - CompilerType ct = ast_builder->GetOrCreateType(best_decl_id); + CompilerType ct = ts->GetNativePDBParser()->GetOrCreateType(best_decl_id); if (!ct) return nullptr; @@ -1020,10 +1019,8 @@ VariableSP SymbolFileNativePDB::CreateGlobalVariable(PdbGlobalSymId var_id) { if (auto err = ts_or_err.takeError()) return nullptr; auto ts = *ts_or_err; - if (!ts) - return nullptr; - - ts->GetNativePDBParser()->EnsureVariable(var_id); + if (ts && ts->GetNativePDBParser()) + ts->GetNativePDBParser()->EnsureVariable(var_id); ModuleSP module_sp = GetObjectFile()->GetModule(); DWARFExpressionList location( @@ -1123,11 +1120,10 @@ Block *SymbolFileNativePDB::GetOrCreateBlock(PdbCompilandSymId block_id) { void SymbolFileNativePDB::ParseDeclsForContext( lldb_private::CompilerDeclContext decl_ctx) { - TypeSystem* ts_or_err = decl_ctx.GetTypeSystem(); - if (!ts_or_err) + TypeSystem *ts = decl_ctx.GetTypeSystem(); + if (!ts || !ts->GetNativePDBParser()) return; - PdbAstBuilder* ast_builder = ts_or_err->GetNativePDBParser(); - ast_builder->ParseDeclsForContext(decl_ctx); + ts->GetNativePDBParser()->ParseDeclsForContext(decl_ctx); } lldb::CompUnitSP SymbolFileNativePDB::ParseCompileUnitAtIndex(uint32_t index) { @@ -1828,7 +1824,7 @@ void SymbolFileNativePDB::DumpClangAST(Stream &s, llvm::StringRef filter, return; auto ts = *ts_or_err; TypeSystemClang *clang = llvm::dyn_cast_or_null<TypeSystemClang>(ts.get()); - if (!clang) + if (!clang || !clang->GetNativePDBParser()) return; clang->GetNativePDBParser()->Dump(s, filter, show_color); } @@ -2234,10 +2230,8 @@ VariableSP SymbolFileNativePDB::CreateLocalVariable(PdbCompilandSymId scope_id, if (auto err = ts_or_err.takeError()) return nullptr; auto ts = *ts_or_err; - if (!ts) - return nullptr; - - ts->GetNativePDBParser()->EnsureVariable(scope_id, var_id); + if (ts && ts->GetNativePDBParser()) + ts->GetNativePDBParser()->EnsureVariable(scope_id, var_id); } m_local_variables[toOpaqueUid(var_id)] = var_sp; return var_sp; @@ -2264,7 +2258,7 @@ TypeSP SymbolFileNativePDB::CreateTypedef(PdbGlobalSymId id) { if (auto err = ts_or_err.takeError()) return nullptr; auto ts = *ts_or_err; - if (!ts) + if (!ts || !ts->GetNativePDBParser()) return nullptr; CompilerType ct = ts->GetNativePDBParser()->GetOrCreateTypedefType(id); @@ -2423,7 +2417,7 @@ CompilerDecl SymbolFileNativePDB::GetDeclForUID(lldb::user_id_t uid) { if (auto err = ts_or_err.takeError()) return CompilerDecl(); auto ts = *ts_or_err; - if (!ts) + if (!ts || !ts->GetNativePDBParser()) return {}; return ts->GetNativePDBParser()->GetOrCreateDeclForUid(uid); } @@ -2434,11 +2428,9 @@ SymbolFileNativePDB::GetDeclContextForUID(lldb::user_id_t uid) { if (auto err = ts_or_err.takeError()) return {}; auto ts = *ts_or_err; - if (!ts) + if (!ts || !ts->GetNativePDBParser()) return {}; - - PdbAstBuilder *ast_builder = ts->GetNativePDBParser(); - return ast_builder->GetOrCreateDeclContextForUid(PdbSymUid(uid)); + return ts->GetNativePDBParser()->GetOrCreateDeclContextForUid(PdbSymUid(uid)); } CompilerDeclContext @@ -2447,11 +2439,9 @@ SymbolFileNativePDB::GetDeclContextContainingUID(lldb::user_id_t uid) { if (auto err = ts_or_err.takeError()) return CompilerDeclContext(); auto ts = *ts_or_err; - if (!ts) + if (!ts || !ts->GetNativePDBParser()) return {}; - - PdbAstBuilder *ast_builder = ts->GetNativePDBParser(); - return ast_builder->GetParentDeclContext(PdbSymUid(uid)); + return ts->GetNativePDBParser()->GetParentDeclContext(PdbSymUid(uid)); } Type *SymbolFileNativePDB::ResolveTypeUID(lldb::user_id_t type_uid) { >From b1d472e28985f2c498a2d4bdf017212546f59892 Mon Sep 17 00:00:00 2001 From: Leonard Grey <[email protected]> Date: Thu, 15 Jan 2026 11:21:32 -0500 Subject: [PATCH 2/3] Use temporaries --- .../SymbolFile/NativePDB/SymbolFileNativePDB.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp index c8e059affe428..9d6fb4cb2cd06 100644 --- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp +++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp @@ -1019,8 +1019,10 @@ VariableSP SymbolFileNativePDB::CreateGlobalVariable(PdbGlobalSymId var_id) { if (auto err = ts_or_err.takeError()) return nullptr; auto ts = *ts_or_err; - if (ts && ts->GetNativePDBParser()) - ts->GetNativePDBParser()->EnsureVariable(var_id); + if (ts) { + if (PdbAstBuilder *ast_builder = ts->GetNativePDBParser()) + ast_builder->EnsureVariable(var_id); + } ModuleSP module_sp = GetObjectFile()->GetModule(); DWARFExpressionList location( @@ -1121,9 +1123,12 @@ Block *SymbolFileNativePDB::GetOrCreateBlock(PdbCompilandSymId block_id) { void SymbolFileNativePDB::ParseDeclsForContext( lldb_private::CompilerDeclContext decl_ctx) { TypeSystem *ts = decl_ctx.GetTypeSystem(); - if (!ts || !ts->GetNativePDBParser()) + if (!ts) + return; + PdbAstBuilder *ast_builder = ts->GetNativePDBParser(); + if (!ast_builder) return; - ts->GetNativePDBParser()->ParseDeclsForContext(decl_ctx); + ast_builder->ParseDeclsForContext(decl_ctx); } lldb::CompUnitSP SymbolFileNativePDB::ParseCompileUnitAtIndex(uint32_t index) { >From 30686b7448cad3e0b4a91bf21a568ee2face92e4 Mon Sep 17 00:00:00 2001 From: Leonard Grey <[email protected]> Date: Thu, 15 Jan 2026 13:53:20 -0500 Subject: [PATCH 3/3] More temps --- .../NativePDB/SymbolFileNativePDB.cpp | 62 +++++++++++++------ 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp index 9d6fb4cb2cd06..328539b54fc1d 100644 --- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp +++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp @@ -587,8 +587,10 @@ lldb::FunctionSP SymbolFileNativePDB::CreateFunction(PdbCompilandSymId func_id, if (auto err = ts_or_err.takeError()) return func_sp; auto ts = *ts_or_err; - if (ts && ts->GetNativePDBParser()) - ts->GetNativePDBParser()->EnsureFunction(func_id); + if (ts) { + if (PdbAstBuilder *ast_builder = ts->GetNativePDBParser()) + ast_builder->EnsureFunction(func_id); + } return func_sp; } @@ -920,9 +922,12 @@ TypeSP SymbolFileNativePDB::CreateAndCacheType(PdbTypeSymId type_id) { if (auto err = ts_or_err.takeError()) return nullptr; auto ts = *ts_or_err; - if (!ts || !ts->GetNativePDBParser()) + if (!ts) return nullptr; - CompilerType ct = ts->GetNativePDBParser()->GetOrCreateType(best_decl_id); + PdbAstBuilder *ast_builder = ts->GetNativePDBParser(); + if (!ast_builder) + return nullptr; + CompilerType ct = ast_builder->GetOrCreateType(best_decl_id); if (!ct) return nullptr; @@ -1829,9 +1834,12 @@ void SymbolFileNativePDB::DumpClangAST(Stream &s, llvm::StringRef filter, return; auto ts = *ts_or_err; TypeSystemClang *clang = llvm::dyn_cast_or_null<TypeSystemClang>(ts.get()); - if (!clang || !clang->GetNativePDBParser()) + if (!clang) return; - clang->GetNativePDBParser()->Dump(s, filter, show_color); + PdbAstBuilder *ast_builder = clang->GetNativePDBParser(); + if (!ast_builder) + return; + ast_builder->Dump(s, filter, show_color); } void SymbolFileNativePDB::CacheGlobalBaseNames() { @@ -2235,8 +2243,10 @@ VariableSP SymbolFileNativePDB::CreateLocalVariable(PdbCompilandSymId scope_id, if (auto err = ts_or_err.takeError()) return nullptr; auto ts = *ts_or_err; - if (ts && ts->GetNativePDBParser()) - ts->GetNativePDBParser()->EnsureVariable(scope_id, var_id); + if (ts) { + if (PdbAstBuilder *ast_builder = ts->GetNativePDBParser()) + ast_builder->EnsureVariable(scope_id, var_id); + } } m_local_variables[toOpaqueUid(var_id)] = var_sp; return var_sp; @@ -2263,10 +2273,12 @@ TypeSP SymbolFileNativePDB::CreateTypedef(PdbGlobalSymId id) { if (auto err = ts_or_err.takeError()) return nullptr; auto ts = *ts_or_err; - if (!ts || !ts->GetNativePDBParser()) + if (!ts) return nullptr; - - CompilerType ct = ts->GetNativePDBParser()->GetOrCreateTypedefType(id); + PdbAstBuilder *ast_builder = ts->GetNativePDBParser(); + if (!ast_builder) + return nullptr; + CompilerType ct = ast_builder->GetOrCreateTypedefType(id); if (!ct) ct = target_type->GetForwardCompilerType(); @@ -2422,9 +2434,12 @@ CompilerDecl SymbolFileNativePDB::GetDeclForUID(lldb::user_id_t uid) { if (auto err = ts_or_err.takeError()) return CompilerDecl(); auto ts = *ts_or_err; - if (!ts || !ts->GetNativePDBParser()) + if (!ts) + return {}; + PdbAstBuilder *ast_builder = ts->GetNativePDBParser(); + if (!ast_builder) return {}; - return ts->GetNativePDBParser()->GetOrCreateDeclForUid(uid); + return ast_builder->GetOrCreateDeclForUid(uid); } CompilerDeclContext @@ -2433,9 +2448,12 @@ SymbolFileNativePDB::GetDeclContextForUID(lldb::user_id_t uid) { if (auto err = ts_or_err.takeError()) return {}; auto ts = *ts_or_err; - if (!ts || !ts->GetNativePDBParser()) + if (!ts) + return {}; + PdbAstBuilder *ast_builder = ts->GetNativePDBParser(); + if (!ast_builder) return {}; - return ts->GetNativePDBParser()->GetOrCreateDeclContextForUid(PdbSymUid(uid)); + return ast_builder->GetOrCreateDeclContextForUid(PdbSymUid(uid)); } CompilerDeclContext @@ -2444,9 +2462,12 @@ SymbolFileNativePDB::GetDeclContextContainingUID(lldb::user_id_t uid) { if (auto err = ts_or_err.takeError()) return CompilerDeclContext(); auto ts = *ts_or_err; - if (!ts || !ts->GetNativePDBParser()) + if (!ts) + return {}; + PdbAstBuilder *ast_builder = ts->GetNativePDBParser(); + if (!ast_builder) return {}; - return ts->GetNativePDBParser()->GetParentDeclContext(PdbSymUid(uid)); + return ast_builder->GetParentDeclContext(PdbSymUid(uid)); } Type *SymbolFileNativePDB::ResolveTypeUID(lldb::user_id_t type_uid) { @@ -2481,10 +2502,13 @@ SymbolFileNativePDB::GetDynamicArrayInfoForUID( bool SymbolFileNativePDB::CompleteType(CompilerType &compiler_type) { std::lock_guard<std::recursive_mutex> guard(GetModuleMutex()); auto ts = compiler_type.GetTypeSystem(); - if (!ts || !ts->GetNativePDBParser()) + if (!ts) return false; - return ts->GetNativePDBParser()->CompleteType(compiler_type); + PdbAstBuilder *ast_builder = ts->GetNativePDBParser(); + if (!ast_builder) + return false; + return ast_builder->CompleteType(compiler_type); } void SymbolFileNativePDB::GetTypes(lldb_private::SymbolContextScope *sc_scope, _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
