r242857 - [Sema] Diagnose use of declaration correctly.

Davide Italiano davide at freebsd.org
Wed Jul 22 19:56:19 PDT 2015


On Tue, Jul 21, 2015 at 5:37 PM, Richard Smith <richard at metafoo.co.uk> wrote:
> On Tue, Jul 21, 2015 at 5:30 PM, Davide Italiano <davide at freebsd.org> wrote:
>>
>> Author: davide
>> Date: Tue Jul 21 19:30:58 2015
>> New Revision: 242857
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=242857&view=rev
>> Log:
>> [Sema] Diagnose use of declaration correctly.
>>
>> Before we skipped that for virtual functions not fully qualified (r81507).
>> This commit basically reverts this to the older behaviour, which seems
>> more consistent. We now also correctly consider ill-formed calls to
>> deleted
>> member functions, which were silently passed before in some cases.
>> The review contains the whole discussion.
>>
>> PR:             20268
>> Differential Revision:   http://reviews.llvm.org/D11334
>>
>> Added:
>>     cfe/trunk/test/SemaCXX/deleted-function-access.cpp
>> Modified:
>>     cfe/trunk/lib/Sema/SemaExprMember.cpp
>>     cfe/trunk/test/SemaCXX/attr-deprecated.cpp
>>
>> Modified: cfe/trunk/lib/Sema/SemaExprMember.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprMember.cpp?rev=242857&r1=242856&r2=242857&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaExprMember.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaExprMember.cpp Tue Jul 21 19:30:58 2015
>> @@ -1042,16 +1042,8 @@ Sema::BuildMemberReferenceExpr(Expr *Bas
>>      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))
>>
>> Modified: cfe/trunk/test/SemaCXX/attr-deprecated.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/attr-deprecated.cpp?rev=242857&r1=242856&r2=242857&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/SemaCXX/attr-deprecated.cpp (original)
>> +++ cfe/trunk/test/SemaCXX/attr-deprecated.cpp Tue Jul 21 19:30:58 2015
>> @@ -26,12 +26,12 @@ void A::h(A* a)
>>  }
>>
>>  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 C::g() {
>>  }
>>
>>  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 @@ struct D {
>>    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}}
>>  }
>
>
> Can you also add some tests here for the case where the deprecated virtual
> function is overloaded?
>

Done in r242980.

--
Davide



More information about the cfe-commits mailing list