mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-06-03 01:51:02 +00:00
[qfcc] Use correct flags for in and uniform
They're not actually constant (in the usual sense), just read-only. Fixes an internal error when accessing an unsigned array.
This commit is contained in:
parent
a24d1d799f
commit
cba28e9421
2 changed files with 36 additions and 59 deletions
|
@ -93,16 +93,23 @@ typedef struct def_s {
|
||||||
struct daglabel_s *daglabel;///< daglabel for this def
|
struct daglabel_s *daglabel;///< daglabel for this def
|
||||||
struct flowvar_s *flowvar; ///< flowvar for this def
|
struct flowvar_s *flowvar; ///< flowvar for this def
|
||||||
|
|
||||||
unsigned offset_reloc:1; ///< use *_def_ofs relocs
|
union {
|
||||||
unsigned initialized:1; ///< the def has been initialized
|
struct {
|
||||||
unsigned constant:1; ///< stores constant value
|
bool offset_reloc:1; ///< use *_def_ofs relocs
|
||||||
unsigned global:1; ///< globally declared def
|
bool initialized:1; ///< the def has been initialized
|
||||||
unsigned external:1; ///< externally declared def
|
bool constant:1; ///< stores constant value
|
||||||
unsigned local:1; ///< function local def
|
bool readonly:1;
|
||||||
unsigned param:1; ///< function param def
|
bool writeonly:1;
|
||||||
unsigned argument:1; ///< function argument def
|
bool global:1; ///< globally declared def
|
||||||
unsigned system:1; ///< system def
|
bool external:1; ///< externally declared def
|
||||||
unsigned nosave:1; ///< don't set DEF_SAVEGLOBAL
|
bool local:1; ///< function local def
|
||||||
|
bool param:1; ///< function param def
|
||||||
|
bool argument:1; ///< function argument def
|
||||||
|
bool system:1; ///< system def
|
||||||
|
bool nosave:1; ///< don't set DEF_SAVEGLOBAL
|
||||||
|
};
|
||||||
|
unsigned storage_bits;
|
||||||
|
};
|
||||||
|
|
||||||
rua_loc_t loc; ///< declaring/defining source location
|
rua_loc_t loc; ///< declaring/defining source location
|
||||||
|
|
||||||
|
|
|
@ -68,72 +68,42 @@ ALLOC_STATE (def_t, defs);
|
||||||
static void
|
static void
|
||||||
set_storage_bits (def_t *def, storage_class_t storage)
|
set_storage_bits (def_t *def, storage_class_t storage)
|
||||||
{
|
{
|
||||||
|
def->storage_bits = 0;
|
||||||
switch (storage) {
|
switch (storage) {
|
||||||
case sc_out:
|
case sc_out:
|
||||||
case sc_buffer:
|
case sc_buffer:
|
||||||
case sc_shared:
|
case sc_shared:
|
||||||
def->global = 1;
|
def->global = true;
|
||||||
def->external = 0;
|
|
||||||
def->local = 0;
|
|
||||||
def->param = 0;
|
|
||||||
def->argument = 0;
|
|
||||||
break;
|
break;
|
||||||
case sc_system:
|
case sc_system:
|
||||||
def->system = 1;
|
def->system = true;
|
||||||
// fall through
|
// fall through
|
||||||
case sc_global:
|
case sc_global:
|
||||||
def->global = 1;
|
def->global = true;
|
||||||
def->external = 0;
|
|
||||||
def->local = 0;
|
|
||||||
def->param = 0;
|
|
||||||
def->argument = 0;
|
|
||||||
break;
|
break;
|
||||||
case sc_in:
|
case sc_in:
|
||||||
case sc_uniform:
|
case sc_uniform:
|
||||||
def->global = 1;
|
def->global = true;
|
||||||
def->constant = 1;
|
def->readonly = true;
|
||||||
def->external = 0;
|
|
||||||
def->local = 0;
|
|
||||||
def->param = 0;
|
|
||||||
def->argument = 0;
|
|
||||||
break;
|
break;
|
||||||
case sc_extern:
|
case sc_extern:
|
||||||
def->global = 1;
|
def->global = true;
|
||||||
def->external = 1;
|
def->external = true;
|
||||||
def->local = 0;
|
|
||||||
def->param = 0;
|
|
||||||
def->argument = 0;
|
|
||||||
break;
|
break;
|
||||||
case sc_static:
|
case sc_static:
|
||||||
def->external = 0;
|
|
||||||
def->global = 0;
|
|
||||||
def->local = 0;
|
|
||||||
def->param = 0;
|
|
||||||
def->argument = 0;
|
|
||||||
break;
|
break;
|
||||||
case sc_local:
|
case sc_local:
|
||||||
def->external = 0;
|
def->local = true;
|
||||||
def->global = 0;
|
|
||||||
def->local = 1;
|
|
||||||
def->param = 0;
|
|
||||||
def->argument = 0;
|
|
||||||
break;
|
break;
|
||||||
case sc_param:
|
case sc_param:
|
||||||
def->external = 0;
|
def->local = true;
|
||||||
def->global = 0;
|
def->param = true;
|
||||||
def->local = 1;
|
|
||||||
def->param = 1;
|
|
||||||
def->argument = 0;
|
|
||||||
break;
|
break;
|
||||||
case sc_argument:
|
case sc_argument:
|
||||||
def->external = 0;
|
def->local = true;
|
||||||
def->global = 0;
|
def->argument = true;
|
||||||
def->local = 1;
|
|
||||||
def->param = 0;
|
|
||||||
def->argument = 1;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
def->initialized = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def_t *
|
def_t *
|
||||||
|
@ -144,12 +114,12 @@ new_def (const char *name, const type_t *type, defspace_t *space,
|
||||||
|
|
||||||
ALLOC (16384, def_t, defs, def);
|
ALLOC (16384, def_t, defs, def);
|
||||||
|
|
||||||
def->return_addr = __builtin_return_address (0);
|
*def = (def_t) {
|
||||||
|
.type = type,
|
||||||
def->name = name ? save_string (name) : 0;
|
.name = name ? save_string (name) : 0,
|
||||||
def->type = type;
|
.loc = pr.loc,
|
||||||
|
.return_addr = __builtin_return_address (0),
|
||||||
def->loc = pr.loc;
|
};
|
||||||
|
|
||||||
set_storage_bits (def, storage);
|
set_storage_bits (def, storage);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue