summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2015-10-09 18:01:10 +0000
committerSean Callanan <scallanan@apple.com>2015-10-09 18:01:10 +0000
commitc7b054a60cc1dc5c972b29ee694e7bbf8d186d22 (patch)
treedf601844bbf9b37ead91a316e2d233f8785ce745
parent9fbe22bac63e9001b80d99898abdb46fdfa52dd8 (diff)
downloadbcm5719-llvm-c7b054a60cc1dc5c972b29ee694e7bbf8d186d22.tar.gz
bcm5719-llvm-c7b054a60cc1dc5c972b29ee694e7bbf8d186d22.zip
Don't blindly use C for eLanguageTypeUnknown when getting a scratch TypeSystem.
Instead check what languages are supported for expressions; use C if available, but otherwise pick one of the supported languages. This can be overridden using the target settings. <rdar://problem/22290878> llvm-svn: 249864
-rw-r--r--lldb/source/Target/Target.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index cbba5b086f5..7ea29a4b1b7 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -1901,7 +1901,26 @@ Target::GetScratchTypeSystemForLanguage (Error *error, lldb::LanguageType langua
if (language == eLanguageTypeMipsAssembler // GNU AS and LLVM use it for all assembly code
|| language == eLanguageTypeUnknown)
{
- language = eLanguageTypeC;
+ std::set<lldb::LanguageType> languages_for_types;
+ std::set<lldb::LanguageType> languages_for_expressions;
+
+ Language::GetLanguagesSupportingTypeSystems(languages_for_types, languages_for_expressions);
+
+ if (languages_for_expressions.count(eLanguageTypeC))
+ {
+ language = eLanguageTypeC; // LLDB's default. Override by setting the target language.
+ }
+ else
+ {
+ if (languages_for_expressions.empty())
+ {
+ return nullptr;
+ }
+ else
+ {
+ language = *languages_for_expressions.begin();
+ }
+ }
}
return m_scratch_type_system_map.GetTypeSystemForLanguage(language, this, create_on_demand);
OpenPOWER on IntegriCloud