diff options
Diffstat (limited to 'tccgen.c')
| -rw-r--r-- | tccgen.c | 220 |
1 files changed, 110 insertions, 110 deletions
@@ -1,6 +1,6 @@ /* * TCC - Tiny C Compiler - * + * * Copyright (c) 2001-2004 Fabrice Bellard * * This library is free software; you can redistribute it and/or @@ -299,7 +299,7 @@ static void weaken_symbol(Sym *sym) if (sym->c > 0) { int esym_type; ElfW(Sym) *esym; - + esym = &((ElfW(Sym) *)symtab_section->data)[sym->c]; esym_type = ELFW(ST_TYPE)(esym->st_info); esym->st_info = ELFW(ST_INFO)(STB_WEAK, esym_type); @@ -321,7 +321,7 @@ static void apply_visibility(Sym *sym, CType *type) if (sym->c > 0) { ElfW(Sym) *esym; - + esym = &((ElfW(Sym) *)symtab_section->data)[sym->c]; vis >>= VT_VIS_SHIFT; esym->st_other = (esym->st_other & ~ELFW(ST_VISIBILITY)(-1)) | vis; @@ -425,7 +425,7 @@ ST_FUNC Sym *get_sym_ref(CType *type, Section *sec, unsigned long offset, unsign /* push a reference to a section offset by adding a dummy symbol */ static void vpush_ref(CType *type, Section *sec, unsigned long offset, unsigned long size) { - vpushsym(type, get_sym_ref(type, sec, offset, size)); + vpushsym(type, get_sym_ref(type, sec, offset, size)); } /* define a new external reference to a symbol 'v' of type 'u' */ @@ -461,7 +461,7 @@ static Sym *external_sym(int v, CType *type, int r, char *asm_label) s->r = r | VT_CONST | VT_SYM; s->type.t |= VT_EXTERN; } else if (!is_compatible_types(&s->type, type)) { - tcc_error("incompatible types for redefinition of '%s'", + tcc_error("incompatible types for redefinition of '%s'", get_tok_str(v, NULL)); } /* Merge some storage attributes. */ @@ -600,7 +600,7 @@ ST_FUNC int get_reg_ex(int rc, int rc2) { int r; SValue *p; - + for(r=0;r<NB_REGS;r++) { if (reg_classes[r] & rc2) { int n; @@ -636,7 +636,7 @@ ST_FUNC int get_reg(int rc) } notfound: ; } - + /* no register left : free the first one on the stack (VERY IMPORTANT to start from the bottom to ensure that we don't spill registers used in gen_opi()) */ @@ -761,7 +761,7 @@ ST_FUNC int gv(int rc) gen_op(TOK_SAR); r = gv(rc); } else { - if (is_float(vtop->type.t) && + if (is_float(vtop->type.t) && (vtop->r & (VT_VALMASK | VT_LVAL)) == VT_CONST) { Sym *sym; int *ptr; @@ -769,7 +769,7 @@ ST_FUNC int gv(int rc) #if defined(TCC_TARGET_ARM) && !defined(TCC_ARM_VFP) CValue check; #endif - + /* XXX: unify with initializers handling ? */ /* CPUs usually cannot use float constants, so we store them generically in data segment */ @@ -803,7 +803,7 @@ ST_FUNC int gv(int rc) vtop->c.ptr_offset = 0; } #ifdef CONFIG_TCC_BCHECK - if (vtop->r & VT_MUSTBOUND) + if (vtop->r & VT_MUSTBOUND) gbound(); #endif @@ -921,7 +921,7 @@ ST_FUNC int gv(int rc) vtop->r = r; #ifdef TCC_TARGET_C67 /* uses register pairs for doubles */ - if ((vtop->type.t & VT_BTYPE) == VT_DOUBLE) + if ((vtop->type.t & VT_BTYPE) == VT_DOUBLE) vtop->r2 = r+1; #endif } @@ -1036,7 +1036,7 @@ static void lbuild(int t) vpop(); } -/* rotate n first stack elements to the bottom +/* rotate n first stack elements to the bottom I1 ... In -> I2 ... In I1 [top is right] */ ST_FUNC void vrotb(int n) @@ -1476,7 +1476,7 @@ static void gen_opic(int op) vtop--; } else { /* if commutative ops, put c2 as constant */ - if (c1 && (op == '+' || op == '&' || op == '^' || + if (c1 && (op == '+' || op == '&' || op == '^' || op == '|' || op == '*')) { vswap(); c2 = c1; //c = c1, c1 = c2, c2 = c; @@ -1582,13 +1582,13 @@ static void gen_opif(int op) case '+': f1 += f2; break; case '-': f1 -= f2; break; case '*': f1 *= f2; break; - case '/': + case '/': if (f2 == 0.0) { if (const_wanted) tcc_error("division by zero in constant"); goto general_case; } - f1 /= f2; + f1 /= f2; break; /* XXX: also handles tests ? */ default: @@ -1636,7 +1636,7 @@ static inline int is_null_pointer(SValue *p) static inline int is_integer_btype(int bt) { - return (bt == VT_BYTE || bt == VT_SHORT || + return (bt == VT_BYTE || bt == VT_SHORT || bt == VT_INT || bt == VT_LLONG); } @@ -1645,7 +1645,7 @@ static void check_comparison_pointer_types(SValue *p1, SValue *p2, int op) { CType *type1, *type2, tmp_type1, tmp_type2; int bt1, bt2; - + /* null pointers are accepted for all comparisons as gcc */ if (is_null_pointer(p1) || is_null_pointer(p2)) return; @@ -1663,16 +1663,16 @@ static void check_comparison_pointer_types(SValue *p1, SValue *p2, int op) /* both must be pointers or implicit function pointers */ if (bt1 == VT_PTR) { type1 = pointed_type(type1); - } else if (bt1 != VT_FUNC) + } else if (bt1 != VT_FUNC) goto invalid_operands; if (bt2 == VT_PTR) { type2 = pointed_type(type2); - } else if (bt2 != VT_FUNC) { + } else if (bt2 != VT_FUNC) { invalid_operands: tcc_error("invalid operands to binary %s", get_tok_str(op, NULL)); } - if ((type1->t & VT_BTYPE) == VT_VOID || + if ((type1->t & VT_BTYPE) == VT_VOID || (type2->t & VT_BTYPE) == VT_VOID) return; tmp_type1 = *type1; @@ -1698,7 +1698,7 @@ ST_FUNC void gen_op(int op) t2 = vtop[0].type.t; bt1 = t1 & VT_BTYPE; bt2 = t2 & VT_BTYPE; - + if (bt1 == VT_PTR || bt2 == VT_PTR) { /* at least one operand is a pointer */ /* relationnal op: must be both pointers */ @@ -1729,7 +1729,7 @@ ST_FUNC void gen_op(int op) #if defined(TCC_TARGET_ARM64) || defined(TCC_TARGET_X86_64) vtop->type.t = VT_LLONG; #else - vtop->type.t = VT_INT; + vtop->type.t = VT_INT; #endif vswap(); gen_op(TOK_PDIV); @@ -1770,7 +1770,7 @@ ST_FUNC void gen_op(int op) fprintf(stderr, "v+i-j = %p\n", v+i-j); fprintf(stderr, "v+(i-j) = %p\n", v+(i-j)); } - When this code is on. then the output looks like + When this code is on. then the output looks like v+i-j = 0xfffffffe v+(i-j) = 0xbff84000 */ @@ -1880,7 +1880,7 @@ static void gen_cvt_itof1(int t) #ifdef TCC_TARGET_ARM64 gen_cvt_itof(t); #else - if ((vtop->type.t & (VT_BTYPE | VT_UNSIGNED)) == + if ((vtop->type.t & (VT_BTYPE | VT_UNSIGNED)) == (VT_LLONG | VT_UNSIGNED)) { if (t == VT_FLOAT) @@ -2127,7 +2127,7 @@ static void gen_cast(CType *type) /* scalar to bool */ vpushi(0); gen_op(TOK_NE); - } else if ((dbt & VT_BTYPE) == VT_BYTE || + } else if ((dbt & VT_BTYPE) == VT_BYTE || (dbt & VT_BTYPE) == VT_SHORT) { if (sbt == VT_PTR) { vtop->type.t = VT_INT; @@ -2140,7 +2140,7 @@ static void gen_cast(CType *type) /* from long long: just take low order word */ lexpand(); vpop(); - } + } /* if lvalue and single word type, nothing to do because the lvalue already contains the real type size (see VT_LVAL_xxx constants) */ @@ -2194,7 +2194,7 @@ ST_FUNC int type_size(CType *type, int *a) #endif #elif defined(TCC_TARGET_ARM) #ifdef TCC_ARM_EABI - *a = 8; + *a = 8; #else *a = 4; #endif @@ -2289,7 +2289,7 @@ static int is_compatible_func(CType *type1, CType *type2) /* return true if type1 and type2 are the same. If unqualified is true, qualifiers on the types are ignored. - - enums are not checked as gcc __builtin_types_compatible_p () + - enums are not checked as gcc __builtin_types_compatible_p () */ static int compare_types(CType *type1, CType *type2, int unqualified) { @@ -2326,7 +2326,7 @@ static int compare_types(CType *type1, CType *type2, int unqualified) } /* return true if type1 and type2 are exactly the same (including - qualifiers). + qualifiers). */ static int is_compatible_types(CType *type1, CType *type2) { @@ -2344,7 +2344,7 @@ static int is_compatible_parameter_types(CType *type1, CType *type2) printed in the type */ /* XXX: union */ /* XXX: add array and function pointers */ -static void type_to_str(char *buf, int buf_size, +static void type_to_str(char *buf, int buf_size, CType *type, const char *varstr) { int bt, v, t; @@ -2487,7 +2487,7 @@ static void gen_assign_cast(CType *dt) if (sbt != VT_PTR) goto error; type2 = pointed_type(st); - if ((type1->t & VT_BTYPE) == VT_VOID || + if ((type1->t & VT_BTYPE) == VT_VOID || (type2->t & VT_BTYPE) == VT_VOID) { /* void * can match anything */ } else { @@ -2716,7 +2716,7 @@ ST_FUNC void inc(int post, int c) vrotb(3); } /* add constant */ - vpushi(c - TOK_MID); + vpushi(c - TOK_MID); gen_op('+'); vstore(); /* store value */ if (post) @@ -2734,7 +2734,7 @@ ST_FUNC void inc(int post, int c) static void parse_attribute(AttributeDef *ad) { int t, n; - + while (tok == TOK_ATTRIBUTE1 || tok == TOK_ATTRIBUTE2) { next(); skip('('); @@ -2787,7 +2787,7 @@ static void parse_attribute(AttributeDef *ad) if (tok == '(') { next(); n = expr_const(); - if (n <= 0 || (n & (n - 1)) != 0) + if (n <= 0 || (n & (n - 1)) != 0) tcc_error("alignment must be a positive power of two"); skip(')'); } else { @@ -2828,7 +2828,7 @@ static void parse_attribute(AttributeDef *ad) case TOK_REGPARM2: skip('('); n = expr_const(); - if (n > 3) + if (n > 3) n = 3; else if (n < 0) n = 0; @@ -2840,7 +2840,7 @@ static void parse_attribute(AttributeDef *ad) case TOK_FASTCALL2: case TOK_FASTCALL3: ad->a.func_call = FUNC_FASTCALLW; - break; + break; #endif case TOK_MODE: skip('('); @@ -2874,9 +2874,9 @@ static void parse_attribute(AttributeDef *ad) if (tok == '(') { int parenthesis = 0; do { - if (tok == '(') + if (tok == '(') parenthesis++; - else if (tok == ')') + else if (tok == ')') parenthesis--; next(); } while (parenthesis && tok != -1); @@ -2928,7 +2928,7 @@ static void struct_decl(CType *type, int u, int tdef) do_decl: type->t = u; type->ref = s; - + if (tok == '{') { next(); if (s->c != -1) @@ -3001,7 +3001,7 @@ static void struct_decl(CType *type, int u, int tdef) } if ((type1.t & VT_BTYPE) == VT_FUNC || (type1.t & (VT_TYPEDEF | VT_STATIC | VT_EXTERN | VT_INLINE))) - tcc_error("invalid type for '%s'", + tcc_error("invalid type for '%s'", get_tok_str(v, NULL)); } if (tok == ':') { @@ -3009,10 +3009,10 @@ static void struct_decl(CType *type, int u, int tdef) bit_size = expr_const(); /* XXX: handle v = 0 case for messages */ if (bit_size < 0) - tcc_error("negative width in bit-field '%s'", + tcc_error("negative width in bit-field '%s'", get_tok_str(v, NULL)); if (v && bit_size == 0) - tcc_error("zero width for bit-field '%s'", + tcc_error("zero width for bit-field '%s'", get_tok_str(v, NULL)); } size = type_size(&type1, &align); @@ -3028,8 +3028,8 @@ static void struct_decl(CType *type, int u, int tdef) lbit_pos = 0; if (bit_size >= 0) { bt = type1.t & VT_BTYPE; - if (bt != VT_INT && - bt != VT_BYTE && + if (bt != VT_INT && + bt != VT_BYTE && bt != VT_SHORT && bt != VT_BOOL && bt != VT_ENUM && @@ -3056,7 +3056,7 @@ static void struct_decl(CType *type, int u, int tdef) bit_pos = 0; lbit_pos = bit_pos; /* XXX: handle LSB first */ - type1.t |= VT_BITFIELD | + type1.t |= VT_BITFIELD | (bit_pos << VT_STRUCT_SHIFT) | (bit_size << (VT_STRUCT_SHIFT + 6)); bit_pos += bit_size; @@ -3083,10 +3083,10 @@ static void struct_decl(CType *type, int u, int tdef) maxalign = align; } #if 0 - printf("add field %s offset=%d", + printf("add field %s offset=%d", get_tok_str(v, NULL), offset); if (type1.t & VT_BITFIELD) { - printf(" pos=%d size=%d", + printf(" pos=%d size=%d", (type1.t >> VT_STRUCT_SHIFT) & 0x3f, (type1.t >> (VT_STRUCT_SHIFT + 6)) & 0x3f); } @@ -3113,7 +3113,7 @@ static void struct_decl(CType *type, int u, int tdef) } skip('}'); /* store size and alignment */ - s->c = (c + maxalign - 1) & -maxalign; + s->c = (c + maxalign - 1) & -maxalign; s->r = maxalign; } } @@ -3126,7 +3126,7 @@ ST_FUNC int is_btype_size(int bt) } /* return 0 if no type declaration. otherwise, return the basic type - and skip it. + and skip it. */ static int parse_btype(CType *type, AttributeDef *ad) { @@ -3436,9 +3436,9 @@ static void post_type(CType *type, AttributeDef *ad) skip(')'); /* NOTE: const is ignored in returned type as it has a special meaning in gcc / C++ */ - type->t &= ~VT_CONSTANT; + type->t &= ~VT_CONSTANT; /* some ancient pre-K&R C allows a function to return an array - and the array brackets to be put after the arguments, such + and the array brackets to be put after the arguments, such that "int c()[]" means something like "int[] c()" */ if (tok == '[') { next(); @@ -3479,7 +3479,7 @@ static void post_type(CType *type, AttributeDef *ad) if (type->t == VT_FUNC) tcc_error("declaration of an array of functions"); t1 |= type->t & VT_VLA; - + if (t1 & VT_VLA) { loc -= type_size(&int_type, &align); loc &= -align; @@ -3493,7 +3493,7 @@ static void post_type(CType *type, AttributeDef *ad) } if (n != -1) vpop(); - + /* we push an anonymous symbol which will contain the array element type */ s = sym_push(SYM_FIELD, type, 0, n); @@ -3506,7 +3506,7 @@ static void post_type(CType *type, AttributeDef *ad) in 'type'. 'td' is a bitmask indicating which kind of type decl is expected. 'type' should contain the basic type. 'ad' is the attribute definition of the basic type. It can be modified by - type_decl(). + type_decl(). */ static void type_decl(CType *type, AttributeDef *ad, int *v, int td) { @@ -3537,7 +3537,7 @@ static void type_decl(CType *type, AttributeDef *ad, int *v, int td) mk_pointer(type); type->t |= qualifiers; } - + /* XXX: clarify attribute handling */ if (tok == TOK_ATTRIBUTE1 || tok == TOK_ATTRIBUTE2) parse_attribute(ad); @@ -3576,7 +3576,7 @@ static void type_decl(CType *type, AttributeDef *ad, int *v, int td) type->t |= storage; if (tok == TOK_ATTRIBUTE1 || tok == TOK_ATTRIBUTE2) parse_attribute(ad); - + if (!type1.t) return; /* append type at the end of type1 */ @@ -3711,7 +3711,7 @@ ST_FUNC void unary(void) next(); goto tok_next; case TOK_CINT: - case TOK_CCHAR: + case TOK_CCHAR: case TOK_LCHAR: vpushi(tokc.i); next(); @@ -3814,7 +3814,7 @@ ST_FUNC void unary(void) linux/include/net/tcp.h:945: error: statement expression in global scope */ /* save all registers */ - save_regs(0); + save_regs(0); /* statement expression : we do not accept break/continue inside as GCC does */ block(NULL, NULL, NULL, NULL, 0, 1); @@ -4087,7 +4087,7 @@ ST_FUNC void unary(void) vpushsym(&s->type, s); next(); break; - + // special qnan , snan and infinity values case TOK___NAN__: vpush64(VT_DOUBLE, 0x7ff8000000000000ULL); @@ -4123,7 +4123,7 @@ ST_FUNC void unary(void) #endif ) tcc_warning("implicit declaration of function '%s'", name); - s = external_global_sym(t, &func_old_type, 0); + s = external_global_sym(t, &func_old_type, 0); } if ((s->type.t & (VT_STATIC | VT_INLINE | VT_BTYPE)) == (VT_STATIC | VT_INLINE | VT_FUNC)) { @@ -4146,7 +4146,7 @@ ST_FUNC void unary(void) } break; } - + /* post operations */ while (1) { if (tok == TOK_INC || tok == TOK_DEC) { @@ -4154,8 +4154,8 @@ ST_FUNC void unary(void) next(); } else if (tok == '.' || tok == TOK_ARROW) { int qualifiers; - /* field */ - if (tok == TOK_ARROW) + /* field */ + if (tok == TOK_ARROW) indir(); qualifiers = vtop->type.t & (VT_CONSTANT | VT_VOLATILE); test_lvalue(); @@ -4637,7 +4637,7 @@ static void expr_cond(void) (t2 & (VT_BTYPE | VT_UNSIGNED)) == (VT_INT | VT_UNSIGNED)) type.t |= VT_UNSIGNED; } - + /* now we convert second operand */ gen_cast(&type); if (VT_STRUCT == (vtop->type.t & VT_BTYPE)) @@ -4653,9 +4653,9 @@ static void expr_cond(void) } else if ((type.t & VT_BTYPE) == VT_LLONG) { /* for long longs, we use fixed registers to avoid having to handle a complicated move */ - rc = RC_IRET; + rc = RC_IRET; } - + r2 = gv(rc); /* this is horrible, but we must also convert first operand */ @@ -4677,7 +4677,7 @@ static void expr_cond(void) static void expr_eq(void) { int t; - + expr_cond(); if (tok == '=' || (tok >= TOK_A_MOD && tok <= TOK_A_DIV) || @@ -4797,7 +4797,7 @@ static void label_or_decl(int l) decl(l); } -static void block(int *bsym, int *csym, int *case_sym, int *def_sym, +static void block(int *bsym, int *csym, int *case_sym, int *def_sym, int case_reg, int is_expr) { int a, b, c, d; @@ -4858,7 +4858,7 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, frame_bottom->next = scope_stack_bottom; scope_stack_bottom = frame_bottom; llabel = local_label_stack; - + /* handle local labels declarations */ if (tok == TOK_LABEL) { next(); @@ -4906,14 +4906,14 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, /* pop locally defined symbols */ scope_stack_bottom = scope_stack_bottom->next; sym_pop(&local_stack, s); - + /* Pop VLA frames and restore stack pointer if required */ if (vlas_in_scope > saved_vlas_in_scope) { vla_sp_loc = saved_vlas_in_scope ? block_vla_sp_loc : vla_sp_root_loc; vla_sp_restore(); } vlas_in_scope = saved_vlas_in_scope; - + next(); } else if (tok == TOK_RETURN) { next(); @@ -5080,7 +5080,7 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, gsym_addr(b, c); scope_stack_bottom = scope_stack_bottom->next; sym_pop(&local_stack, s); - } else + } else if (tok == TOK_DO) { next(); a = 0; @@ -5154,7 +5154,7 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, skip(':'); is_expr = 0; goto block_after_label; - } else + } else if (tok == TOK_DEFAULT) { next(); skip(':'); @@ -5185,7 +5185,7 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, s->r = LABEL_FORWARD; } vla_sp_restore_root(); - if (s->r & LABEL_FORWARD) + if (s->r & LABEL_FORWARD) s->jnext = gjmp(s->jnext); else gjmp_addr(s->jnext); @@ -5240,8 +5240,8 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, address. cur_index/cur_field is the pointer to the current value. 'size_only' is true if only size info is needed (only used in arrays) */ -static void decl_designator(CType *type, Section *sec, unsigned long c, - int *cur_index, Sym **cur_field, +static void decl_designator(CType *type, Section *sec, unsigned long c, + int *cur_index, Sym **cur_field, int size_only) { Sym *s, *f; @@ -5265,7 +5265,7 @@ static void decl_designator(CType *type, Section *sec, unsigned long c, if (tok == TOK_DOTS && gnu_ext) { next(); index_last = expr_const(); - if (index_last < 0 || + if (index_last < 0 || (s->c >= 0 && index_last >= s->c) || index_last < index) expect("invalid index"); @@ -5361,7 +5361,7 @@ static void decl_designator(CType *type, Section *sec, unsigned long c, #define EXPR_ANY 2 /* store a value or an expression directly in global data or in local array */ -static void init_putv(CType *type, Section *sec, unsigned long c, +static void init_putv(CType *type, Section *sec, unsigned long c, int v, int expr_type) { int saved_global_expr, bt, bit_pos, bit_size; @@ -5387,7 +5387,7 @@ static void init_putv(CType *type, Section *sec, unsigned long c, expr_eq(); break; } - + dtype = *type; dtype.t &= ~VT_CONSTANT; /* need to do that to avoid false warning */ @@ -5502,7 +5502,7 @@ static void init_putz(CType *t, Section *sec, unsigned long c, int size) allocation. 'first' is true if array '{' must be read (multi dimension implicit array init handling). 'size_only' is true if size only evaluation is wanted (only for arrays). */ -static void decl_initializer(CType *type, Section *sec, unsigned long c, +static void decl_initializer(CType *type, Section *sec, unsigned long c, int first, int size_only) { int index, array_length, n, no_oblock, nb, parlevel, parlevel1, i; @@ -5512,14 +5512,14 @@ static void decl_initializer(CType *type, Section *sec, unsigned long c, if (type->t & VT_VLA) { int a; - + /* save current stack pointer */ if (vlas_in_scope == 0) { if (vla_sp_root_loc == -1) vla_sp_root_loc = (loc -= PTR_SIZE); gen_vla_sp_save(vla_sp_root_loc); } - + vla_runtime_type_size(type, &a); gen_vla_alloc(type, a); gen_vla_sp_save(c); @@ -5533,7 +5533,7 @@ static void decl_initializer(CType *type, Section *sec, unsigned long c, size1 = type_size(t1, &align1); no_oblock = 1; - if ((first && tok != TOK_LSTR && tok != TOK_STR) || + if ((first && tok != TOK_LSTR && tok != TOK_STR) || tok == '{') { if (tok != '{') tcc_error("character array initializer must be a literal," @@ -5544,7 +5544,7 @@ static void decl_initializer(CType *type, Section *sec, unsigned long c, /* only parse strings here if correct type (otherwise: handle them as ((w)char *) expressions */ - if ((tok == TOK_LSTR && + if ((tok == TOK_LSTR && #ifdef TCC_TARGET_PE (t1->t & VT_BTYPE) == VT_SHORT && (t1->t & VT_UNSIGNED) #else @@ -5604,7 +5604,7 @@ static void decl_initializer(CType *type, Section *sec, unsigned long c, /* must put zero in holes (note that doing it that way ensures that it even works with designators) */ if (!size_only && array_length < index) { - init_putz(t1, sec, c + array_length * size1, + init_putz(t1, sec, c + array_length * size1, (index - array_length) * size1); } index++; @@ -5624,7 +5624,7 @@ static void decl_initializer(CType *type, Section *sec, unsigned long c, skip('}'); /* put zeros at the end */ if (!size_only && n >= 0 && array_length < n) { - init_putz(t1, sec, c + array_length * size1, + init_putz(t1, sec, c + array_length * size1, (n - array_length) * size1); } /* patch type size if needed */ @@ -5690,7 +5690,7 @@ static void decl_initializer(CType *type, Section *sec, unsigned long c, decl_designator(type, sec, c, NULL, &f, size_only); index = f->c; if (!size_only && array_length < index) { - init_putz(type, sec, c + array_length, + init_putz(type, sec, c + array_length, index - array_length); } index = index + type_size(&f->type, &align1); @@ -5743,7 +5743,7 @@ static void decl_initializer(CType *type, Section *sec, unsigned long c, } /* put zeros at the end */ if (!size_only && array_length < n) { - init_putz(type, sec, c + array_length, + init_putz(type, sec, c + array_length, n - array_length); } if (!no_oblock) @@ -5795,7 +5795,7 @@ static void decl_initializer(CType *type, Section *sec, unsigned long c, zero, then a reference to the new object is put in the value stack. If 'has_init' is 2, a special parsing is done to handle string constants. */ -static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r, +static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r, int has_init, int v, char *asm_label, int scope) { @@ -5826,7 +5826,7 @@ static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r, initializers handling */ tok_str_new(&init_str); if (size < 0 || (flexible_array && has_init)) { - if (!has_init) + if (!has_init) tcc_error("unknown type size"); /* get all init string */ if (has_init == 2) { @@ -5855,7 +5855,7 @@ static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r, } tok_str_add(&init_str, -1); tok_str_add(&init_str, 0); - + /* compute size */ save_parse_state(&saved_parse_state); @@ -5865,10 +5865,10 @@ static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r, /* prepare second initializer parsing */ macro_ptr = init_str.str; next(); - + /* if still unknown size, error */ size = type_size(type, &align); - if (size < 0) + if (size < 0) tcc_error("unknown type size"); } if (flexible_array) @@ -5919,14 +5919,14 @@ static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r, sym = sym_find(v); if (sym) { if (!is_compatible_types(&sym->type, type)) - tcc_error("incompatible types for redefinition of '%s'", + tcc_error("incompatible types for redefinition of '%s'", get_tok_str(v, NULL)); if (sym->type.t & VT_EXTERN) { /* if the variable is extern, it was not allocated */ sym->type.t &= ~VT_EXTERN; /* set array size if it was omitted in extern declaration */ - if ((sym->type.t & VT_ARRAY) && + if ((sym->type.t & VT_ARRAY) && sym->type.ref->c < 0 && type->ref->c >= 0) sym->type.ref->c = type->ref->c; @@ -5966,7 +5966,7 @@ static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r, #endif sec->data_offset = data_offset; /* allocate section space to put the data */ - if (sec->sh_type != SHT_NOBITS && + if (sec->sh_type != SHT_NOBITS && data_offset > sec->data_allocated) section_realloc(sec, data_offset); /* align section if needed */ @@ -6036,12 +6036,12 @@ static void put_func_debug(Sym *sym) /* stabs info */ /* XXX: we put here a dummy type */ - snprintf(buf, sizeof(buf), "%s:%c1", + snprintf(buf, sizeof(buf), "%s:%c1", funcname, sym->type.t & VT_STATIC ? 'f' : 'F'); put_stabs_r(buf, N_FUN, 0, file->line_num, 0, cur_text_section, sym->c); /* //gr gdb wants a line at the function */ - put_stabn(N_SLINE, 0, file->line_num, 0); + put_stabn(N_SLINE, 0, file->line_num, 0); last_ind = 0; last_line_num = 0; } @@ -6058,10 +6058,10 @@ static void func_decl_list(Sym *func_sym) /* parse each declaration */ while (tok != '{' && tok != ';' && tok != ',' && tok != TOK_EOF && tok != TOK_ASM1 && tok != TOK_ASM2 && tok != TOK_ASM3) { - if (!parse_btype(&btype, &ad)) + if (!parse_btype(&btype, &ad)) expect("declaration list"); if (((btype.t & VT_BTYPE) == VT_ENUM || - (btype.t & VT_BTYPE) == VT_STRUCT) && + (btype.t & VT_BTYPE) == VT_STRUCT) && tok == ';') { /* we accept no variable after */ } else { @@ -6080,7 +6080,7 @@ static void func_decl_list(Sym *func_sym) found: /* check that no storage specifier except 'register' was given */ if (type.t & VT_STORAGE) - tcc_error("storage class specified for '%s'", get_tok_str(v, NULL)); + tcc_error("storage class specified for '%s'", get_tok_str(v, NULL)); convert_parameter_type(&type); /* we can add the type (NOTE: it could be local to the function) */ s->type = type; @@ -6140,7 +6140,7 @@ static void gen_function(Sym *sym) sym_pop(&local_stack, NULL); /* end of function */ /* patch symbol size */ - ((ElfW(Sym) *)symtab_section->data)[sym->c].st_size = + ((ElfW(Sym) *)symtab_section->data)[sym->c].st_size = ind - func_ind; /* patch symbol weakness (this definition overrules any prototype) */ if (sym->type.t & VT_WEAK) @@ -6234,7 +6234,7 @@ static int decl0(int l, int is_for_loop_init) btype.t = VT_INT; } if (((btype.t & VT_BTYPE) == VT_ENUM || - (btype.t & VT_BTYPE) == VT_STRUCT) && + (btype.t & VT_BTYPE) == VT_STRUCT) && tok == ';') { if ((btype.t & VT_BTYPE) == VT_STRUCT) { int v = btype.ref->v; @@ -6273,7 +6273,7 @@ static int decl0(int l, int is_for_loop_init) asm_label_instr(&astr); asm_label = tcc_strdup(astr.data); cstr_free(&astr); - + /* parse one last attribute list, after asm label */ parse_attribute(&ad); } @@ -6299,11 +6299,11 @@ static int decl0(int l, int is_for_loop_init) while ((sym = sym->next) != NULL) if (!(sym->v & ~SYM_FIELD)) expect("identifier"); - + /* XXX: cannot do better now: convert extern line to static inline */ if ((type.t & (VT_EXTERN | VT_INLINE)) == (VT_EXTERN | VT_INLINE)) type.t = (type.t & ~VT_EXTERN) | VT_STATIC; - + sym = sym_find(v); if (sym) { Sym *ref; @@ -6334,7 +6334,7 @@ static int decl0(int l, int is_for_loop_init) if (!is_compatible_types(&sym->type, &type)) { func_error1: - tcc_error("incompatible types for redefinition of '%s'", + tcc_error("incompatible types for redefinition of '%s'", get_tok_str(v, NULL)); } type.ref->a.func_proto = 0; @@ -6349,18 +6349,18 @@ static int decl0(int l, int is_for_loop_init) /* static inline functions are just recorded as a kind of macro. Their code will be emitted at the end of the compilation unit only if they are used */ - if ((type.t & (VT_INLINE | VT_STATIC)) == + if ((type.t & (VT_INLINE | VT_STATIC)) == (VT_INLINE | VT_STATIC)) { int block_level; struct InlineFunc *fn; const char *filename; - + filename = file ? file->filename : ""; fn = tcc_malloc(sizeof *fn + strlen(filename)); strcpy(fn->filename, filename); fn->sym = sym; tok_str_new(&fn->func_str); - + block_level = 0; for(;;) { int t; |
