Commit e6855a2d by Mark Mitchell Committed by Mark Mitchell

except.h (protect_cleanup_actions): Remove it.

	* except.h (protect_cleanup_actions): Remove it.
	(lang_protect_cleanup_actions): Declare it.
	* except.c (protect_cleanup_actions): Remove it.
	(lang_protect_cleanup_actions): New variable.
	(init_eh): Don't make protect_cleanup_actions a GC root.
	(expand_eh_region_and_cleanup): Call
	lang_protect_cleanup_actions.
	(output_function_exception_table): Remove unused `align'
	variable.
	* varasm.c (assemble_external): Abort if we have not yet
	opened the assembly output file.

	* except.c (cp_protect_cleanup_actions): New function.
	(init_exception_processing): Don't set protect_cleanup_actions
	here.  Do set lang_protect_cleanup_actions.

From-SVN: r42218
parent 8979edec
2001-05-17 Mark Mitchell <mark@codesourcery.com>
* except.h (protect_cleanup_actions): Remove it.
(lang_protect_cleanup_actions): Declare it.
* except.c (protect_cleanup_actions): Remove it.
(lang_protect_cleanup_actions): New variable.
(init_eh): Don't make protect_cleanup_actions a GC root.
(expand_eh_region_and_cleanup): Call
lang_protect_cleanup_actions.
(output_function_exception_table): Remove unused `align'
variable.
* varasm.c (assemble_external): Abort if we have not yet
opened the assembly output file.
Thu May 17 11:54:50 2001 Jeffrey A Law (law@cygnus.com) Thu May 17 11:54:50 2001 Jeffrey A Law (law@cygnus.com)
* except.c (sjlj_emit_function_enter): Call assemble_external_libcall * except.c (sjlj_emit_function_enter): Call assemble_external_libcall
......
2001-05-17 Mark Mitchell <mark@codesourcery.com>
* except.c (cp_protect_cleanup_actions): New function.
(init_exception_processing): Don't set protect_cleanup_actions
here. Do set lang_protect_cleanup_actions.
2001-05-16 Nathan Sidwell <nathan@codesourcery.com> 2001-05-16 Nathan Sidwell <nathan@codesourcery.com>
* spew.c (read_token): Call yyerror on all unexpected tokens. * spew.c (read_token): Call yyerror on all unexpected tokens.
......
...@@ -49,6 +49,7 @@ static int complete_ptr_ref_or_void_ptr_p PARAMS ((tree, tree)); ...@@ -49,6 +49,7 @@ static int complete_ptr_ref_or_void_ptr_p PARAMS ((tree, tree));
static bool is_admissible_throw_operand PARAMS ((tree)); static bool is_admissible_throw_operand PARAMS ((tree));
static int can_convert_eh PARAMS ((tree, tree)); static int can_convert_eh PARAMS ((tree, tree));
static void check_handlers_1 PARAMS ((tree, tree)); static void check_handlers_1 PARAMS ((tree, tree));
static tree cp_protect_cleanup_actions PARAMS ((void));
#include "decl.h" #include "decl.h"
#include "obstack.h" #include "obstack.h"
...@@ -72,8 +73,6 @@ init_exception_processing () ...@@ -72,8 +73,6 @@ init_exception_processing ()
if (flag_honor_std) if (flag_honor_std)
pop_namespace (); pop_namespace ();
protect_cleanup_actions = build_call (terminate_node, NULL_TREE);
/* void __cxa_call_unexpected(void *); */ /* void __cxa_call_unexpected(void *); */
tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node); tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
tmp = build_function_type (void_type_node, tmp); tmp = build_function_type (void_type_node, tmp);
...@@ -85,8 +84,22 @@ init_exception_processing () ...@@ -85,8 +84,22 @@ init_exception_processing ()
: "__gxx_personality_v0"); : "__gxx_personality_v0");
lang_eh_runtime_type = build_eh_type_type; lang_eh_runtime_type = build_eh_type_type;
lang_protect_cleanup_actions = &cp_protect_cleanup_actions;
} }
/* Returns an expression to be executed if an unhandled exception is
propogated out of a cleanup region. */
static tree
cp_protect_cleanup_actions ()
{
/* [except.terminate]
When the destruction of an object during stack unwinding exits
using an exception ... void terminate(); is called. */
return build_call (terminate_node, NULL_TREE);
}
static tree static tree
prepare_eh_type (type) prepare_eh_type (type)
tree type; tree type;
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
@settitle Installing GCC: Binaries @settitle Installing GCC: Binaries
@end ifset @end ifset
@comment $Id: install.texi,v 1.1 2001/05/11 22:10:54 gerald Exp $ @comment $Id: install.texi,v 1.2 2001/05/16 14:57:06 dje Exp $
@c Copyright (C) 2001 Free Software Foundation, Inc. @c Copyright (C) 2001 Free Software Foundation, Inc.
@c *** Converted to texinfo by Dean Wakerley, dean@wakerley.com @c *** Converted to texinfo by Dean Wakerley, dean@wakerley.com
...@@ -1550,31 +1550,18 @@ bootstrap and install GCC you first have to install a pre-built ...@@ -1550,31 +1550,18 @@ bootstrap and install GCC you first have to install a pre-built
compiler, see our @uref{binaries.html,,binaries page} for compiler, see our @uref{binaries.html,,binaries page} for
details. details.
You must use GNU Make to build GCC on Solaris 2. If you don't have GNU
Make installed, you can use the prebuilt compiler mentioned above to
build it.
Sun as 4.X is broken in that it cannot cope with long symbol names. Sun as 4.X is broken in that it cannot cope with long symbol names.
A typical error message might look similar to the following: A typical error message might look similar to the following:
@samp{/usr/ccs/bin/as: "/var/tmp/ccMsw135.s", line 11041: @samp{/usr/ccs/bin/as: "/var/tmp/ccMsw135.s", line 11041:
error: can't compute value of an expression involving an external symbol.} error: can't compute value of an expression involving an external symbol.}
This is Sun bug 4237974. See the @uref{../faq.html#squangle,,How to work around too long C++ This is Sun bug 4237974. This is fixed with patch 108908-02 and has
symbol names?} FAQ entry for further information and a workaround. This is fixed with patch been fixed in later (5.x) versions of the assembler.
108908-02 and has been fixed in later (5.x) versions of the assembler.
Sun make in all known Solaris 1 (SunOS 4) and Solaris 2 releases has a
broken @emph{VPATH} mechanism, which means you must either:
@itemize @bullet
@item
Use GNU make (recommended), @emph{or:}
@item
Always build in the source directory, @emph{or:}
@item
@emph{(For GCC 2.95.1 only)}
apply the patches mentioned at
@uref{http://www.gnu.org/software/gcc/extensions.html#sun-make,,
http://www.gnu.org/software/gcc/extensions.html#sun-make}.
@end itemize
@html @html
<p> <p>
<hr> <hr>
......
...@@ -88,7 +88,7 @@ int flag_non_call_exceptions; ...@@ -88,7 +88,7 @@ int flag_non_call_exceptions;
/* Protect cleanup actions with must-not-throw regions, with a call /* Protect cleanup actions with must-not-throw regions, with a call
to the given failure handler. */ to the given failure handler. */
tree protect_cleanup_actions; tree (*lang_protect_cleanup_actions) PARAMS ((void));
/* Return true if type A catches type B. */ /* Return true if type A catches type B. */
int (*lang_eh_type_covers) PARAMS ((tree a, tree b)); int (*lang_eh_type_covers) PARAMS ((tree a, tree b));
...@@ -367,7 +367,6 @@ void ...@@ -367,7 +367,6 @@ void
init_eh () init_eh ()
{ {
ggc_add_rtx_root (&exception_handler_labels, 1); ggc_add_rtx_root (&exception_handler_labels, 1);
ggc_add_tree_root (&protect_cleanup_actions, 1);
if (! flag_exceptions) if (! flag_exceptions)
return; return;
...@@ -691,6 +690,7 @@ expand_eh_region_end_cleanup (handler) ...@@ -691,6 +690,7 @@ expand_eh_region_end_cleanup (handler)
tree handler; tree handler;
{ {
struct eh_region *region; struct eh_region *region;
tree protect_cleanup_actions;
rtx around_label; rtx around_label;
rtx data_save[2]; rtx data_save[2];
...@@ -707,6 +707,13 @@ expand_eh_region_end_cleanup (handler) ...@@ -707,6 +707,13 @@ expand_eh_region_end_cleanup (handler)
emit_label (region->label); emit_label (region->label);
/* Give the language a chance to specify an action to be taken if an
exception is thrown that would propogate out of the HANDLER. */
protect_cleanup_actions
= (lang_protect_cleanup_actions
? (*lang_protect_cleanup_actions) ()
: NULL_TREE);
if (protect_cleanup_actions) if (protect_cleanup_actions)
expand_eh_region_start (); expand_eh_region_start ();
......
...@@ -147,8 +147,13 @@ extern int duplicate_eh_regions PARAMS ((struct function *, ...@@ -147,8 +147,13 @@ extern int duplicate_eh_regions PARAMS ((struct function *,
extern void sjlj_emit_function_exit_after PARAMS ((rtx)); extern void sjlj_emit_function_exit_after PARAMS ((rtx));
/* Nonzero to protect cleanup actions with must-not-throw regions. */ /* If non-NULL, this is a function that returns an expression to be
extern tree protect_cleanup_actions; executed if an unhandled exception is propogated out of a cleanup
region. For example, in C++, an exception thrown by a destructor
during stack unwinding is required to result in a call to
`std::terminate', so the C++ version of this function returns a
CALL_EXPR for `std::terminate'. */
extern tree (*lang_protect_cleanup_actions) PARAMS ((void));
/* Return true if type A catches type B. */ /* Return true if type A catches type B. */
extern int (*lang_eh_type_covers) PARAMS ((tree a, tree b)); extern int (*lang_eh_type_covers) PARAMS ((tree a, tree b));
......
...@@ -1625,6 +1625,13 @@ void ...@@ -1625,6 +1625,13 @@ void
assemble_external (decl) assemble_external (decl)
tree decl ATTRIBUTE_UNUSED; tree decl ATTRIBUTE_UNUSED;
{ {
/* Because most platforms do not define ASM_OUTPUT_EXTERNAL, the
main body of this code is only rarely exercised. To provide some
testing, on all platforms, we make sure that the ASM_OUT_FILE is
open. If it's not, we should not be calling this function. */
if (!asm_out_file)
abort ();
#ifdef ASM_OUTPUT_EXTERNAL #ifdef ASM_OUTPUT_EXTERNAL
if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl)) if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment