diff options
| author | Anders Carlsson <andersca@mac.com> | 2009-09-05 05:38:54 +0000 |
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2009-09-05 05:38:54 +0000 |
| commit | dc6d2c3cda2472cd4b6172bdc07bcc2adc504e5d (patch) | |
| tree | eb43a2bf820cabd5cb2ab6abe78c545ce82e6d18 | |
| parent | 657bad441edaafc88375f9c182cff569b1c81c1d (diff) | |
| download | bcm5719-llvm-dc6d2c3cda2472cd4b6172bdc07bcc2adc504e5d.tar.gz bcm5719-llvm-dc6d2c3cda2472cd4b6172bdc07bcc2adc504e5d.zip | |
Report errors for member functions correctly.
llvm-svn: 81063
| -rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiate.cpp | 3 | ||||
| -rw-r--r-- | clang/test/SemaTemplate/default-expr-arguments.cpp | 7 |
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) { } + |

