在 2022-10-29星期六的 06:28 +1100,Richard Henderson写道: > On 10/28/22 18:21, Icenowy Zheng wrote: > > When registering helpers via FFI for TCI, the inner loop that > > iterates > > parameters of the helper reuses (and thus pollutes) the same > > variable > > used by the outer loop that iterates all helpers, thus made some > > helpers > > unregistered. > > > > Fix this logic error by using a dedicated temporary variable for > > the > > inner loop. > > > > Signed-off-by: Icenowy Zheng <u...@icenowy.me> > > --- > > tcg/tcg.c | 7 ++++--- > > 1 file changed, 4 insertions(+), 3 deletions(-) > > > > diff --git a/tcg/tcg.c b/tcg/tcg.c > > index 612a12f58f..adfaf61a32 100644 > > --- a/tcg/tcg.c > > +++ b/tcg/tcg.c > > @@ -619,6 +619,7 @@ static void tcg_context_init(unsigned max_cpus) > > gpointer hash = (gpointer)(uintptr_t)typemask; > > ffi_status status; > > int nargs; > > + int j; > > > > if (g_hash_table_lookup(ffi_table, hash)) { > > continue; > > @@ -634,9 +635,9 @@ static void tcg_context_init(unsigned max_cpus) > > > > if (nargs != 0) { > > ca->cif.arg_types = ca->args; > > - for (i = 0; i < nargs; ++i) { > > - int typecode = extract32(typemask, (i + 1) * 3, > > 3); > > - ca->args[i] = typecode_to_ffi[typecode]; > > + for (j = 0; j < nargs; ++j) { > > + int typecode = extract32(typemask, (j + 1) * 3, > > 3); > > + ca->args[j] = typecode_to_ffi[typecode]; > > Oh my. I'm surprised any test cases at all worked. > Queued to tcg-next, with the declaration of j moved to the loop > itself: > > for (int j = 0; j < nargs; ++j)
Ah I think this is a C99 feature. Is our C standard baseline high enough to use it? > > > r~ >