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;
297 dcs->d_invalid_type_combination = true;
320 lint_assert(dcs->d_type == NULL);
321 lint_assert(dcs->d_abstract_type == NO_TSPEC);
322 lint_assert(dcs->d_sign_mod == NO_TSPEC);
323 lint_assert(dcs->d_rank_mod == NO_TSPEC);
325 dcs->d_type = tp;
333 if (dcs->d_type != NULL || dcs->d_abstract_type != NO_TSPEC ||
334 dcs->d_rank_mod != NO_TSPEC || dcs->d_sign_mod != NO_TSPEC) {
335 dcs->d_invalid_type_combination = true;
336 dcs->d_abstract_type = NO_TSPEC;
337 dcs->d_sign_mod = NO_TSPEC;
338 dcs->d_rank_mod = NO_TSPEC;
340 dcs->d_type = tp;
345 if (dcs->d_type != NULL && !dcs->d_type->t_typedef) {
347 dcs->d_invalid_type_combination = true;
353 if (dcs->d_complex_mod == FLOAT)
355 else if (dcs->d_complex_mod == DOUBLE)
362 dcs->d_complex_mod = NO_TSPEC;
365 if (t == LONG && dcs->d_rank_mod == LONG) {
368 dcs->d_rank_mod = NO_TSPEC;
374 if (dcs->d_type != NULL && dcs->d_type->t_typedef) {
376 dcs->d_type = typedef_error(dcs->d_type, t);
382 if (dcs->d_sign_mod != NO_TSPEC)
383 dcs->d_invalid_type_combination = true;
384 dcs->d_sign_mod = t;
390 if (dcs->d_rank_mod != NO_TSPEC)
391 dcs->d_invalid_type_combination = true;
392 dcs->d_rank_mod = t;
394 if (dcs->d_rank_mod == NO_TSPEC || dcs->d_rank_mod == LONG) {
395 if (dcs->d_complex_mod != NO_TSPEC
396 || (t == FLOAT && dcs->d_rank_mod == LONG))
397 dcs->d_invalid_type_combination = true;
398 dcs->d_complex_mod = t;
400 if (dcs->d_abstract_type != NO_TSPEC)
401 dcs->d_invalid_type_combination = true;
402 dcs->d_abstract_type = t;
405 dcs->d_type = tp;
407 if (dcs->d_abstract_type != NO_TSPEC)
408 dcs->d_invalid_type_combination = true;
409 dcs->d_abstract_type = t;
477 dcs->d_mem_align = to_int_constant(tn, true);
478 if (dcs->d_type != NULL && is_struct_or_union(dcs->d_type->t_tspec))
480 dcs->d_type->u.sou->sou_align = dcs->d_mem_align;
487 if (dcs->d_type == NULL)
488 dcs->d_packed = true;
490 pack_struct_or_union(dcs->d_type);
497 dcs->d_used = true;
509 add_type_qualifiers(&dcs->d_qual, qs);
519 dcs->d_noreturn = true;
522 dcs->d_rank_mod = INT128;
525 dcs->d_rank_mod = LLONG;
529 dcs->d_rank_mod = LLONG;
537 dl->d_enclosing = dcs;
540 dcs = dl;
551 decl_level *dl = dcs;
552 dcs = dl->d_enclosing;
553 lint_assert(dcs != NULL);
564 if ((*dcs->d_last_dlsym = dl->d_first_dlsym) != NULL)
565 dcs->d_last_dlsym = dl->d_last_dlsym;
569 * All symbols in dcs->d_first_dlsym are introduced in
576 *dl->d_last_dlsym = dcs->d_func_proto_syms;
577 dcs->d_func_proto_syms = dl->d_first_dlsym;
589 if ((*dcs->d_last_dlsym = dl->d_first_dlsym) != NULL)
590 dcs->d_last_dlsym = dl->d_last_dlsym;
627 for (decl_level *dl = dcs; dl != NULL; dl = dl->d_enclosing)
640 dcs->d_abstract_type = NO_TSPEC;
641 dcs->d_complex_mod = NO_TSPEC;
642 dcs->d_sign_mod = NO_TSPEC;
643 dcs->d_rank_mod = NO_TSPEC;
644 dcs->d_scl = NO_SCL;
645 dcs->d_type = NULL;
646 dcs->d_redeclared_symbol = NULL;
649 dcs->d_mem_align = 0;
650 dcs->d_qual = (type_qualifiers) { .tq_const = false };
651 dcs->d_inline = false;
652 dcs->d_multiple_storage_classes = false;
653 dcs->d_invalid_type_combination = false;
654 dcs->d_nonempty_decl = false;
655 dcs->d_no_type_specifier = false;
657 dcs->d_packed = false;
658 dcs->d_used = false;
659 dcs->d_noreturn = false;
661 dcs->d_func_params = NULL;
662 dcs->d_func_def_pos = (pos_t){ NULL, 0, 0 };
665 dcs->d_func_proto_syms = NULL;
674 if (dcs->d_kind == DLK_EXTERN) {
675 if (dcs->d_scl == REG || dcs->d_scl == AUTO) {
678 dcs->d_scl = NO_SCL;
680 } else if (dcs->d_kind == DLK_OLD_STYLE_PARAMS ||
681 dcs->d_kind == DLK_PROTO_PARAMS) {
682 if (dcs->d_scl != NO_SCL && dcs->d_scl != REG) {
685 dcs->d_scl = NO_SCL;
691 * Merge the declaration specifiers from dcs into dcs->d_type.
698 tspec_t t = dcs->d_abstract_type;
699 tspec_t c = dcs->d_complex_mod;
700 tspec_t s = dcs->d_sign_mod;
701 tspec_t l = dcs->d_rank_mod;
702 type_t *tp = dcs->d_type;
712 dcs->d_no_type_specifier = true;
721 dcs->d_invalid_type_combination = true;
744 dcs->d_invalid_type_combination = true;
749 dcs->d_type = gettyp(merge_signedness(t, s));
755 /* Create a type in 'dcs->d_type' from the information gathered in 'dcs'. */
762 if (dcs->d_multiple_storage_classes)
765 if (dcs->d_invalid_type_combination)
771 if (dcs->d_qual.tq_const && dcs->d_type->t_const
772 && !dcs->d_type->t_typeof) {
773 lint_assert(dcs->d_type->t_typedef);
777 if (dcs->d_qual.tq_volatile && dcs->d_type->t_volatile &&
778 !dcs->d_type->t_typeof) {
779 lint_assert(dcs->d_type->t_typedef);
784 if (dcs->d_qual.tq_const || dcs->d_qual.tq_volatile) {
785 dcs->d_type = block_dup_type(dcs->d_type);
786 dcs->d_type->t_const |= dcs->d_qual.tq_const;
787 dcs->d_type->t_volatile |= dcs->d_qual.tq_volatile;
789 unsigned align = dcs->d_mem_align;
790 if (align > 0 && dcs->d_type->t_tspec == STRUCT) {
792 dcs->d_type->u.sou->sou_align = align;
794 dcs->d_type->u.sou->sou_size_in_bits =
795 (dcs->d_type->u.sou->sou_size_in_bits + align_in_bits - 1)
955 if (dcs->d_kind == DLK_PROTO_PARAMS) {
962 } else if (dcs->d_kind == DLK_ABSTRACT) {
1015 } else if (t == INT && dcs->d_sign_mod == NO_TSPEC) {
1068 if (member_alignment > dcs->d_sou_align)
1069 dcs->d_sou_align = member_alignment;
1072 unsigned offset = (dcs->d_sou_size_in_bits + align_in_bits - 1)
1075 || dcs->d_sou_size_in_bits + bit_field_width > offset)
1076 dcs->d_sou_size_in_bits = offset;
1080 /* Add a member to the struct or union type that is being built in 'dcs'. */
1087 if (dcs->d_kind == DLK_UNION) {
1088 union_size = dcs->d_sou_size_in_bits;
1089 dcs->d_sou_size_in_bits = 0;
1095 mem->u.s_member.sm_offset_in_bits = dcs->d_sou_size_in_bits
1096 - dcs->d_sou_size_in_bits % size_in_bits(tp->t_tspec);
1097 tp->t_bit_field_offset = dcs->d_sou_size_in_bits
1099 dcs->d_sou_size_in_bits += tp->t_bit_field_width;
1101 unsigned int align = dcs->d_mem_align > 0
1102 ? dcs->d_mem_align : alignment(tp);
1104 mem->u.s_member.sm_offset_in_bits = dcs->d_sou_size_in_bits;
1105 dcs->d_sou_size_in_bits += type_size_in_bits(tp);
1108 if (union_size > dcs->d_sou_size_in_bits)
1109 dcs->d_sou_size_in_bits = union_size;
1121 mem->s_scl = dcs->d_kind == DLK_STRUCT ? STRUCT_MEMBER : UNION_MEMBER;
1123 mem->s_type = dcs->d_type;
1124 mem->u.s_member.sm_containing_type = dcs->d_tag_type->u.sou;
1137 sym_t *rdsym = dcs->d_redeclared_symbol;
1192 lint_assert(dcs->d_tag_type->u.sou != NULL);
1193 dsym->u.s_member.sm_containing_type = dcs->d_tag_type->u.sou;
1251 while (*tpp != dcs->d_type) {
1257 *tpp = block_derive_pointer(dcs->d_type,
1312 while (*tpp != dcs->d_type) {
1317 *tpp = block_derive_array(dcs->d_type, has_dim, dim);
1350 for (sym_t *sym = dcs->d_first_dlsym;
1376 if (dcs->d_enclosing->d_kind == DLK_EXTERN &&
1377 decl->s_type == dcs->d_enclosing->d_type) {
1429 * symbols is stored in dcs->d_enclosing->d_func_proto_syms. Also, a
1431 * dcs->d_enclosing->d_func_params. (dcs->d_enclosing must be used
1432 * because *dcs is the declaration stack element created for the list
1435 if (dcs->d_enclosing->d_kind == DLK_EXTERN &&
1436 decl->s_type == dcs->d_enclosing->d_type) {
1437 dcs->d_enclosing->d_func_proto_syms = dcs->d_first_dlsym;
1438 dcs->d_enclosing->d_func_params = params.first;
1444 while (*tpp != dcs->d_enclosing->d_type) {
1449 *tpp = block_derive_function(dcs->d_enclosing->d_type,
1451 params.noreturn || dcs->d_enclosing->d_noreturn);
1483 dcs->d_redeclared_symbol = NULL;
1486 dcs->d_redeclared_symbol = NULL;
1488 dcs->d_redeclared_symbol = sym;
1490 && sym->s_scl == STATIC && dcs->d_scl != STATIC) {
1498 switch (dcs->d_kind) {
1501 sym->u.s_member.sm_containing_type = dcs->d_tag_type->u.sou;
1503 sc = dcs->d_kind == DLK_STRUCT ? STRUCT_MEMBER : UNION_MEMBER;
1512 sc = dcs->d_scl;
1529 lint_assert(dcs->d_scl == NO_SCL || dcs->d_scl == REG);
1530 sym->s_register = dcs->d_scl == REG;
1535 if ((sc = dcs->d_scl) == NO_SCL) {
1557 lint_assert(dcs->d_kind == DLK_ABSTRACT);
1563 sym->s_type = dcs->d_type;
1564 if (dcs->d_used)
1567 dcs->d_func_proto_syms = NULL;
1618 dcs->d_enclosing->d_nonempty_decl = true;
1625 dcs->d_enclosing->d_nonempty_decl = true;
1634 dcs->d_enclosing->d_nonempty_decl = true;
1644 dcs->d_enclosing->d_nonempty_decl = true;
1646 dcs->d_enclosing->d_nonempty_decl = true;
1680 dcs->d_enclosing->d_nonempty_decl = true;
1693 tp->t_packed = dcs->d_packed;
1705 tp->t_packed = dcs->d_packed;
1706 dcs->d_enclosing->d_nonempty_decl = true;
1749 type_t *tp = dcs->d_tag_type;
1753 dcs_align(dcs->d_sou_align, 0);
1756 sou->sou_align = dcs->d_sou_align;
1762 sou->sou_size_in_bits = dcs->d_sou_size_in_bits;
1779 type_t *tp = dcs->d_tag_type;
1817 sym->s_type = dcs->d_tag_type;
1843 dcs->d_redeclared_symbol == NULL &&
1879 if (dcs->d_kind == DLK_EXTERN)
1972 if (dcs->d_inline) {
1995 sym_t *rdsym = dcs->d_redeclared_symbol;
2083 if (dcs->d_kind == DLK_EXTERN)
2085 else if (dcs->d_kind == DLK_OLD_STYLE_PARAMS ||
2086 dcs->d_kind == DLK_PROTO_PARAMS) {
2093 lint_assert(dcs->d_kind == DLK_AUTO);
2127 sym_t *rdsym = dcs->d_redeclared_symbol;
2368 if (dcs->d_redeclared_symbol != NULL &&
2369 dcs->d_redeclared_symbol->s_block_level == block_level) {
2372 symtab_remove_forever(dcs->d_redeclared_symbol);
2407 if (dcs->d_inline)
2425 sym->s_used = dcs->d_used;
2466 for (const sym_t *p = dcs->d_func_params; p != NULL; p = p->s_next)
2495 const sym_t *param = dcs->d_func_params;
2592 message_at(285, &dcs->d_redeclared_symbol->s_def_pos);
2664 sym_t *esym = dcs->d_redeclared_symbol;
2718 if (dcs->d_scl == NO_SCL)
2745 if (dcs->d_inline) {
2764 if (dcs->d_redeclared_symbol != NULL && dsym->s_scl == EXTERN)
2778 if (dcs->d_redeclared_symbol != NULL)
2779 check_local_redeclaration(dsym, dcs->d_redeclared_symbol);
2805 lint_assert(dcs->d_kind == DLK_ABSTRACT
2806 || dcs->d_kind == DLK_PROTO_PARAMS);
2813 sym->s_param = dcs->d_kind == DLK_PROTO_PARAMS;
2816 * At this point, dcs->d_type contains only the basic type. That type
2820 sym->s_type = enclosing ? dcs->d_enclosing->d_type : dcs->d_type;
2821 dcs->d_redeclared_symbol = NULL;
2846 while (dcs->d_enclosing != NULL)
3040 if (zflag || dcs->d_kind != DLK_EXTERN)
3167 if (block_level != 0 || dcs->d_enclosing != NULL)
3170 for (const sym_t *sym = dcs->d_first_dlsym;
3228 if (tn->tn_op != CON && dcs->d_kind != DLK_ABSTRACT)