summaryrefslogtreecommitdiffstats
path: root/gcc/cp/expr.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2001-03-28 11:04:51 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2001-03-28 11:04:51 +0000
commitdf4b504cae7856b864a073ab9e6e61cf2ad23a97 (patch)
treea923c8785a06871784c5177530130063c4925f5a /gcc/cp/expr.c
parentd3ab49408bd5b876d10076caea78dc81a5f85dd7 (diff)
downloadppe42-gcc-df4b504cae7856b864a073ab9e6e61cf2ad23a97.tar.gz
ppe42-gcc-df4b504cae7856b864a073ab9e6e61cf2ad23a97.zip
IA-64 ABI Exception Handling.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40924 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp/expr.c')
-rw-r--r--gcc/cp/expr.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/cp/expr.c b/gcc/cp/expr.c
index fc22460ff97..9a9eb86f526 100644
--- a/gcc/cp/expr.c
+++ b/gcc/cp/expr.c
@@ -88,6 +88,7 @@ cplus_expand_expr (exp, target, tmode, modifier)
tree type = TREE_TYPE (exp);
register enum machine_mode mode = TYPE_MODE (type);
register enum tree_code code = TREE_CODE (exp);
+ rtx ret;
/* No sense saving up arithmetic to be done
if it's all in the wrong mode to form part of an address.
@@ -103,16 +104,19 @@ cplus_expand_expr (exp, target, tmode, modifier)
target, tmode, modifier);
case OFFSET_REF:
- {
- return expand_expr (default_conversion (resolve_offset_ref (exp)),
- target, tmode, EXPAND_NORMAL);
- }
+ return expand_expr (default_conversion (resolve_offset_ref (exp)),
+ target, tmode, EXPAND_NORMAL);
case THROW_EXPR:
expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0);
- expand_internal_throw ();
return NULL;
+ case MUST_NOT_THROW_EXPR:
+ expand_eh_region_start ();
+ ret = expand_expr (TREE_OPERAND (exp, 0), target, tmode, modifier);
+ expand_eh_region_end_must_not_throw (build_call (terminate_node, 0));
+ return ret;
+
case EMPTY_CLASS_EXPR:
/* We don't need to generate any code for an empty class. */
return const0_rtx;
OpenPOWER on IntegriCloud