[prev in list] [next in list] [prev in thread] [next in thread]
List: cfe-commits
Subject: Re: [PATCH] D11334: [Sema] Call to deleted functions are supposed to be verboten
From: Davide Italiano <dccitaliano () gmail ! com>
Date: 2015-07-21 22:39:52
Message-ID: CADob98RJn+dsvdhdf2fN6CKiMS9OUqBa+8Lx997UMft0xQbyuw () mail ! gmail ! com
[Download RAW message or body]
On Tue, Jul 21, 2015 at 3:26 PM, Davide Italiano <dccitaliano@gmail.com> wrote:
> On Tue, Jul 21, 2015 at 2:59 PM, Richard Smith <richard@metafoo.co.uk> wrote:
> > rsmith added inline comments.
> >
> > ================
> > Comment at: lib/Sema/SemaOverload.cpp:11608
> > @@ +11607,3 @@
> > +
> > + // Calls to deleted member functions are verboten.
> > + if (Method && Method->isDeleted())
> > ----------------
> > This check should happen when we build the `MemberExpr`, not when we use it. It \
> > looks like the bug is in `Sema::BuildMemberReferenceExpr`, at around line 1050 of \
> > SemaExprMember.cpp:
> > 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))
> > return ExprError();
> >
> > This is wrong: we should `DiagnoseUseOfDecl` (including diagnosing the use of a \
> > deleted function) even for a virtual function. Which tests fail if we \
> > unconditionally `DiagnoseUseOfDecl` here?
>
> Luckily only one.
>
> FAIL: Clang :: SemaCXX/attr-deprecated.cpp (5733 of 8388)
> ******************** TEST 'Clang :: SemaCXX/attr-deprecated.cpp'
> FAILED ********************
> Script:
> --
> /exps/llvm2/build/./bin/clang -cc1 -internal-isystem
> /exps/llvm2/build/bin/../lib/clang/3.8.0/include -nostdsysteminc
> /exps/llvm2/tools/clang/test/SemaCXX/attr-deprecated.cpp -verify
> -fexceptions
> --
> Exit Code: 1
>
> Command Output (stderr):
> --
> error: 'warning' diagnostics seen but not expected:
> File /exps/llvm2/tools/clang/test/SemaCXX/attr-deprecated.cpp Line
> 34: 'f' is deprecated
> File /exps/llvm2/tools/clang/test/SemaCXX/attr-deprecated.cpp Line
> 50: 'f' is deprecated
> File /exps/llvm2/tools/clang/test/SemaCXX/attr-deprecated.cpp Line
> 65: 'f' is deprecated
> error: 'note' diagnostics seen but not expected:
> File /exps/llvm2/tools/clang/test/SemaCXX/attr-deprecated.cpp Line
> 29: 'f' has been explicitly marked deprecated here
> File /exps/llvm2/tools/clang/test/SemaCXX/attr-deprecated.cpp Line
> 29: 'f' has been explicitly marked deprecated here
> File /exps/llvm2/tools/clang/test/SemaCXX/attr-deprecated.cpp Line
> 62: 'f' has been explicitly marked deprecated here
> 6 errors generated.
>
> --
Looking at the tests it seems we emit the warnings we previously
emitted only for fully qualified functions also for non-fully
qualified functions.
If you think we should diagnose in both cases, I'll modify the test to
take them in account.
--
Davide
_______________________________________________
cfe-commits mailing list
cfe-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic