Add VAX hack for stuck starg problems.
authorDonn Seeley <donn@ucbvax.Berkeley.EDU>
Sat, 27 Aug 1988 05:43:59 +0000 (21:43 -0800)
committerDonn Seeley <donn@ucbvax.Berkeley.EDU>
Sat, 27 Aug 1988 05:43:59 +0000 (21:43 -0800)
SCCS-vsn: old/pcc/ccom.tahoe/order.c 1.8

usr/src/old/pcc/ccom.tahoe/order.c

index 3d4362e..6152052 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char sccsid[] = "@(#)order.c    1.7 (Berkeley) %G%";
+static char sccsid[] = "@(#)order.c    1.8 (Berkeley) %G%";
 #endif
 
 # include "pass2.h"
 #endif
 
 # include "pass2.h"
@@ -413,6 +413,7 @@ genargs( p, ptemp ) register NODE *p, *ptemp; {
        register NODE *pasg;
        register int align;
        register int size;
        register NODE *pasg;
        register int align;
        register int size;
+       int count;
 
        /* generate code for the arguments */
 
 
        /* generate code for the arguments */
 
@@ -435,15 +436,11 @@ genargs( p, ptemp ) register NODE *p, *ptemp; {
                        /* make it look beautiful... */
                        p->in.op = UNARY MUL;
                        canon( p );  /* turn it into an oreg */
                        /* make it look beautiful... */
                        p->in.op = UNARY MUL;
                        canon( p );  /* turn it into an oreg */
-                       if( p->in.op != OREG ){
+                       for( count = 0; p->in.op != OREG && count < 10; ++count ){
                                offstar( p->in.left );
                                canon( p );
                                offstar( p->in.left );
                                canon( p );
-                               if( p->in.op != OREG ){
-                                       offstar( p->in.left );
-                                       canon( p );
-                                       if( p->in.op != OREG ) cerror( "stuck starg" );
-                                       }
                                }
                                }
+                       if( p->in.op != OREG ) cerror( "stuck starg" );
                        }
 
 
                        }