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, dollars_in_identifiers), 0, "dollars-in-identifiers" },
|
||||
{ offsetof(TCCState, normalize_inc_dirs), 0, "normalize-inc-dirs" },
|
||||
{ offsetof(TCCState, no_type_redef_check), FD_INVERT, "type-redefinition-check" },
|
||||
};
|
||||
|
||||
/* 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 */
|
||||
int dollars_in_identifiers; /* allows '$' char in indentifiers */
|
||||
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 */
|
||||
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)
|
||||
{
|
||||
Sym *s;
|
||||
if (ps == &local_stack) {
|
||||
for (s = *ps; s && s != scope_stack_bottom; s = s->prev)
|
||||
if (!(v & SYM_FIELD) && (v & ~SYM_STRUCT) < SYM_FIRST_ANOM && s->v == v)
|
||||
tcc_error("incompatible types for redefinition of '%s'",
|
||||
get_tok_str(v, NULL));
|
||||
if (!tcc_state->no_type_redef_check) {
|
||||
if (ps == &local_stack) {
|
||||
for (s = *ps; s && s != scope_stack_bottom; s = s->prev)
|
||||
if (!(v & SYM_FIELD) && (v & ~SYM_STRUCT) < SYM_FIRST_ANOM && s->v == v)
|
||||
tcc_error("incompatible types for redefinition of '%s'",
|
||||
get_tok_str(v, NULL));
|
||||
}
|
||||
}
|
||||
s = sym_malloc();
|
||||
s->asm_label = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user