if (ffesymbol_where (s) == FFEINFO_whereINTRINSIC) { bad = !(ffeintrin_is_actualarg (ffesymbol_specific (s))); break; }
ffeexpr_declare_unadorned_ (ffelexToken t, bool maybe_intrin){  ffesymbol s;  ffeinfoKind k;  bool bad;  s = ffesymbol_declare_local (t, maybe_intrin);  switch (ffeexpr_context_outer_ (ffeexpr_stack_))    /* Special-case these since they can involve a different concept       of "state" (in the stmtfunc name space).  */    {    case FFEEXPR_contextDATAIMPDOINDEX_:    case FFEEXPR_contextDATAIMPDOCTRL_:      if (ffeexpr_context_outer_ (ffeexpr_stack_)	  == FFEEXPR_contextDATAIMPDOINDEX_)	s = ffeexpr_sym_impdoitem_ (s, t);      else	if (ffeexpr_stack_->is_rhs)	  s = ffeexpr_sym_impdoitem_ (s, t);	else	  s = ffeexpr_sym_lhs_impdoctrl_ (s, t);      bad = (ffesymbol_kind (s) != FFEINFO_kindENTITY)	|| ((ffesymbol_where (s) != FFEINFO_whereCONSTANT)	    && (ffesymbol_where (s) != FFEINFO_whereIMMEDIATE));      if (bad && (ffesymbol_kind (s) != FFEINFO_kindANY))	ffesymbol_error (s, t);      return s;    default:      break;    }  switch ((ffesymbol_sfdummyparent (s) == NULL)	  ? ffesymbol_state (s)	  : FFESYMBOL_stateUNDERSTOOD)    {    case FFESYMBOL_stateNONE:	/* Before first exec, not seen in expr				   context. */      if (!ffest_seen_first_exec ())	goto seen;		/* :::::::::::::::::::: */      /* Fall through. */    case FFESYMBOL_stateUNCERTAIN:	/* Unseen since first exec. */      switch (ffeexpr_context_outer_ (ffeexpr_stack_))	{	case FFEEXPR_contextSUBROUTINEREF:	  s = ffeexpr_sym_lhs_call_ (s, t);	  break;	case FFEEXPR_contextFILEEXTFUNC:	  s = ffeexpr_sym_lhs_extfunc_ (s, t);	  break;	case FFEEXPR_contextSFUNCDEFACTUALARG_:	  s = ffecom_sym_exec_transition (s);	  if (ffesymbol_state (s) == FFESYMBOL_stateUNDERSTOOD)	    goto understood;	/* :::::::::::::::::::: */	  /* Fall through. */	case FFEEXPR_contextACTUALARG_:	  s = ffeexpr_sym_rhs_actualarg_ (s, t);	  break;	case FFEEXPR_contextDATA:	  if (ffeexpr_stack_->is_rhs)	    s = ffeexpr_sym_rhs_let_ (s, t);	  else	    s = ffeexpr_sym_lhs_data_ (s, t);	  break;	case FFEEXPR_contextDATAIMPDOITEM_:	  s = ffeexpr_sym_lhs_data_ (s, t);	  break;	case FFEEXPR_contextSFUNCDEF:	case FFEEXPR_contextSFUNCDEFINDEX_:	case FFEEXPR_contextSFUNCDEFACTUALARGEXPR_:	case FFEEXPR_contextSFUNCDEFINDEXORACTUALARGEXPR_:	  s = ffecom_sym_exec_transition (s);	  if (ffesymbol_state (s) == FFESYMBOL_stateUNDERSTOOD)	    goto understood;	/* :::::::::::::::::::: */	  /* Fall through. */	case FFEEXPR_contextLET:	case FFEEXPR_contextPAREN_:	case FFEEXPR_contextACTUALARGEXPR_:	case FFEEXPR_contextINDEXORACTUALARGEXPR_:	case FFEEXPR_contextASSIGN:	case FFEEXPR_contextIOLIST:	case FFEEXPR_contextIOLISTDF:	case FFEEXPR_contextDO:	case FFEEXPR_contextDOWHILE:	case FFEEXPR_contextAGOTO:	case FFEEXPR_contextCGOTO:	case FFEEXPR_contextIF:	case FFEEXPR_contextARITHIF:	case FFEEXPR_contextFORMAT:	case FFEEXPR_contextSTOP:	case FFEEXPR_contextRETURN:	case FFEEXPR_contextSELECTCASE:	case FFEEXPR_contextCASE:	case FFEEXPR_contextFILEASSOC:	case FFEEXPR_contextFILEINT:	case FFEEXPR_contextFILEDFINT:	case FFEEXPR_contextFILELOG:	case FFEEXPR_contextFILENUM:	case FFEEXPR_contextFILENUMAMBIG:	case FFEEXPR_contextFILECHAR:	case FFEEXPR_contextFILENUMCHAR:	case FFEEXPR_contextFILEDFCHAR:	case FFEEXPR_contextFILEKEY:	case FFEEXPR_contextFILEUNIT:	case FFEEXPR_contextFILEUNIT_DF:	case FFEEXPR_contextFILEUNITAMBIG:	case FFEEXPR_contextFILEFORMAT:	case FFEEXPR_contextFILENAMELIST:	case FFEEXPR_contextFILEVXTCODE:	case FFEEXPR_contextINDEX_:	case FFEEXPR_contextIMPDOITEM_:	case FFEEXPR_contextIMPDOITEMDF_:	case FFEEXPR_contextIMPDOCTRL_:	case FFEEXPR_contextLOC_:	  if (ffeexpr_stack_->is_rhs)	    s = ffeexpr_sym_rhs_let_ (s, t);	  else	    s = ffeexpr_sym_lhs_let_ (s, t);	  break;	case FFEEXPR_contextCHARACTERSIZE:	case FFEEXPR_contextEQUIVALENCE:	case FFEEXPR_contextINCLUDE:	case FFEEXPR_contextPARAMETER:	case FFEEXPR_contextDIMLIST:	case FFEEXPR_contextDIMLISTCOMMON:	case FFEEXPR_contextKINDTYPE:	case FFEEXPR_contextINITVAL:	case FFEEXPR_contextEQVINDEX_:	  break;		/* Will turn into errors below. */	default:	  ffesymbol_error (s, t);	  break;	}      /* Fall through. */    case FFESYMBOL_stateUNDERSTOOD:	/* Nothing much more to learn. */    understood:		/* :::::::::::::::::::: */      k = ffesymbol_kind (s);      switch (ffeexpr_context_outer_ (ffeexpr_stack_))	{	case FFEEXPR_contextSUBROUTINEREF:	  bad = (k != FFEINFO_kindSUBROUTINE);	  break;	case FFEEXPR_contextFILEEXTFUNC:	  bad = (k != FFEINFO_kindFUNCTION)	    || (ffesymbol_where (s) != FFEINFO_whereGLOBAL);	  break;	case FFEEXPR_contextSFUNCDEFACTUALARG_:	case FFEEXPR_contextACTUALARG_:	  switch (k)	    {	    case FFEINFO_kindENTITY:	      bad = FALSE;	      break;	    case FFEINFO_kindFUNCTION:	    case FFEINFO_kindSUBROUTINE:	      bad		= ((ffesymbol_where (s) != FFEINFO_whereGLOBAL)		   && (ffesymbol_where (s) != FFEINFO_whereDUMMY)		   && ((ffesymbol_where (s) != FFEINFO_whereINTRINSIC)		       || !ffeintrin_is_actualarg (ffesymbol_specific (s))));	      break;	    case FFEINFO_kindNONE:	      /* If state is UNDERSTOOD here, it's CHAR*(*) or attrsANY,		 and in the former case, attrsTYPE is set, so we		 see this as an error as we should, since CHAR*(*)		 cannot be actually referenced in a main/block data		 program unit.  */	      if ((ffesymbol_attrs (s) & (FFESYMBOL_attrsANY					  | FFESYMBOL_attrsEXTERNAL					  | FFESYMBOL_attrsTYPE))		  == FFESYMBOL_attrsEXTERNAL)		bad = FALSE;	      else		bad = TRUE;	      break;	    default:	      bad = TRUE;	      break;	    }	  break;	case FFEEXPR_contextDATA:	  if (ffeexpr_stack_->is_rhs)	    bad = (k != FFEINFO_kindENTITY)	      || (ffesymbol_where (s) != FFEINFO_whereCONSTANT);	  else	    bad = (k != FFEINFO_kindENTITY)	      || ((ffesymbol_where (s) != FFEINFO_whereNONE)		  && (ffesymbol_where (s) != FFEINFO_whereLOCAL)		  && (ffesymbol_where (s) != FFEINFO_whereCOMMON));	  break;	case FFEEXPR_contextDATAIMPDOITEM_:	  bad = TRUE;		/* Unadorned item never valid. */	  break;	case FFEEXPR_contextSFUNCDEF:	case FFEEXPR_contextSFUNCDEFINDEX_:	case FFEEXPR_contextSFUNCDEFACTUALARGEXPR_:	case FFEEXPR_contextSFUNCDEFINDEXORACTUALARGEXPR_:	case FFEEXPR_contextLET:	case FFEEXPR_contextPAREN_:	case FFEEXPR_contextACTUALARGEXPR_:	case FFEEXPR_contextINDEXORACTUALARGEXPR_:	case FFEEXPR_contextASSIGN:	case FFEEXPR_contextIOLIST:	case FFEEXPR_contextIOLISTDF:	case FFEEXPR_contextDO:	case FFEEXPR_contextDOWHILE:	case FFEEXPR_contextAGOTO:	case FFEEXPR_contextCGOTO:	case FFEEXPR_contextIF:	case FFEEXPR_contextARITHIF:	case FFEEXPR_contextFORMAT:	case FFEEXPR_contextSTOP:	case FFEEXPR_contextRETURN:	case FFEEXPR_contextSELECTCASE:	case FFEEXPR_contextCASE:	case FFEEXPR_contextFILEASSOC:	case FFEEXPR_contextFILEINT:	case FFEEXPR_contextFILEDFINT:	case FFEEXPR_contextFILELOG:	case FFEEXPR_contextFILENUM:	case FFEEXPR_contextFILENUMAMBIG:	case FFEEXPR_contextFILECHAR:	case FFEEXPR_contextFILENUMCHAR:	case FFEEXPR_contextFILEDFCHAR:	case FFEEXPR_contextFILEKEY:	case FFEEXPR_contextFILEUNIT:	case FFEEXPR_contextFILEUNIT_DF:	case FFEEXPR_contextFILEUNITAMBIG:	case FFEEXPR_contextFILEFORMAT:	case FFEEXPR_contextFILENAMELIST:	case FFEEXPR_contextFILEVXTCODE:	case FFEEXPR_contextINDEX_:	case FFEEXPR_contextIMPDOITEM_:	case FFEEXPR_contextIMPDOITEMDF_:	case FFEEXPR_contextIMPDOCTRL_:	case FFEEXPR_contextLOC_:	  bad = (k != FFEINFO_kindENTITY);	/* This catches "SUBROUTINE						   X(A);EXTERNAL A;CALL						   Y(A);B=A", for example. */	  break;	case FFEEXPR_contextCHARACTERSIZE:	case FFEEXPR_contextEQUIVALENCE:	case FFEEXPR_contextPARAMETER:	case FFEEXPR_contextDIMLIST:	case FFEEXPR_contextDIMLISTCOMMON:	case FFEEXPR_contextKINDTYPE:	case FFEEXPR_contextINITVAL:	case FFEEXPR_contextEQVINDEX_:	  bad = (k != FFEINFO_kindENTITY)	    || (ffesymbol_where (s) != FFEINFO_whereCONSTANT);	  break;	case FFEEXPR_contextINCLUDE:	  bad = TRUE;	  break;	default:	  bad = TRUE;	  break;	}      if (bad && (k != FFEINFO_kindANY))	ffesymbol_error (s, t);      return s;    case FFESYMBOL_stateSEEN:	/* Seen but not yet in exec portion. */    seen:			/* :::::::::::::::::::: */      switch (ffeexpr_context_outer_ (ffeexpr_stack_))	{	case FFEEXPR_contextPARAMETER:	  if (ffeexpr_stack_->is_rhs)	    ffesymbol_error (s, t);	  else	    s = ffeexpr_sym_lhs_parameter_ (s, t);	  break;	case FFEEXPR_contextDATA:	  s = ffecom_sym_exec_transition (s);	  if (ffesymbol_state (s) == FFESYMBOL_stateUNDERSTOOD)	    goto understood;	/* :::::::::::::::::::: */	  if (ffeexpr_stack_->is_rhs)	    ffesymbol_error (s, t);	  else	    s = ffeexpr_sym_lhs_data_ (s, t);	  goto understood;	/* :::::::::::::::::::: */	case FFEEXPR_contextDATAIMPDOITEM_:	  s = ffecom_sym_exec_transition (s);	  if (ffesymbol_state (s) == FFESYMBOL_stateUNDERSTOOD)	    goto understood;	/* :::::::::::::::::::: */	  s = ffeexpr_sym_lhs_data_ (s, t);	  goto understood;	/* :::::::::::::::::::: */	case FFEEXPR_contextEQUIVALENCE:	  s = ffeexpr_sym_lhs_equivalence_ (s, t);	  break;	case FFEEXPR_contextDIMLIST:	  s = ffeexpr_sym_rhs_dimlist_ (s, t);	  break;	case FFEEXPR_contextCHARACTERSIZE:	case FFEEXPR_contextKINDTYPE:	case FFEEXPR_contextDIMLISTCOMMON:	case FFEEXPR_contextINITVAL:	case FFEEXPR_contextEQVINDEX_:	  ffesymbol_error (s, t);	  break;	case FFEEXPR_contextINCLUDE:	  ffesymbol_error (s, t);	  break;	case FFEEXPR_contextACTUALARG_:	/* E.g. I in REAL A(Y(I)). */	case FFEEXPR_contextSFUNCDEFACTUALARG_:	  s = ffecom_sym_exec_transition (s);	  if (ffesymbol_state (s) == FFESYMBOL_stateUNDERSTOOD)	    goto understood;	/* :::::::::::::::::::: */	  s = ffeexpr_sym_rhs_actualarg_ (s, t);	  goto understood;	/* :::::::::::::::::::: */	case FFEEXPR_contextINDEX_:	case FFEEXPR_contextACTUALARGEXPR_:	case FFEEXPR_contextINDEXORACTUALARGEXPR_:	case FFEEXPR_contextSFUNCDEF:	case FFEEXPR_contextSFUNCDEFINDEX_:	case FFEEXPR_contextSFUNCDEFACTUALARGEXPR_:	case FFEEXPR_contextSFUNCDEFINDEXORACTUALARGEXPR_:	  assert (ffeexpr_stack_->is_rhs);	  s = ffecom_sym_exec_transition (s);	  if (ffesymbol_state (s) == FFESYMBOL_stateUNDERSTOOD)	    goto understood;	/* :::::::::::::::::::: */	  s = ffeexpr_sym_rhs_let_ (s, t);	  goto understood;	/* :::::::::::::::::::: */	default:	  ffesymbol_error (s, t);	  break;	}      return s;    default:      assert ("bad symbol state" == NULL);      return NULL;      break;    }}