Lines Matching defs:dcs

64 decl_level *dcs;
80 dcs = xcalloc(1, sizeof(*dcs));
81 dcs->d_kind = DLK_EXTERN;
82 dcs->d_last_dlsym = &dcs->d_first_dlsym;
189 if (dcs->d_inline)
192 dcs->d_inline = true;
195 dcs->d_noreturn = true;
203 if (dcs->d_type != NULL || dcs->d_abstract_type != NO_TSPEC ||
204 dcs->d_sign_mod != NO_TSPEC || dcs->d_rank_mod != NO_TSPEC)
208 if (dcs->d_scl == NO_SCL)
209 dcs->d_scl = sc;
210 else if ((dcs->d_scl == EXTERN && sc == THREAD_LOCAL)
211 || (dcs->d_scl == THREAD_LOCAL && sc == EXTERN))
212 dcs->d_scl = EXTERN; /* ignore thread_local */
213 else if ((dcs->d_scl == STATIC && sc == THREAD_LOCAL)
214 || (dcs->d_scl == THREAD_LOCAL && sc == STATIC))
215 dcs->d_scl = STATIC; /* ignore thread_local */
217 dcs->d_multiple_storage_classes = true;
294 dcs->d_invalid_type_combination = true;
317 lint_assert(dcs->d_type == NULL);
318 lint_assert(dcs->d_abstract_type == NO_TSPEC);
319 lint_assert(dcs->d_sign_mod == NO_TSPEC);
320 lint_assert(dcs->d_rank_mod == NO_TSPEC);
322 dcs->d_type = tp;
330 if (dcs->d_type != NULL || dcs->d_abstract_type != NO_TSPEC ||
331 dcs->d_rank_mod != NO_TSPEC || dcs->d_sign_mod != NO_TSPEC) {
332 dcs->d_invalid_type_combination = true;
333 dcs->d_abstract_type = NO_TSPEC;
334 dcs->d_sign_mod = NO_TSPEC;
335 dcs->d_rank_mod = NO_TSPEC;
337 dcs->d_type = tp;
342 if (dcs->d_type != NULL && !dcs->d_type->t_typedef) {
344 dcs->d_invalid_type_combination = true;
350 if (dcs->d_complex_mod == FLOAT)
352 else if (dcs->d_complex_mod == DOUBLE)
359 dcs->d_complex_mod = NO_TSPEC;
362 if (t == LONG && dcs->d_rank_mod == LONG) {
365 dcs->d_rank_mod = NO_TSPEC;
371 if (dcs->d_type != NULL && dcs->d_type->t_typedef) {
373 dcs->d_type = typedef_error(dcs->d_type, t);
379 if (dcs->d_sign_mod != NO_TSPEC)
380 dcs->d_invalid_type_combination = true;
381 dcs->d_sign_mod = t;
383 if (dcs->d_rank_mod != NO_TSPEC)
384 dcs->d_invalid_type_combination = true;
385 dcs->d_rank_mod = t;
387 if (dcs->d_rank_mod == NO_TSPEC || dcs->d_rank_mod == LONG) {
388 if (dcs->d_complex_mod != NO_TSPEC
389 || (t == FLOAT && dcs->d_rank_mod == LONG))
390 dcs->d_invalid_type_combination = true;
391 dcs->d_complex_mod = t;
393 if (dcs->d_abstract_type != NO_TSPEC)
394 dcs->d_invalid_type_combination = true;
395 dcs->d_abstract_type = t;
398 dcs->d_type = tp;
400 if (dcs->d_abstract_type != NO_TSPEC)
401 dcs->d_invalid_type_combination = true;
402 dcs->d_abstract_type = t;
470 dcs->d_mem_align = to_int_constant(tn, true);
471 if (dcs->d_type != NULL && is_struct_or_union(dcs->d_type->t_tspec))
473 dcs->d_type->u.sou->sou_align = dcs->d_mem_align;
480 if (dcs->d_type == NULL)
481 dcs->d_packed = true;
483 pack_struct_or_union(dcs->d_type);
490 dcs->d_used = true;
502 add_type_qualifiers(&dcs->d_qual, qs);
511 dl->d_enclosing = dcs;
514 dcs = dl;
525 decl_level *dl = dcs;
526 dcs = dl->d_enclosing;
527 lint_assert(dcs != NULL);
538 if ((*dcs->d_last_dlsym = dl->d_first_dlsym) != NULL)
539 dcs->d_last_dlsym = dl->d_last_dlsym;
543 * All symbols in dcs->d_first_dlsym are introduced in
550 *dl->d_last_dlsym = dcs->d_func_proto_syms;
551 dcs->d_func_proto_syms = dl->d_first_dlsym;
563 if ((*dcs->d_last_dlsym = dl->d_first_dlsym) != NULL)
564 dcs->d_last_dlsym = dl->d_last_dlsym;
601 for (decl_level *dl = dcs; dl != NULL; dl = dl->d_enclosing)
614 dcs->d_abstract_type = NO_TSPEC;
615 dcs->d_complex_mod = NO_TSPEC;
616 dcs->d_sign_mod = NO_TSPEC;
617 dcs->d_rank_mod = NO_TSPEC;
618 dcs->d_scl = NO_SCL;
619 dcs->d_type = NULL;
620 dcs->d_redeclared_symbol = NULL;
623 dcs->d_mem_align = 0;
624 dcs->d_qual = (type_qualifiers) { .tq_const = false };
625 dcs->d_inline = false;
626 dcs->d_multiple_storage_classes = false;
627 dcs->d_invalid_type_combination = false;
628 dcs->d_nonempty_decl = false;
629 dcs->d_no_type_specifier = false;
631 dcs->d_packed = false;
632 dcs->d_used = false;
633 dcs->d_noreturn = false;
635 dcs->d_func_params = NULL;
636 dcs->d_func_def_pos = (pos_t){ NULL, 0, 0 };
639 dcs->d_func_proto_syms = NULL;
648 if (dcs->d_kind == DLK_EXTERN) {
649 if (dcs->d_scl == REG || dcs->d_scl == AUTO) {
652 dcs->d_scl = NO_SCL;
654 } else if (dcs->d_kind == DLK_OLD_STYLE_PARAMS ||
655 dcs->d_kind == DLK_PROTO_PARAMS) {
656 if (dcs->d_scl != NO_SCL && dcs->d_scl != REG) {
659 dcs->d_scl = NO_SCL;
665 * Merge the declaration specifiers from dcs into dcs->d_type.
672 tspec_t t = dcs->d_abstract_type;
673 tspec_t c = dcs->d_complex_mod;
674 tspec_t s = dcs->d_sign_mod;
675 tspec_t l = dcs->d_rank_mod;
676 type_t *tp = dcs->d_type;
686 dcs->d_no_type_specifier = true;
695 dcs->d_invalid_type_combination = true;
718 dcs->d_invalid_type_combination = true;
723 dcs->d_type = gettyp(merge_signedness(t, s));
729 /* Create a type in 'dcs->d_type' from the information gathered in 'dcs'. */
736 if (dcs->d_multiple_storage_classes)
739 if (dcs->d_invalid_type_combination)
745 if (dcs->d_qual.tq_const && dcs->d_type->t_const
746 && !dcs->d_type->t_typeof) {
747 lint_assert(dcs->d_type->t_typedef);
751 if (dcs->d_qual.tq_volatile && dcs->d_type->t_volatile &&
752 !dcs->d_type->t_typeof) {
753 lint_assert(dcs->d_type->t_typedef);
758 if (dcs->d_qual.tq_const || dcs->d_qual.tq_volatile) {
759 dcs->d_type = block_dup_type(dcs->d_type);
760 dcs->d_type->t_const |= dcs->d_qual.tq_const;
761 dcs->d_type->t_volatile |= dcs->d_qual.tq_volatile;
763 unsigned align = dcs->d_mem_align;
764 if (align > 0 && dcs->d_type->t_tspec == STRUCT) {
766 dcs->d_type->u.sou->sou_align = align;
768 dcs->d_type->u.sou->sou_size_in_bits =
769 (dcs->d_type->u.sou->sou_size_in_bits + align_in_bits - 1)
930 if (dcs->d_kind == DLK_PROTO_PARAMS) {
937 } else if (dcs->d_kind == DLK_ABSTRACT) {
990 } else if (t == INT && dcs->d_sign_mod == NO_TSPEC) {
1043 if (member_alignment > dcs->d_sou_align)
1044 dcs->d_sou_align = member_alignment;
1047 unsigned offset = (dcs->d_sou_size_in_bits + align_in_bits - 1)
1050 || dcs->d_sou_size_in_bits + bit_field_width > offset)
1051 dcs->d_sou_size_in_bits = offset;
1055 /* Add a member to the struct or union type that is being built in 'dcs'. */
1062 if (dcs->d_kind == DLK_UNION) {
1063 union_size = dcs->d_sou_size_in_bits;
1064 dcs->d_sou_size_in_bits = 0;
1070 mem->u.s_member.sm_offset_in_bits = dcs->d_sou_size_in_bits
1071 - dcs->d_sou_size_in_bits % size_in_bits(tp->t_tspec);
1072 tp->t_bit_field_offset = dcs->d_sou_size_in_bits
1074 dcs->d_sou_size_in_bits += tp->t_bit_field_width;
1076 unsigned int align = dcs->d_mem_align > 0
1077 ? dcs->d_mem_align : alignment(tp);
1079 mem->u.s_member.sm_offset_in_bits = dcs->d_sou_size_in_bits;
1080 dcs->d_sou_size_in_bits += type_size_in_bits(tp);
1083 if (union_size > dcs->d_sou_size_in_bits)
1084 dcs->d_sou_size_in_bits = union_size;
1096 mem->s_scl = dcs->d_kind == DLK_STRUCT ? STRUCT_MEMBER : UNION_MEMBER;
1098 mem->s_type = dcs->d_type;
1099 mem->u.s_member.sm_containing_type = dcs->d_tag_type->u.sou;
1112 sym_t *rdsym = dcs->d_redeclared_symbol;
1167 lint_assert(dcs->d_tag_type->u.sou != NULL);
1168 dsym->u.s_member.sm_containing_type = dcs->d_tag_type->u.sou;
1226 while (*tpp != dcs->d_type) {
1232 *tpp = block_derive_pointer(dcs->d_type,
1287 while (*tpp != dcs->d_type) {
1292 *tpp = block_derive_array(dcs->d_type, has_dim, dim);
1325 for (sym_t *sym = dcs->d_first_dlsym;
1351 if (dcs->d_enclosing->d_kind == DLK_EXTERN &&
1352 decl->s_type == dcs->d_enclosing->d_type) {
1404 * symbols is stored in dcs->d_enclosing->d_func_proto_syms. Also, a
1406 * dcs->d_enclosing->d_func_params. (dcs->d_enclosing must be used
1407 * because *dcs is the declaration stack element created for the list
1410 if (dcs->d_enclosing->d_kind == DLK_EXTERN &&
1411 decl->s_type == dcs->d_enclosing->d_type) {
1412 dcs->d_enclosing->d_func_proto_syms = dcs->d_first_dlsym;
1413 dcs->d_enclosing->d_func_params = params.first;
1419 while (*tpp != dcs->d_enclosing->d_type) {
1424 *tpp = block_derive_function(dcs->d_enclosing->d_type,
1426 params.noreturn || dcs->d_enclosing->d_noreturn);
1458 dcs->d_redeclared_symbol = NULL;
1461 dcs->d_redeclared_symbol = NULL;
1463 dcs->d_redeclared_symbol = sym;
1465 && sym->s_scl == STATIC && dcs->d_scl != STATIC) {
1473 switch (dcs->d_kind) {
1476 sym->u.s_member.sm_containing_type = dcs->d_tag_type->u.sou;
1478 sc = dcs->d_kind == DLK_STRUCT ? STRUCT_MEMBER : UNION_MEMBER;
1487 sc = dcs->d_scl;
1504 lint_assert(dcs->d_scl == NO_SCL || dcs->d_scl == REG);
1505 sym->s_register = dcs->d_scl == REG;
1510 if ((sc = dcs->d_scl) == NO_SCL) {
1532 lint_assert(dcs->d_kind == DLK_ABSTRACT);
1538 sym->s_type = dcs->d_type;
1539 if (dcs->d_used)
1542 dcs->d_func_proto_syms = NULL;
1593 dcs->d_enclosing->d_nonempty_decl = true;
1600 dcs->d_enclosing->d_nonempty_decl = true;
1609 dcs->d_enclosing->d_nonempty_decl = true;
1619 dcs->d_enclosing->d_nonempty_decl = true;
1621 dcs->d_enclosing->d_nonempty_decl = true;
1655 dcs->d_enclosing->d_nonempty_decl = true;
1668 tp->t_packed = dcs->d_packed;
1680 tp->t_packed = dcs->d_packed;
1681 dcs->d_enclosing->d_nonempty_decl = true;
1724 type_t *tp = dcs->d_tag_type;
1728 dcs_align(dcs->d_sou_align, 0);
1731 sou->sou_align = dcs->d_sou_align;
1737 sou->sou_size_in_bits = dcs->d_sou_size_in_bits;
1754 type_t *tp = dcs->d_tag_type;
1792 sym->s_type = dcs->d_tag_type;
1818 dcs->d_redeclared_symbol == NULL &&
1854 if (dcs->d_kind == DLK_EXTERN)
1947 if (dcs->d_inline) {
1970 sym_t *rdsym = dcs->d_redeclared_symbol;
2058 if (dcs->d_kind == DLK_EXTERN)
2060 else if (dcs->d_kind == DLK_OLD_STYLE_PARAMS ||
2061 dcs->d_kind == DLK_PROTO_PARAMS) {
2068 lint_assert(dcs->d_kind == DLK_AUTO);
2102 sym_t *rdsym = dcs->d_redeclared_symbol;
2344 if (dcs->d_redeclared_symbol != NULL &&
2345 dcs->d_redeclared_symbol->s_block_level == block_level) {
2348 symtab_remove_forever(dcs->d_redeclared_symbol);
2377 if (dcs->d_inline)
2395 sym->s_used = dcs->d_used;
2436 for (const sym_t *p = dcs->d_func_params; p != NULL; p = p->s_next)
2465 const sym_t *param = dcs->d_func_params;
2562 message_at(285, &dcs->d_redeclared_symbol->s_def_pos);
2634 sym_t *esym = dcs->d_redeclared_symbol;
2688 if (dcs->d_scl == NO_SCL)
2715 if (dcs->d_inline) {
2734 if (dcs->d_redeclared_symbol != NULL && dsym->s_scl == EXTERN)
2748 if (dcs->d_redeclared_symbol != NULL)
2749 check_local_redeclaration(dsym, dcs->d_redeclared_symbol);
2775 lint_assert(dcs->d_kind == DLK_ABSTRACT
2776 || dcs->d_kind == DLK_PROTO_PARAMS);
2783 sym->s_param = dcs->d_kind == DLK_PROTO_PARAMS;
2786 * At this point, dcs->d_type contains only the basic type. That type
2790 sym->s_type = enclosing ? dcs->d_enclosing->d_type : dcs->d_type;
2791 dcs->d_redeclared_symbol = NULL;
2816 while (dcs->d_enclosing != NULL)
3010 if (zflag || dcs->d_kind != DLK_EXTERN)
3137 if (block_level != 0 || dcs->d_enclosing != NULL)
3140 for (const sym_t *sym = dcs->d_first_dlsym;
3198 if (tn->tn_op != CON && dcs->d_kind != DLK_ABSTRACT)