diff options
| author | Zachary Turner <zturner@google.com> | 2018-12-20 23:32:37 +0000 |
|---|---|---|
| committer | Zachary Turner <zturner@google.com> | 2018-12-20 23:32:37 +0000 |
| commit | 3790029d9714b4b42ebb289fb1ee8670e6a1b99d (patch) | |
| tree | f943ca359e82624bd73d515f83a470ea0e83379d /lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp | |
| parent | 1de5876f428e031a0ead529b8d340598ed2498e0 (diff) | |
| download | bcm5719-llvm-3790029d9714b4b42ebb289fb1ee8670e6a1b99d.tar.gz bcm5719-llvm-3790029d9714b4b42ebb289fb1ee8670e6a1b99d.zip | |
[NativePDB] Create VarDecls for global variables.
Previously we would create these for local variables but not for
global variables.
Also updated existing tests which created global variables to check
for them in the resulting AST.
llvm-svn: 349854
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp')
| -rw-r--r-- | lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp index 778c4021962..3f6ce1513f0 100644 --- a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp +++ b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp @@ -586,6 +586,18 @@ PdbAstBuilder::GetOrCreateBlockDecl(PdbCompilandSymId block_id) { return block_decl; } +clang::VarDecl *PdbAstBuilder::CreateVariableDecl(PdbSymUid uid, CVSymbol sym, + clang::DeclContext &scope) { + VariableInfo var_info = GetVariableNameInfo(sym); + clang::QualType qt = GetOrCreateType(var_info.type); + + clang::VarDecl *var_decl = m_clang.CreateVariableDeclaration( + &scope, var_info.name.str().c_str(), qt); + + m_uid_to_decl[toOpaqueUid(uid)] = var_decl; + return var_decl; +} + clang::VarDecl * PdbAstBuilder::GetOrCreateLocalVariableDecl(PdbCompilandSymId scope_id, PdbCompilandSymId var_id) { @@ -594,15 +606,17 @@ PdbAstBuilder::GetOrCreateLocalVariableDecl(PdbCompilandSymId scope_id, clang::DeclContext *scope = GetOrCreateDeclContextForUid(scope_id); - CVSymbol var = m_index.ReadSymbolRecord(var_id); - VariableInfo var_info = GetVariableNameInfo(var); - clang::QualType qt = GetOrCreateType(var_info.type); + CVSymbol sym = m_index.ReadSymbolRecord(var_id); + return CreateVariableDecl(PdbSymUid(var_id), sym, *scope); +} - clang::VarDecl *var_decl = - m_clang.CreateVariableDeclaration(scope, var_info.name.str().c_str(), qt); +clang::VarDecl * +PdbAstBuilder::GetOrCreateGlobalVariableDecl(PdbGlobalSymId var_id) { + if (clang::Decl *decl = TryGetDecl(var_id)) + return llvm::dyn_cast<clang::VarDecl>(decl); - m_uid_to_decl[toOpaqueUid(var_id)] = var_decl; - return var_decl; + CVSymbol sym = m_index.ReadSymbolRecord(var_id); + return CreateVariableDecl(PdbSymUid(var_id), sym, GetTranslationUnitDecl()); } clang::QualType PdbAstBuilder::GetBasicType(lldb::BasicType type) { |

