summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2017-10-19 19:07:13 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2017-10-19 19:07:13 +0000
commit93a1771aaf369f37dbfc37be9b681043521db2fb (patch)
treeb12642838ed76ffccff3cb5142664474717813d5
parente8e2c4c0cff2266a27f018a0617d6aaaa7c6a93a (diff)
downloadbcm5719-llvm-93a1771aaf369f37dbfc37be9b681043521db2fb.tar.gz
bcm5719-llvm-93a1771aaf369f37dbfc37be9b681043521db2fb.zip
[Sema] Fix assertion failure when checking for unused variables in a dependent context.
llvm-svn: 316177
-rw-r--r--clang/lib/Sema/SemaDecl.cpp2
-rw-r--r--clang/test/SemaCXX/warn-unused-variables.cpp10
2 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 9e5fa0e5634..d75a469970f 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -1724,7 +1724,7 @@ static bool ShouldDiagnoseUnusedDecl(const NamedDecl *D) {
if (Construct && !Construct->isElidable()) {
CXXConstructorDecl *CD = Construct->getConstructor();
if (!CD->isTrivial() && !RD->hasAttr<WarnUnusedAttr>() &&
- !VD->evaluateValue())
+ (VD->getInit()->isValueDependent() || !VD->evaluateValue()))
return false;
}
}
diff --git a/clang/test/SemaCXX/warn-unused-variables.cpp b/clang/test/SemaCXX/warn-unused-variables.cpp
index 0974cf5a61d..a7ac9afc36a 100644
--- a/clang/test/SemaCXX/warn-unused-variables.cpp
+++ b/clang/test/SemaCXX/warn-unused-variables.cpp
@@ -226,4 +226,14 @@ void test(int i) {
NoLiteral nl2(42); // no-warning
}
}
+
+namespace crash {
+struct a {
+ a(const char *);
+};
+template <typename b>
+void c() {
+ a d(b::e ? "" : "");
+}
+}
#endif
OpenPOWER on IntegriCloud