summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog22
-rw-r--r--gcc/varasm.c34
2 files changed, 35 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0aa6c693104..a0900041385 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,6 +1,12 @@
+2004-10-28 Zack Weinberg <zack@codesourcery.com>
+
+ * varasm.c (function_section): If DECL is NULL_TREE, don't try
+ to do anything else. Do not call get_insns if cfun or
+ cfun->emit are NULL.
+
2004-10-28 Adam Nemet <anemet@lnxw.com>
- PR middle-end/18160
+ PR middle-end/18160
* c-typeck.c (c_mark_addressable): Issue error if address of a
register variable is taken. Use "%qD" to print DECL_NAME.
@@ -206,9 +212,9 @@
<GOTO_EXPR>: Don't let an explicit GOTO_EXPR slip through.
2004-10-27 Daniel Berlin <dberlin@dberlin.org>
-
+
Fix PR tree-optimization/17133
-
+
* tree-cfg.c (rewrite_to_new_ssa_names_bb): Also rewrite must
def kill operand.
@@ -236,13 +242,13 @@
* tree-pass.h (TODO_fix_def_def_chains): New todo flag.
- * tree-optimize.c (execute_todo): Handle TODO_fix_def_def_chains.
+ * tree-optimize.c (execute_todo): Handle TODO_fix_def_def_chains.
* tree-pretty-print.c (dump_vops): Print out MUST_DEF's so that
they include the rhs now.
* tree-ssa-ccp.c (visit_assignment): V_MUST_DEF_OP became
- V_MUST_DEF_RESULT.
+ V_MUST_DEF_RESULT.
* tree-ssa-dce.c (mark_operand_necessary): Add phionly argument.
Update callers.
@@ -265,17 +271,17 @@
as setting the use portion as well.
(copy_virtual_operands): Copy the kill operand as well.
(create_ssa_artficial_load_stmt): V_MUST_DEF_OP became
- V_MUST_DEF_RESULT.
+ V_MUST_DEF_RESULT.
* tree-ssa-operands.h (v_may_def_operand_type): Renamed to
- v_def_use_operand_type.
+ v_def_use_operand_type.
(v_must_def_optype_d): Use v_def_use_operand_type.
(V_MUST_DEF_OP_*): Renamed to V_MUST_DEF_RESULT_*
(V_MUST_DEF_KILL_*): New macros.
(struct ssa_operand_iterator_d): Add num_v_mustu and v_mustu_i
members.
Rename existing must_i and num_v_must members to mustd_i and
- num_v_mustd.
+ num_v_mustd.
(SSA_OP_VMUSTDEFKILL): New flag.
(SSA_OP_VIRTUAL_KILLS): New flag.
(SSA_OP_ALL_OPERANDS): Add in SSA_OP_ALL_KILLS.
diff --git a/gcc/varasm.c b/gcc/varasm.c
index df97f9e0f08..bff916b5545 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -563,26 +563,34 @@ asm_output_aligned_bss (FILE *file, tree decl ATTRIBUTE_UNUSED,
/* Switch to the section for function DECL.
- If DECL is NULL_TREE, switch to the text section.
- ??? It's not clear that we will ever be passed NULL_TREE, but it's
- safer to handle it. */
+ If DECL is NULL_TREE, switch to the text section. We can be passed
+ NULL_TREE under some circumstances by dbxout.c at least. */
void
function_section (tree decl)
{
+ if (decl == NULL_TREE)
+ text_section ();
+ else
+ {
+ /* ??? Typical use of this function maybe shouldn't be looking
+ for unlikely blocks at all - in the event that an entire
+ function is going into the unlikely-execute section, that
+ should be reflected in its DECL_SECTION_NAME. */
+ rtx insns = cfun && cfun->emit ? get_insns () : 0;
+ bool unlikely = insns && scan_ahead_for_unlikely_executed_note (insns);
+
#ifdef USE_SELECT_SECTION_FOR_FUNCTIONS
- bool unlikely = scan_ahead_for_unlikely_executed_note (get_insns());
-
- targetm.asm_out.select_section (decl, unlikely, DECL_ALIGN (decl));
+ targetm.asm_out.select_section (decl, unlikely, DECL_ALIGN (decl));
#else
- if (scan_ahead_for_unlikely_executed_note (get_insns()))
- unlikely_text_section ();
- else if (decl != NULL_TREE
- && DECL_SECTION_NAME (decl) != NULL_TREE)
- named_section (decl, (char *) 0, 0);
- else
- text_section ();
+ if (unlikely)
+ unlikely_text_section ();
+ else if (DECL_SECTION_NAME (decl))
+ named_section (decl, 0, 0);
+ else
+ text_section ();
#endif
+ }
}
/* Switch to read-only data section associated with function DECL. */