]> granicus.if.org Git - clang/commitdiff
Report the location of the syntax error inside a macro. Fixes PR7944.
authorNick Lewycky <nicholas@mxc.ca>
Fri, 15 Oct 2010 21:43:24 +0000 (21:43 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Fri, 15 Oct 2010 21:43:24 +0000 (21:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116624 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExpr.cpp
test/SemaCXX/PR7944.cpp [new file with mode: 0644]

index 10225b61387a3f3f91959ad84fcf5218bdc76367..031337d6fe2baf9423e16c66976a691addb6d9b7 100644 (file)
@@ -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/test/SemaCXX/PR7944.cpp b/test/SemaCXX/PR7944.cpp
new file mode 100644 (file)
index 0000000..fc52d10
--- /dev/null
@@ -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}}
+}