]> granicus.if.org Git - clang/commitdiff
Enable delayed template parsing for friend functions declared at template class scope.
authorFrancois Pichet <pichet2000@gmail.com>
Fri, 18 Nov 2011 23:47:17 +0000 (23:47 +0000)
committerFrancois Pichet <pichet2000@gmail.com>
Fri, 18 Nov 2011 23:47:17 +0000 (23:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144980 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Parse/ParseCXXInlineMethods.cpp
test/Parser/DelayedTemplateParsing.cpp

index 2877628f262f68c8a5cbf8adf275d6bcb76f78c6..66f26f86f4b72c020e81244b70795c8235616c97 100644 (file)
@@ -110,8 +110,7 @@ Decl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS,
   if (getLang().DelayedTemplateParsing && 
       ((Actions.CurContext->isDependentContext() ||
         TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) && 
-        !Actions.IsInsideALocalClassWithinATemplateFunction()) &&
-        !D.getDeclSpec().isFriendSpecified()) {
+        !Actions.IsInsideALocalClassWithinATemplateFunction())) {
 
     if (FnD) {
       LateParsedTemplatedFunction *LPT =
index b02c4026c048eaa5c7afc9403a8ddb6ae15eba6b..7fa87d98e55f210aa061e05a33a8558bd395cbdd 100644 (file)
@@ -12,6 +12,10 @@ template <class T>
 class B {
    void foo4() { } // expected-note {{previous definition is here}}  expected-note {{previous definition is here}}
    void foo4() { } // expected-error {{class member cannot be redeclared}} expected-error {{redefinition of 'foo4'}}  expected-note {{previous definition is here}}
+
+   friend void foo3() {
+       undeclared();
+   }
 };