[PATCH] D38678: [Sema] Warn about unused variables if we can constant evaluate the initializer.
Phabricator via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 13 18:31:13 PDT 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL315787: [Sema] Warn about unused variables if we can constant evaluate the initializer. (authored by d0k).
Repository:
rL LLVM
https://reviews.llvm.org/D38678
Files:
cfe/trunk/lib/Sema/SemaDecl.cpp
cfe/trunk/test/SemaCXX/warn-unused-variables.cpp
Index: cfe/trunk/test/SemaCXX/warn-unused-variables.cpp
===================================================================
--- cfe/trunk/test/SemaCXX/warn-unused-variables.cpp
+++ cfe/trunk/test/SemaCXX/warn-unused-variables.cpp
@@ -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 @@
}
}
+
+#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
Index: cfe/trunk/lib/Sema/SemaDecl.cpp
===================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp
+++ cfe/trunk/lib/Sema/SemaDecl.cpp
@@ -1723,7 +1723,8 @@
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;
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38678.119005.patch
Type: text/x-patch
Size: 2027 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20171014/e69099f9/attachment-0001.bin>
More information about the cfe-commits
mailing list