|| !DECL_EXTERNAL (ffeglobal_hook (g))))
|| !DECL_EXTERNAL (cbt)))
ffecom_transform_common_ (ffesymbol s){  ffestorag st = ffesymbol_storage (s);  ffeglobal g = ffesymbol_global (s);  tree cbt;  tree cbtype;  tree init;  bool is_init = ffestorag_is_init (st);  assert (st != NULL);  if ((g == NULL)      || (ffeglobal_type (g) != FFEGLOBAL_typeCOMMON))    return;  /* First update the size of the area in global terms.  */  ffeglobal_size_common (s, ffestorag_size (st));  cbt = ffeglobal_hook (g);  /* If we already have declared this common block for a previous program     unit, and either we already initialized it or we don't have new     initialization for it, just return what we have without changing it.  */  if ((cbt != NULL_TREE)      && (!is_init	  || !DECL_EXTERNAL (ffeglobal_hook (g))))    return;  /* Process inits.  */  if (is_init)    {      if (ffestorag_init (st) != NULL)	{	  init = ffecom_expr (ffestorag_init (st));	  if (init == error_mark_node)	    {			/* Hopefully the back end complained! */	      init = NULL_TREE;	      if (cbt != NULL_TREE)		return;	    }	}      else	init = error_mark_node;    }  else    init = NULL_TREE;  push_obstacks_nochange ();  end_temporary_allocation ();  /* cbtype must be permanently allocated!  */  if (init)    cbtype = build_array_type (char_type_node,			       build_range_type (integer_type_node,						 integer_one_node,						 build_int_2						 (ffeglobal_size (g),						  0)));  else    cbtype = build_array_type (char_type_node, NULL_TREE);  if (cbt == NULL_TREE)    {      cbt	= build_decl (VAR_DECL,		      ffecom_get_external_identifier_ (s),		      cbtype);      TREE_STATIC (cbt) = 1;      TREE_PUBLIC (cbt) = 1;    }  else    {      assert (is_init);      TREE_TYPE (cbt) = cbtype;    }  DECL_EXTERNAL (cbt) = init ? 0 : 1;  DECL_INITIAL (cbt) = init ? error_mark_node : NULL_TREE;  cbt = start_decl (cbt, TRUE);  if (ffeglobal_hook (g) != NULL)    assert (cbt == ffeglobal_hook (g));  assert (!init || !DECL_EXTERNAL (cbt));  /* Make sure that any type can live in COMMON and be referenced     without getting a bus error.  We could pick the most restrictive     alignment of all entities actually placed in the COMMON, but     this seems easy enough.  */  DECL_ALIGN (cbt) = BIGGEST_ALIGNMENT;  if (is_init && (ffestorag_init (st) == NULL))    init = ffecom_init_zero_ (cbt);  finish_decl (cbt, init, TRUE);  if (is_init)    ffestorag_set_init (st, ffebld_new_any ());  if (init)    {      assert (DECL_SIZE (cbt) != NULL_TREE);      assert (TREE_CODE (DECL_SIZE (cbt)) == INTEGER_CST);      assert (TREE_INT_CST_HIGH (DECL_SIZE (cbt)) == 0);      assert (TREE_INT_CST_LOW (DECL_SIZE (cbt))	      == (ffeglobal_size (g) * BITS_PER_UNIT));    }  ffeglobal_set_hook (g, cbt);  ffestorag_set_hook (st, cbt);  resume_temporary_allocation ();  pop_obstacks ();}