emit_note (NULL_PTR, NOTE_INSN_FUNCTION_END);
emit_note (SSP_DUMMY_FILE, NOTE_INSN_FUNCTION_END);
rtl_epilogue (insn)     rtx insn;{  rtx if_false_label, end_label = 0;  rtx _val;  rtx funcname;  tree funcstr;  rtx return_reg = DECL_RTL (DECL_RESULT (current_function_decl)),    return_save = 0;  int  flag_have_return = FALSE;		  start_sequence ();#ifdef HAVE_return  if (HAVE_return)    {      rtx insn;      return_label = gen_label_rtx ();            for (insn = prologue_insert_point; insn; insn = NEXT_INSN (insn))	if (GET_CODE (insn) == JUMP_INSN	    && GET_CODE (PATTERN (insn)) == RETURN	    && GET_MODE (PATTERN (insn)) == VOIDmode)	  {	    rtx pat = gen_rtx_SET (VOIDmode,				   pc_rtx,				   gen_rtx_LABEL_REF (VOIDmode,						      return_label));	    PATTERN (insn) = pat;	    flag_have_return = TRUE;	  }      emit_label (return_label);    }#endif  if (return_reg      && ! (current_function_returns_struct	    || current_function_returns_pcc_struct)      /* If scalar return value was NOT computed in a pseudo-reg */      && ! (GET_CODE (return_reg) == REG	    && REGNO (return_reg) >= FIRST_PSEUDO_REGISTER))    {      return_save = GET_CODE (return_reg)==REG?	gen_reg_rtx (GET_MODE (return_reg)):return_reg;      if (! replace_return_reg (prologue_insert_point, return_save))	emit_move_insn (return_save, return_reg);    }  compare_from_rtx (guard_area, _guard, NE, 0, GUARD_m, 0, 0);	/* if (guard_area != _guard) */  if_false_label = gen_label_rtx ();				/* { */  emit_jump_insn ( gen_beq(if_false_label));  /*    In the function force_const_mem in varasm.c of egcs-1.1.2-30, there is a     failure to assign the guard_area variable to eax register, which destroys     the return value of the function.    The BUG preceding comment is an apropriate processes.    When the bug is fixed, removes the comment  */  /* generate string for the current function name */  funcstr = build_string (strlen(current_function_name)+1, current_function_name);  TREE_TYPE (funcstr) = build_array_type (char_type_node, 0);/* = char_array_type_node;*/  funcname = output_constant_def (funcstr);  emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__stack_smash_handler"),		     0, VOIDmode, 2,                     XEXP (funcname, 0), Pmode, guard_area, GUARD_m);  /* generate RTL to return from the current function */		  emit_barrier ();						/* } */  emit_label (if_false_label);  /* generate RTL to return from the current function */  if (return_reg)    {      if (return_save)	expand_value_return (return_save);      /* If returning a structure, arrange to return the address of the value	 in a place where debuggers expect to find it.	 If returning a structure PCC style,	 the caller also depends on this value.	 And current_function_returns_pcc_struct is not necessarily set.  */      else if (current_function_returns_struct	       || current_function_returns_pcc_struct)	{	  rtx value_address = XEXP (DECL_RTL (DECL_RESULT (current_function_decl)), 0);	  tree type = TREE_TYPE (DECL_RESULT (current_function_decl));#ifdef FUNCTION_OUTGOING_VALUE	  rtx outgoing	    = FUNCTION_OUTGOING_VALUE (build_pointer_type (type),				       current_function_decl);#else	  rtx outgoing	    = FUNCTION_VALUE (build_pointer_type (type),			      current_function_decl);#endif	  	  /* Mark this as a function return value so integrate will delete the	     assignment and USE below when inlining this function.  */	  REG_FUNCTION_VALUE_P (outgoing) = 1;	  emit_move_insn (outgoing, value_address);	  use_variable (outgoing);	}      else if (GET_CODE (return_reg) == REG	       && REGNO (return_reg) >= FIRST_PSEUDO_REGISTER) {	/* If scalar return value was computed in a pseudo-reg,	   copy that to the hard return register.  */	emit_move_insn (current_function_return_rtx, return_reg);	emit_insn (gen_rtx_USE (VOIDmode, current_function_return_rtx));      }      end_label = gen_label_rtx ();      emit_jump (end_label);    }  /* Mark the end of the function body.     If control reaches this insn, the function can drop through     without returning a value.  */  emit_note (NULL_PTR, NOTE_INSN_FUNCTION_END);    if (end_label)    emit_label (end_label);#ifdef HAVE_return  if (HAVE_return && flag_have_return)    {      emit_jump_insn (gen_return ());      emit_barrier ();    }#endif    _val = gen_sequence ();  end_sequence ();  emit_insn_after (_val, insn);}