Feature #3018: UNINITIALIZED_VAR() e$B%^%/%m$NF3F~e(B
http://redmine.ruby-lang.org/issues/show/3018
e$B5/I<<Te(B: Motohiro KOSAKI
e$B%9%F!<%?%9e(B: Open, e$BM%@hEYe(B: Low
e$B%+%F%4%je(B: core, Target version: 1.9.x
e$B:G6a$Ne(Bgcce$B$OL$=i4|2=JQ?t$re(Breade$B$7$h$&$H$9$k$H7Y9p$r=P$9$N$G$9$,!"?dO@$,$$$6$C$Q$J$N$G$?$^$KE*30$l$J7Y9p$r=P$7$^$9!#e(B
e$B$=$NI{:nMQ$Ge(Bthread.c
e$B$Ne(Bdo_select()e$B$,8=:_1x$$$3$H$K$J$C$F$$$^$9!#e(B
static int
do_select(int n, fd_set *read, fd_set *write, fd_set *except,
struct timeval timeout)
{
int result, lerrno;
fd_set orig_read, orig_write, orig_except;
#if defined GNUC && defined x86_64
#define FAKE_FD_ZERO(f) ((int )&(f)=0) / suppress lots of warnings */
#else
#define FAKE_FD_ZERO(f) ((void)0)
#endif
(snip)
if (read) orig_read = *read; else FAKE_FD_ZERO(orig_read);
if (write) orig_write = *write; else FAKE_FD_ZERO(orig_write);
if (except) orig_except = *except; else FAKE_FD_ZERO(orig_except);
#undef FAKE_FD_ZERO
…
FAKE_FD_ZERO()e$B$,A}$($?$3$H$K$h$C$F%V%i%s%A$,A}$($F$7$^$C$F$$$k$N$,H~$7$/$J$$$N$H!“e(B
x86_64
e$B$K0MB8$7$J$$$NLdBj$J$N$Ge(B#ifdefe$B$N@Z$jJ}$,4V0c$C$F$$$k$H$$$&LdBj$,$”$j$^$9!#e(B
Linuxe$B$G$O$3$NLdBj$K$?$$$7$F0J2<$N$h$&$J%^%/%m$G2r7h$7$F$*$j!“F1MM$N<jK!$rF3F~$7$?$$$He(B
e$B;W$&$N$G$9$,!”$$$+$,$G$7$g$&$+!)e(B
#define uninitialized_var(x) x = x
FAKE_FD_ZEROe$B$H0c$$<+8JBeF~$O:GE,2=$G>C$($k$N$G<B9T;~%3%9%H$O#0$G$9!#e(B
e$B%Q%C%A$rE:IU$7$^$9!#e(B
e$B$“$H!“e(BUNLIKELY()e$B$K$”$o$;$F!”%^%/%m$re(Bvm_core.he$B$K$*$$$?$N$G$9$,!"e(B
e$B$3$l$K$D$$$F$40U8+$r$*J9$+$;$/$@$5$$!#e(B