diff options
author | Sean Callanan <scallanan@apple.com> | 2015-10-09 18:01:10 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2015-10-09 18:01:10 +0000 |
commit | c7b054a60cc1dc5c972b29ee694e7bbf8d186d22 (patch) | |
tree | df601844bbf9b37ead91a316e2d233f8785ce745 | |
parent | 9fbe22bac63e9001b80d99898abdb46fdfa52dd8 (diff) | |
download | bcm5719-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.cpp | 21 |
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); |