fix external vectors and only complain about undefined externals that are
actually used
This commit is contained in:
parent
ac1392eb74
commit
c36b7e36d2
|
@ -186,13 +186,12 @@ vector_component (int is_field, def_t *vec, int comp, scope_t *scope,
|
||||||
if (vec->external) {
|
if (vec->external) {
|
||||||
d = get_def (is_field ? &type_floatfield : &type_float, name, scope,
|
d = get_def (is_field ? &type_floatfield : &type_float, name, scope,
|
||||||
st_none);
|
st_none);
|
||||||
if (!d) {
|
if (d) {
|
||||||
error (0, "internal error");
|
error (0, "internal error");
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
d = new_def (is_field ? &type_floatfield : &type_float, name, scope);
|
|
||||||
}
|
}
|
||||||
|
d = new_def (is_field ? &type_floatfield : &type_float, name, scope);
|
||||||
d->used = 1;
|
d->used = 1;
|
||||||
d->parent = vec;
|
d->parent = vec;
|
||||||
d->ofs = vec->ofs + comp;
|
d->ofs = vec->ofs + comp;
|
||||||
|
@ -248,6 +247,8 @@ get_def (type_t *type, const char *name, scope_t *scope,
|
||||||
def->ofs = new_location (type, space);
|
def->ofs = new_location (type, space);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_storage_bits (def, storage);
|
||||||
|
|
||||||
// make automatic defs for the vectors elements .origin can be accessed
|
// make automatic defs for the vectors elements .origin can be accessed
|
||||||
// as .origin_x, .origin_y, and .origin_z
|
// as .origin_x, .origin_y, and .origin_z
|
||||||
if (type->type == ev_vector && name) {
|
if (type->type == ev_vector && name) {
|
||||||
|
@ -266,7 +267,6 @@ get_def (type_t *type, const char *name, scope_t *scope,
|
||||||
vector_component (1, def, 2, scope, storage);
|
vector_component (1, def, 2, scope, storage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
set_storage_bits (def, storage);
|
|
||||||
if (storage == st_extern)
|
if (storage == st_extern)
|
||||||
def_initialized (def);
|
def_initialized (def);
|
||||||
|
|
||||||
|
|
|
@ -533,11 +533,13 @@ linker_finish (void)
|
||||||
free (undef_defs);
|
free (undef_defs);
|
||||||
undef_defs = (qfo_def_t **) Hash_GetList (extern_defs);
|
undef_defs = (qfo_def_t **) Hash_GetList (extern_defs);
|
||||||
for (def = undef_defs; *def; def++) {
|
for (def = undef_defs; *def; def++) {
|
||||||
const char *name = strings->strings + (*def)->name;
|
if ((*def)->num_relocs) {
|
||||||
pr.source_file = (*def)->file;
|
const char *name = strings->strings + (*def)->name;
|
||||||
pr.source_line = (*def)->line;
|
pr.source_file = (*def)->file;
|
||||||
pr.strings = strings;
|
pr.source_line = (*def)->line;
|
||||||
error (0, "undefined symbol %s", name);
|
pr.strings = strings;
|
||||||
|
error (0, "undefined symbol %s", name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
free (undef_defs);
|
free (undef_defs);
|
||||||
if (pr.error_count)
|
if (pr.error_count)
|
||||||
|
|
|
@ -365,9 +365,9 @@ finish_compilation (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (d = pr.scope->head; d; d = d->def_next) {
|
for (d = pr.scope->head; d; d = d->def_next) {
|
||||||
if (d->external) {
|
if (d->external && d->refs) {
|
||||||
errors = true;
|
errors = true;
|
||||||
error (0, "undefined global %s\n", d->name);
|
error (0, "undefined global %s", d->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (errors)
|
if (errors)
|
||||||
|
|
Loading…
Reference in New Issue