item = build_complex (build_real (el_type, real), build_real (el_type, imag)); TREE_TYPE (item) = tree_type;
item = ffecom_build_complex_constant_ (tree_type, build_real (el_type, real), build_real (el_type, imag));
ffecom_constantunion (ffebldConstantUnion *cu, ffeinfoBasictype bt,		      ffeinfoKindtype kt, tree tree_type){  tree item;  switch (bt)    {    case FFEINFO_basictypeINTEGER:      {	int val;	switch (kt)	  {#if FFETARGET_okINTEGER1	  case FFEINFO_kindtypeINTEGER1:	    val = ffebld_cu_val_integer1 (*cu);	    break;#endif#if FFETARGET_okINTEGER2	  case FFEINFO_kindtypeINTEGER2:	    val = ffebld_cu_val_integer2 (*cu);	    break;#endif#if FFETARGET_okINTEGER3	  case FFEINFO_kindtypeINTEGER3:	    val = ffebld_cu_val_integer3 (*cu);	    break;#endif#if FFETARGET_okINTEGER4	  case FFEINFO_kindtypeINTEGER4:	    val = ffebld_cu_val_integer4 (*cu);	    break;#endif	  default:	    assert ("bad INTEGER constant kind type" == NULL);	    /* Fall through. */	  case FFEINFO_kindtypeANY:	    return error_mark_node;	  }	item = build_int_2 (val, (val < 0) ? -1 : 0);	TREE_TYPE (item) = tree_type;      }      break;    case FFEINFO_basictypeLOGICAL:      {	int val;	switch (kt)	  {#if FFETARGET_okLOGICAL1	  case FFEINFO_kindtypeLOGICAL1:	    val = ffebld_cu_val_logical1 (*cu);	    break;#endif#if FFETARGET_okLOGICAL2	  case FFEINFO_kindtypeLOGICAL2:	    val = ffebld_cu_val_logical2 (*cu);	    break;#endif#if FFETARGET_okLOGICAL3	  case FFEINFO_kindtypeLOGICAL3:	    val = ffebld_cu_val_logical3 (*cu);	    break;#endif#if FFETARGET_okLOGICAL4	  case FFEINFO_kindtypeLOGICAL4:	    val = ffebld_cu_val_logical4 (*cu);	    break;#endif	  default:	    assert ("bad LOGICAL constant kind type" == NULL);	    /* Fall through. */	  case FFEINFO_kindtypeANY:	    return error_mark_node;	  }	item = build_int_2 (val, (val < 0) ? -1 : 0);	TREE_TYPE (item) = tree_type;      }      break;    case FFEINFO_basictypeREAL:      {	REAL_VALUE_TYPE val;	switch (kt)	  {#if FFETARGET_okREAL1	  case FFEINFO_kindtypeREAL1:	    val = ffetarget_value_real1 (ffebld_cu_val_real1 (*cu));	    break;#endif#if FFETARGET_okREAL2	  case FFEINFO_kindtypeREAL2:	    val = ffetarget_value_real2 (ffebld_cu_val_real2 (*cu));	    break;#endif#if FFETARGET_okREAL3	  case FFEINFO_kindtypeREAL3:	    val = ffetarget_value_real3 (ffebld_cu_val_real3 (*cu));	    break;#endif#if FFETARGET_okREAL4	  case FFEINFO_kindtypeREAL4:	    val = ffetarget_value_real4 (ffebld_cu_val_real4 (*cu));	    break;#endif	  default:	    assert ("bad REAL constant kind type" == NULL);	    /* Fall through. */	  case FFEINFO_kindtypeANY:	    return error_mark_node;	  }	item = build_real (tree_type, val);      }      break;    case FFEINFO_basictypeCOMPLEX:      {	REAL_VALUE_TYPE real;	REAL_VALUE_TYPE imag;	tree el_type = ffecom_tree_type[FFEINFO_basictypeREAL][kt];	switch (kt)	  {#if FFETARGET_okCOMPLEX1	  case FFEINFO_kindtypeREAL1:	    real = ffetarget_value_real1 (ffebld_cu_val_complex1 (*cu).real);	    imag = ffetarget_value_real1 (ffebld_cu_val_complex1 (*cu).imaginary);	    break;#endif#if FFETARGET_okCOMPLEX2	  case FFEINFO_kindtypeREAL2:	    real = ffetarget_value_real2 (ffebld_cu_val_complex2 (*cu).real);	    imag = ffetarget_value_real2 (ffebld_cu_val_complex2 (*cu).imaginary);	    break;#endif#if FFETARGET_okCOMPLEX3	  case FFEINFO_kindtypeREAL3:	    real = ffetarget_value_real3 (ffebld_cu_val_complex3 (*cu).real);	    imag = ffetarget_value_real3 (ffebld_cu_val_complex3 (*cu).imaginary);	    break;#endif#if FFETARGET_okCOMPLEX4	  case FFEINFO_kindtypeREAL4:	    real = ffetarget_value_real4 (ffebld_cu_val_complex4 (*cu).real);	    imag = ffetarget_value_real4 (ffebld_cu_val_complex4 (*cu).imaginary);	    break;#endif	  default:	    assert ("bad REAL constant kind type" == NULL);	    /* Fall through. */	  case FFEINFO_kindtypeANY:	    return error_mark_node;	  }	item = build_complex (build_real (el_type, real),			      build_real (el_type, imag));	TREE_TYPE (item) = tree_type;      }      break;    case FFEINFO_basictypeCHARACTER:      {				/* Happens only in DATA and similar contexts. */	ffetargetCharacter1 val;	switch (kt)	  {#if FFETARGET_okCHARACTER1	  case FFEINFO_kindtypeLOGICAL1:	    val = ffebld_cu_val_character1 (*cu);	    break;#endif	  default:	    assert ("bad CHARACTER constant kind type" == NULL);	    /* Fall through. */	  case FFEINFO_kindtypeANY:	    return error_mark_node;	  }	item = build_string (ffetarget_length_character1 (val),			     ffetarget_text_character1 (val));	TREE_TYPE (item)	  = build_type_variant (build_array_type (char_type_node,						  build_range_type						  (integer_type_node,						   integer_one_node,						   build_int_2						(ffetarget_length_character1						 (val), 0))),				1, 0);      }      break;    case FFEINFO_basictypeHOLLERITH:      {	ffetargetHollerith h;	h = ffebld_cu_val_hollerith (*cu);	/* If not at least as wide as default INTEGER, widen it.  */	if (h.length >= FLOAT_TYPE_SIZE / CHAR_TYPE_SIZE)	  item = build_string (h.length, h.text);	else	  {	    char str[FLOAT_TYPE_SIZE / CHAR_TYPE_SIZE];	    memcpy (str, h.text, h.length);	    memset (&str[h.length], ' ',		    FLOAT_TYPE_SIZE / CHAR_TYPE_SIZE		    - h.length);	    item = build_string (FLOAT_TYPE_SIZE / CHAR_TYPE_SIZE,				 str);	  }	TREE_TYPE (item)	  = build_type_variant (build_array_type (char_type_node,						  build_range_type						  (integer_type_node,						   integer_one_node,						   build_int_2						   (h.length, 0))),				1, 0);      }      break;    case FFEINFO_basictypeTYPELESS:      {	ffetargetInteger1 ival;	ffetargetTypeless tless;	ffebad error;	tless = ffebld_cu_val_typeless (*cu);	error = ffetarget_convert_integer1_typeless (&ival, tless);	assert (error == FFEBAD);	item = build_int_2 ((int) ival, 0);      }      break;    default:      assert ("not yet on constant type" == NULL);      /* Fall through. */    case FFEINFO_basictypeANY:      return error_mark_node;    }  TREE_CONSTANT (item) = 1;  return item;}