From: Nico Weber Date: Tue, 30 Nov 2010 04:44:33 +0000 (+0000) Subject: Fix bug in r120299 spotted by dgregor. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=15d5c83ce698a6b6ae1166f9008c6ead34ae7a5d;p=clang Fix bug in r120299 spotted by dgregor. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120389 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index e8025409bd..19b0749843 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -3843,10 +3843,10 @@ ExprResult Sema::BuildCXXDefaultArgExpr(SourceLocation CallLoc, ParmVarDecl *Param) { if (Param->hasUnparsedDefaultArg()) { Diag(CallLoc, - diag::err_use_of_default_argument_to_function_declared_later) << + diag::err_use_of_default_argument_to_function_declared_later) << FD << cast(FD->getDeclContext())->getDeclName(); Diag(UnparsedDefaultArgLocs[Param], - diag::note_default_argument_declared_here); + diag::note_default_argument_declared_here); return ExprError(); } @@ -3868,7 +3868,7 @@ ExprResult Sema::BuildCXXDefaultArgExpr(SourceLocation CallLoc, // The names in the [default argument] expression are bound, and // the semantic constraints are checked, at the point where the // default argument expression appears. - ContextRAII SavedContext(*this, FD->getDeclContext()); + ContextRAII SavedContext(*this, FD); Result = SubstExpr(UninstExpr, ArgList); } if (Result.isInvalid()) diff --git a/test/SemaCXX/friend.cpp b/test/SemaCXX/friend.cpp index 515edfd949..1222dd0940 100644 --- a/test/SemaCXX/friend.cpp +++ b/test/SemaCXX/friend.cpp @@ -112,3 +112,21 @@ namespace test6_2 { vector v(1); } } +namespace test6_3 { + template + class vector { + public: + vector(int i) {} + void f(const T& t = T()) {} + }; + class A { + public: + private: + friend void vector::f(const A&); + A() {} + }; + void f() { + vector v(1); + v.f(); + } +}