When building the list of variables we're going to write "using $_lldb_local_vars"
authorJim Ingham <jingham@apple.com>
Tue, 26 Apr 2016 00:29:59 +0000 (00:29 +0000)
committerJim Ingham <jingham@apple.com>
Tue, 26 Apr 2016 00:29:59 +0000 (00:29 +0000)
statements for, be sure not to include variables that have no locations.  We wouldn't
be able to realize them, and that will cause all expressions to fail.

llvm-svn: 267500

lldb/include/lldb/Target/StackFrame.h
lldb/source/Expression/ExpressionSourceCode.cpp
lldb/source/Target/StackFrame.cpp

index f021cba..b44340e 100644 (file)
@@ -289,7 +289,7 @@ public:
     ///     A pointer to a list of variables.
     //------------------------------------------------------------------
     lldb::VariableListSP
-    GetInScopeVariableList (bool get_file_globals);
+    GetInScopeVariableList (bool get_file_globals, bool must_have_valid_location = false);
 
     //------------------------------------------------------------------
     /// Create a ValueObject for a variable name / pathname, possibly
index d5e2cdb..14e9810 100644 (file)
@@ -278,7 +278,7 @@ bool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrappi
         ConstString object_name;
         if (Language::LanguageIsCPlusPlus(frame->GetLanguage()))
         {
-            lldb::VariableListSP var_list_sp = frame->GetInScopeVariableList(false);
+            lldb::VariableListSP var_list_sp = frame->GetInScopeVariableList(false, true);
             AddLocalVariableDecls(var_list_sp, lldb_local_var_decls);
         }
     }
index 7a56609..d63fa13 100644 (file)
@@ -571,7 +571,7 @@ StackFrame::GetVariableList (bool get_file_globals)
 }
 
 VariableListSP
-StackFrame::GetInScopeVariableList (bool get_file_globals)
+StackFrame::GetInScopeVariableList (bool get_file_globals, bool must_have_valid_location)
 {
     Mutex::Locker locker(m_mutex);
     // We can't fetch variable information for a history stack frame.
@@ -589,7 +589,10 @@ StackFrame::GetInScopeVariableList (bool get_file_globals)
         m_sc.block->AppendVariables (can_create, 
                                      get_parent_variables,
                                      stop_if_block_is_inlined_function,
-                                     [this](Variable* v) { return v->IsInScope(this); },
+                                     [this, must_have_valid_location](Variable* v)
+                                     {
+                                         return v->IsInScope(this) && (!must_have_valid_location || v->LocationIsValidForFrame(this));
+                                     },
                                      var_list_sp.get());
     }