<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
This commit is contained in:
Enrico Granata
2012-05-21 16:51:35 +00:00
parent ea365131a2
commit fd4c84ee9f
9 changed files with 165 additions and 47 deletions

View File

@@ -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()
{