On Tue, Nov 1, 2016 at 3:13 AM Alex L <arpha...@gmail.com> wrote: > On 31 October 2016 at 15:34, David Blaikie <dblai...@gmail.com> wrote: > > > > On Thu, Oct 27, 2016 at 6:40 AM Alex Lorenz via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > > Author: arphaman > Date: Thu Oct 27 08:30:51 2016 > New Revision: 285289 > > URL: http://llvm.org/viewvc/llvm-project?rev=285289&view=rev > Log: > [Sema] -Wunused-variable warning for array variables should behave > similarly to scalar variables. > > This commit makes the -Wunused-variable warning behaviour more consistent: > Now clang won't warn for array variables where it doesn't warn for scalar > variables. > > rdar://24158862 > > Differential Revision: https://reviews.llvm.org/D25937 > > Modified: > cfe/trunk/lib/Sema/SemaDecl.cpp > cfe/trunk/test/SemaCXX/warn-everthing.cpp > cfe/trunk/test/SemaCXX/warn-unused-variables.cpp > > Modified: cfe/trunk/lib/Sema/SemaDecl.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=285289&r1=285288&r2=285289&view=diff > > ============================================================================== > --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) > +++ cfe/trunk/lib/Sema/SemaDecl.cpp Thu Oct 27 08:30:51 2016 > @@ -1522,7 +1522,7 @@ static bool ShouldDiagnoseUnusedDecl(con > if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { > > // White-list anything with an __attribute__((unused)) type. > - QualType Ty = VD->getType(); > + const auto *Ty = VD->getType().getTypePtr(); > > // Only look at the outermost level of typedef. > if (const TypedefType *TT = Ty->getAs<TypedefType>()) { > @@ -1535,6 +1535,10 @@ static bool ShouldDiagnoseUnusedDecl(con > if (Ty->isIncompleteType() || Ty->isDependentType()) > return false; > > + // Look at the element type to ensure that the warning behaviour is > + // consistent for both scalars and arrays. > + Ty = Ty->getBaseElementTypeUnsafe(); > + > if (const TagType *TT = Ty->getAs<TagType>()) { > const TagDecl *Tag = TT->getDecl(); > if (Tag->hasAttr<UnusedAttr>()) > > Modified: cfe/trunk/test/SemaCXX/warn-everthing.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-everthing.cpp?rev=285289&r1=285288&r2=285289&view=diff > > ============================================================================== > --- cfe/trunk/test/SemaCXX/warn-everthing.cpp (original) > +++ cfe/trunk/test/SemaCXX/warn-everthing.cpp Thu Oct 27 08:30:51 2016 > @@ -9,5 +9,5 @@ public: > }; > > void testPR12271() { // expected-warning {{no previous prototype for > function 'testPR12271'}} > - PR12271 a[1][1]; // expected-warning {{unused variable 'a'}} > + PR12271 a[1][1]; > } > > Modified: cfe/trunk/test/SemaCXX/warn-unused-variables.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-unused-variables.cpp?rev=285289&r1=285288&r2=285289&view=diff > > ============================================================================== > --- cfe/trunk/test/SemaCXX/warn-unused-variables.cpp (original) > +++ cfe/trunk/test/SemaCXX/warn-unused-variables.cpp Thu Oct 27 08:30:51 > 2016 > @@ -150,3 +150,54 @@ namespace ctor_with_cleanups { > } > > #include "Inputs/warn-unused-variables.h" > + > +namespace arrayRecords { > + > +int total = 0; > + > +class Adder { > > > Presumably this class could be a bit simpler - is it just about having a > non-trivial ctor? or non-trivial dtor? > > It'd be helpful to make the test as simple as possible to show what > features are important to the diagnostic - rather than making the test look > like real code by having functionality that's not required for testing. > > (eg: you don't have to implement functions here - the code will not be > linked or executed, just compiled for warnings in the test suite) > > Potentially name the class by its purpose: > > struct NonTriviallyDestructible { > ~NonTriviallyDestructible(); > }; > > and similar. > > > Thanks for looking at this commit! > You're right about this particular class, it can be simpler, since it's > testing a non-trivial door. When I started working on this patch I used the > code from the bug report to reproduce this issue in the test case, and > didn't simplify it further when I found out the cause. >
*nod* no worries - it's certainly not uncommon > > > > (is it important that Adder and Foo are constructed with arguments/have > ctor parameters? It's not clear to me from the test or code whether that's > the case) > > > No. Do you think I should simplify this test case in a separate commit? > That'd be great if you could simplify it down to what seems to be the essentials! - Dave > > Cheers, > Alex > > > > > +public: > + Adder(int x); // out of line below > + ~Adder() {} > +}; > + > +Adder::Adder(int x) { > + total += x; > +} > + > +struct Foo { > + int x; > + Foo(int x) : x(x) {} > +}; > + > +struct S1 { > + S1(); > +}; > + > +void foo(int size) { > + S1 y; // no warning > + S1 yarray[2]; // no warning > + S1 dynArray[size]; // no warning > + S1 nestedArray[1][2][3]; // no warning > + > + Adder scalerInFuncScope = 134; // no warning > + Adder arrayInFuncScope[] = { 135, 136 }; // no warning > + Adder nestedArrayInFuncScope[2][2] = { {1,2}, {3,4} }; // no warning > + > + Foo fooScalar = 1; // expected-warning {{unused variable 'fooScalar'}} > + Foo fooArray[] = {1,2}; // expected-warning {{unused variable > 'fooArray'}} > + Foo fooNested[2][2] = { {1,2}, {3,4} }; // expected-warning {{unused > variable 'fooNested'}} > +} > + > +template<int N> > +void bar() { > + Adder scaler = 123; // no warning > + Adder array[N] = {1,2}; // no warning > +} > + > +void test() { > + foo(10); > + bar<2>(); > +} > + > +} > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits