if (LOCAL_LABELS_DOLLAR && *sym_name != 'L')
if (LOCAL_LABELS_DOLLAR && ! LOCAL_LABEL (sym_name))
colon (sym_name)		/* just seen "x:" - rattle symbols & frags */     const char *sym_name;	/* symbol name, as a cannonical string */     /* We copy this string: OK to alter later. */{  register symbolS *symbolP;	/* symbol we are working with */  /* Sun local labels go out of scope whenever a non-local symbol is     defined.  */  if (LOCAL_LABELS_DOLLAR && *sym_name != 'L')    dollar_label_clear ();#ifndef WORKING_DOT_WORD  if (new_broken_words)    {      struct broken_word *a;      int possible_bytes;      fragS *frag_tmp;      char *frag_opcode;      extern const int md_short_jump_size;      extern const int md_long_jump_size;      possible_bytes = (md_short_jump_size			+ new_broken_words * md_long_jump_size);      frag_tmp = frag_now;      frag_opcode = frag_var (rs_broken_word,			      possible_bytes,			      possible_bytes,			      (relax_substateT) 0,			      (symbolS *) broken_words,			      0L,			      NULL);      /* We want to store the pointer to where to insert the jump table in the	 fr_opcode of the rs_broken_word frag.  This requires a little	 hackery.  */      while (frag_tmp	     && (frag_tmp->fr_type != rs_broken_word		 || frag_tmp->fr_opcode))	frag_tmp = frag_tmp->fr_next;      know (frag_tmp);      frag_tmp->fr_opcode = frag_opcode;      new_broken_words = 0;      for (a = broken_words; a && a->dispfrag == 0; a = a->next_broken_word)	a->dispfrag = frag_tmp;    }#endif /* WORKING_DOT_WORD */  if ((symbolP = symbol_find (sym_name)) != 0)    {#ifdef RESOLVE_SYMBOL_REDEFINITION      if (RESOLVE_SYMBOL_REDEFINITION (symbolP))	return symbolP;#endif      /*       *	Now check for undefined symbols       */      if (!S_IS_DEFINED (symbolP))	{	  if (S_GET_VALUE (symbolP) == 0)	    {	      symbolP->sy_frag = frag_now;#ifdef OBJ_VMS	      S_GET_OTHER(symbolP) = const_flag;#endif	      S_SET_VALUE (symbolP, (valueT) frag_now_fix ());	      S_SET_SEGMENT (symbolP, now_seg);#ifdef N_UNDF	      know (N_UNDF == 0);#endif /* if we have one, it better be zero. */	    }	  else	    {	      /*	       *	There are still several cases to check:	       *		A .comm/.lcomm symbol being redefined as	       *			initialized data is OK	       *		A .comm/.lcomm symbol being redefined with	       *			a larger size is also OK	       *	       * This only used to be allowed on VMS gas, but Sun cc	       * on the sparc also depends on it.	       */	      if (((!S_IS_DEBUG (symbolP)		    && !S_IS_DEFINED (symbolP)		    && S_IS_EXTERNAL (symbolP))		   || S_GET_SEGMENT (symbolP) == bss_section)		  && (now_seg == data_section		      || now_seg == S_GET_SEGMENT (symbolP)))		{		  /*		   *	Select which of the 2 cases this is		   */		  if (now_seg != data_section)		    {		      /*		       *   New .comm for prev .comm symbol.		       *	If the new size is larger we just		       *	change its value.  If the new size		       *	is smaller, we ignore this symbol		       */		      if (S_GET_VALUE (symbolP)			  < ((unsigned) frag_now_fix ()))			{			  S_SET_VALUE (symbolP, (valueT) frag_now_fix ());			}		    }		  else		    {		      /* It is a .comm/.lcomm being converted to initialized			 data.  */		      symbolP->sy_frag = frag_now;#ifdef OBJ_VMS		      S_GET_OTHER(symbolP) = const_flag;#endif /* OBJ_VMS */		      S_SET_VALUE (symbolP, (valueT) frag_now_fix ());		      S_SET_SEGMENT (symbolP, now_seg);	/* keep N_EXT bit */		    }		}	      else		{#if defined (S_GET_OTHER) && defined (S_GET_DESC)		  as_fatal ("Symbol \"%s\" is already defined as \"%s\"/%d.%d.%ld.",			    sym_name,			    segment_name (S_GET_SEGMENT (symbolP)),			    S_GET_OTHER (symbolP), S_GET_DESC (symbolP),			    (long) S_GET_VALUE (symbolP));#else		  as_fatal ("Symbol \"%s\" is already defined as \"%s\"/%ld.",			    sym_name,			    segment_name (S_GET_SEGMENT (symbolP)),			    (long) S_GET_VALUE (symbolP));#endif		}	    }			/* if the undefined symbol has no value */	}      else	{	  /* Don't blow up if the definition is the same */	  if (!(frag_now == symbolP->sy_frag		&& S_GET_VALUE (symbolP) == frag_now_fix ()		&& S_GET_SEGMENT (symbolP) == now_seg))	    as_fatal ("Symbol %s already defined.", sym_name);	}			/* if this symbol is not yet defined */    }  else    {      symbolP = symbol_new (sym_name, now_seg, (valueT) frag_now_fix (),			    frag_now);#ifdef OBJ_VMS      S_SET_OTHER (symbolP, const_flag);#endif /* OBJ_VMS */      symbol_table_insert (symbolP);    }				/* if we have seen this symbol before */  if (mri_common_symbol != NULL)    {      /* This symbol is actually being defined within an MRI common         section.  This requires special handling.  */      symbolP->sy_value.X_op = O_symbol;      symbolP->sy_value.X_add_symbol = mri_common_symbol;      symbolP->sy_value.X_add_number = S_GET_VALUE (mri_common_symbol);      symbolP->sy_frag = &zero_address_frag;      S_SET_SEGMENT (symbolP, expr_section);      symbolP->sy_mri_common = 1;    }#ifdef tc_frob_label  tc_frob_label (symbolP);#endif  return symbolP;}