Old Bug: Global variable not initialised properly

Ian Thurlbeck ian at stams.strath.ac.uk
Fri May 18 16:48:31 CEST 2001


Dear All

After 2 years of using gpc I thought I'd better update
to a newer release, so I have installed gcc-2.95.3 and
gpc-20010512. 

It appears than an old bug has resurfaced.
A global variable declared in a module is not initialised
properly.

The following code does NOT print out the string 'OK':

-------main.h------------
var s: string(40); external;

procedure print_globals; external;
-------------------------

-------main.p------------
program main(input,output);

#include "main.h"

begin
	s:='OK';
	print_globals;
end.
-------------------------

-------lib.p-------------
module lib(input,output);

#include "main.h"

var s:string(40);

procedure print_globals;
begin
 writeln(s);
end;

end.
-------------------------

Compile with 'gpc -o main main.p lib.p'

If you move the declaration of string 's' from lib.p
to main.p it works.

This was fixed about 2 years ago (by Peter I think) but
it seems to have gotten un-fixed.  

The initialisation code for the Main program, when the variable 's'
is defined in the module in lib.p, is not correct. If you do:

# gpc -c lib.p
# gpc -S main.p
# vi main.s     and add "movl $40,S" before .L6: in
                init_pascal_main_program, then
# as -V -Qy -o main.o main.s
GNU assembler version 2.10.91 (i386-redhat-linux) using BFD version 
2.10.91.0.2
# gpc -o main main.o lib.o
# ./main
OK

you get the expected result.

Hope there is enough information to fix the problem.

Many thanks

Ian
--
Ian Thurlbeck                http://www.stams.strath.ac.uk/
Statistics and Modelling Science, University of Strathclyde
Livingstone Tower, 26 Richmond Street, Glasgow, UK,  G1 1XH
Tel: +44 (0)141 548 3667           Fax: +44 (0)141 552 2079
°ïS




More information about the Gpc mailing list