diff options
Diffstat (limited to 'lldb/source/Commands/CommandObjectMemory.cpp')
| -rw-r--r-- | lldb/source/Commands/CommandObjectMemory.cpp | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/lldb/source/Commands/CommandObjectMemory.cpp b/lldb/source/Commands/CommandObjectMemory.cpp index fe44ad052ab..97ab957ff73 100644 --- a/lldb/source/Commands/CommandObjectMemory.cpp +++ b/lldb/source/Commands/CommandObjectMemory.cpp @@ -521,17 +521,31 @@ protected: type_list); } - if (type_list.GetSize() == 0) + if (type_list.GetSize() == 0 && lookup_type_name.GetCString() && *lookup_type_name.GetCString() == '$') { - result.AppendErrorWithFormat ("unable to find any types that match the raw type '%s' for full type '%s'\n", - lookup_type_name.GetCString(), - view_as_type_cstr); - result.SetStatus(eReturnStatusFailed); - return false; + clang::TypeDecl *tdecl = target->GetPersistentVariables().GetPersistentType(ConstString(lookup_type_name)); + if (tdecl) + { + clang_ast_type.SetClangType(&tdecl->getASTContext(),(lldb::clang_type_t)tdecl->getTypeForDecl()); + } } - TypeSP type_sp (type_list.GetTypeAtIndex(0)); - clang_ast_type.SetClangType (type_sp->GetClangAST(), type_sp->GetClangFullType()); + if (clang_ast_type.IsValid() == false) + { + if (type_list.GetSize() == 0) + { + result.AppendErrorWithFormat ("unable to find any types that match the raw type '%s' for full type '%s'\n", + lookup_type_name.GetCString(), + view_as_type_cstr); + result.SetStatus(eReturnStatusFailed); + return false; + } + else + { + TypeSP type_sp (type_list.GetTypeAtIndex(0)); + clang_ast_type.SetClangType (type_sp->GetClangAST(), type_sp->GetClangFullType()); + } + } while (pointer_count > 0) { |

