Turbo C++: F. P. Error: Stack Fault.
Blake McBride
root at blakex.RAIDERNET.COM
Fri Apr 26 11:36:05 AEST 1991
In <1991Apr23.151734.28924 at unixg.ubc.ca> burton at unixg.ubc.ca (Steve Cumming, net.leftist) writes:
>I am porting some software from UNIX to a 286 machine running DOS 3.4.
>Some of the code is produced by f2c, then hand hacked by yours truly.
>I am compiling with Turbo C++, using -f for software floating point
>emulation, and with -ff- to supress floating point optimisation,
>for reasons that should become evident.
>In addition to the usual trouble, I get floating point exceptions of
>the type mentioned in the Subject line. I can find no explanation of
>this error in the manual. The error occurs at seemingly random
>locations, though probably in the f2c'd code, in which are
>large numbers of explicit promotions and demotions from
>float to double and back. The occurance and apparent location
>of the error is dependent (seemingly) on the number and location
>of debug statements which I have scattered throught the code.
>Many of these print %f mode values.
>The program makes extensive use of the overlay manager, in
>case that is important. It also appears to be too large for
>the Turbo debugger. Sigh.
>Can anyone fill me in on what this error message
>is telling me, and suggest constructs I should be looking for?
>Many thanks.
>--
>#include "../h/disclaimer.h" /* I am not really Phil Burton, btw. */
>burton at unixg.ubc.ca ... and if dinosaurs "became" birds
>Steve Cumming, a.k.a. what will we become? - Anselm Hollow.
>
I have found the same problem. After a great deal of time and trouble
I descovered the problem. Believe it or not its the *= += -= /= operators!
About 2% of the time those operators generate incorrect code. If you replace
statements like x += y with x = x + y and so on, everything will work.
I have some code with a *= which would cause the same error you described.
When I changed it everything worked ok. Many other statements in that same
file have *= without causing any problems. If I leave the *= problem in and
generate assembler code it can't be assembled because of an illeagal
instruction!
I have been in contact with Borland about the problem. I have
also sent them sample code. They are able to reproduce the bug with the
code I sent them. They told me that since I was able to get around the
problem (by replacing the *= += etc. operators in my 20MB of C source) that
it wasn't significant!!! They said that they will try and have the bug
fixed in the next maintenance release (at least 6 months away). They also
told me that I couldn't be a beta tester (to get the fixed code sooner)
because I admited to them (when asked) that I had been a beta tester
for other companies!!!
I have MicroSoft C 6.0a and I purchased the Ergo DOS extender to
replace Borland C++ 2.0 and VROOM.......
--
Blake McBride Home (615) 790-8521
3020 Liberty Hills Drive Work (615) 790-1088
Franklin, TN 37064 root at blakex.raidernet.com
U.S.A. ...!uunet!mjbtn!raider!blakex!root
More information about the Comp.lang.c
mailing list