From 08d0be2f4c377deee7b5d0d5fe7f502a75a26d05 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Sun, 5 Mar 2000 01:57:10 +0000 Subject: [PATCH] function.h (struct sequence_stack): Remove rtl_expr. * function.h (struct sequence_stack): Remove rtl_expr. (struct emit_staus): Likewise. (seq_rtl_expr): Remove. * tree.h (free_temps_for_rtl_expr): Don't declare. (start_sequence_for_rtl_expr): Likewise. * rtl.h (preserve_rtl_expr_result): Likewise. * emit-rtl.c (start_sequence): Don't set sequence_rtl_expr. (start_sequence_for_rtl_expr): Remove. (push_topmost_sequence): Don't save sequence_rtl_expr. (pop_topmost_sequence): Remove comment about not restoring it. (end_sequence): Don't set seq_rtl_expr. (init_emit): Don't initialize it. (mark_sequence_stack): Don't mark it. (mark_emit_status): Likewise. * except.c (protect_with_terminate): Use start_sequence_for_rtl_expr, not start_sequence. * expr.c (expand_expr, case RTL_EXPR): Don't call preserve_rtl_expr_result or free_temps_for_rtl_expr. (assign_stack_temp_for_type): Don't set rtl_expr. (preserve_rtl_expr_result): Remove. (free_temps_for_rtl_expr): Likewise. (pop_temp_slots): Likewise. (mark_temp_slot): Don't mark the rtl_expr. * stmt.c (expand_start_stmt_expr): Use start_sequence, not start_sequence_for_rtl_expr. From-SVN: r32333 --- gcc/ChangeLog | 28 ++++++++ gcc/emit-rtl.c | 20 ------ gcc/except.c | 2 +- gcc/expr.c | 2 - gcc/function.h | 7 -- gcc/rtl.h | 1 - gcc/stmt.c | 2 +- .../g++.old-deja/g++.other/inline8.C | 65 +++++++++++++++++++ gcc/tree.h | 2 - 9 files changed, 95 insertions(+), 34 deletions(-) create mode 100644 gcc/testsuite/g++.old-deja/g++.other/inline8.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bb3ff7d0e4e..7a3d5c78e64 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,31 @@ +2000-03-04 Mark Mitchell + + * function.h (struct sequence_stack): Remove rtl_expr. + (struct emit_staus): Likewise. + (seq_rtl_expr): Remove. + * tree.h (free_temps_for_rtl_expr): Don't declare. + (start_sequence_for_rtl_expr): Likewise. + * rtl.h (preserve_rtl_expr_result): Likewise. + * emit-rtl.c (start_sequence): Don't set sequence_rtl_expr. + (start_sequence_for_rtl_expr): Remove. + (push_topmost_sequence): Don't save sequence_rtl_expr. + (pop_topmost_sequence): Remove comment about not restoring it. + (end_sequence): Don't set seq_rtl_expr. + (init_emit): Don't initialize it. + (mark_sequence_stack): Don't mark it. + (mark_emit_status): Likewise. + * except.c (protect_with_terminate): Use + start_sequence_for_rtl_expr, not start_sequence. + * expr.c (expand_expr, case RTL_EXPR): Don't call + preserve_rtl_expr_result or free_temps_for_rtl_expr. + (assign_stack_temp_for_type): Don't set rtl_expr. + (preserve_rtl_expr_result): Remove. + (free_temps_for_rtl_expr): Likewise. + (pop_temp_slots): Likewise. + (mark_temp_slot): Don't mark the rtl_expr. + * stmt.c (expand_start_stmt_expr): Use start_sequence, not + start_sequence_for_rtl_expr. + 2000-03-04 Zack Weinberg * mkdeps.c, mkdeps.h: New files. diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 27b837447f0..6b1b3b78e60 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -3376,7 +3376,6 @@ start_sequence () tem->next = seq_stack; tem->first = first_insn; tem->last = last_insn; - tem->sequence_rtl_expr = seq_rtl_expr; seq_stack = tem; @@ -3384,19 +3383,6 @@ start_sequence () last_insn = 0; } -/* Similarly, but indicate that this sequence will be placed in T, an - RTL_EXPR. See the documentation for start_sequence for more - information about how to use this function. */ - -void -start_sequence_for_rtl_expr (t) - tree t; -{ - start_sequence (); - - seq_rtl_expr = t; -} - /* Set up the insn chain starting with FIRST as the current sequence, saving the previously current one. See the documentation for start_sequence for more information about how to use this function. */ @@ -3430,7 +3416,6 @@ push_topmost_sequence () first_insn = top->first; last_insn = top->last; - seq_rtl_expr = top->sequence_rtl_expr; } /* After emitting to the outer-level insn chain, update the outer-level @@ -3446,7 +3431,6 @@ pop_topmost_sequence () top->first = first_insn; top->last = last_insn; - /* ??? Why don't we save seq_rtl_expr here? */ end_sequence (); } @@ -3471,7 +3455,6 @@ end_sequence () first_insn = tem->first; last_insn = tem->last; - seq_rtl_expr = tem->sequence_rtl_expr; seq_stack = tem->next; free (tem); @@ -3760,7 +3743,6 @@ init_emit () f->emit = (struct emit_status *) xmalloc (sizeof (struct emit_status)); first_insn = NULL; last_insn = NULL; - seq_rtl_expr = NULL; cur_insn_uid = 1; reg_rtx_no = LAST_VIRTUAL_REGISTER + 1; last_linenum = 0; @@ -3834,7 +3816,6 @@ mark_sequence_stack (ss) while (ss) { ggc_mark_rtx (ss->first); - ggc_mark_tree (ss->sequence_rtl_expr); ss = ss->next; } } @@ -3856,7 +3837,6 @@ mark_emit_status (es) ggc_mark_rtx (*r); mark_sequence_stack (es->sequence_stack); - ggc_mark_tree (es->sequence_rtl_expr); ggc_mark_rtx (es->x_first_insn); } diff --git a/gcc/except.c b/gcc/except.c index 0a563b49592..c04e73479d3 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -2095,7 +2095,7 @@ protect_with_terminate (e) TREE_TYPE (handler) = void_type_node; RTL_EXPR_RTL (handler) = const0_rtx; TREE_SIDE_EFFECTS (handler) = 1; - start_sequence_for_rtl_expr (handler); + start_sequence (); emit_library_call (terminate_libfunc, 0, VOIDmode, 0); emit_barrier (); diff --git a/gcc/expr.c b/gcc/expr.c index fb266e27226..544176c652a 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -6306,8 +6306,6 @@ expand_expr (exp, target, tmode, modifier) emit_insns (RTL_EXPR_SEQUENCE (exp)); RTL_EXPR_SEQUENCE (exp) = const0_rtx; } - preserve_rtl_expr_result (RTL_EXPR_RTL (exp)); - free_temps_for_rtl_expr (exp); return RTL_EXPR_RTL (exp); case CONSTRUCTOR: diff --git a/gcc/function.h b/gcc/function.h index 9ede7a73d08..510ddcfad8d 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -46,7 +46,6 @@ struct sequence_stack { /* First and last insns in the chain of the saved sequence. */ rtx first, last; - tree sequence_rtl_expr; struct sequence_stack *next; }; @@ -77,11 +76,6 @@ struct emit_status rtx x_first_insn; rtx x_last_insn; - /* RTL_EXPR within which the current sequence will be placed. Use to - prevent reuse of any temporaries within the sequence until after the - RTL_EXPR is emitted. */ - tree sequence_rtl_expr; - /* Stack of pending (incomplete) sequences saved by `start_sequence'. Each element describes one pending sequence. The main insn-chain is saved in the last element of the chain, @@ -117,7 +111,6 @@ struct emit_status /* For backward compatibility... eventually these should all go away. */ #define reg_rtx_no (cfun->emit->x_reg_rtx_no) -#define seq_rtl_expr (cfun->emit->sequence_rtl_expr) #define regno_reg_rtx (cfun->emit->x_regno_reg_rtx) #define seq_stack (cfun->emit->sequence_stack) diff --git a/gcc/rtl.h b/gcc/rtl.h index c736600b058..4ef60db6d6e 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -1508,7 +1508,6 @@ extern void reposition_prologue_and_epilogue_notes PARAMS ((rtx)); extern void thread_prologue_and_epilogue_insns PARAMS ((rtx)); extern int prologue_epilogue_contains PARAMS ((rtx)); extern HOST_WIDE_INT get_frame_size PARAMS ((void)); -extern void preserve_rtl_expr_result PARAMS ((rtx)); extern void mark_temp_addr_taken PARAMS ((rtx)); extern void update_temp_slot_address PARAMS ((rtx, rtx)); extern void purge_addressof PARAMS ((rtx)); diff --git a/gcc/stmt.c b/gcc/stmt.c index cd5277eb1ae..d165b83c302 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -2025,7 +2025,7 @@ expand_start_stmt_expr () t = make_node (RTL_EXPR); resume_momentary (momentary); do_pending_stack_adjust (); - start_sequence_for_rtl_expr (t); + start_sequence (); NO_DEFER_POP; expr_stmts_for_value++; return t; diff --git a/gcc/testsuite/g++.old-deja/g++.other/inline8.C b/gcc/testsuite/g++.old-deja/g++.other/inline8.C new file mode 100644 index 00000000000..2097cfaa9f8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/inline8.C @@ -0,0 +1,65 @@ +// Origin: Gerald Pfeifer +// Special g++ Options: -O1 + +#include +#include + +class NAMES_ITEM + { +public: + char *name; + + NAMES_ITEM(const NAMES_ITEM& item2); + + NAMES_ITEM(const char* name2); + + ~NAMES_ITEM(); + + bool operator==(const NAMES_ITEM& n) const; + }; + + +NAMES_ITEM::NAMES_ITEM (const NAMES_ITEM& item2) + { + size_t length=strlen(item2.name); + + name=new char[length+1]; + memcpy(name,item2.name,length+1); + } + +NAMES_ITEM::NAMES_ITEM (const char* name2) + { + size_t length=strlen(name2); + + name=new char[length+1]; + memcpy(name,name2,length+1); + } + +NAMES_ITEM::~NAMES_ITEM () +{ + if (strcmp (name, "one") != 0) + abort (); + + name=0; +} + +bool NAMES_ITEM::operator==(const NAMES_ITEM& n) const +{ + return (strcmp(name,n.name) == 0); +} + +bool operator<(const NAMES_ITEM& n1, const NAMES_ITEM& n2) + { + return (strcmp(n1.name,n2.name) < 0); + } + + typedef map > lookup_t; + + lookup_t lookup; + + NAMES_ITEM item ("one"); +main() + { + lookup.insert(pair(item,0)); + } + diff --git a/gcc/tree.h b/gcc/tree.h index 1a827581c6b..4746360cf51 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -2452,7 +2452,6 @@ extern void preserve_temp_slots PARAMS ((struct rtx_def *)); extern int aggregate_value_p PARAMS ((tree)); extern tree reorder_blocks PARAMS ((tree, struct rtx_def *)); -extern void free_temps_for_rtl_expr PARAMS ((tree)); extern void instantiate_virtual_regs PARAMS ((tree, struct rtx_def *)); extern void unshare_all_rtl PARAMS ((tree, struct rtx_def *)); extern int max_parm_reg_num PARAMS ((void)); @@ -2486,7 +2485,6 @@ extern struct rtx_def *store_expr PARAMS ((tree, struct rtx_def *, extern void check_max_integer_computation_mode PARAMS ((tree)); /* In emit-rtl.c */ -extern void start_sequence_for_rtl_expr PARAMS ((tree)); extern struct rtx_def *emit_line_note_after PARAMS ((char *, int, struct rtx_def *)); extern struct rtx_def *emit_line_note PARAMS ((char *, int)); -- 2.30.2