Sorry, some details are missing and not accurate.

The correct situation is :

The lack of WIN32 causes bad result (compilation error) of conftest for
 some type of win32 extension libraries depending structure's complicacy.
The problem is:
 - define 'have_header('..')  in extconf.rb, and the header file uses
some kludge for push/pop for struct padding. (for example: http.h)
 - mkmf.rb creates conftest.c for the header with some usual ruby's (cf,
win32.h).
 - but no other user specific macro or header are supplied, so at this
point conftest.c has neither _WIN64 nor WIN32.
 - start to compile contest.c by mkmf.rb
 - win32.h includes winsock2.h and it requires WIN32 or _WIN64 but
there is no chance to supply it. This causes no push/pop for structures's
padding. 
 - then the targeted header is included and failed by bad padding
(because the last status of padding of winsock2.h)
 - so compilation of conftest.c fails.
 - building the extension library may fail too.
So, it's very harmful for Win32 ruby extension library programers
without r30989.

-- 
arton <artonx / yahoo.co.jp>