Q66429: R6000 – Stack Overflow at Compile Time with C Compiler
Article: Q66429
Product(s): See article
Version(s): 6.00 6.00a | 6.00 6.00a
Operating System(s): MS-DOS | OS/2
Keyword(s): ENDUSER | buglist6.00 buglist6.00a | mspl13_c
Last Modified: 9-NOV-1990
The code sample below produces the following run-time error on
compilation under the small and medium memory models with only the
following individual optimizations:
/Oa /Oc /Oi /On /Op /Or /Os /Ot /Ow /Oz
Run-Time Error
--------------
run-time error R6000
- stack overflow
If only the above optimizations, including the defaults, are used to
compile the program, the run-time error will occur. However, if one of
the following optimizations is added, the run-time error will not
occur:
/Od /Oe /Og /Ol /Ox
In addition, the following are two additional workarounds that can be
applied to the code itself:
1. Do not use the register storage class for the structure pointer.
2. Use an if-else statement instead of the ternary operator.
Sample Code
-----------
void main(void)
{
struct foo {
int i;
};
int n;
struct foo *goo;
register struct foo *moo;
moo=goo;
n = moo->i ? moo->i :10000;
}
Microsoft has confirmed this to be a problem in the C compiler
versions 6.00 and 6.00a. We are researching this problem and will post
new information here as it becomes available.
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1986-2002.