tccgen: scope levels for local symbols

... for fast redeclaration checks

Also, check function parameters too:
    void foo(int a) { int a; ... }

Also, try to fix struct/union/enum's on different scopes:
    { struct xxx { int x; };
         { struct xxx { int y; }; ... }}
and some (probably not all) combination with incomplete
declarations "struct xxx;"

Replaces 2bfedb1867
and 07d896c8e5

Fixes cf95ac399c
This commit is contained in:
grischka
2016-05-05 10:39:09 +02:00
parent 0fbc77cac6
commit caebbc3ee1
3 changed files with 30 additions and 26 deletions

6
tcc.h
View File

@ -459,7 +459,10 @@ typedef struct AttributeDef {
/* symbol management */
typedef struct Sym {
int v; /* symbol token */
int asm_label; /* associated asm label */
union {
int asm_label; /* associated asm label */
int scope; /* scope level for locals */
};
union {
long r; /* associated register */
struct Attribute a;
@ -707,7 +710,6 @@ 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;