Fixed an issue where a pointer's address was being logged instead of its value
Access to synthetic children by name:
 if your object has a synthetic child named foo you can now type
  frame variable object.foo (or ->foo if you have a pointer)
  and that will print the value of the synthetic child
  (if your object has an actual child named foo, the actual child prevails!)
 this behavior should also work in summaries, and you should be able to use
 ${var.foo} and ${svar.foo} interchangeably
  (but using svar.foo will mask an actual child named foo)


git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@137314 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Target/StackFrame.cpp b/source/Target/StackFrame.cpp
index 9ce7590..299fdd1 100644
--- a/source/Target/StackFrame.cpp
+++ b/source/Target/StackFrame.cpp
@@ -641,23 +641,28 @@
                             child_valobj_sp = valobj_sp->GetChildMemberWithName (child_name, true);
                             if (!child_valobj_sp)
                             {
-                                // No child member with name "child_name"
-                                valobj_sp->GetExpressionPath (var_expr_path_strm, false);
-                                if (child_name)
+                                if (no_synth_child == false)
+                                    child_valobj_sp = valobj_sp->GetSyntheticValue(lldb::eUseSyntheticFilter)->GetChildMemberWithName (child_name, true);
+                                
+                                if (no_synth_child || !child_valobj_sp)
                                 {
-                                    error.SetErrorStringWithFormat ("\"%s\" is not a member of \"(%s) %s\"", 
-                                                                    child_name.GetCString(), 
-                                                                    valobj_sp->GetTypeName().AsCString("<invalid type>"),
-                                                                    var_expr_path_strm.GetString().c_str());
+                                    // No child member with name "child_name"
+                                    valobj_sp->GetExpressionPath (var_expr_path_strm, false);
+                                    if (child_name)
+                                    {
+                                        error.SetErrorStringWithFormat ("\"%s\" is not a member of \"(%s) %s\"", 
+                                                                        child_name.GetCString(), 
+                                                                        valobj_sp->GetTypeName().AsCString("<invalid type>"),
+                                                                        var_expr_path_strm.GetString().c_str());
+                                    }
+                                    else
+                                    {
+                                        error.SetErrorStringWithFormat ("incomplete expression path after \"%s\" in \"%s\"",
+                                                                        var_expr_path_strm.GetString().c_str(),
+                                                                        var_expr_cstr);
+                                    }
+                                    return ValueObjectSP();
                                 }
-                                else
-                                {
-                                    error.SetErrorStringWithFormat ("incomplete expression path after \"%s\" in \"%s\"",
-                                                                    var_expr_path_strm.GetString().c_str(),
-                                                                    var_expr_cstr);
-                                }
-
-                                return ValueObjectSP();
                             }
                             // Remove the child name from the path
                             var_path.erase(0, child_name.GetLength());