summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDecl.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2016-08-31 02:15:21 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2016-08-31 02:15:21 +0000
commit54f18e8a857094a608e63924d38d51b5964f2eab (patch)
tree011c16ee16493d6df009f6a2922af06cd2baa1b5 /clang/lib/Sema/SemaDecl.cpp
parent5ed6fe739f74aca51cf6d52c545283db68034077 (diff)
downloadbcm5719-llvm-54f18e8a857094a608e63924d38d51b5964f2eab.tar.gz
bcm5719-llvm-54f18e8a857094a608e63924d38d51b5964f2eab.zip
PR12298 et al: don't recursively instantiate a template specialization from
within the instantiation of that same specialization. This could previously happen for eagerly-instantiated function templates, variable templates, exception specifications, default arguments, and a handful of other cases. We still have an issue here for default template arguments that recursively make use of themselves and likewise for substitution into the type of a non-type template parameter, but in those cases we're producing a different entity each time, so they should instead be caught by the instantiation depth limit. However, currently we will typically run out of stack before we reach it. :( llvm-svn: 280190
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index c756d1f6ab6..9df9c63cfdf 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -9645,7 +9645,8 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init,
}
VarDecl *Def;
- if ((Def = VDecl->getDefinition()) && Def != VDecl) {
+ if ((Def = VDecl->getDefinition()) && Def != VDecl &&
+ (!VDecl->isStaticDataMember() || VDecl->isOutOfLine())) {
NamedDecl *Hidden = nullptr;
if (!hasVisibleDefinition(Def, &Hidden) &&
(VDecl->getFormalLinkage() == InternalLinkage ||
OpenPOWER on IntegriCloud