diff options
author | Richard Henderson <rth@redhat.com> | 2001-04-03 17:48:51 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-04-03 17:48:51 -0700 |
commit | 9555a12236d3bde31b58039b86e817b48f1024bd (patch) | |
tree | a27e63fae9c2f86fa257d09e1bbbabb90556730c /gcc/calls.c | |
parent | d02af173409f89ccce70f4f5f381fb7dad5315f8 (diff) | |
download | gcc-9555a12236d3bde31b58039b86e817b48f1024bd.zip gcc-9555a12236d3bde31b58039b86e817b48f1024bd.tar.gz gcc-9555a12236d3bde31b58039b86e817b48f1024bd.tar.bz2 |
rtl.h (LCT_THROW): New.
* rtl.h (LCT_THROW): New.
* calls.c (emit_library_call_value_1): Handle it.
* except.c (connect_post_landing_pads): Use it.
From-SVN: r41070
Diffstat (limited to 'gcc/calls.c')
-rw-r--r-- | gcc/calls.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/gcc/calls.c b/gcc/calls.c index 694eeee..eb54aee 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -3521,15 +3521,29 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p) #endif #endif - /* No library functions can throw. */ + /* By default, library functions can not throw. */ flags = ECF_NOTHROW; - if (fn_type == LCT_CONST_MAKE_BLOCK) - flags |= ECF_CONST; - else if (fn_type == LCT_PURE_MAKE_BLOCK) - flags |= ECF_PURE; - else if (fn_type == LCT_NORETURN) - flags |= ECF_NORETURN; + switch (fn_type) + { + case LCT_NORMAL: + case LCT_CONST: + case LCT_PURE: + /* Nothing to do here. */ + break; + case LCT_CONST_MAKE_BLOCK: + flags |= ECF_CONST; + break; + case LCT_PURE_MAKE_BLOCK: + flags |= ECF_PURE; + break; + case LCT_NORETURN: + flags |= ECF_NORETURN; + break; + case LCT_THROW: + flags = ECF_NORETURN; + break; + } fun = orgfun; #ifdef PREFERRED_STACK_BOUNDARY |