mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-04-08 10:21:40 +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 flowvar_s *flowvar; ///< flowvar for this def
|
||||
|
||||
unsigned offset_reloc:1; ///< use *_def_ofs relocs
|
||||
unsigned initialized:1; ///< the def has been initialized
|
||||
unsigned constant:1; ///< stores constant value
|
||||
unsigned global:1; ///< globally declared def
|
||||
unsigned external:1; ///< externally declared def
|
||||
unsigned local:1; ///< function local def
|
||||
unsigned param:1; ///< function param def
|
||||
unsigned argument:1; ///< function argument def
|
||||
unsigned system:1; ///< system def
|
||||
unsigned nosave:1; ///< don't set DEF_SAVEGLOBAL
|
||||
union {
|
||||
struct {
|
||||
bool offset_reloc:1; ///< use *_def_ofs relocs
|
||||
bool initialized:1; ///< the def has been initialized
|
||||
bool constant:1; ///< stores constant value
|
||||
bool readonly:1;
|
||||
bool writeonly:1;
|
||||
bool global:1; ///< globally declared def
|
||||
bool external:1; ///< externally declared def
|
||||
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
|
||||
|
||||
|
|
|
@ -68,72 +68,42 @@ ALLOC_STATE (def_t, defs);
|
|||
static void
|
||||
set_storage_bits (def_t *def, storage_class_t storage)
|
||||
{
|
||||
def->storage_bits = 0;
|
||||
switch (storage) {
|
||||
case sc_out:
|
||||
case sc_buffer:
|
||||
case sc_shared:
|
||||
def->global = 1;
|
||||
def->external = 0;
|
||||
def->local = 0;
|
||||
def->param = 0;
|
||||
def->argument = 0;
|
||||
def->global = true;
|
||||
break;
|
||||
case sc_system:
|
||||
def->system = 1;
|
||||
def->system = true;
|
||||
// fall through
|
||||
case sc_global:
|
||||
def->global = 1;
|
||||
def->external = 0;
|
||||
def->local = 0;
|
||||
def->param = 0;
|
||||
def->argument = 0;
|
||||
def->global = true;
|
||||
break;
|
||||
case sc_in:
|
||||
case sc_uniform:
|
||||
def->global = 1;
|
||||
def->constant = 1;
|
||||
def->external = 0;
|
||||
def->local = 0;
|
||||
def->param = 0;
|
||||
def->argument = 0;
|
||||
def->global = true;
|
||||
def->readonly = true;
|
||||
break;
|
||||
case sc_extern:
|
||||
def->global = 1;
|
||||
def->external = 1;
|
||||
def->local = 0;
|
||||
def->param = 0;
|
||||
def->argument = 0;
|
||||
def->global = true;
|
||||
def->external = true;
|
||||
break;
|
||||
case sc_static:
|
||||
def->external = 0;
|
||||
def->global = 0;
|
||||
def->local = 0;
|
||||
def->param = 0;
|
||||
def->argument = 0;
|
||||
break;
|
||||
case sc_local:
|
||||
def->external = 0;
|
||||
def->global = 0;
|
||||
def->local = 1;
|
||||
def->param = 0;
|
||||
def->argument = 0;
|
||||
def->local = true;
|
||||
break;
|
||||
case sc_param:
|
||||
def->external = 0;
|
||||
def->global = 0;
|
||||
def->local = 1;
|
||||
def->param = 1;
|
||||
def->argument = 0;
|
||||
def->local = true;
|
||||
def->param = true;
|
||||
break;
|
||||
case sc_argument:
|
||||
def->external = 0;
|
||||
def->global = 0;
|
||||
def->local = 1;
|
||||
def->param = 0;
|
||||
def->argument = 1;
|
||||
def->local = true;
|
||||
def->argument = true;
|
||||
break;
|
||||
}
|
||||
def->initialized = 0;
|
||||
}
|
||||
|
||||
def_t *
|
||||
|
@ -144,12 +114,12 @@ new_def (const char *name, const type_t *type, defspace_t *space,
|
|||
|
||||
ALLOC (16384, def_t, defs, def);
|
||||
|
||||
def->return_addr = __builtin_return_address (0);
|
||||
|
||||
def->name = name ? save_string (name) : 0;
|
||||
def->type = type;
|
||||
|
||||
def->loc = pr.loc;
|
||||
*def = (def_t) {
|
||||
.type = type,
|
||||
.name = name ? save_string (name) : 0,
|
||||
.loc = pr.loc,
|
||||
.return_addr = __builtin_return_address (0),
|
||||
};
|
||||
|
||||
set_storage_bits (def, storage);
|
||||
|
||||
|
|
Loading…
Reference in a new issue