Hi,

On Thu, 29 Mar 2012, Stephan Bergmann wrote:

> > > Anyway, would it be worthwhile filing an RFE for an asm annotation 
> > > telling the compiler that it contains code that can throw?
> >
> > I suppose yes.
> 
> <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52770> "RFE: Letting 
> compiler know asm block can call function that can throw."

Actually, with -fnon-call-exceptions volatile asms are already supposed to 
be throwing.  It's just that this got lost with tree-ssa.  With the patch 
and -fnon-call-exceptions a simple "__asm__ volatile (...)" is regarded as 
possibly throwing.

Without -fnon-call-exceptions some parser changes would be required.  How 
about "asm throw (...)" ?


Ciao,
Michael.
Index: tree-eh.c
===================================================================
--- tree-eh.c   (revision 183716)
+++ tree-eh.c   (working copy)
@@ -1959,6 +1959,7 @@ lower_eh_constructs_2 (struct leh_state
       }
       /* FALLTHRU */
 
+    case GIMPLE_ASM:
     case GIMPLE_ASSIGN:
       /* If the stmt can throw use a new temporary for the assignment
          to a LHS.  This makes sure the old value of the LHS is
Index: tree-cfg.c
===================================================================
--- tree-cfg.c  (revision 183716)
+++ tree-cfg.c  (working copy)
@@ -580,6 +580,8 @@ make_edges (void)
 
            case GIMPLE_ASM:
              make_gimple_asm_edges (bb);
+             if (is_ctrl_altering_stmt (last))
+               make_eh_edges (last);
              fallthru = true;
              break;
 

Reply via email to