[net.lang.pascal] Turbo Pascal Version 3.00

smd@umcp-cs.UUCP (Stanley Dunn) (11/19/85)

Replace this line with your compiler bug

I sat down to write the program for the next project I am going
to give to my Computer Science I class at home on my CPM system
with Turbo Pascal Version 3.00.  The following program illustrates
the problem with the program I wrote:

program junk(input,output);
procedure proca(chita:char); forward;
procedure procb(chitb:char);
begin
     writeln('Entering procb with a ',chitb);
     proca('A');
     writeln('Leaving procb with a ',chitb);
end;
procedure proca;
begin
     writeln('Entering proca with a ',chita);
     if chita = 'I' then procb('I');
     writeln('Leaving proca with a ',chita);
end;
begin
     proca('I');
end.

The output using Turbo Pascal was:

     Entering proca with a I
     Entering procb with a I
     Entering proca with a A
     Leaving proca with a A
     Leaving procb with a I
     Leaving proca with a A

While the output for the same program on a VAX with BSD UNIX,
IBM VM/SP CMS, or a Macintosh with MacPascal was:

     Entering proca with a I
     Entering procb with a I
     Entering proca with a A
     Leaving proca with a A
     Leaving procb with a I
     Leaving proca with a I

as I expected.  Calling Borland Technical Support was no help,
as they wanted a copy of the program on an IBM format disk.
The technical support specialist asked me to send a copy of the
program on a disk.  When I asked "in what format?" she replied
"IBM, of course."  I guess CPM does not exist anymore.

Obviously, I was quite surprised at the output, and now I
wonder how they tested the compiler.  It seems that a program
as simple as the one above should have been tested.

-- Stanley Dunn
   University of Maryland Department of Computer Science

c55-hc@ucbbuddy.BERKELEY.EDU (Brent Chapman) (11/21/85)

<bugline>

To compile a recursive program on a CPM-80 machine, you must set one
of the compiler switches.  I BELIEVE (I don't have the manual sitting
in front of me) that the line that needs to be inserted is:
  {$A-}
but I'm not absolutely certain; look it up in the back of the manual.

NOTE that this bug/switch applies ONLY to CPM-80 version of Turbo.
CPM-86 and MS-DOS do not need this switch, and may not even recognize
it.

Brent Chapman

ucbvax!ucbbugs!chapman		chapman@bugs.berkeley.arpa
ucbvax!ucbamber!chapman		chapman@amber.berkeley.arpa
ucbvax!ucbbuddy!c55-hc		c55-hc@buddy.berkeley.arpa

Opinions expressed herein are strictly my own (but may be borrowed upon
request, for a suitable fee).

db21@ihuxk.UUCP (Dave Beyerl) (11/21/85)

> Replace this line with your compiler bug
> 
> I sat down to write the program for the next project I am going
> to give to my Computer Science I class at home on my CPM system
> with Turbo Pascal Version 3.00.  The following program illustrates
> the problem with the program I wrote:
> 
> program junk(input,output);
> procedure proca(chita:char); forward;
> procedure procb(chitb:char);
> begin
>      writeln('Entering procb with a ',chitb);
>      proca('A');
>      writeln('Leaving procb with a ',chitb);
> end;
> procedure proca;
> begin
>      writeln('Entering proca with a ',chita);
>      if chita = 'I' then procb('I');
>      writeln('Leaving proca with a ',chita);
> end;
> begin
>      proca('I');
> end.
> 
> The output using Turbo Pascal was:
> 
>      Entering proca with a I
>      Entering procb with a I
>      Entering proca with a A
>      Leaving proca with a A
>      Leaving procb with a I
>      Leaving proca with a A
> 
> While the output for the same program on a VAX with BSD UNIX,
> IBM VM/SP CMS, or a Macintosh with MacPascal was:
> 
>      Entering proca with a I
>      Entering procb with a I
>      Entering proca with a A
>      Leaving proca with a A
>      Leaving procb with a I
>      Leaving proca with a I
> 
> as I expected.  Calling Borland Technical Support was no help,
> as they wanted a copy of the program on an IBM format disk.
> The technical support specialist asked me to send a copy of the
> program on a disk.  When I asked "in what format?" she replied
> "IBM, of course."  I guess CPM does not exist anymore.
> 
> Obviously, I was quite surprised at the output, and now I
> wonder how they tested the compiler.  It seems that a program
> as simple as the one above should have been tested.
> 
> -- Stanley Dunn
>    University of Maryland Department of Computer Science

	Because I happened to have a copy of my Turbo Pascal
compiler handy, I tried the above program in Turbo.  When I ran
the program, I received the second set of outputs given in the
above article.  The version of Turbo that I have is identified
as ver. 3.01A for the IBM.  Apparently, Borland either corrected
this problem in the subsequent point (.01) release or there is 
a significant difference between the CP/M and IBM versions of 
Turbo.  Hopes this helps in tracking down the problem.

For every problem there is one           	Dave Beyerl
solution which is simple, neat,                 ihuxk!db21
and wrong!

johnson@noscvax.UUCP (Timothy A. Johnson) (11/23/85)

> Replace this line with your compiler bug
> 
> I sat down to write the program for the next project I am going
> to give to my Computer Science I class at home on my CPM system
> with Turbo Pascal Version 3.00.  The following program illustrates
> the problem with the program I wrote:
> 
> program junk(input,output);
> procedure proca(chita:char); forward;
> procedure procb(chitb:char);
> begin
>      writeln('Entering procb with a ',chitb);
>      proca('A');
>      writeln('Leaving procb with a ',chitb);
> end;
> procedure proca;
> begin
>      writeln('Entering proca with a ',chita);
>      if chita = 'I' then procb('I');
>      writeln('Leaving proca with a ',chita);
> end;
> begin
>      proca('I');
> end.
> 
> The output using Turbo Pascal was:
> 
>      Entering proca with a I
>      Entering procb with a I
>      Entering proca with a A
>      Leaving proca with a A
>      Leaving procb with a I
>      Leaving proca with a A
> 
> While the output for the same program on a VAX with BSD UNIX,
> IBM VM/SP CMS, or a Macintosh with MacPascal was:
> 
>      Entering proca with a I
>      Entering procb with a I
>      Entering proca with a A
>      Leaving proca with a A
>      Leaving procb with a I
>      Leaving proca with a I
> 
> as I expected.  Calling Borland Technical Support was no help,
> as they wanted a copy of the program on an IBM format disk.
> The technical support specialist asked me to send a copy of the
> program on a disk.  When I asked "in what format?" she replied
> "IBM, of course."  I guess CPM does not exist anymore.
> 
> Obviously, I was quite surprised at the output, and now I
> wonder how they tested the compiler.  It seems that a program
> as simple as the one above should have been tested.
> 
> -- Stanley Dunn
>    University of Maryland Department of Computer Science

Under the PC-DOS version of Turbo 3.0, the program runs correctly with
the same output as you have given for the other Pascals. The problem
may be associated with the CP/M-80 Compiler Directive "A". The default
is "A+" which inhibits recursive code. Switching to "A-" may solve your
problem. This is documented on or about page 318 in the 3.0 manual.

Timothy A. Johnson
Computer Sciences Corporation