views:

146

answers:

2

Hi,

can anyone tell me why I get "Return value ... might be undefined" here:

function TXMLAcceptorBCOLSubmission.createRecordsInBCFEEPAR(AXML: TRipXMLElement): String;
var
  ...
begin
  Result := '';
+2  A: 

Following code doesn't generate a warning using Delphi 5 so

  • either it is a bug in an other Delphi version (you should mention the version you use)
  • or either it is something you didn't show us yet.

Code

program ProveAPoint;
{$APPTYPE CONSOLE}
uses SysUtils;

type
  TRipXMLElement = record
  end;
  TXMLAcceptorBCOLSubmission = class
  public
    function createRecordsInBCFEEPAR(AXML: TRipXMLElement): string;
  end;

function TXMLAcceptorBCOLSubmission.createRecordsInBCFEEPAR(AXML: TRipXMLElement): String;
begin
  Result := '';
end;

var
  AXML: TRipXMLElement;
begin
  with TXMLAcceptorBCOLSubmission.Create do
  begin
     createRecordsInBCFEEPAR(AXML);
     Free;
  end;
end.
Lieven
+5  A: 

I am using Delphi 5 and it looks like the problem is caused by declaring more than 30 variables (I know, I know). It doesn't seem to matter what they are called or what types they are.

Jamie Kitson
Indeed; this was a bug that has been resolved in Delphi 2009: http://qc.embarcadero.com/wc/qcmain.aspx?d=51078
Jeroen Pluimers
That fits with my experience. There seems to be a certain number of variables the compiler will "track" for the assignedness check, and `Result` is frequently the first to be abandoned. The workaround is simple: Write shorter functions.
Rob Kennedy
Report 51078 says that it was fixed in 12.0.2872.27234, but I'm pretty sure that I saw it in D2010.
Alexander