Author: d0k Date: Sat Oct 14 08:59:34 2017 New Revision: 315811 URL: http://llvm.org/viewvc/llvm-project?rev=315811&view=rev Log: Re-land r315787, "[Sema] Warn about unused variables if we can constant evaluate the initializer."
The warnings in libc++ tests were fixed in the meantime. Modified: cfe/trunk/lib/Sema/SemaDecl.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=315811&r1=315810&r2=315811&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaDecl.cpp Sat Oct 14 08:59:34 2017 @@ -1723,7 +1723,8 @@ static bool ShouldDiagnoseUnusedDecl(con dyn_cast<CXXConstructExpr>(Init); if (Construct && !Construct->isElidable()) { CXXConstructorDecl *CD = Construct->getConstructor(); - if (!CD->isTrivial() && !RD->hasAttr<WarnUnusedAttr>()) + if (!CD->isTrivial() && !RD->hasAttr<WarnUnusedAttr>() && + !VD->evaluateValue()) return false; } } 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=315811&r1=315810&r2=315811&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/warn-unused-variables.cpp (original) +++ cfe/trunk/test/SemaCXX/warn-unused-variables.cpp Sat Oct 14 08:59:34 2017 @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -fsyntax-only -Wunused-variable -Wunused-label -Wno-c++1y-extensions -verify %s +// RUN: %clang_cc1 -fsyntax-only -Wunused-variable -Wunused-label -Wno-c++1y-extensions -verify -std=c++11 %s template<typename T> void f() { T t; t = 17; @@ -194,3 +195,35 @@ void test() { } } + +#if __cplusplus >= 201103L +namespace with_constexpr { +template <typename T> +struct Literal { + T i; + Literal() = default; + constexpr Literal(T i) : i(i) {} +}; + +struct NoLiteral { + int i; + NoLiteral() = default; + constexpr NoLiteral(int i) : i(i) {} + ~NoLiteral() {} +}; + +static Literal<int> gl1; // expected-warning {{unused variable 'gl1'}} +static Literal<int> gl2(1); // expected-warning {{unused variable 'gl2'}} +static const Literal<int> gl3(0); // expected-warning {{unused variable 'gl3'}} + +template <typename T> +void test(int i) { + Literal<int> l1; // expected-warning {{unused variable 'l1'}} + Literal<int> l2(42); // expected-warning {{unused variable 'l2'}} + Literal<int> l3(i); // no-warning + Literal<T> l4(0); // no-warning + NoLiteral nl1; // no-warning + NoLiteral nl2(42); // no-warning +} +} +#endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits