This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

ia64 eh, part 5


As discussed, make sjlj exceptions a configure option
instead of a runtime option.

I'd welcome suggestions of what to do differently with
that makefile fragment...



r~


        * Makefile.in (cs-tconfig.h): Copy USING_SJLJ_EXCEPTIONS
        value to target configuration header.
        * configure.in (CONFIG_SJLJ_EXCEPTIONS): New.
        * config.in, configure: Rebuild.
        * except.h (USING_SJLJ_EXCEPTIONS): New.  Define based on
        configuration and target defines.
        (exceptions_via_longjmp): Remove.
        * dwarf2out.c, except.c, final.c, toplev.c, config/ia64/ia64.c:
        Use USING_SJLJ_EXCEPTIONS instead of exceptions_via_longjmp.

cp/
        * except.c: Use USING_SJLJ_EXCEPTIONS instead of
        exceptions_via_longjmp.

java/
        * expr.c, parse.h: Use USING_SJLJ_EXCEPTIONS instead of
        exceptions_via_longjmp.

testsuite/
        * g++.old-deja/g++.eh/crash3.C: Don't use -fsjlj-exceptions.
        * g++.old-deja/g++.eh/vbase3.C: Likewise.

Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v
retrieving revision 1.630
diff -c -p -d -r1.630 Makefile.in
*** Makefile.in	2001/03/27 22:57:27	1.630
--- Makefile.in	2001/03/28 05:11:54
*************** cs-hconfig.h: Makefile
*** 887,896 ****
  	TARGET_CPU_DEFAULT="$(target_cpu_default)" \
  	$(SHELL) $(srcdir)/mkconfig.sh hconfig.h
  
! cs-tconfig.h: Makefile
  	HEADERS="$(xm_file)" DEFINES="$(xm_defines)" \
  	TARGET_CPU_DEFAULT="" \
  	$(SHELL) $(srcdir)/mkconfig.sh tconfig.h
  
  cs-tm_p.h: Makefile
  	HEADERS="$(tm_p_file)" DEFINES="" TARGET_CPU_DEFAULT="" \
--- 887,905 ----
  	TARGET_CPU_DEFAULT="$(target_cpu_default)" \
  	$(SHELL) $(srcdir)/mkconfig.sh hconfig.h
  
! cs-tconfig.h: Makefile $(GCONFIG_H) insn-flags.h except.h
  	HEADERS="$(xm_file)" DEFINES="$(xm_defines)" \
  	TARGET_CPU_DEFAULT="" \
  	$(SHELL) $(srcdir)/mkconfig.sh tconfig.h
+ # ??? Need extra help to get this definition copied to where libgcc can
+ # see it.  It shouldn't matter which compiler we use to get there.
+ 	echo '#include "config.h"' > conftest.c
+ 	echo '#include "except.h"' >> conftest.c
+ 	echo 'xyzzy USING_SJLJ_EXCEPTIONS' >> conftest.c
+ 	$(HOST_CC) -E conftest.c $(HOST_CFLAGS) $(INCLUDES) > conftest.out
+ 	sed -e 's/xyzzy/#define USING_SJLJ_EXCEPTIONS/' -e '/#define/p' \
+ 		-e d conftest.out >> tconfig.h
+ 	rm conftest.*
  
  cs-tm_p.h: Makefile
  	HEADERS="$(tm_p_file)" DEFINES="" TARGET_CPU_DEFAULT="" \
Index: configure.in
===================================================================
RCS file: /cvs/gcc/gcc/gcc/configure.in,v
retrieving revision 1.504
diff -c -p -d -r1.504 configure.in
*** configure.in	2001/03/28 04:05:45	1.504
--- configure.in	2001/03/28 05:11:54
*************** else
*** 1666,1671 ****
--- 1666,1678 ----
  fi
  AC_SUBST(MAINT)dnl
  
