fixed bug with function returning pointer to function
authoreck <none@none>
Tue, 4 Dec 1990 11:09:34 +0000 (11:09 +0000)
committereck <none@none>
Tue, 4 Dec 1990 11:09:34 +0000 (11:09 +0000)
lang/cem/cemcom.ansi/idf.c
lang/cem/cemcom.ansi/proto.c
lang/cem/cemcom.ansi/type.c

index 30bbce4..305d819 100644 (file)
@@ -560,8 +560,11 @@ check_formals(idf, dc)
                return;
        }
 
-       while (du && du->du_fund != FUNCTION)
+       while (du
+               && (du->du_fund != FUNCTION
+                   || du->next != (struct decl_unary *) 0)) {
                du = du->next;
+       }
        if (!du) return;        /* terrible error, signalled earlier */
 
        if (du->du_proto) return;
index c639f60..309934e 100644 (file)
@@ -176,6 +176,7 @@ struct idf **idpp;
        return tg;
 }
 
+
 declare_protos(dc)
        register struct declarator *dc;
 {
@@ -193,8 +194,15 @@ declare_protos(dc)
                dumpidftab("start declare_protos", 0);
 #endif DEBUG
        du = dc->dc_decl_unary;
-       while (du && du->du_fund != FUNCTION)
+       while (du) {
+               if (du->du_fund == FUNCTION) {
+                       if (du->next != (struct decl_unary *) 0) {
+                               remove_proto_idfs(du->du_proto);
+                               du->du_proto = 0;
+                       } else break;
+               }
                du = du->next;
+       }
        pl = du ? du->du_proto : NO_PROTO;
        if (pl) {
 #if    0 /* the id_proto member is deleted (???) */
index d29b8f9..5c73709 100644 (file)
@@ -153,7 +153,6 @@ function_of(tp, pl, qual)
        if (!dtp)       {
                dtp = create_type(FUNCTION);
                dtp->tp_up = tp;
-               /* dtp->tp_size = pointer_size; ??? */
                dtp->tp_size = -1;      /* function size is not known */
                dtp->tp_align = pointer_align;
                dtp->tp_typequal = qual;