diff options
-rw-r--r-- | clang/lib/AST/Decl.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaTemplate/dependent-expr.cpp | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index aeb7963f900..bcb9f05ca3c 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -2282,7 +2282,7 @@ bool VarDecl::isUsableInConstantExpressions(ASTContext &Context) const { // declaration is encountered... const VarDecl *DefVD = nullptr; const Expr *Init = getAnyInitializer(DefVD); - if (!Init || Init->isValueDependent()) + if (!Init || Init->isValueDependent() || getType()->isDependentType()) return false; // ... if it is a constexpr variable, or it is of reference type or of // const-qualified integral or enumeration type, ... diff --git a/clang/test/SemaTemplate/dependent-expr.cpp b/clang/test/SemaTemplate/dependent-expr.cpp index 7195c9d48d7..bb1e239c349 100644 --- a/clang/test/SemaTemplate/dependent-expr.cpp +++ b/clang/test/SemaTemplate/dependent-expr.cpp @@ -63,6 +63,14 @@ namespace test5 { }; } +namespace test6 { + template<typename T> T f() { + const T &v(0); + return v; + } + int use = f<int>(); +} + namespace PR8795 { template <class _CharT> int test(_CharT t) { |