scl_t	scl;
scl_t	scl = NOSCL;
mktag(tag, kind, decl, semi)	sym_t	*tag;	tspec_t	kind;	int	decl, semi;{	scl_t	scl;	type_t	*tp;	if (kind == STRUCT) {		scl = STRTAG;	} else if (kind == UNION) {		scl = UNIONTAG;	} else if (kind == ENUM) {		scl = ENUMTAG;	} else {		lerror("mktag()");	}	if (tag != NULL) {		if (tag->s_scl != NOSCL) {			tag = newtag(tag, scl, decl, semi);		} else {			/* a new tag, no empty declaration */			dcs->d_nxt->d_nedecl = 1;			if (scl == ENUMTAG && !decl) {				if (!tflag && (sflag || pflag))					/* forward reference to enum type */					warning(42);			}		}		if (tag->s_scl == NOSCL) {			tag->s_scl = scl;			tag->s_type = tp = getblk(sizeof (type_t));		} else {			tp = tag->s_type;		}	} else {		tag = getblk(sizeof (sym_t));		tag->s_name = unnamed;		STRUCT_ASSIGN(tag->s_dpos, curr_pos);		tag->s_kind = FTAG;		tag->s_scl = scl;		tag->s_blklev = -1;		tag->s_type = tp = getblk(sizeof (type_t));		dcs->d_nxt->d_nedecl = 1;	}	if (tp->t_tspec == NOTSPEC) {		tp->t_tspec = kind;		if (kind != ENUM) {			tp->t_str = getblk(sizeof (str_t));			tp->t_str->align = CHAR_BIT;			tp->t_str->stag = tag;		} else {			tp->t_isenum = 1;			tp->t_enum = getblk(sizeof (enum_t));			tp->t_enum->etag = tag;		}		/* ist unvollstaendiger Typ */		setcompl(tp, 1);	}	return (tp);}