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(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(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}} +};