mirror of
https://github.com/mirror/tinycc.git
synced 2025-01-15 05:20:06 +08:00
-fno-type-redefinition-check
don't catch redefinition for local vars. With this option on tcc accepts the following code: int main() { int a = 0; long a = 0; } But if you shure there is no problem with your local variables, then a compilation speed can be improved if you have a lots of the local variables (50000+)
This commit is contained in:
parent
78e4ee55b7
commit
2bfedb1867
1
libtcc.c
1
libtcc.c
@ -1764,6 +1764,7 @@ static const FlagDef flag_defs[] = {
|
|||||||
{ offsetof(TCCState, old_struct_init_code), 0, "old-struct-init-code" },
|
{ offsetof(TCCState, old_struct_init_code), 0, "old-struct-init-code" },
|
||||||
{ offsetof(TCCState, dollars_in_identifiers), 0, "dollars-in-identifiers" },
|
{ offsetof(TCCState, dollars_in_identifiers), 0, "dollars-in-identifiers" },
|
||||||
{ offsetof(TCCState, normalize_inc_dirs), 0, "normalize-inc-dirs" },
|
{ offsetof(TCCState, normalize_inc_dirs), 0, "normalize-inc-dirs" },
|
||||||
|
{ offsetof(TCCState, no_type_redef_check), FD_INVERT, "type-redefinition-check" },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* set/reset a flag */
|
/* set/reset a flag */
|
||||||
|
1
tcc.h
1
tcc.h
@ -707,6 +707,7 @@ struct TCCState {
|
|||||||
Liuux 2.4.26 can't find initrd when compiled with a new algorithm */
|
Liuux 2.4.26 can't find initrd when compiled with a new algorithm */
|
||||||
int dollars_in_identifiers; /* allows '$' char in indentifiers */
|
int dollars_in_identifiers; /* allows '$' char in indentifiers */
|
||||||
int normalize_inc_dirs; /* remove non-existent or duplicate directories from include paths */
|
int normalize_inc_dirs; /* remove non-existent or duplicate directories from include paths */
|
||||||
|
int no_type_redef_check; /* no local vars redefinition check */
|
||||||
|
|
||||||
/* warning switches */
|
/* warning switches */
|
||||||
int warn_write_strings;
|
int warn_write_strings;
|
||||||
|
12
tccgen.c
12
tccgen.c
@ -166,11 +166,13 @@ ST_INLN void sym_free(Sym *sym)
|
|||||||
ST_FUNC Sym *sym_push2(Sym **ps, int v, int t, long c)
|
ST_FUNC Sym *sym_push2(Sym **ps, int v, int t, long c)
|
||||||
{
|
{
|
||||||
Sym *s;
|
Sym *s;
|
||||||
if (ps == &local_stack) {
|
if (!tcc_state->no_type_redef_check) {
|
||||||
for (s = *ps; s && s != scope_stack_bottom; s = s->prev)
|
if (ps == &local_stack) {
|
||||||
if (!(v & SYM_FIELD) && (v & ~SYM_STRUCT) < SYM_FIRST_ANOM && s->v == v)
|
for (s = *ps; s && s != scope_stack_bottom; s = s->prev)
|
||||||
tcc_error("incompatible types for redefinition of '%s'",
|
if (!(v & SYM_FIELD) && (v & ~SYM_STRUCT) < SYM_FIRST_ANOM && s->v == v)
|
||||||
get_tok_str(v, NULL));
|
tcc_error("incompatible types for redefinition of '%s'",
|
||||||
|
get_tok_str(v, NULL));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
s = sym_malloc();
|
s = sym_malloc();
|
||||||
s->asm_label = 0;
|
s->asm_label = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user