This revision was automatically updated to reflect the committed changes.
Closed by commit rL242857: [Sema] Diagnose use of declaration correctly. 
(authored by davide).

Changed prior to commit:
  http://reviews.llvm.org/D11334?vs=30288&id=30302#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D11334

Files:
  cfe/trunk/lib/Sema/SemaExprMember.cpp
  cfe/trunk/test/SemaCXX/attr-deprecated.cpp
  cfe/trunk/test/SemaCXX/deleted-function-access.cpp

Index: cfe/trunk/test/SemaCXX/attr-deprecated.cpp
===================================================================
--- cfe/trunk/test/SemaCXX/attr-deprecated.cpp
+++ cfe/trunk/test/SemaCXX/attr-deprecated.cpp
@@ -26,12 +26,12 @@
 }
 
 struct B {
-  virtual void f() __attribute__((deprecated)); // expected-note 4 {{'f' has 
been explicitly marked deprecated here}}
+  virtual void f() __attribute__((deprecated)); // expected-note 6 {{'f' has 
been explicitly marked deprecated here}}
   void g();
 };
 
 void B::g() {
-  f();
+  f(); // expected-warning{{'f' is deprecated}}
   B::f(); // expected-warning{{'f' is deprecated}}
 }
 
@@ -47,7 +47,7 @@
 }
 
 void f(B* b, C *c) {
-  b->f();
+  b->f(); // expected-warning{{'f' is deprecated}}
   b->B::f(); // expected-warning{{'f' is deprecated}}
   
   c->f();
@@ -59,10 +59,10 @@
   virtual void f() __attribute__((deprecated));
 };
 
-void D::f() { }
+void D::f() { } // expected-note{{'f' has been explicitly marked deprecated 
here}}
 
 void f(D* d) {
-  d->f();
+  d->f(); // expected-warning{{'f' is deprecated}}
 }
 
 
Index: cfe/trunk/test/SemaCXX/deleted-function-access.cpp
===================================================================
--- cfe/trunk/test/SemaCXX/deleted-function-access.cpp
+++ cfe/trunk/test/SemaCXX/deleted-function-access.cpp
@@ -0,0 +1,6 @@
+// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s
+
+struct S {
+    virtual void f() = delete; //expected-note{{'f' has been explicitly marked 
deleted here}}
+    void g() { f(); } //expected-error{{attempt to use a deleted function}}
+};
Index: cfe/trunk/lib/Sema/SemaExprMember.cpp
===================================================================
--- cfe/trunk/lib/Sema/SemaExprMember.cpp
+++ cfe/trunk/lib/Sema/SemaExprMember.cpp
@@ -1042,16 +1042,8 @@
     BaseExpr = new (Context) CXXThisExpr(Loc, 
BaseExprType,/*isImplicit=*/true);
   }
 
-  bool ShouldCheckUse = true;
-  if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(MemberDecl)) {
-    // Don't diagnose the use of a virtual member function unless it's
-    // explicitly qualified.
-    if (MD->isVirtual() && !SS.isSet())
-      ShouldCheckUse = false;
-  }
-
   // Check the use of this member.
-  if (ShouldCheckUse && DiagnoseUseOfDecl(MemberDecl, MemberLoc))
+  if (DiagnoseUseOfDecl(MemberDecl, MemberLoc))
     return ExprError();
 
   if (FieldDecl *FD = dyn_cast<FieldDecl>(MemberDecl))


Index: cfe/trunk/test/SemaCXX/attr-deprecated.cpp
===================================================================
--- cfe/trunk/test/SemaCXX/attr-deprecated.cpp
+++ cfe/trunk/test/SemaCXX/attr-deprecated.cpp
@@ -26,12 +26,12 @@
 }
 
 struct B {
-  virtual void f() __attribute__((deprecated)); // expected-note 4 {{'f' has been explicitly marked deprecated here}}
+  virtual void f() __attribute__((deprecated)); // expected-note 6 {{'f' has been explicitly marked deprecated here}}
   void g();
 };
 
 void B::g() {
-  f();
+  f(); // expected-warning{{'f' is deprecated}}
   B::f(); // expected-warning{{'f' is deprecated}}
 }
 
@@ -47,7 +47,7 @@
 }
 
 void f(B* b, C *c) {
-  b->f();
+  b->f(); // expected-warning{{'f' is deprecated}}
   b->B::f(); // expected-warning{{'f' is deprecated}}
   
   c->f();
@@ -59,10 +59,10 @@
   virtual void f() __attribute__((deprecated));
 };
 
-void D::f() { }
+void D::f() { } // expected-note{{'f' has been explicitly marked deprecated here}}
 
 void f(D* d) {
-  d->f();
+  d->f(); // expected-warning{{'f' is deprecated}}
 }
 
 
Index: cfe/trunk/test/SemaCXX/deleted-function-access.cpp
===================================================================
--- cfe/trunk/test/SemaCXX/deleted-function-access.cpp
+++ cfe/trunk/test/SemaCXX/deleted-function-access.cpp
@@ -0,0 +1,6 @@
+// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s
+
+struct S {
+    virtual void f() = delete; //expected-note{{'f' has been explicitly marked deleted here}}
+    void g() { f(); } //expected-error{{attempt to use a deleted function}}
+};
Index: cfe/trunk/lib/Sema/SemaExprMember.cpp
===================================================================
--- cfe/trunk/lib/Sema/SemaExprMember.cpp
+++ cfe/trunk/lib/Sema/SemaExprMember.cpp
@@ -1042,16 +1042,8 @@
     BaseExpr = new (Context) CXXThisExpr(Loc, BaseExprType,/*isImplicit=*/true);
   }
 
-  bool ShouldCheckUse = true;
-  if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(MemberDecl)) {
-    // Don't diagnose the use of a virtual member function unless it's
-    // explicitly qualified.
-    if (MD->isVirtual() && !SS.isSet())
-      ShouldCheckUse = false;
-  }
-
   // Check the use of this member.
-  if (ShouldCheckUse && DiagnoseUseOfDecl(MemberDecl, MemberLoc))
+  if (DiagnoseUseOfDecl(MemberDecl, MemberLoc))
     return ExprError();
 
   if (FieldDecl *FD = dyn_cast<FieldDecl>(MemberDecl))
_______________________________________________
cfe-commits mailing list
cfe-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to