[build] Fix a pile of gcc 10 issues

gcc got stricter about array accesses, complicating progs macros, and
much better at detecting buffer overflows.
This commit is contained in:
Bill Currie 2020-12-21 02:12:51 +09:00
parent af814ff9a8
commit ab04a1915e
30 changed files with 125 additions and 107 deletions

View file

@ -1133,9 +1133,7 @@ pr_debug_vector_view (qfot_type_t *type, pr_type_t *value, void *_data)
__auto_type data = (pr_debug_data_t *) _data;
dstring_t *dstr = data->dstr;
dasprintf (dstr, "'%.9g %.9g %.9g'",
value->vector_var[0], value->vector_var[1],
value->vector_var[2]);
dasprintf (dstr, "'%.9g %.9g %.9g'", VectorExpand (&value->vector_var));
}
static void
@ -1213,9 +1211,7 @@ pr_debug_quat_view (qfot_type_t *type, pr_type_t *value, void *_data)
__auto_type data = (pr_debug_data_t *) _data;
dstring_t *dstr = data->dstr;
dasprintf (dstr, "'%.9g %.9g %.9g %.9g'",
value->vector_var[0], value->vector_var[1],
value->vector_var[2], value->vector_var[3]);
dasprintf (dstr, "'%.9g %.9g %.9g %.9g'", QuatExpand (&value->quat_var));
}
static void

View file