+ # With Setjmp/Longjmp based exception handling.
+ AC_ARG_ENABLE(sjlj-exceptions,
+ [  --enable-sjlj-exceptions arrange to use setjmp/longjmp exception handling.],
+ [sjlj=`if test $enableval = yes; then echo 1; else echo 0; fi`
+ AC_DEFINE_UNQUOTED(CONFIG_SJLJ_EXCEPTIONS, $sjlj,
+   [Define 0/1 to force the choice for exception handling model.])])
+ 
  # Make empty files to contain the specs and options for each language.
  # Then add #include lines to for a compiler that has specs and/or options.
  
Index: dwarf2out.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/dwarf2out.c,v
retrieving revision 1.256
diff -c -p -d -r1.256 dwarf2out.c
*** dwarf2out.c	2001/03/28 04:18:11	1.256
--- dwarf2out.c	2001/03/28 05:11:54
*************** dwarf2out_do_frame ()
*** 86,92 ****
  #endif
  #ifdef DWARF2_UNWIND_INFO
  	  || flag_unwind_tables
! 	  || (flag_exceptions && ! exceptions_via_longjmp)
  #endif
  	  );
  }
--- 86,92 ----
  #endif
  #ifdef DWARF2_UNWIND_INFO
  	  || flag_unwind_tables
! 	  || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)
  #endif
  	  );
  }
*************** dwarf2out_frame_finish ()
*** 1936,1946 ****
  #ifdef MIPS_DEBUGGING_INFO
    if (write_symbols == DWARF2_DEBUG)
      output_call_frame_info (0);
!   if (flag_unwind_tables || (flag_exceptions && ! exceptions_via_longjmp))
      output_call_frame_info (1);
  #else
    if (write_symbols == DWARF2_DEBUG
!       || flag_unwind_tables || (flag_exceptions && ! exceptions_via_longjmp))
      output_call_frame_info (1);
  #endif
  }
--- 1936,1946 ----
  #ifdef MIPS_DEBUGGING_INFO
    if (write_symbols == DWARF2_DEBUG)
      output_call_frame_info (0);
!   if (flag_unwind_tables || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS))
      output_call_frame_info (1);
  #else
    if (write_symbols == DWARF2_DEBUG
!       || flag_unwind_tables || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS))
      output_call_frame_info (1);
  #endif
  }
Index: except.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/except.c,v
retrieving revision 1.146
diff -c -p -d -r1.146 except.c
*** except.c	2001/03/28 04:18:11	1.146
--- except.c	2001/03/28 05:11:54
*************** Boston, MA 02111-1307, USA.  */
*** 409,419 ****
  #include "ggc.h"
  #include "tm_p.h"
  
- /* One to use setjmp/longjmp method of generating code for exception
-    handling.  */
- 
- int exceptions_via_longjmp = 2;
- 
  /* One to enable asynchronous exception support.  */
  
  int flag_non_call_exceptions = 0;
