diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2017-10-19 19:07:13 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2017-10-19 19:07:13 +0000 |
commit | 93a1771aaf369f37dbfc37be9b681043521db2fb (patch) | |
tree | b12642838ed76ffccff3cb5142664474717813d5 | |
parent | e8e2c4c0cff2266a27f018a0617d6aaaa7c6a93a (diff) | |
download | bcm5719-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.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-unused-variables.cpp | 10 |
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 |