This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[C++1y] [Implicit Fix instantiation of implicit function template forward declarations.

Hi Jason,

I noticed that, although implicit function template declarations were accepted. They weren't setup correctly and didn't instantiate properly.

The following patch fixes this by moving finish_fully_implicit_template to the end of cp_parser_init_declarator. OK to go with the others?


Fix instantiation of implicit function template forward declarations.

    	* parser.c (cp_parser_init_declarator): Defer calling
finish_fully_implicit_template for forward declarations until after other decl processing is complete. Cleanup for clarity: Extract 'else'
    	case after 'if' containing unconditional return.

diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 82abf7c..f3133f3 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -16318,8 +16318,7 @@ cp_parser_init_declarator (cp_parser* parser,
 			       "a function-definition is not allowed here");
 	      return error_mark_node;
-	  else
-	    {
 	  location_t func_brace_location
 	    = cp_lexer_peek_token (parser->lexer)->location;

@@ -16357,9 +16356,6 @@ cp_parser_init_declarator (cp_parser* parser,
 	  return decl;
-      else if (parser->fully_implicit_function_template_p)
-	decl = finish_fully_implicit_template (parser, decl);
-    }

   /* [dcl.dcl]

@@ -16581,6 +16577,15 @@ cp_parser_init_declarator (cp_parser* parser,
   if (!friend_p && pushed_scope)
     pop_scope (pushed_scope);

+  if (function_declarator_p (declarator)
+      && parser->fully_implicit_function_template_p)
+    {
+      if (member_p)
+	decl = finish_fully_implicit_template (parser, decl);
+      else
+	finish_fully_implicit_template (parser, /*member_decl_opt=*/0);
+    }
   return decl;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]