diff options
author | Daniel Jasper <djasper@google.com> | 2012-06-13 18:31:09 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2012-06-13 18:31:09 +0000 |
commit | 568eae48a4e19c0359cdcd2a33b8ec9812e4abbc (patch) | |
tree | fcd4ec3532953cc1c6c3b6795d2d6a37e5c9ae03 | |
parent | 28e862a4fbb9ed4060d1db25d45b1ed7a42f1b75 (diff) |
Allow __attribute__((unused)) for fields and make it silence
-Wunused-private-field.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158411 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaDeclAttr.cpp | 2 | ||||
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 1 | ||||
-rw-r--r-- | test/SemaCXX/warn-unused-member.cpp | 2 |
3 files changed, 4 insertions, 1 deletions
diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 19ac6160c5..cf17af0341 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -1610,7 +1610,7 @@ static void handleUnusedAttr(Sema &S, Decl *D, const AttributeList &Attr) { } if (!isa<VarDecl>(D) && !isa<ObjCIvarDecl>(D) && !isFunctionOrMethod(D) && - !isa<TypeDecl>(D) && !isa<LabelDecl>(D)) { + !isa<TypeDecl>(D) && !isa<LabelDecl>(D) && !isa<FieldDecl>(D)) { S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) << Attr.getName() << ExpectedVariableFunctionOrLabel; return; diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 4bd1c3202c..12a63b189b 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -1646,6 +1646,7 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, // effects and are not part of a dependent type declaration. if (!FD->isImplicit() && FD->getDeclName() && FD->getAccess() == AS_private && + !FD->hasAttr<UnusedAttr>() && !FD->getParent()->getTypeForDecl()->isDependentType() && !InitializationHasSideEffects(*FD)) UnusedPrivateFields.insert(FD); diff --git a/test/SemaCXX/warn-unused-member.cpp b/test/SemaCXX/warn-unused-member.cpp index 16e1e22ee8..00de8a97ac 100644 --- a/test/SemaCXX/warn-unused-member.cpp +++ b/test/SemaCXX/warn-unused-member.cpp @@ -115,6 +115,8 @@ class A { Trivial user_constructor_; NonTrivialConstructor non_trivial_constructor_; NonTrivialDestructor non_trivial_destructor_; + + int attr_ __attribute__((unused)); }; class EverythingUsed { |