[Lldb-commits] [lldb] r134656 - /lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp

Sean Callanan scallanan at apple.com
Thu Jul 7 16:05:43 PDT 2011


Author: spyffe
Date: Thu Jul  7 18:05:43 2011
New Revision: 134656

URL: http://llvm.org/viewvc/llvm-project?rev=134656&view=rev
Log:
Added checks to the expresssion parser which make
searching for variables and symbols in the target
more robust.  These checks prevent variables from
being reported as existing if they cannot actually
be evaluated in the current context.

Modified:
    lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp

Modified: lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp?rev=134656&r1=134655&r2=134656&view=diff
==============================================================================
--- lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp (original)
+++ lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp Thu Jul  7 18:05:43 2011
@@ -552,6 +552,9 @@
     else
         return false;
     
+    if (!func_so_addr || !func_so_addr->IsValid())
+        return false;
+    
     func_addr = func_so_addr->GetCallableLoadAddress (m_parser_vars->m_exe_ctx->target);
 
     return true;
@@ -573,6 +576,10 @@
         sc_list.GetContextAtIndex(i, sym_ctx);
     
         const Address *sym_address = &sym_ctx.symbol->GetAddressRangeRef().GetBaseAddress();
+        
+        if (!sym_address || !sym_address->IsValid())
+            return LLDB_INVALID_ADDRESS;
+        
         if (sym_address)
         {
             switch (sym_ctx.symbol->GetType())
@@ -1261,7 +1268,7 @@
                                               NULL));
     }
     else if (sym)
-    {
+    {        
         location_value.reset(new Value);
         
         addr_t location_load_addr = GetSymbolAddress(*exe_ctx.target, name);
@@ -1591,6 +1598,11 @@
                 var_sp = program_globals.GetVariableAtIndex (0);
         }
     }
+    
+    if (!var_sp ||
+        !var_sp->IsInScope(&frame) ||
+        !var_sp->LocationIsValidForFrame (&frame))
+        return lldb::VariableSP();
 
     if (var_sp && type)
     {





More information about the lldb-commits mailing list