summaryrefslogtreecommitdiff
path: root/src/cmd/cc/dcl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/cc/dcl.c')
-rw-r--r--src/cmd/cc/dcl.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/cmd/cc/dcl.c b/src/cmd/cc/dcl.c
index 292717d68..117508fd6 100644
--- a/src/cmd/cc/dcl.c
+++ b/src/cmd/cc/dcl.c
@@ -30,6 +30,9 @@
#include <u.h>
#include "cc.h"
+#include "../ld/textflag.h"
+
+static int haspointers(Type*);
Node*
dodecl(void (*f)(int,Type*,Sym*), int c, Type *t, Node *n)
@@ -123,7 +126,8 @@ loop:
if(dataflag) {
s->dataflag = dataflag;
dataflag = 0;
- }
+ } else if(s->type != T && !haspointers(s->type))
+ s->dataflag = NOPTR;
firstbit = 0;
n->sym = s;
n->type = s->type;
@@ -568,9 +572,8 @@ haspointers(Type *t)
return 0;
case TARRAY:
return haspointers(t->link);
- case TFUNC:
case TIND:
- return 1;
+ return t->link->etype != TFUNC;
default:
return 0;
}