aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-10-13 21:02:07 +0000
committerAnders Carlsson <andersca@mac.com>2009-10-13 21:02:07 +0000
commitcee1b54e11cb4d460634e6ecedbe75c7c2382389 (patch)
tree3b04d883bf6876c9e586412add8d62d12b66eda3
parentdcde1909f6e0b760f69d2290efe702ac5e4e6ae9 (diff)
Pass the right SourceLocation to Actions.ActOnOverloadedOperatorReferenceExpr and Actions.ActOnConversionOperatorReferenceExpr. Update incomplete-call.cpp test.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84026 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Parse/ParseExpr.cpp6
-rw-r--r--test/SemaCXX/incomplete-call.cpp7
2 files changed, 10 insertions, 3 deletions
diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp
index d10e38cf68..72e30e3b60 100644
--- a/lib/Parse/ParseExpr.cpp
+++ b/lib/Parse/ParseExpr.cpp
@@ -983,12 +983,14 @@ Parser::ParsePostfixExpressionSuffix(OwningExprResult LHS) {
} else if (getLang().CPlusPlus && Tok.is(tok::kw_operator)) {
// We have a reference to a member operator, e.g., t.operator int or
// t.operator+.
+ SourceLocation OperatorLoc = Tok.getLocation();
+
if (OverloadedOperatorKind Op = TryParseOperatorFunctionId()) {
if (!LHS.isInvalid())
LHS = Actions.ActOnOverloadedOperatorReferenceExpr(CurScope,
move(LHS), OpLoc,
OpKind,
- Tok.getLocation(),
+ OperatorLoc,
Op, &SS);
// TryParseOperatorFunctionId already consumed our token, so
// don't bother
@@ -997,7 +999,7 @@ Parser::ParsePostfixExpressionSuffix(OwningExprResult LHS) {
LHS = Actions.ActOnConversionOperatorReferenceExpr(CurScope,
move(LHS), OpLoc,
OpKind,
- Tok.getLocation(),
+ OperatorLoc,
ConvType, &SS);
} else {
// Don't emit a diagnostic; ParseConversionFunctionId does it for us
diff --git a/test/SemaCXX/incomplete-call.cpp b/test/SemaCXX/incomplete-call.cpp
index c61b61a9c6..a9f49d206a 100644
--- a/test/SemaCXX/incomplete-call.cpp
+++ b/test/SemaCXX/incomplete-call.cpp
@@ -1,10 +1,12 @@
// RUN: clang-cc -fsyntax-only -verify %s
-struct A; // expected-note 4 {{forward declaration of 'struct A'}}
+struct A; // expected-note 6 {{forward declaration of 'struct A'}}
A f(); // expected-note {{note: 'f' declared here}}
struct B {
A f(); // expected-note {{'f' declared here}}
+ A operator()(); // expected-note {{'operator()' declared here}}
+ operator A(); // expected-note {{'operator A' declared here}}
};
void g() {
@@ -17,4 +19,7 @@ void g() {
B b;
b.f(); // expected-error {{calling 'f' with incomplete return type 'struct A'}}
+
+ b.operator()(); // expected-error {{calling 'operator()' with incomplete return type 'struct A'}}
+ b.operator A(); // expected-error {{calling 'operator A' with incomplete return type 'struct A'}}
}