summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2018-06-06 16:36:56 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2018-06-06 16:36:56 +0000
commitef53a3e2b631f2456548a49ca459c93cd138eefb (patch)
treed25b81317ab068285897e3cc71ff47e047e69dab /clang
parent8cb6a521be9abebc2174353dcb7025f9674023fb (diff)
downloadbcm5719-llvm-ef53a3e2b631f2456548a49ca459c93cd138eefb.tar.gz
bcm5719-llvm-ef53a3e2b631f2456548a49ca459c93cd138eefb.zip
PR37680: fix faulty assertion condition.
When looking up a template name, we can find an overload set containing a function template and an unresolved non-type using declaration. llvm-svn: 334106
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/AST/ASTContext.cpp1
-rw-r--r--clang/test/SemaTemplate/dependent-names.cpp12
2 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index c759c96be5b..64f45af6189 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -7292,6 +7292,7 @@ ASTContext::getOverloadedTemplateName(UnresolvedSetIterator Begin,
for (UnresolvedSetIterator I = Begin; I != End; ++I) {
NamedDecl *D = *I;
assert(isa<FunctionTemplateDecl>(D) ||
+ isa<UnresolvedUsingValueDecl>(D) ||
(isa<UsingShadowDecl>(D) &&
isa<FunctionTemplateDecl>(D->getUnderlyingDecl())));
*Storage++ = D;
diff --git a/clang/test/SemaTemplate/dependent-names.cpp b/clang/test/SemaTemplate/dependent-names.cpp
index 05ef33b535a..67ef238083f 100644
--- a/clang/test/SemaTemplate/dependent-names.cpp
+++ b/clang/test/SemaTemplate/dependent-names.cpp
@@ -447,3 +447,15 @@ namespace DependentUnresolvedUsingTemplate {
xb.h(); // expected-note {{instantiation of}}
}
}
+
+namespace PR37680 {
+ template <class a> struct b : a {
+ using a::add;
+ template<int> int add() { return this->template add(0); }
+ };
+ struct a {
+ template<typename T = void> int add(...);
+ void add(int);
+ };
+ int f(b<a> ba) { return ba.add<0>(); }
+}
OpenPOWER on IntegriCloud