#2768: rts/win32/IOManager.h declarations conflict with windows.h
-------------------------+--------------------------------------------------
    Reporter:  Deewiant  |       Owner:                
        Type:  bug       |      Status:  new           
    Priority:  normal    |   Component:  Runtime System
     Version:  6.11      |    Severity:  normal        
    Keywords:            |    Testcase:                
Architecture:  x86       |          Os:  Windows       
-------------------------+--------------------------------------------------
 `rts/win32/IOManager.h` has the following:
 {{{
 /* On the yucky side..suppress -Wmissing-declarations warnings when
  * including <windows.h>
  */
 extern void* GetCurrentFiber ( void );
 extern void* GetFiberData ( void );
 #include <windows.h>
 }}}
 Which causes problems on my system:
 {{{
 In file included from d:\progging\mingw\bin\../lib/gcc/i686-pc-
 mingw32/4.2.1-dw2/../../../../include/windef.h:253,
                  from d:\progging\mingw\bin\../lib/gcc/i686-pc-
 mingw32/4.2.1-dw2/../../../../include/windows.h:48,
                  from IOManager.h:14,
                  from IOManager.c:11:
 d:\progging\mingw\bin\../lib/gcc/i686-pc-
 mingw32/4.2.1-dw2/../../../../include/winnt.h:3832: error: static
 declaration of 'GetCurrentFiber' follows non-static declaration
 IOManager.h:12: error: previous declaration of 'GetCurrentFiber' was here
 d:\progging\mingw\bin\../lib/gcc/i686-pc-
 mingw32/4.2.1-dw2/../../../../include/winnt.h:3842: error: static
 declaration of 'GetFiberData' follows non-static declaration
 IOManager.h:13: error: previous declaration of 'GetFiberData' was here
 }}}
 Commenting out the two declarations makes things work again.

 A possible reason why this hasn't been a problem for others is that I'm
 using a 'technology preview' of MinGW from 2007 which comes with GCC
 4.2.1, instead of the stable 3.4.5 from 2006.

 My `winnt.h` contains the following (snipped down to size where
 irrelevant):
 {{{
 #if (__GNUC__ >= 3)
 /* Support -masm=intel.  */
 static __inline__ PVOID GetCurrentFiber(void)
 {
 ...
 }
 ...
 #else /* __GNUC__ >= 3 */
 static __inline__ PVOID GetCurrentFiber(void)
 {
 ...
 }
 }}}
 So it seems that with a recent enough version of these headers the fiber
 functions get defined in any case, regardless of compiler version; were
 people to grab the latest version of
 [http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=11550
 w32api] they'd run into these problems as well. Judging from the file
 timestamps I've got 3.11, the second-newest. 3.12's `winnt.h` appears
 identical in this respect, so updating wouldn't help.

 Since the two lines are claimed to be only for warning avoidance, I
 suggest just removing them.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2768>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to