From: Kaelyn Uhrain Date: Thu, 31 Oct 2013 20:32:56 +0000 (+0000) Subject: Fix a C struct diagnostic regression introduced by r187504 (PR17762). X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cd9d305fa4f613b89d101246bf58f6cb13247d12;p=clang Fix a C struct diagnostic regression introduced by r187504 (PR17762). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@193799 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExprMember.cpp b/lib/Sema/SemaExprMember.cpp index e9cd537cc8..5d13323360 100644 --- a/lib/Sema/SemaExprMember.cpp +++ b/lib/Sema/SemaExprMember.cpp @@ -1158,6 +1158,11 @@ Sema::LookupMemberExpr(LookupResult &R, ExprResult &BaseExpr, // overloaded operator->, but that should have been dealt with // by now--or a diagnostic message already issued if a problem // was encountered while looking for the overloaded operator->. + if (!getLangOpts().CPlusPlus) { + Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) + << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() + << FixItHint::CreateReplacement(OpLoc, "."); + } IsArrow = false; } else if (BaseType->isFunctionType()) { goto fail; diff --git a/test/Sema/member-reference.c b/test/Sema/member-reference.c index edbbea59ac..8939fd5157 100644 --- a/test/Sema/member-reference.c +++ b/test/Sema/member-reference.c @@ -1,5 +1,4 @@ // RUN: %clang_cc1 %s -verify -fsyntax-only -// expected-no-diagnostics struct simple { int i; }; @@ -19,3 +18,7 @@ void g(void) { s->x = 1; s->z = 2; } + +int PR17762(struct simple c) { + return c->i; // expected-error {{member reference type 'struct simple' is not a pointer; maybe you meant to use '.'?}} +}