Tue May 19 06:22:34 2015: Request 104426 was acted upon.
Transaction: Correspondence added by tfmtfm
Queue: Win32-API
Subject: function was called with the wrong prototype and caused a C stack
inconsistency
Broken in: (no value)
Severity: (no value)
Owner: Nobody
Requestors: [email protected]
Status: open
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=104426 >
I suspect this is the same bug as I have been digging into. Using GCC 4.9.2 on
Cygwin the tests fail with errors like:
"Win32::API a function was called with the wrong prototype and caused a C stack
inconsistency EBP=28c9ec ESP=28c9e0 at t/00_API.t line 51."
Adding -fno-schedule-insns2 to the CFLAGS (see patch) fixes it for me
(-fno-schedule-insns2 seems to be supported at least as far back as GCC 3.3.3
so I assume this should not cause any issues for older installs).
--- orig/Makefile.PL 2015-05-19 10:52:42.698333900 +0100
+++ Makefile.PL 2015-05-19 11:02:36.709309400 +0100
@@ -109,7 +109,7 @@
#recipe to get GCC (4.6.3 tested) to do it
call_i686$(OBJ_EXT): call_i686.c API.h
$(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) \
--fno-defer-pop -fno-omit-frame-pointer -mno-accumulate-outgoing-args -mno-stack-arg-probe call_i686.c
+-fno-defer-pop -fno-omit-frame-pointer -fno-schedule-insns2 -mno-accumulate-outgoing-args -mno-stack-arg-probe call_i686.c
EOM1
}
@@ -130,7 +130,7 @@
#recipe to get GCC (4.6.3 tested) to do it
call_i686$(OBJ_EXT): call_i686.c API.h
$(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) \
--fno-defer-pop -fno-omit-frame-pointer -mno-accumulate-outgoing-args -mno-stack-arg-probe call_i686.c
+-fno-defer-pop -fno-omit-frame-pointer -fno-schedule-insns2 -mno-accumulate-outgoing-args -mno-stack-arg-probe call_i686.c
';
}