@ -512,10 +512,10 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
OPC.float_var = OPA.float_var + OPB.float_var;
break;
case OP_ADD_V:
VectorAdd (OPA.vector_var, OPB.vector_var, OPC.vector_var);
VectorAdd (&OPA.vector_var, &OPB.vector_var, &OPC.vector_var);
break;
case OP_ADD_Q:
QuatAdd (OPA.quat_var, OPB.quat_var, OPC.quat_var);
QuatAdd (&OPA.quat_var, &OPB.quat_var, &OPC.quat_var);
break;
case OP_ADD_S:
OPC.string_var = PR_CatStrings (pr,
@ -531,10 +531,11 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
OPC.float_var = OPA.float_var - OPB.float_var;
break;
case OP_SUB_V:
VectorSubtract (OPA.vector_var, OPB.vector_var, OPC.vector_var);
VectorSubtract (&OPA.vector_var, &OPB.vector_var,
&OPC.vector_var);
break;
case OP_SUB_Q:
QuatSubtract (OPA.quat_var, OPB.quat_var, OPC.quat_var);
QuatSubtract (&OPA.quat_var, &OPB.quat_var, &OPC.quat_var);
break;
case OP_MUL_D:
OPC_double_var = OPA_double_var * OPB_double_var;
@ -543,14 +544,14 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
OPC.float_var = OPA.float_var * OPB.float_var;
break;
case OP_MUL_V:
OPC.float_var = DotProduct (OPA.vector_var, OPB.vector_var);
OPC.float_var = DotProduct (&OPA.vector_var, &OPB.vector_var);
break;
case OP_MUL_DV:
{
// avoid issues with the likes of x = x.x * x;
// makes for faster code, too
double scale = OPA_double_var;
VectorScale (OPB.vector_var, scale, OPC.vector_var);
VectorScale (&OPB.vector_var, scale, &OPC.vector_var);
}
break;
case OP_MUL_VD:
@ -558,7 +559,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
// avoid issues with the likes of x = x * x.x;
// makes for faster code, too
double scale = OPB_double_var;
VectorScale (OPA.vector_var, scale, OPC.vector_var);
VectorScale (&OPA.vector_var, scale, &OPC.vector_var);
}
break;
case OP_MUL_FV:
@ -566,7 +567,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
// avoid issues with the likes of x = x.x * x;
// makes for faster code, too
float scale = OPA.float_var;
VectorScale (OPB.vector_var, scale, OPC.vector_var);
VectorScale (&OPB.vector_var, scale, &OPC.vector_var);
}
break;
case OP_MUL_VF:
@ -574,21 +575,21 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
// avoid issues with the likes of x = x * x.x;
// makes for faster code, too
float scale = OPB.float_var;
VectorScale (OPA.vector_var, scale, OPC.vector_var);
VectorScale (&OPA.vector_var, scale, &OPC.vector_var);
}
break;
case OP_MUL_Q:
QuatMult (OPA.quat_var, OPB.quat_var, OPC.quat_var);
QuatMult (&OPA.quat_var, &OPB.quat_var, &OPC.quat_var);
break;
case OP_MUL_QV:
QuatMultVec (OPA.quat_var, OPB.vector_var, OPC.vector_var);
QuatMultVec (&OPA.quat_var, &OPB.vector_var, &OPC.vector_var);
break;
case OP_MUL_DQ:
{
// avoid issues with the likes of x = x.s * x;
// makes for faster code, too
double scale = OPA_double_var;
QuatScale (OPB.quat_var, scale, OPC.quat_var);
QuatScale (&OPB.quat_var, scale, &OPC.quat_var);
}
break;
case OP_MUL_QD:
@ -596,7 +597,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
// avoid issues with the likes of x = x * x.s;
// makes for faster code, too
double scale = OPB_double_var;
QuatScale (OPA.quat_var, scale, OPC.quat_var);
QuatScale (&OPA.quat_var, scale, &OPC.quat_var);
}
break;
case OP_MUL_FQ:
@ -604,7 +605,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
// avoid issues with the likes of x = x.s * x;
// makes for faster code, too
float scale = OPA.float_var;
QuatScale (OPB.quat_var, scale, OPC.quat_var);
QuatScale (&OPB.quat_var, scale, &OPC.quat_var);
}
break;
case OP_MUL_QF:
@ -612,11 +613,11 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
// avoid issues with the likes of x = x * x.s;
// makes for faster code, too
float scale = OPB.float_var;
QuatScale (OPA.quat_var, scale, OPC.quat_var);
QuatScale (&OPA.quat_var, scale, &OPC.quat_var);
}
break;
case OP_CONJ_Q:
QuatConj (OPA.quat_var, OPC.quat_var);
QuatConj (&OPA.quat_var, &OPC.quat_var);
break;
case OP_DIV_D:
OPC_double_var = OPA_double_var / OPB_double_var;
@ -673,10 +674,10 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
OPC.integer_var = !FNZ (OPA);
break;
case OP_NOT_V:
OPC.integer_var = VectorIsZero (OPA.vector_var);
OPC.integer_var = VectorIsZero (&OPA.vector_var);
break;
case OP_NOT_Q:
OPC.integer_var = QuatIsZero (OPA.quat_var);
OPC.integer_var = QuatIsZero (&OPA.quat_var);
break;
case OP_NOT_S:
OPC.integer_var = !OPA.string_var ||
@ -692,11 +693,11 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
OPC.integer_var = OPA.float_var == OPB.float_var;
break;
case OP_EQ_V:
OPC.integer_var = VectorCompare (OPA.vector_var,
OPB.vector_var);
OPC.integer_var = VectorCompare (&OPA.vector_var,
&OPB.vector_var);
break;
case OP_EQ_Q:
OPC.integer_var = QuatCompare (OPA.quat_var, OPB.quat_var);
OPC.integer_var = QuatCompare (&OPA.quat_var, &OPB.quat_var);
break;
case OP_EQ_E:
OPC.integer_var = OPA.integer_var == OPB.integer_var;
@ -708,11 +709,11 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
OPC.integer_var = OPA.float_var != OPB.float_var;
break;
case OP_NE_V:
OPC.integer_var = !VectorCompare (OPA.vector_var,
OPB.vector_var);
OPC.integer_var = !VectorCompare (&OPA.vector_var,
&OPB.vector_var);
break;
case OP_NE_Q:
OPC.integer_var = !QuatCompare (OPA.quat_var, OPB.quat_var);
OPC.integer_var = !QuatCompare (&OPA.quat_var, &OPB.quat_var);
break;
case OP_LE_S:
case OP_GE_S:
@ -753,10 +754,10 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
OPB.integer_var = OPA.integer_var;
break;
case OP_STORE_V:
VectorCopy (OPA.vector_var, OPB.vector_var);
VectorCopy (&OPA.vector_var, &OPB.vector_var);
break;
case OP_STORE_Q:
QuatCopy (OPA.quat_var, OPB.quat_var);
QuatCopy (&OPA.quat_var, &OPB.quat_var);
break;
case OP_STORE_D:
OPB_double_var = OPA_double_var;
@ -782,7 +783,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_vector);
}
ptr = pr->pr_globals + pointer;
VectorCopy (OPA.vector_var, ptr->vector_var);
VectorCopy (&OPA.vector_var, &ptr->vector_var);
break;
case OP_STOREP_Q:
pointer = OPB.integer_var;
@ -790,7 +791,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_quat);
}
ptr = pr->pr_globals + pointer;
QuatCopy (OPA.quat_var, ptr->quat_var);
QuatCopy (&OPA.quat_var, &ptr->quat_var);
break;
case OP_STOREP_D:
pointer = OPB.integer_var;
@ -909,7 +910,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_vector);
}
ptr = pr->pr_globals + pointer;
VectorCopy (ptr->vector_var, OPC.vector_var);
VectorCopy (&ptr->vector_var, &OPC.vector_var);
break;
case OP_LOADB_Q:
pointer = OPA.integer_var + OPB.integer_var;
@ -917,7 +918,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_quat);
}
ptr = pr->pr_globals + pointer;
QuatCopy (ptr->quat_var, OPC.quat_var);
QuatCopy (&ptr->quat_var, &OPC.quat_var);
break;
case OP_LOADB_D:
pointer = OPA.integer_var + OPB.integer_var;
@ -948,7 +949,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_vector);
}
ptr = pr->pr_globals + pointer;
VectorCopy (ptr->vector_var, OPC.vector_var);
VectorCopy (&ptr->vector_var, &OPC.vector_var);
break;
case OP_LOADBI_Q:
pointer = OPA.integer_var + (short) st->b;
@ -956,7 +957,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_quat);
}
ptr = pr->pr_globals + pointer;
QuatCopy (ptr->quat_var, OPC.quat_var);
QuatCopy (&ptr->quat_var, &OPC.quat_var);
break;
case OP_LOADBI_D:
pointer = OPA.integer_var + (short) st->b;
@ -997,7 +998,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_vector);
}
ptr = pr->pr_globals + pointer;
VectorCopy (OPA.vector_var, ptr->vector_var);
VectorCopy (&OPA.vector_var, &ptr->vector_var);
break;
case OP_STOREB_Q:
pointer = OPB.integer_var + OPC.integer_var;
@ -1005,7 +1006,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_quat);
}
ptr = pr->pr_globals + pointer;
QuatCopy (OPA.quat_var, ptr->quat_var);
QuatCopy (&OPA.quat_var, &ptr->quat_var);
break;
case OP_STOREB_D:
pointer = OPB.integer_var + OPC.integer_var;
@ -1036,7 +1037,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_vector);
}
ptr = pr->pr_globals + pointer;
VectorCopy (OPA.vector_var, ptr->vector_var);
VectorCopy (&OPA.vector_var, &ptr->vector_var);
break;
case OP_STOREBI_Q:
pointer = OPB.integer_var + (short) st->c;
@ -1044,7 +1045,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_quat);
}
ptr = pr->pr_globals + pointer;
QuatCopy (OPA.quat_var, ptr->quat_var);
QuatCopy (&OPA.quat_var, &ptr->quat_var);
break;
case OP_STOREBI_D:
pointer = OPB.integer_var + (short) st->c;
@ -1131,7 +1132,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_integer);
}
VectorCopy (ptr->vector_var, stk->vector_var);
VectorCopy (&ptr->vector_var, &stk->vector_var);
*pr->globals.stack = stack;
}
break;
@ -1148,7 +1149,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_quat);
}
QuatCopy (ptr->quat_var, stk->quat_var);
QuatCopy (&ptr->quat_var, &stk->quat_var);
*pr->globals.stack = stack;
}
break;
@ -1189,7 +1190,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_integer);
}
VectorCopy (ptr->vector_var, stk->vector_var);
VectorCopy (&ptr->vector_var, &stk->vector_var);
*pr->globals.stack = stack;
}
break;
@ -1206,7 +1207,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_quat);
}
QuatCopy (ptr->quat_var, stk->quat_var);
QuatCopy (&ptr->quat_var, &stk->quat_var);
*pr->globals.stack = stack;
}
break;
@ -1287,7 +1288,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_integer);
}
VectorCopy (ptr->vector_var, stk->vector_var);
VectorCopy (&ptr->vector_var, &stk->vector_var);
*pr->globals.stack = stack + 3;
}
break;
@ -1304,7 +1305,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_quat);
}
QuatCopy (ptr->quat_var, stk->quat_var);
QuatCopy (&ptr->quat_var, &stk->quat_var);
*pr->globals.stack = stack + 4;
}
break;
@ -1345,7 +1346,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_integer);
}
VectorCopy (ptr->vector_var, stk->vector_var);
VectorCopy (&ptr->vector_var, &stk->vector_var);
*pr->globals.stack = stack + 3;
}
break;
@ -1362,7 +1363,7 @@ PR_ExecuteProgram (progs_t *pr, func_t fnum)
PR_BoundsCheck (pr, pointer, ev_quat);
}
QuatCopy (ptr->quat_var, stk->quat_var);
QuatCopy (&ptr->quat_var, &stk->quat_var);
*pr->globals.stack = stack + 4;
}
break;

View file

@ -92,10 +92,10 @@ PR_UglyValueString (progs_t *pr, etype_t type, pr_type_t *val, dstring_t *line)
dsprintf (line, "%d", val->integer_var);
break;
case ev_vector:
dsprintf (line, "%.9g %.9g %.9g", VectorExpand (val->vector_var));
dsprintf (line, "%.9g %.9g %.9g", VectorExpand (&val->vector_var));
break;
case ev_quat:
dsprintf (line, "%.9g %.9g %.9g %.9g", QuatExpand (val->quat_var));
dsprintf (line, "%.9g %.9g %.9g %.9g", QuatExpand (&val->quat_var));
break;
default:
dsprintf (line, "bad type %i", type);
@ -241,7 +241,7 @@ ED_ParseEpair (progs_t *pr, pr_type_t *base, pr_def_t *key, const char *s)
while (*v && *v != ' ')
v++;
*v = 0;
d->vector_var[i] = atof (w);
(&d->vector_var)[i] = atof (w);
w = v = v + 1;
}
free (string);