summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2018-12-20 23:32:37 +0000
committerZachary Turner <zturner@google.com>2018-12-20 23:32:37 +0000
commit3790029d9714b4b42ebb289fb1ee8670e6a1b99d (patch)
treef943ca359e82624bd73d515f83a470ea0e83379d /lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp
parent1de5876f428e031a0ead529b8d340598ed2498e0 (diff)
downloadbcm5719-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.cpp28
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) {
OpenPOWER on IntegriCloud