--- 409,414 ----
*************** receive_exception_label (handler_label)
*** 671,677 ****
  {
    rtx around_label = NULL_RTX;
  
!   if (! flag_new_exceptions || exceptions_via_longjmp)
      {
        around_label = gen_label_rtx ();
        emit_jump (around_label);
--- 666,672 ----
  {
    rtx around_label = NULL_RTX;
  
!   if (! flag_new_exceptions || USING_SJLJ_EXCEPTIONS)
      {
        around_label = gen_label_rtx ();
        emit_jump (around_label);
*************** receive_exception_label (handler_label)
*** 680,686 ****
  
    emit_label (handler_label);
    
!   if (! exceptions_via_longjmp)
      {
  #ifdef HAVE_exception_receiver
        if (HAVE_exception_receiver)
--- 675,681 ----
  
    emit_label (handler_label);
    
!   if (! USING_SJLJ_EXCEPTIONS)
      {
  #ifdef HAVE_exception_receiver
        if (HAVE_exception_receiver)
*************** expand_eh_region_start_tree (decl, clean
*** 1413,1419 ****
    /* The optimization only applies to actions protected with
       terminate, and only applies if we are using the setjmp/longjmp
       codegen method.  */
!   if (exceptions_via_longjmp
        && protect_cleanup_actions_with_terminate)
      {
        tree func, arg;
--- 1408,1414 ----
    /* The optimization only applies to actions protected with
       terminate, and only applies if we are using the setjmp/longjmp
       codegen method.  */
!   if (USING_SJLJ_EXCEPTIONS
        && protect_cleanup_actions_with_terminate)
      {
        tree func, arg;
*************** expand_eh_region_start_for_decl (decl)
*** 1481,1487 ****
       automatically.  */
    mark_block_as_eh_region ();
  
!   if (exceptions_via_longjmp)
      {
        /* Arrange for returns and gotos to pop the entry we make on the
  	 dynamic handler stack.  */
--- 1476,1482 ----
       automatically.  */
    mark_block_as_eh_region ();
  
!   if (USING_SJLJ_EXCEPTIONS)
      {
        /* Arrange for returns and gotos to pop the entry we make on the
  	 dynamic handler stack.  */
*************** expand_eh_region_start_for_decl (decl)
*** 1492,1498 ****
    note = emit_note (NULL_PTR, NOTE_INSN_EH_REGION_BEG);
    NOTE_EH_HANDLER (note)
      = CODE_LABEL_NUMBER (ehstack.top->entry->exception_handler_label);
!   if (exceptions_via_longjmp)
      start_dynamic_handler ();
  }
  
--- 1487,1493 ----
    note = emit_note (NULL_PTR, NOTE_INSN_EH_REGION_BEG);
    NOTE_EH_HANDLER (note)
      = CODE_LABEL_NUMBER (ehstack.top->entry->exception_handler_label);
!   if (USING_SJLJ_EXCEPTIONS)
      start_dynamic_handler ();
  }
  
*************** expand_eh_region_end (handler)
*** 1532,1538 ****
    note = emit_note (NULL_PTR, NOTE_INSN_EH_REGION_END);
    ret = NOTE_EH_HANDLER (note)
      = CODE_LABEL_NUMBER (entry->exception_handler_label);
!   if (exceptions_via_longjmp == 0 && ! flag_new_exceptions
        /* We share outer_context between regions; only emit it once.  */
        && INSN_UID (entry->outer_context) == 0)
      {
--- 1527,1533 ----
    note = emit_note (NULL_PTR, NOTE_INSN_EH_REGION_END);
    ret = NOTE_EH_HANDLER (note)
      = CODE_LABEL_NUMBER (entry->exception_handler_label);
!   if (USING_SJLJ_EXCEPTIONS == 0 && ! flag_new_exceptions
        /* We share outer_context between regions; only emit it once.  */
        && INSN_UID (entry->outer_context) == 0)
      {
*************** expand_eh_region_end (handler)
*** 1592,1598 ****
  void
  expand_fixup_region_start ()
  {
!   if (! doing_eh (0) || exceptions_via_longjmp)
      return;
  
    expand_eh_region_start ();
--- 1587,1593 ----
  void
  expand_fixup_region_start ()
  {
!   if (! doing_eh (0) || USING_SJLJ_EXCEPTIONS)
      return;
  
    expand_eh_region_start ();
*************** expand_fixup_region_end (cleanup)
*** 1611,1617 ****
    struct eh_node *node;
    int dont_issue;
  
!   if (! doing_eh (0) || exceptions_via_longjmp)
      return;
  
    for (node = ehstack.top; node && node->entry->finalization != cleanup; )
--- 1606,1612 ----
    struct eh_node *node;
    int dont_issue;
  
!   if (! doing_eh (0) || USING_SJLJ_EXCEPTIONS)
      return;
  
    for (node = ehstack.top; node && node->entry->finalization != cleanup; )
*************** expand_fixup_region_end (cleanup)
*** 1658,1664 ****
  void
  emit_throw ()
  {
!   if (exceptions_via_longjmp)
      {
        emit_library_call (sjthrow_libfunc, 0, VOIDmode, 0);
      }
--- 1653,1659 ----
  void
  emit_throw ()
  {
!   if (USING_SJLJ_EXCEPTIONS)
      {
        emit_library_call (sjthrow_libfunc, 0, VOIDmode, 0);
      }
*************** start_catch_handler (rtime)
*** 1739,1745 ****
  
    add_new_handler (eh_region_entry, get_new_handler (handler_label, rtime));
  
!   if (flag_new_exceptions && ! exceptions_via_longjmp)
      return;
  
    /* Under the old mechanism, as well as setjmp/longjmp, we need to
--- 1734,1740 ----
  
    add_new_handler (eh_region_entry, get_new_handler (handler_label, rtime));
  
!   if (flag_new_exceptions && ! USING_SJLJ_EXCEPTIONS)
      return;
  
    /* Under the old mechanism, as well as setjmp/longjmp, we need to
*************** end_catch_handler ()
*** 1787,1793 ****
    if (! doing_eh (1))
      return;
  
!   if (flag_new_exceptions && ! exceptions_via_longjmp) 
      {
        emit_barrier ();
        return;
--- 1782,1788 ----
    if (! doing_eh (1))
      return;
  
!   if (flag_new_exceptions && ! USING_SJLJ_EXCEPTIONS) 
      {
        emit_barrier ();
        return;
*************** expand_start_all_catch ()
*** 1936,1942 ****
       out of line, we arrange to rethrow in the outer context.  We need to
       do this because we are not physically within the region, if any, that
       logically contains this catch block.  */
!   if (! exceptions_via_longjmp)
      {
        expand_eh_region_start ();
        ehstack.top->entry->outer_context = outer_context;
--- 1931,1937 ----
       out of line, we arrange to rethrow in the outer context.  We need to
       do this because we are not physically within the region, if any, that
       logically contains this catch block.  */
!   if (! USING_SJLJ_EXCEPTIONS)
      {
        expand_eh_region_start ();
        ehstack.top->entry->outer_context = outer_context;
*************** expand_end_all_catch ()
*** 1963,1969 ****
    entry = pop_eh_entry (&catchstack);
    free (entry);
  
!   if (! exceptions_via_longjmp)
      {
        rtx outer_context = ehstack.top->entry->outer_context;
  
--- 1958,1964 ----
    entry = pop_eh_entry (&catchstack);
    free (entry);
  
!   if (! USING_SJLJ_EXCEPTIONS)
      {
        rtx outer_context = ehstack.top->entry->outer_context;
  
*************** static void
*** 2010,2016 ****
  expand_rethrow (label)
       rtx label;
  {
!   if (exceptions_via_longjmp)
      emit_throw ();
    else
      if (flag_new_exceptions)
--- 2005,2011 ----
  expand_rethrow (label)
       rtx label;
  {
!   if (USING_SJLJ_EXCEPTIONS)
      emit_throw ();
    else
      if (flag_new_exceptions)
*************** protect_with_terminate (e)
*** 2085,2091 ****
    /* We only need to do this when using setjmp/longjmp EH and the
       language requires it, as otherwise we protect all of the handlers
       at once, if we need to.  */
!   if (exceptions_via_longjmp && protect_cleanup_actions_with_terminate)
      {
        tree handler, result;
  
--- 2080,2086 ----
    /* We only need to do this when using setjmp/longjmp EH and the
       language requires it, as otherwise we protect all of the handlers
       at once, if we need to.  */
!   if (USING_SJLJ_EXCEPTIONS && protect_cleanup_actions_with_terminate)
      {
        tree handler, result;
  
*************** output_function_exception_table ()
*** 2389,2395 ****
     Inlined functions may use it too, and thus we'll have to be able
     to change them too.
  
!    This is done only if using exceptions_via_longjmp. */
  
  void
  emit_eh_context ()
--- 2384,2390 ----
     Inlined functions may use it too, and thus we'll have to be able
     to change them too.
  
!    This is done only if using USING_SJLJ_EXCEPTIONS. */
  
  void
  emit_eh_context ()
Index: except.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/except.h,v
retrieving revision 1.43
diff -c -p -d -r1.43 except.h
*** except.h	2001/03/28 04:18:12	1.43
--- except.h	2001/03/28 05:11:54
*************** extern void push_ehqueue                
*** 472,481 ****
  /* Restore a previously pushed ehqueue.  */
  extern void pop_ehqueue                         PARAMS ((void));
  
- /* One to use setjmp/longjmp method of generating code.  */
- 
- extern int exceptions_via_longjmp;
- 
  /* One to enable asynchronous exception support.  */
  
  extern int flag_non_call_exceptions;
--- 472,477 ----
*************** void init_insn_eh_region                
*** 515,518 ****
--- 511,538 ----
  
  #ifdef rtx
  #undef rtx
+ #endif
+ 
+ /* Just because the user configured --with-sjlj-exceptions=no doesn't
+    mean that we can use call frame exceptions.  Detect that the target
+    has appropriate support.  */
+ 
+ #ifdef CONFIG_SJLJ_EXCEPTIONS
+ # if CONFIG_SJLJ_EXCEPTIONS == 1
+ #  define USING_SJLJ_EXCEPTIONS		1
+ # endif
+ # if CONFIG_SJLJ_EXCEPTIONS == 0
+ #  define USING_SJLJ_EXCEPTIONS		0
+ #  if !defined(DWARF2_UNWIND_INFO) && !defined(IA64_UNWIND_INFO)
+     #error "{DWARF2,IA64}_UNWIND_INFO required"
+ #  endif
+ # endif
+ #else
+ # ifdef IA64_UNWIND_INFO
+ #  define USING_SJLJ_EXCEPTIONS		(!IA64_UNWIND_INFO)
+ # else
+ #  ifdef DWARF2_UNWIND_INFO
+ #   define USING_SJLJ_EXCEPTIONS	(!DWARF2_UNWIND_INFO)
+ #  endif
+ # endif
  #endif
Index: final.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/final.c,v
retrieving revision 1.165
diff -c -p -d -r1.165 final.c
*** final.c	2001/03/27 23:15:03	1.165
--- final.c	2001/03/28 05:11:54
*************** final_scan_insn (insn, file, optimize, p
*** 2126,2132 ****
  	  break;
  
  	case NOTE_INSN_EH_REGION_BEG:
! 	  if (! exceptions_via_longjmp)
  	    {
  	      ASM_OUTPUT_INTERNAL_LABEL (file, "LEHB", NOTE_EH_HANDLER (insn));
  	      if (! flag_new_exceptions)
--- 2126,2132 ----
  	  break;
  
  	case NOTE_INSN_EH_REGION_BEG:
! 	  if (! USING_SJLJ_EXCEPTIONS)
  	    {
  	      ASM_OUTPUT_INTERNAL_LABEL (file, "LEHB", NOTE_EH_HANDLER (insn));
  	      if (! flag_new_exceptions)
*************** final_scan_insn (insn, file, optimize, p
*** 2138,2144 ****
  	  break;
  
  	case NOTE_INSN_EH_REGION_END:
! 	  if (! exceptions_via_longjmp)
  	    {
  	      ASM_OUTPUT_INTERNAL_LABEL (file, "LEHE", NOTE_EH_HANDLER (insn));
  	      if (flag_new_exceptions)
--- 2138,2144 ----
  	  break;
  
  	case NOTE_INSN_EH_REGION_END:
! 	  if (! USING_SJLJ_EXCEPTIONS)
  	    {
  	      ASM_OUTPUT_INTERNAL_LABEL (file, "LEHE", NOTE_EH_HANDLER (insn));
  	      if (flag_new_exceptions)
Index: toplev.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/toplev.c,v
retrieving revision 1.442
diff -c -p -d -r1.442 toplev.c
*** toplev.c	2001/03/28 04:18:12	1.442
--- toplev.c	2001/03/28 05:11:54
*************** lang_independent_options f_options[] =
*** 1081,1088 ****
     "Use the new model for exception handling" },
    {"unwind-tables", &flag_unwind_tables, 1,
      "Just generate unwind tables for exception handling" },
-   {"sjlj-exceptions", &exceptions_via_longjmp, 1,
-    "Use setjmp/longjmp to handle exceptions" },
    {"non-call-exceptions", &flag_non_call_exceptions, 1,
     "Support synchronous non-call exceptions" },
    {"profile-arcs", &profile_arc_flag, 1,
--- 1081,1086 ----
*************** toplev_main (argc, argv)
*** 4876,4894 ****
    /* Some machines may reject certain combinations of options.  */
    OVERRIDE_OPTIONS;
  #endif
- 
-   if (exceptions_via_longjmp == 2)
-     {
- #ifdef DWARF2_UNWIND_INFO
-       exceptions_via_longjmp = ! DWARF2_UNWIND_INFO;
- #else
- #ifdef IA64_UNWIND_INFO
-       exceptions_via_longjmp = ! IA64_UNWIND_INFO;
- #else
-       exceptions_via_longjmp = 1;
- #endif
- #endif
-     }
  
    /* Since each function gets its own handler data, we can't support the
       new model currently, since it depend on a specific rethrow label
--- 4874,4879 ----
Index: config/ia64/ia64.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/ia64/ia64.c,v
retrieving revision 1.84
diff -c -p -d -r1.84 ia64.c
*** ia64.c	2001/03/27 23:15:04	1.84
--- ia64.c	2001/03/28 05:11:55
*************** ia64_function_prologue (file, size)
*** 2470,2476 ****
  	     current_frame_info.n_output_regs,
  	     current_frame_info.n_rotate_regs);
  
!   if (!flag_unwind_tables && (!flag_exceptions || exceptions_via_longjmp))
      return;
  
    /* Emit the .prologue directive.  */
--- 2470,2476 ----
  	     current_frame_info.n_output_regs,
  	     current_frame_info.n_rotate_regs);
  
!   if (!flag_unwind_tables && (!flag_exceptions || USING_SJLJ_EXCEPTIONS))
      return;
  
    /* Emit the .prologue directive.  */
*************** void
*** 2529,2535 ****
  ia64_output_end_prologue (file)
       FILE *file;
  {
!   if (!flag_unwind_tables && (!flag_exceptions || exceptions_via_longjmp))
      return;
  
    fputs ("\t.body\n", file);
--- 2529,2535 ----
  ia64_output_end_prologue (file)
       FILE *file;
  {
!   if (!flag_unwind_tables && (!flag_exceptions || USING_SJLJ_EXCEPTIONS))
      return;
  
    fputs ("\t.body\n", file);
*************** process_for_unwind_directive (asm_out_fi
*** 6587,6593 ****
       rtx insn;
  {
    if (flag_unwind_tables
!       || (flag_exceptions && !exceptions_via_longjmp))
      {
        rtx pat;
  
--- 6587,6593 ----
       rtx insn;
  {
    if (flag_unwind_tables
!       || (flag_exceptions && !USING_SJLJ_EXCEPTIONS))
      {
        rtx pat;
  
Index: cp/except.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/except.c,v
retrieving revision 1.125
diff -c -p -d -r1.125 except.c
*** except.c	2001/03/22 18:47:21	1.125
--- except.c	2001/03/28 05:11:55
*************** expand_exception_blocks ()
*** 788,800 ****
        /* We cannot protect n regions this way if we must flow into the
  	 EH region through the top of the region, as we have to with
  	 the setjmp/longjmp approach.  */
!       if (exceptions_via_longjmp == 0)
  	expand_eh_region_start ();
  
        emit_insns (catch_clauses);
        catch_clauses = catch_clauses_last = NULL_RTX;
  
!       if (exceptions_via_longjmp == 0)
  	expand_eh_region_end (build_terminate_handler ());
  
        emit_insns (catch_clauses);
--- 788,800 ----
        /* We cannot protect n regions this way if we must flow into the
  	 EH region through the top of the region, as we have to with
  	 the setjmp/longjmp approach.  */
!       if (USING_SJLJ_EXCEPTIONS == 0)
  	expand_eh_region_start ();
  
        emit_insns (catch_clauses);
        catch_clauses = catch_clauses_last = NULL_RTX;
  
!       if (USING_SJLJ_EXCEPTIONS == 0)
  	expand_eh_region_end (build_terminate_handler ());
  
        emit_insns (catch_clauses);
*************** expand_throw (exp)
*** 852,858 ****
        /* A Java `throw' statement.  */
        tree args = tree_cons (NULL_TREE, exp, NULL);
  
!       fn = get_identifier (exceptions_via_longjmp
  			   ? "_Jv_Sjlj_Throw"
  			   : "_Jv_Throw");
        if (IDENTIFIER_GLOBAL_VALUE (fn))
--- 852,858 ----
        /* A Java `throw' statement.  */
        tree args = tree_cons (NULL_TREE, exp, NULL);
  
!       fn = get_identifier (USING_SJLJ_EXCEPTIONS
  			   ? "_Jv_Sjlj_Throw"
  			   : "_Jv_Throw");
        if (IDENTIFIER_GLOBAL_VALUE (fn))
Index: java/expr.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/expr.c,v
retrieving revision 1.104
diff -c -p -d -r1.104 expr.c
*** expr.c	2001/03/23 14:14:05	1.104
--- expr.c	2001/03/28 05:11:55
*************** build_java_athrow (node)
*** 600,606 ****
  
    call = build (CALL_EXPR,
  		void_type_node,
! 		build_address_of (throw_node[exceptions_via_longjmp ? 1 : 0]),
  		build_tree_list (NULL_TREE, node),
  		NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
--- 600,606 ----
  
    call = build (CALL_EXPR,
  		void_type_node,
! 		build_address_of (throw_node[USING_SJLJ_EXCEPTIONS ? 1 : 0]),
  		build_tree_list (NULL_TREE, node),
  		NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
Index: java/parse.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/parse.h,v
retrieving revision 1.68
diff -c -p -d -r1.68 parse.h
*** parse.h	2001/03/27 02:17:48	1.68
--- parse.h	2001/03/28 05:11:55
*************** typedef struct _jdeplist {
*** 673,679 ****
    {									    \
      (WHERE) = 								    \
        build (CALL_EXPR, void_type_node,					    \
! 	     build_address_of (throw_node[exceptions_via_longjmp ? 1 : 0]), \
  	     build_tree_list (NULL_TREE, (WHAT)), NULL_TREE);		    \
      TREE_SIDE_EFFECTS ((WHERE)) = 1;					    \
    }
--- 673,679 ----
    {									    \
      (WHERE) = 								    \
        build (CALL_EXPR, void_type_node,					    \
! 	     build_address_of (throw_node[USING_SJLJ_EXCEPTIONS ? 1 : 0]), \
  	     build_tree_list (NULL_TREE, (WHAT)), NULL_TREE);		    \
      TREE_SIDE_EFFECTS ((WHERE)) = 1;					    \
    }
Index: testsuite/g++.old-deja/g++.eh/crash3.C
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/g++.old-deja/g++.eh/crash3.C,v
retrieving revision 1.1
diff -c -p -d -r1.1 crash3.C
*** crash3.C	2000/02/15 19:56:54	1.1
--- crash3.C	2001/03/28 05:11:55
***************
*** 1,6 ****
  // Build don't link:
  // Origin: Marc Espie <Marc.Espie@liafa.jussieu.fr>
! // Special g++ Options: -fsjlj-exceptions
  
  extern double f(double a); 
  
--- 1,6 ----
  // Build don't link:
  // Origin: Marc Espie <Marc.Espie@liafa.jussieu.fr>
! // Used to use -fsjlj-exceptions, but that isn't an option anymore.
  
  extern double f(double a); 
  
Index: testsuite/g++.old-deja/g++.eh/vbase3.C
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/g++.old-deja/g++.eh/vbase3.C,v
retrieving revision 1.2
diff -c -p -d -r1.2 vbase3.C
*** vbase3.C	1999/09/04 15:09:02	1.2
--- vbase3.C	2001/03/28 05:11:55
***************
*** 1,5 ****
  // Build don't link:
! // Special g++ Options: -fsjlj-exceptions
  // Origin: Donn Terry <donn@interix.com>
  
  struct ios {
--- 1,5 ----
  // Build don't link:
! // Used to use -fsjlj-exceptions, but that isn't an option anymore.
  // Origin: Donn Terry <donn@interix.com>
  
  struct ios {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]