Hi!
I've encountered the message in the subject trying to compile the following:
program x(input, output); label x_label; var z:integer; w:string; function f:string begin f:='f'; end;
begin if z = 1 then begin writeln('to x_label'); goto x_label; end;
w:= 'z:'+f;
x_label:;
end.
Compilation fails and I get: x.pas:3: label 'x_label' used before containing binding contour.
If I surround w:= 'z:'+f; with 'begin/end' then everything compiles. also if summation is not on string everything compiles.
I use "gpc version 20030507, based on gcc-3.2.1"
I've found in the archive message #2535 descring the same problem. However the message seems to be unanswered, at least the answer was not on the archive....
Thank you in advance,
Nick Ioffe ===================================================== message #2535 From: Berend de Boer Subject: label used before containingn binding contour Date: 29 Jan 1999, 21:01:21 Since about 5 years I try to compile lex for extended pascal with gpc. However, I still don't succeed. This program is a real test case I assume :-)
Here the latest error, boiled down to the most minimal code:
------------------------ program Test;
type string255=string(255);
function Test(filename, ext : String): string255; label 1,2; begin Test := ''; goto 1; goto 2; 2: Test := filename+'.'; 1: ; end;
begin end. ------------------------
Groetjes,
Berend. =======================================
Nick Ioffe wrote:
I've encountered the message in the subject trying to compile the following:
program x(input, output); label x_label; var z:integer; w:string; function f:string begin f:='f'; end;
begin if z = 1 then begin writeln('to x_label'); goto x_label; end;
w:= 'z:'+f;
x_label:;
end.
Compilation fails and I get: x.pas:3: label 'x_label' used before containing binding contour.
If I surround w:= 'z:'+f; with 'begin/end' then everything compiles. also if summation is not on string everything compiles.
I use "gpc version 20030507, based on gcc-3.2.1"
I've found in the archive message #2535 descring the same problem. However the message seems to be unanswered, at least the answer was not on the archive....
No answer, but a direct follow-up by the poster (without references, so not listed as a reply in the archive, but see "Next mail"):
: Sorry for this message. I see I was already in the known bug list. : Any takers for this error?
Unfortunately, this hasn't changed since then. This is one of the more difficult bugs to fix.
The recommended work-around (in this case not meant negatively :-), then as well as now, is to avoid using `goto' which is always possible -- sometimes at the cost of a Boolean variable, often (as in the example above, of course) even without one.
(BTW, even when having to use an extra variable, the resulting code may be better. The variable can sometimes be optimized away, and the compiler has better information about the control flow. Also, I'm not sure, but the code generator may not be particularly tuned for `goto' since it's generally not recommended.)
Frank