diff options
-rw-r--r-- | lib/Sema/SemaExprMember.cpp | 4 | ||||
-rw-r--r-- | test/SemaCXX/member-expr.cpp | 10 |
2 files changed, 12 insertions, 2 deletions
diff --git a/lib/Sema/SemaExprMember.cpp b/lib/Sema/SemaExprMember.cpp index 6c84caa3f3..bebb498b64 100644 --- a/lib/Sema/SemaExprMember.cpp +++ b/lib/Sema/SemaExprMember.cpp @@ -436,7 +436,7 @@ Sema::ActOnDependentMemberExpr(Expr *BaseExpr, QualType BaseType, if (PT && (!getLangOpts().ObjC1 || PT->getPointeeType()->isRecordType())) { assert(BaseExpr && "cannot happen with implicit member accesses"); - Diag(NameInfo.getLoc(), diag::err_typecheck_member_reference_struct_union) + Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr->getSourceRange(); return ExprError(); } @@ -1418,7 +1418,7 @@ Sema::LookupMemberExpr(LookupResult &R, ExprResult &BaseExpr, ObjCImpDecl, HasTemplateArgs); } - Diag(MemberLoc, diag::err_typecheck_member_reference_struct_union) + Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr.get()->getSourceRange(); return ExprError(); diff --git a/test/SemaCXX/member-expr.cpp b/test/SemaCXX/member-expr.cpp index dbddd1c2e3..763f9c754c 100644 --- a/test/SemaCXX/member-expr.cpp +++ b/test/SemaCXX/member-expr.cpp @@ -157,3 +157,13 @@ namespace FuncInMemberExpr { Vec fun3(int x = 0); int test3() { return fun3.size(); } // expected-error {{base of member reference is a function; perhaps you meant to call it with no arguments}} } + +namespace DotForSemiTypo { +void f(int i) { + // If the programmer typo'd '.' for ';', make sure we point at the '.' rather + // than the "field name" (whatever the first token on the next line happens to + // be). + int j = i. // expected-error {{member reference base type 'int' is not a structure or union}} + j = 0; +} +} |