]> granicus.if.org Git - clang/commitdiff
Fix a C struct diagnostic regression introduced by r187504 (PR17762).
authorKaelyn Uhrain <rikka@google.com>
Thu, 31 Oct 2013 20:32:56 +0000 (20:32 +0000)
committerKaelyn Uhrain <rikka@google.com>
Thu, 31 Oct 2013 20:32:56 +0000 (20:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@193799 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExprMember.cpp
test/Sema/member-reference.c

index e9cd537cc8469dfa14f86ebf3d4f920130f4d4e4..5d1332336098a9b994a4a2048b5d686dbe3c468f 100644 (file)
@@ -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;
index edbbea59ac87093418526bb19594bc43278030aa..8939fd51570918fafd26f18a453eb1ded60d13fa 100644 (file)
@@ -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 '.'?}}
+}