-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
3 changed files with 9 additions and 5 deletions
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;
|
||||||
|
|
|
||||||
2
tccgen.c
2
tccgen.c
|
|
@ -166,12 +166,14 @@ 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 (!tcc_state->no_type_redef_check) {
|
||||||
if (ps == &local_stack) {
|
if (ps == &local_stack) {
|
||||||
for (s = *ps; s && s != scope_stack_bottom; s = s->prev)
|
for (s = *ps; s && s != scope_stack_bottom; s = s->prev)
|
||||||
if (!(v & SYM_FIELD) && (v & ~SYM_STRUCT) < SYM_FIRST_ANOM && s->v == v)
|
if (!(v & SYM_FIELD) && (v & ~SYM_STRUCT) < SYM_FIRST_ANOM && s->v == v)
|
||||||
tcc_error("incompatible types for redefinition of '%s'",
|
tcc_error("incompatible types for redefinition of '%s'",
|
||||||
get_tok_str(v, NULL));
|
get_tok_str(v, NULL));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
s = sym_malloc();
|
s = sym_malloc();
|
||||||
s->asm_label = 0;
|
s->asm_label = 0;
|
||||||
s->v = v;
|
s->v = v;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue