Module Name: src Committed By: christos Date: Thu Nov 20 20:49:06 UTC 2014
Modified Files: src/usr.bin/xlint/lint1: init.c Log Message: Always set i_brace in the struct case. Cleanup some debugging. To generate a diff of this commit: cvs rdiff -u -r1.25 -r1.26 src/usr.bin/xlint/lint1/init.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/xlint/lint1/init.c diff -u src/usr.bin/xlint/lint1/init.c:1.25 src/usr.bin/xlint/lint1/init.c:1.26 --- src/usr.bin/xlint/lint1/init.c:1.25 Thu Apr 17 12:29:26 2014 +++ src/usr.bin/xlint/lint1/init.c Thu Nov 20 15:49:06 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: init.c,v 1.25 2014/04/17 16:29:26 christos Exp $ */ +/* $NetBSD: init.c,v 1.26 2014/11/20 20:49:06 christos Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: init.c,v 1.25 2014/04/17 16:29:26 christos Exp $"); +__RCSID("$NetBSD: init.c,v 1.26 2014/11/20 20:49:06 christos Exp $"); #endif #include <stdlib.h> @@ -89,7 +89,7 @@ memberpush(sb) { namlist_t *nam = xcalloc(1, sizeof (namlist_t)); nam->n_name = sb->sb_name; - DPRINTF(("memberpush = %s\n", nam->n_name)); + DPRINTF(("%s: %s\n", __func__, nam->n_name)); if (namedmem == NULL) { nam->n_prev = nam->n_next = nam; namedmem = nam; @@ -108,7 +108,7 @@ memberpush(sb) static void memberpop() { - DPRINTF(("memberpop = %s\n", namedmem->n_name)); + DPRINTF(("%s: %s\n", __func__, namedmem->n_name)); if (namedmem->n_next == namedmem) { free(namedmem); namedmem = NULL; @@ -164,27 +164,34 @@ popi2(void) istk_t *istk; sym_t *m; - DPRINTF(("popi2(%s): brace=%d count=%d namedmem %d\n", + DPRINTF(("%s+(%s): brace=%d count=%d namedmem %d\n", __func__, tyname(buf, sizeof(buf), initstk->i_type ? initstk->i_type : initstk->i_subt), initstk->i_brace, initstk->i_cnt, initstk->i_namedmem)); initstk = (istk = initstk)->i_nxt; - if (initstk == NULL) - LERROR("popi2()"); free(istk); istk = initstk; + if (istk == NULL) + LERROR("popi2()"); + + DPRINTF(("%s-(%s): brace=%d count=%d namedmem %d\n", __func__, + tyname(buf, sizeof(buf), + initstk->i_type ? initstk->i_type : initstk->i_subt), + initstk->i_brace, initstk->i_cnt, initstk->i_namedmem)); istk->i_cnt--; if (istk->i_cnt < 0) LERROR("popi2()"); - DPRINTF(("popi2(): %d %s\n", istk->i_cnt, + DPRINTF(("%s(): %d %s\n", __func__, istk->i_cnt, namedmem ? namedmem->n_name : "*null*")); if (istk->i_cnt >= 0 && namedmem != NULL) { - DPRINTF(("popi2(): %d %s %s\n", istk->i_cnt, + DPRINTF(("%s(): %d %s %s\n", __func__, istk->i_cnt, tyname(buf, sizeof(buf), istk->i_type), namedmem->n_name)); for (m = istk->i_type->t_str->memb; m != NULL; m = m->s_nxt) { + DPRINTF(("%s(): pop [%s %s]\n", __func__, + namedmem->n_name, m->s_name)); if (m->s_field && m->s_name == unnamed) continue; if (strcmp(m->s_name, namedmem->n_name) == 0) { @@ -195,6 +202,7 @@ popi2(void) } } error(101, namedmem->n_name); + DPRINTF(("%s(): namedmem %s\n", __func__, namedmem->n_name)); memberpop(); istk->i_namedmem = 1; return; @@ -209,6 +217,7 @@ popi2(void) m = istk->i_mem = istk->i_mem->s_nxt; if (m == NULL) LERROR("popi2()"); + DPRINTF(("%s(): pop %s\n", __func__, m->s_name)); } while (m->s_field && m->s_name == unnamed); istk->i_subt = m->s_type; } @@ -217,27 +226,32 @@ popi2(void) static void popinit(int brace) { - DPRINTF(("popinit(%d)\n", brace)); + DPRINTF(("%s(%d)\n", __func__, brace)); if (brace) { /* * Take all entries, including the first which requires * a closing brace, from the stack. */ + DPRINTF(("%s: brace\n", __func__)); do { brace = initstk->i_brace; + DPRINTF(("%s: loop brace %d\n", __func__, brace)); popi2(); } while (!brace); + DPRINTF(("%s: brace done\n", __func__)); } else { /* * Take all entries which cannot be used for further * initializers from the stack, but do this only if * they do not require a closing brace. */ + DPRINTF(("%s: no brace\n", __func__)); while (!initstk->i_brace && initstk->i_cnt == 0 && !initstk->i_nolimit) { popi2(); } + DPRINTF(("%s: no brace done\n", __func__)); } } @@ -255,7 +269,7 @@ pushinit(void) /* Extend an incomplete array type by one element */ if (istk->i_cnt == 0) { - DPRINTF(("pushinit(extend) %s\n", tyname(buf, sizeof(buf), + DPRINTF(("%s(extend) %s\n", __func__, tyname(buf, sizeof(buf), istk->i_type))); /* * Inside of other aggregate types must not be an incomplete @@ -285,17 +299,17 @@ pushinit(void) again: istk = initstk; - DPRINTF(("pushinit(%s)\n", tyname(buf, sizeof(buf), istk->i_type))); + DPRINTF(("%s(%s)\n", __func__, tyname(buf, sizeof(buf), istk->i_type))); switch (istk->i_type->t_tspec) { case ARRAY: if (namedmem) { - DPRINTF(("pushinit ARRAY %s brace=%d\n", + DPRINTF(("%s: ARRAY %s brace=%d\n", __func__, namedmem->n_name, istk->i_brace)); goto pop; } else if (istk->i_nxt->i_namedmem) { - DPRINTF(("pushinit ARRAY brace=%d, namedmem=%d\n", - istk->i_brace, istk->i_nxt->i_namedmem)); istk->i_brace = 1; + DPRINTF(("%s ARRAY brace=%d, namedmem=%d\n", __func__, + istk->i_brace, istk->i_nxt->i_namedmem)); } if (incompl(istk->i_type) && istk->i_nxt->i_nxt != NULL) { @@ -307,7 +321,7 @@ again: istk->i_subt = istk->i_type->t_subt; istk->i_nolimit = incompl(istk->i_type); istk->i_cnt = istk->i_type->t_dim; - DPRINTF(("elements array %s[%d] %s\n", + DPRINTF(("%s: elements array %s[%d] %s\n", __func__, tyname(buf, sizeof(buf), istk->i_subt), istk->i_cnt, namedmem ? namedmem->n_name : "*none*")); break; @@ -324,15 +338,15 @@ again: return; } cnt = 0; - DPRINTF(("2. member lookup %s %s\n", + DPRINTF(("%s: 2. member lookup %s %s i_namedmem=%d\n", __func__, tyname(buf, sizeof(buf), istk->i_type), - namedmem ? namedmem->n_name : "*none*")); + namedmem ? namedmem->n_name : "*none*", istk->i_namedmem)); for (m = istk->i_type->t_str->memb; m != NULL; m = m->s_nxt) { if (m->s_field && m->s_name == unnamed) continue; if (namedmem != NULL) { - DPRINTF(("pushinit():[member:%s, looking:%s]\n", - m->s_name, namedmem->n_name)); + DPRINTF(("%s():[member:%s, looking:%s]\n", + __func__, m->s_name, namedmem->n_name)); if (strcmp(m->s_name, namedmem->n_name) == 0) { cnt++; break; @@ -346,17 +360,22 @@ again: } if (namedmem != NULL) { if (m == NULL) { - DPRINTF(("pushinit(): struct pop\n")); + DPRINTF(("%s(): struct pop\n", __func__)); goto pop; - } else { - istk->i_mem = m; - istk->i_subt = m->s_type; - } + } + istk->i_mem = m; + istk->i_subt = m->s_type; istk->i_namedmem = 1; - istk->i_brace = 1; + DPRINTF(("%s(): namedmem %s\n", __func__, + namedmem->n_name)); memberpop(); cnt = istk->i_type->t_tspec == STRUCT ? 2 : 1; } + istk->i_brace = 1; + DPRINTF(("%s(): %s brace=%d\n", __func__, + tyname(buf, sizeof(buf), + istk->i_type ? istk->i_type : istk->i_subt), + istk->i_brace)); if (cnt == 0) { /* cannot init. struct/union with no named member */ error(179); @@ -367,7 +386,7 @@ again: break; default: if (namedmem) { - DPRINTF(("pushinit(): pop\n")); + DPRINTF(("%s(): pop\n", __func__)); pop: inxt = initstk->i_nxt; free(istk); @@ -415,7 +434,7 @@ nextinit(int brace) { char buf[64]; - DPRINTF(("nextinit(%d)\n", brace)); + DPRINTF(("%s(%d)\n", __func__, brace)); if (!brace) { if (initstk->i_type == NULL && !issclt(initstk->i_subt->t_tspec)) { @@ -444,15 +463,20 @@ nextinit(int brace) testinit(); if (!initerr) pushinit(); - if (!initerr) + if (!initerr) { initstk->i_brace = 1; + DPRINTF(("%s(): %p %s brace=%d\n", __func__, + namedmem, tyname(buf, sizeof(buf), + initstk->i_type ? initstk->i_type : + initstk->i_subt), initstk->i_brace)); + } } } void initlbr(void) { - DPRINTF(("initlbr\n")); + DPRINTF(("%s\n", __func__)); if (initerr) return; @@ -476,7 +500,7 @@ initlbr(void) void initrbr(void) { - DPRINTF(("initrbr\n")); + DPRINTF(("%s\n", __func__)); if (initerr) return; @@ -497,8 +521,8 @@ mkinit(tnode_t *tn) char buf[64], sbuf[64]; #endif - DPRINTF(("mkinit(%s %s)\n", tyname(buf, sizeof(buf), tn->tn_type), - prtnode(sbuf, sizeof(sbuf), tn))); + DPRINTF(("%s(%s %s)\n", __func__, tyname(buf, sizeof(buf), tn->tn_type), + prtnode(sbuf, sizeof(sbuf), tn))); if (initerr || tn == NULL) return; @@ -540,7 +564,7 @@ mkinit(tnode_t *tn) return; initstk->i_cnt--; - DPRINTF(("mkinit() cnt=%d tn=%p\n", initstk->i_cnt, tn)); + DPRINTF(("%s() cnt=%d tn=%p\n", __func__, initstk->i_cnt, tn)); /* Create a temporary node for the left side. */ ln = tgetblk(sizeof (tnode_t)); ln->tn_op = NAME; @@ -616,7 +640,7 @@ strginit(tnode_t *tn) * the string. */ if (istk->i_subt != NULL && istk->i_subt->t_tspec == ARRAY) { - DPRINTF(("strginit subt array\n")); + DPRINTF(("%s: subt array\n", __func__)); t = istk->i_subt->t_subt->t_tspec; if (!((strg->st_tspec == CHAR && (t == CHAR || t == UCHAR || t == SCHAR)) || @@ -627,7 +651,7 @@ strginit(tnode_t *tn) pushinit(); istk = initstk; } else if (istk->i_type != NULL && istk->i_type->t_tspec == ARRAY) { - DPRINTF(("strginit type array\n")); + DPRINTF(("%s: type array\n", __func__)); t = istk->i_type->t_subt->t_tspec; if (!((strg->st_tspec == CHAR && (t == CHAR || t == UCHAR || t == SCHAR)) ||