diff mbox

[libfortran] Multi-threaded random_number

Message ID yddh9ar5pac.fsf@CeBiTec.Uni-Bielefeld.DE
State New
Headers show

Commit Message

Rainer Orth Aug. 11, 2016, 2:54 p.m. UTC
Hi Janne,

> committed a slightly modified patch as r239356. Changes from the
> submitted patch attached. To my surprise, it turned out that my
> fallback code using __gthread_key_{create,delete} and
> __ghtread_{get,set}_specific was faster than my TLS code, so I removed
> the TLS configure magic and the TLS code and just left the __gthread
> stuff in.

this patch broke Solaris bootstrap:

/vol/gcc/src/hg/trunk/local/libgfortran/intrinsics/random.c: In function 'constructor_random':
/vol/gcc/src/hg/trunk/local/libgfortran/intrinsics/
random.c:915:45: error: 'free' undeclared (first use in this function); did you mean 'frexp'?
     __gthread_key_create (&rand_state_key, &free);
                                             ^~~~
                                             frexp
/vol/gcc/src/hg/trunk/local/libgfortran/intrinsics/random.c:915:45: note: each undeclared identifier is reported only once for each function it appears in

You need to include <stdlib.h> for the free declaration, as this patch
does.  Allowed i386-pc-solaris2.12 and sparc-sun-solaris2.12 to
continue.  I'm going to install this as obvious.

	Rainer


2016-08-11  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	libgfortran:
	* intrinsics/random.c: Include <stdlib.h>.

Comments

Janne Blomqvist Aug. 11, 2016, 3:39 p.m. UTC | #1
On Thu, Aug 11, 2016 at 5:54 PM, Rainer Orth
<ro@cebitec.uni-bielefeld.de> wrote:
> Hi Janne,
>
>> committed a slightly modified patch as r239356. Changes from the
>> submitted patch attached. To my surprise, it turned out that my
>> fallback code using __gthread_key_{create,delete} and
>> __ghtread_{get,set}_specific was faster than my TLS code, so I removed
>> the TLS configure magic and the TLS code and just left the __gthread
>> stuff in.
>
> this patch broke Solaris bootstrap:
>
> /vol/gcc/src/hg/trunk/local/libgfortran/intrinsics/random.c: In function 'constructor_random':
> /vol/gcc/src/hg/trunk/local/libgfortran/intrinsics/
> random.c:915:45: error: 'free' undeclared (first use in this function); did you mean 'frexp'?
>      __gthread_key_create (&rand_state_key, &free);
>                                              ^~~~
>                                              frexp
> /vol/gcc/src/hg/trunk/local/libgfortran/intrinsics/random.c:915:45: note: each undeclared identifier is reported only once for each function it appears in
>
> You need to include <stdlib.h> for the free declaration, as this patch
> does.  Allowed i386-pc-solaris2.12 and sparc-sun-solaris2.12 to
> continue.  I'm going to install this as obvious.

Oh, I (incorrectly, obviously!) remembered that stdlib.h would be
included via libgfortran.h. Thanks for the quick fix!
diff mbox

Patch

diff --git a/libgfortran/intrinsics/random.c b/libgfortran/intrinsics/random.c
--- a/libgfortran/intrinsics/random.c
+++ b/libgfortran/intrinsics/random.c
@@ -27,6 +27,7 @@  see the files COPYING3 and COPYING.RUNTI
 #include "libgfortran.h"
 #include <gthr.h>
 #include <string.h>
+#include <stdlib.h>
 
 /* For getosrandom.  */
 #ifdef HAVE_SYS_TYPES_H