-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, 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…
	
	Add table
		
		Reference in a new issue