diff options
author | Enrico Granata <egranata@apple.com> | 2012-05-21 16:51:35 +0000 |
---|---|---|
committer | Enrico Granata <egranata@apple.com> | 2012-05-21 16:51:35 +0000 |
commit | fd4c84ee9ffcea93879d65f7bbcab814c8245788 (patch) | |
tree | 273dd05e4f003aec33fe137fb83d2baf143350e5 /lldb/source/Target/Process.cpp | |
parent | ea365131a2ff539ab8b052f299b85375b22e522f (diff) | |
download | bcm5719-llvm-fd4c84ee9ffcea93879d65f7bbcab814c8245788.tar.gz bcm5719-llvm-fd4c84ee9ffcea93879d65f7bbcab814c8245788.zip |
<rdar://problem/11355592> Fixing a bug where we would incorrectly try and determine a dynamic type for a variable of a pointer type that is not a valid generic type for dynamic pointers.
llvm-svn: 157190
Diffstat (limited to 'lldb/source/Target/Process.cpp')
-rw-r--r-- | lldb/source/Target/Process.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index 5827b3d2604..658204cfbd6 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -1573,6 +1573,27 @@ Process::GetObjCLanguageRuntime (bool retry_if_null) return NULL; } +bool +Process::IsPossibleDynamicValue (ValueObject& in_value) +{ + if (in_value.IsDynamic()) + return false; + LanguageType known_type = in_value.GetObjectRuntimeLanguage(); + + if (known_type != eLanguageTypeUnknown && known_type != eLanguageTypeC) + { + LanguageRuntime *runtime = GetLanguageRuntime (known_type); + return runtime ? runtime->CouldHaveDynamicValue(in_value) : false; + } + + LanguageRuntime *cpp_runtime = GetLanguageRuntime (eLanguageTypeC_plus_plus); + if (cpp_runtime && cpp_runtime->CouldHaveDynamicValue(in_value)) + return true; + + LanguageRuntime *objc_runtime = GetLanguageRuntime (eLanguageTypeObjC); + return objc_runtime ? objc_runtime->CouldHaveDynamicValue(in_value) : false; +} + BreakpointSiteList & Process::GetBreakpointSiteList() { |