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.