When failure occurs, random_seed may not be 0, so need reset it to 0 manually, or will let the next call init_random_seed() incorrect. The related warning:
g++ -c -DTARGET_NAME=\"parisc-gchen-linux\" -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -fno-common -DHAVE_CONFIG_H -I. -I. -I../../gcc/gcc -I../../gcc/gcc/. -I../../gcc/gcc/../include -I../../gcc/gcc/../libcpp/include -I../../gcc/gcc/../libdecnumber -I../../gcc/gcc/../libdecnumber/dpd -I../libdecnumber -I../../gcc/gcc/../libbacktrace -o toplev.o -MT toplev.o -MMD -MP -MF ./.deps/toplev.TPo ../../gcc/gcc/toplev.c ../../gcc/gcc/toplev.c: In function 'void init_local_tick()': ../../gcc/gcc/toplev.c:276:56: warning: ignoring return value of 'ssize_t read(int, void*, size_t)', declared with attribute warn_unused_result [-Wunused-result] It passes testsuite under x86_64-apple-darwin14.0.0 /gcc 2014-12-27 Chen Gang <gang.chen.5...@gmail.com> * toplev.c (init_local_tick): Process the failure when read fails for random_seed. --- gcc/toplev.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gcc/toplev.c b/gcc/toplev.c index 7e06247..e5262be 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -273,7 +273,9 @@ init_local_tick (void) int fd = open ("/dev/urandom", O_RDONLY); if (fd >= 0) { - read (fd, &random_seed, sizeof (random_seed)); + if (read (fd, &random_seed, sizeof (random_seed)) + != sizeof (random_seed)) + random_seed = 0; close (fd); } -- 1.9.3 (Apple Git-50)
From 05faeede37f6e383f69a1398d355ea8ce3687583 Mon Sep 17 00:00:00 2001 From: Chen Gang <gang.c...@sunrus.com.cn> Date: Sat, 27 Dec 2014 15:55:57 +0800 Subject: [PATCH] toplev.c: Process the failure when read fails for random_seed When failure occurs, random_seed may not be 0, so need reset it to 0 manually, or will let the next call init_random_seed() incorrect. The related warning: g++ -c -DTARGET_NAME=\"parisc-gchen-linux\" -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -fno-common -DHAVE_CONFIG_H -I. -I. -I../../gcc/gcc -I../../gcc/gcc/. -I../../gcc/gcc/../include -I../../gcc/gcc/../libcpp/include -I../../gcc/gcc/../libdecnumber -I../../gcc/gcc/../libdecnumber/dpd -I../libdecnumber -I../../gcc/gcc/../libbacktrace -o toplev.o -MT toplev.o -MMD -MP -MF ./.deps/toplev.TPo ../../gcc/gcc/toplev.c ../../gcc/gcc/toplev.c: In function 'void init_local_tick()': ../../gcc/gcc/toplev.c:276:56: warning: ignoring return value of 'ssize_t read(int, void*, size_t)', declared with attribute warn_unused_result [-Wunused-result] It passes testsuite under x86_64-apple-darwin14.0.0 /gcc 2014-12-27 Chen Gang <gang.chen.5...@gmail.com> * toplev.c (init_local_tick): Process the failure when read fails for random_seed. --- gcc/toplev.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gcc/toplev.c b/gcc/toplev.c index 7e06247..e5262be 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -273,7 +273,9 @@ init_local_tick (void) int fd = open ("/dev/urandom", O_RDONLY); if (fd >= 0) { - read (fd, &random_seed, sizeof (random_seed)); + if (read (fd, &random_seed, sizeof (random_seed)) + != sizeof (random_seed)) + random_seed = 0; close (fd); } -- 1.9.3 (Apple Git-50)