diff options
Diffstat (limited to 'lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp')
| -rw-r--r-- | lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp index 239280c65255..4fcc640d9071 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp @@ -56,6 +56,7 @@ #include "clang/AST/DeclCXX.h" #include "clang/AST/DeclObjC.h" +#include "clang/Basic/DiagnosticSema.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/ScopeExit.h" #include "llvm/BinaryFormat/Dwarf.h" @@ -988,9 +989,33 @@ void ClangUserExpression::FixupCVRParseErrorDiagnostics( !m_fixed_text.empty() ? m_fixed_text.c_str() : m_expr_text.c_str()); } +void ClangUserExpression::FixupTemplateLookupDiagnostics( + DiagnosticManager &diagnostic_manager) const { + if (llvm::none_of(diagnostic_manager.Diagnostics(), + [](std::unique_ptr<Diagnostic> const &diag) { + switch (diag->GetCompilerID()) { + // FIXME: should we also be checking + // clang::diag::err_no_member_template? + case clang::diag::err_no_template: + case clang::diag::err_non_template_in_template_id: + return true; + default: + return false; + } + })) + return; + + diagnostic_manager.AddDiagnostic( + "Naming template instantiation not yet supported. Template functions " + "can be invoked via their mangled name. For example, using " + "`_Z3fooIiEvi(123)` for `foo<int>(123)`", + lldb::eSeverityInfo, eDiagnosticOriginLLDB); +} + void ClangUserExpression::FixupParseErrorDiagnostics( DiagnosticManager &diagnostic_manager) const { FixupCVRParseErrorDiagnostics(diagnostic_manager); + FixupTemplateLookupDiagnostics(diagnostic_manager); } char ClangUserExpression::ClangUserExpressionHelper::ID; |
