------- Comment #9 from jvdelisle at gcc dot gnu dot org  2010-08-16 06:09 
-------
The problem resides in resolve_transfer.  The checks are not performed because
the expression is wrapped in parenthesis and so the expression is of type
EXPR_OP, so resolve_transfer is just exited.  The following patch simply finds
the first operand that is not of type EXPR_OP and sets exp to that for
checking.

Index: resolve.c
===================================================================
--- resolve.c   (revision 163259)
+++ resolve.c   (working copy)
@@ -7696,6 +7696,12 @@

   exp = code->expr1;

+  while (exp != NULL && exp->expr_type == EXPR_OP)
+    exp = exp->value.op.op1;
+
+  if (exp == NULL)
+    return;
+
   if (exp->expr_type != EXPR_VARIABLE && exp->expr_type != EXPR_FUNCTION)
     return;



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41859

Reply via email to