summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaOverload.cpp
diff options
context:
space:
mode:
authorKaelyn Uhrain <rikka@google.com>2013-07-31 17:38:24 +0000
committerKaelyn Uhrain <rikka@google.com>2013-07-31 17:38:24 +0000
commit0c51de4ab1ae11f105c0c9bf7f7deb603b3a67e2 (patch)
tree7e536d555f971077184fc5bcae6053bc9404d1c7 /clang/lib/Sema/SemaOverload.cpp
parent374089e7b888f97fe45c0f128a10ec261d5fd301 (diff)
downloadbcm5719-llvm-0c51de4ab1ae11f105c0c9bf7f7deb603b3a67e2.tar.gz
bcm5719-llvm-0c51de4ab1ae11f105c0c9bf7f7deb603b3a67e2.zip
Improve the diagnostic experience, including adding recovery, for
changing '->' to '.' when there is no operator-> defined for a class. llvm-svn: 187504
Diffstat (limited to 'clang/lib/Sema/SemaOverload.cpp')
-rw-r--r--clang/lib/Sema/SemaOverload.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 7ebcd88fe5f..72415518930 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -11463,7 +11463,8 @@ Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
/// (if one exists), where @c Base is an expression of class type and
/// @c Member is the name of the member we're trying to find.
ExprResult
-Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) {
+Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc,
+ bool *NoArrowOperatorFound) {
assert(Base->getType()->isRecordType() &&
"left-hand side must have class type");
@@ -11509,6 +11510,12 @@ Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) {
case OR_No_Viable_Function:
if (CandidateSet.empty()) {
QualType BaseType = Base->getType();
+ if (NoArrowOperatorFound) {
+ // Report this specific error to the caller instead of emitting a
+ // diagnostic, as requested.
+ *NoArrowOperatorFound = true;
+ return ExprError();
+ }
Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
<< BaseType << Base->getSourceRange();
if (BaseType->isRecordType() && !BaseType->isPointerType()) {
OpenPOWER on IntegriCloud