Author: ogoffart Date: Mon May 9 02:09:51 2016 New Revision: 268895 URL: http://llvm.org/viewvc/llvm-project?rev=268895&view=rev Log: Fix spurious warnings about unused private field
If the address of a field is taken as a pointer to member, we should not warn that the field is not used. Normaly, yse of fields are done from MemberExpr, but in case of pointer to member, it is in a DeclRefExpr Differential Revision: http://reviews.llvm.org/D20054 Modified: cfe/trunk/lib/Sema/SemaExpr.cpp cfe/trunk/test/SemaCXX/warn-unused-private-field.cpp Modified: cfe/trunk/lib/Sema/SemaExpr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=268895&r1=268894&r2=268895&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaExpr.cpp (original) +++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon May 9 02:09:51 2016 @@ -1736,10 +1736,12 @@ Sema::BuildDeclRefExpr(ValueDecl *D, Qua !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, E->getLocStart())) recordUseOfEvaluatedWeak(E); - // Just in case we're building an illegal pointer-to-member. - FieldDecl *FD = dyn_cast<FieldDecl>(D); - if (FD && FD->isBitField()) - E->setObjectKind(OK_BitField); + if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) { + UnusedPrivateFields.remove(FD); + // Just in case we're building an illegal pointer-to-member. + if (FD->isBitField()) + E->setObjectKind(OK_BitField); + } return E; } Modified: cfe/trunk/test/SemaCXX/warn-unused-private-field.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-unused-private-field.cpp?rev=268895&r1=268894&r2=268895&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/warn-unused-private-field.cpp (original) +++ cfe/trunk/test/SemaCXX/warn-unused-private-field.cpp Mon May 9 02:09:51 2016 @@ -128,6 +128,7 @@ class EverythingUsed { int *use = &by_reference_; int test[2]; test[as_array_index_] = 42; + int EverythingUsed::*ptr = &EverythingUsed::by_pointer_to_member_; } template<class T> @@ -142,6 +143,7 @@ class EverythingUsed { int by_template_function_; int as_array_index_; int by_initializer_; + int by_pointer_to_member_; }; class HasFeatureTest { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits