aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp')
-rw-r--r--lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp25
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;