summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2010-10-15 21:43:24 +0000
committerNick Lewycky <nicholas@mxc.ca>2010-10-15 21:43:24 +0000
commitc60d6e7af03607c97d2900c1fde5589f6b099463 (patch)
treebfebc1729683a5e9dfeb6874b9da18ee54f7d981 /clang
parent8c2f519b8bd3b0f9cf3a0240988e50e251343e52 (diff)
downloadbcm5719-llvm-c60d6e7af03607c97d2900c1fde5589f6b099463.tar.gz
bcm5719-llvm-c60d6e7af03607c97d2900c1fde5589f6b099463.zip
Report the location of the syntax error inside a macro. Fixes PR7944.
llvm-svn: 116624
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaExpr.cpp2
-rw-r--r--clang/test/SemaCXX/PR7944.cpp12
2 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 10225b61387..031337d6fe2 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -3052,7 +3052,7 @@ Sema::LookupMemberExpr(LookupResult &R, Expr *&BaseExpr,
ResultTy->getAs<PointerType>()->getPointeeType()
->isRecordType()))) {
SourceLocation Loc = PP.getLocForEndOfToken(BaseExpr->getLocEnd());
- Diag(Loc, diag::err_member_reference_needs_call)
+ Diag(BaseExpr->getExprLoc(), diag::err_member_reference_needs_call)
<< QualType(Fun, 0)
<< FixItHint::CreateInsertion(Loc, "()");
diff --git a/clang/test/SemaCXX/PR7944.cpp b/clang/test/SemaCXX/PR7944.cpp
new file mode 100644
index 00000000000..fc52d101e87
--- /dev/null
+++ b/clang/test/SemaCXX/PR7944.cpp
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+// PR7944
+
+#define MACRO(x) x
+
+struct B { int f() { return 0; } };
+struct A { B* b() { return new B; } };
+
+void g() {
+ A a;
+ MACRO(a.b->f()); // expected-error{{base of member reference has function type}}
+}
OpenPOWER on IntegriCloud