+2001-05-18 Mark Mitchell <mark@codesourcery.com>
+
+ * function.c (expand_function_start): Avoid creating BLKmode
+ pseudos.
+
+2001-05-17 Mark Mitchell <mark@codesourcery.com>
+
+ * dwarf2out.c (output_comp_unit): Always output a compilation-unit
+ DIE, even if it has no children.
+ (dwarf2out_finish): Always output the line-number table, even if
+ it has no content.
+
2001-05-18 David Edelsohn <edelsohn@gnu.org>
* rs6000.md (movsfcc,movdfcc): Remove NE case.
{
const char *secname;
- if (die->die_child == 0)
- return;
-
- /* Mark all the DIEs in this CU so we know which get local refs. */
+ /* Even if there are no children of this DIE, we must output the
+ information about the compilation unit. Otherwise, on an empty
+ translation unit, we will generate a present, but empty,
+ .debug_info section. IRIX 6.5 `nm' will then complain when
+ examining the file.
+
+ Mark all the DIEs in this CU so we know which get local refs. */
mark_dies (die);
build_abbrev_table (die);
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BSS_END_LABEL, 0);
#endif
- /* Output the source line correspondence table. */
- if (line_info_table_in_use > 1 || separate_line_info_table_in_use)
+ /* Output the source line correspondence table. We must do this
+ even if there is no line information. Otherwise, on an empty
+ translation unit, we will generate a present, but empty,
+ .debug_info section. IRIX 6.5 `nm' will then complain when
+ examining the file. */
+ if (! DWARF2_ASM_LINE_DEBUG_INFO)
{
- if (! DWARF2_ASM_LINE_DEBUG_INFO)
- {
- ASM_OUTPUT_SECTION (asm_out_file, DEBUG_LINE_SECTION);
- output_line_info ();
- }
-
- /* We can only use the low/high_pc attributes if all of the code
- was in .text. */
- if (separate_line_info_table_in_use == 0)
- {
- add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
- add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
- }
+ ASM_OUTPUT_SECTION (asm_out_file, DEBUG_LINE_SECTION);
+ output_line_info ();
+ }
- add_AT_lbl_offset (comp_unit_die, DW_AT_stmt_list,
- debug_line_section_label);
+ /* We can only use the low/high_pc attributes if all of the code was
+ in .text. */
+ if (separate_line_info_table_in_use == 0)
+ {
+ add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
+ add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
}
+ add_AT_lbl_offset (comp_unit_die, DW_AT_stmt_list,
+ debug_line_section_label);
+
#if 0 /* unimplemented */
if (debug_info_level >= DINFO_LEVEL_VERBOSE && primary)
add_AT_unsigned (die, DW_AT_macro_info, 0);
|| current_function_instrument_entry_exit
|| (flag_exceptions && USING_SJLJ_EXCEPTIONS))
{
- /* If function will end with cleanup code for parms,
- compute the return values into a pseudo reg,
- which we will copy into the true return register
- after the cleanups are done. */
-
- enum machine_mode mode = DECL_MODE (DECL_RESULT (subr));
-
-#ifdef PROMOTE_FUNCTION_RETURN
- tree type = TREE_TYPE (DECL_RESULT (subr));
- int unsignedp = TREE_UNSIGNED (type);
-
- mode = promote_mode (type, mode, &unsignedp, 1);
-#endif
+ /* If function will end with cleanup code for parms, compute the
+ return values into a pseudo reg, which we will copy into the
+ true return register after the cleanups are done. */
+
+ /* In order to figure out what mode to use for the pseudo, we
+ figure out what the mode of the eventual return register will
+ actually be, and use that. */
+ rtx hard_reg
+ = hard_function_value (TREE_TYPE (DECL_RESULT (subr)),
+ subr, 1);
+
+ /* Since we know the return value is not an aggregate, we should
+ have a REG here. */
+ if (!REG_P (hard_reg))
+ abort ();
- SET_DECL_RTL (DECL_RESULT (subr), gen_reg_rtx (mode));
+ /* Create the pseudo. */
+ SET_DECL_RTL (DECL_RESULT (subr),
+ gen_reg_rtx (GET_MODE (hard_reg)));
/* Needed because we may need to move this to memory
in case it's a named return value whose address is taken. */
DECL_REGISTER (DECL_RESULT (subr)) = 1;