summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-09-05 05:38:54 +0000
committerAnders Carlsson <andersca@mac.com>2009-09-05 05:38:54 +0000
commitdc6d2c3cda2472cd4b6172bdc07bcc2adc504e5d (patch)
treeeb43a2bf820cabd5cb2ab6abe78c545ce82e6d18
parent657bad441edaafc88375f9c182cff569b1c81c1d (diff)
downloadbcm5719-llvm-dc6d2c3cda2472cd4b6172bdc07bcc2adc504e5d.tar.gz
bcm5719-llvm-dc6d2c3cda2472cd4b6172bdc07bcc2adc504e5d.zip
Report errors for member functions correctly.
llvm-svn: 81063
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiate.cpp3
-rw-r--r--clang/test/SemaTemplate/default-expr-arguments.cpp7
2 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp
index b48708305a3..97b58adb06a 100644
--- a/clang/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp
@@ -293,7 +293,6 @@ void Sema::PrintInstantiationStack() {
case ActiveTemplateInstantiation::DefaultFunctionArgumentInstantiation: {
ParmVarDecl *Param = cast<ParmVarDecl>((Decl *)Active->Entity);
FunctionDecl *FD = cast<FunctionDecl>(Param->getDeclContext());
- TemplateDecl *Template = FD->getPrimaryTemplate();
std::string TemplateArgsStr
= TemplateSpecializationType::PrintTemplateArgumentList(
@@ -302,7 +301,7 @@ void Sema::PrintInstantiationStack() {
Context.PrintingPolicy);
Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr),
diag::note_default_function_arg_instantiation_here)
- << (Template->getNameAsString() + TemplateArgsStr)
+ << (FD->getNameAsString() + TemplateArgsStr)
<< Active->InstantiationRange;
break;
}
diff --git a/clang/test/SemaTemplate/default-expr-arguments.cpp b/clang/test/SemaTemplate/default-expr-arguments.cpp
index 5c95e511a7f..925d52fb19a 100644
--- a/clang/test/SemaTemplate/default-expr-arguments.cpp
+++ b/clang/test/SemaTemplate/default-expr-arguments.cpp
@@ -21,6 +21,7 @@ void g() {
template<typename T> struct F {
F(T t = 10);
+ void f(T t = 10); // expected-error{{cannot initialize 't' with an rvalue of type 'int'}}
};
struct FD : F<int> { };
@@ -30,6 +31,11 @@ void g2() {
FD fd;
}
+void g3(F<int> f, F<struct S> s) {
+ f.f();
+ s.f(); // expected-note{{in instantiation of default function argument expression for 'f<struct S>' required here}}
+}
+
template<typename T> struct G {
G(T) {}
};
@@ -37,3 +43,4 @@ template<typename T> struct G {
void s(G<int> flags = 10) { }
+
OpenPOWER on IntegriCloud