On Fri, Nov 14, 2014 at 11:02 PM, Tobias Burnus <bur...@net-b.de> wrote: > Cesar Philippidis wrote: >> >> On 11/13/2014 02:32 AM, Janne Blomqvist wrote: >> I hit an error when building intrinsics/random.c: >> error: expression in static assertion is not constant >> Joseph told me that static const variables cannot be used in constant >> expressions in C, so I've replaced the _Static_assert with a regular >> assert. Are you using g++ to build libgfortran? > > > I wonder why you are seeing this while others aren't.
Yeah, I wonder the same? >> I don't have a good baseline test this patch thoroughly, but at least I >> can bootstrap gcc without it failing in libgfortran. Is this OK for >> mainline and/or could someone see if it causes any regressions? > > > I think instead of doing a run-time check I'd prefer something like the > following, keeping the compile-time assert. > > --- a/libgfortran/intrinsics/random.c > +++ b/libgfortran/intrinsics/random.c > @@ -253 +253 @@ static GFC_UINTEGER_4 kiss_default_seed[] = { > -static const GFC_INTEGER_4 kiss_size = > sizeof(kiss_seed)/sizeof(kiss_seed[0]); > +#define KISS_SIZE ((GFC_INTEGER_4) (sizeof(kiss_seed)/sizeof(kiss_seed[0])) > > (plus s/kiss_size/KISS_SIZE/ changes in the code.) > > Janne, what do you think? I like it. With this, you can also get rid of the assert and the newly introduced KISS_MAX_SIZE macro, and just make the seed array the correct size, as was originally done (with a VLA). Consider such a patch pre-approved. -- Janne Blomqvist