&& parmlist_is_exprlist (TREE_OPERAND (declarator, 1)))
&& parmlist_is_exprlist (CALL_DECLARATOR_PARMS (declarator)))
grokfield (declarator, declspecs, init, asmspec_tree, attrlist)     tree declarator, declspecs, init, asmspec_tree, attrlist;{  register tree value;  char *asmspec = 0;  int flags = LOOKUP_ONLYCONVERTING;  /* Convert () initializers to = initializers.  */  if (init == NULL_TREE && declarator != NULL_TREE      && TREE_CODE (declarator) == CALL_EXPR      && TREE_OPERAND (declarator, 0)      && (TREE_CODE (TREE_OPERAND (declarator, 0)) == IDENTIFIER_NODE	  || TREE_CODE (TREE_OPERAND (declarator, 0)) == SCOPE_REF)      && parmlist_is_exprlist (TREE_OPERAND (declarator, 1)))    {      init = TREE_OPERAND (declarator, 1);      declarator = TREE_OPERAND (declarator, 0);      flags = 0;    }  if (declspecs == NULL_TREE      && TREE_CODE (declarator) == SCOPE_REF      && TREE_CODE (TREE_OPERAND (declarator, 1)) == IDENTIFIER_NODE)    {      /* Access declaration */      if (! IS_AGGR_TYPE_CODE (TREE_CODE (TREE_OPERAND (declarator, 0))))	;      else if (TREE_COMPLEXITY (declarator) == current_class_depth)	pop_nested_class ();      return do_class_using_decl (declarator);    }  if (init      && TREE_CODE (init) == TREE_LIST      && TREE_VALUE (init) == error_mark_node      && TREE_CHAIN (init) == NULL_TREE)    init = NULL_TREE;  value = grokdeclarator (declarator, declspecs, FIELD, init != 0, attrlist);  if (! value || value == error_mark_node)    /* friend or constructor went bad.  */    return value;  /* Pass friendly classes back.  */  if (TREE_CODE (value) == VOID_TYPE)    return void_type_node;  if (DECL_NAME (value) != NULL_TREE      && IDENTIFIER_POINTER (DECL_NAME (value))[0] == '_'      && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (value)), "_vptr"))    cp_error ("member `%D' conflicts with virtual function table field name",	      value);  /* Stash away type declarations.  */  if (TREE_CODE (value) == TYPE_DECL)    {      DECL_NONLOCAL (value) = 1;      DECL_CONTEXT (value) = current_class_type;      DECL_CLASS_CONTEXT (value) = current_class_type;      /* Now that we've updated the context, we need to remangle the	 name for this TYPE_DECL.  */      DECL_ASSEMBLER_NAME (value) = DECL_NAME (value);      if (!uses_template_parms (value))	DECL_ASSEMBLER_NAME (value) =	  get_identifier (build_overload_name (TREE_TYPE (value), 1, 1));      return value;    }  if (IS_SIGNATURE (current_class_type)      && TREE_CODE (value) != FUNCTION_DECL)    {      error ("field declaration not allowed in signature");      return void_type_node;    }  if (DECL_IN_AGGR_P (value))    {      cp_error ("`%D' is already defined in `%T'", value,		DECL_CONTEXT (value));      return void_type_node;    }  if (asmspec_tree)    asmspec = TREE_STRING_POINTER (asmspec_tree);  if (init)    {      if (IS_SIGNATURE (current_class_type)	  && TREE_CODE (value) == FUNCTION_DECL)	{	  error ("function declarations cannot have initializers in signature");	  init = NULL_TREE;	}      else if (TREE_CODE (value) == FUNCTION_DECL)	{	  grok_function_init (value, init);	  init = NULL_TREE;	}      else if (pedantic && TREE_CODE (value) != VAR_DECL)	/* Already complained in grokdeclarator.  */	init = NULL_TREE;      else	{	  /* We allow initializers to become parameters to base             initializers.  */	  if (TREE_CODE (init) == TREE_LIST)	    {	      if (TREE_CHAIN (init) == NULL_TREE)		init = TREE_VALUE (init);	      else		init = digest_init (TREE_TYPE (value), init, (tree *)0);	    }	  	  if (TREE_CODE (init) == CONST_DECL)	    init = DECL_INITIAL (init);	  else if (TREE_READONLY_DECL_P (init))	    init = decl_constant_value (init);	  else if (TREE_CODE (init) == CONSTRUCTOR)	    init = digest_init (TREE_TYPE (value), init, (tree *)0);	  my_friendly_assert (TREE_PERMANENT (init), 192);	  if (init == error_mark_node)	    /* We must make this look different than `error_mark_node'	       because `decl_const_value' would mis-interpret it	       as only meaning that this VAR_DECL is defined.  */	    init = build1 (NOP_EXPR, TREE_TYPE (value), init);	  else if (processing_template_decl)	    ;	  else if (! TREE_CONSTANT (init))	    {	      /* We can allow references to things that are effectively		 static, since references are initialized with the address.  */	      if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE		  || (TREE_STATIC (init) == 0		      && (TREE_CODE_CLASS (TREE_CODE (init)) != 'd'			  || DECL_EXTERNAL (init) == 0)))		{		  error ("field initializer is not constant");		  init = error_mark_node;		}	    }	}    }  /* The corresponding pop_obstacks is in cp_finish_decl.  */  push_obstacks_nochange ();  if (processing_template_decl && ! current_function_decl      && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))    value = push_template_decl (value);  if (attrlist)    cplus_decl_attributes (value, TREE_PURPOSE (attrlist),			   TREE_VALUE (attrlist));  if (TREE_CODE (value) == VAR_DECL)    {      finish_static_data_member_decl (value, init, asmspec_tree, 				      /*need_pop=*/1, flags);      return value;    }  if (TREE_CODE (value) == FIELD_DECL)    {      if (asmspec)	{	  /* This must override the asm specifier which was placed	     by grokclassfn.  Lay this out fresh.  */	  DECL_RTL (value) = NULL_RTX;	  DECL_ASSEMBLER_NAME (value) = get_identifier (asmspec);	}      if (DECL_INITIAL (value) == error_mark_node)	init = error_mark_node;      cp_finish_decl (value, init, asmspec_tree, 1, flags);      DECL_INITIAL (value) = init;      DECL_IN_AGGR_P (value) = 1;      return value;    }  if (TREE_CODE (value) == FUNCTION_DECL)    {      if (asmspec)	{	  /* This must override the asm specifier which was placed	     by grokclassfn.  Lay this out fresh.  */	  DECL_RTL (value) = NULL_RTX;	  DECL_ASSEMBLER_NAME (value) = get_identifier (asmspec);	}      cp_finish_decl (value, init, asmspec_tree, 1, flags);      /* Pass friends back this way.  */      if (DECL_FRIEND_P (value))	return void_type_node;#if 0 /* Just because a fn is declared doesn't mean we'll try to define it.  */      if (current_function_decl && ! IS_SIGNATURE (current_class_type))	cp_error ("method `%#D' of local class must be defined in class body",		  value);#endif      DECL_IN_AGGR_P (value) = 1;      return value;    }  my_friendly_abort (21);  /* NOTREACHED */  return NULL_TREE;}