Der Compiler kann bei der Methode FreeAndNil das Constraint erkennen, das die Variable über alle Codepfade am Ende den Wert null hat. Zumindest könnte er das erkennen. Codepfade sind nichts anderes als Graphen und so eine Graphtraversierung ist weder NP-Komplett noch sonst irgendwie komplex. Nur macht das der Delphi Compiler nicht. Es werden irgendwelche Heuristiken verwendet, die eben dann zu falschen Ergebnissen führen, wie im Beispiel von
Baumina.
Aber der eigentlich Fehler ist ja nicht der, das *am Ende* der Routine 'FreeAndNil' aufgerufen wird, sondern der einfache Aufruf *am Ende* dazu führt, das der Aufruf der Methode 'Add' nicht mehr als verdächtig eingestuft wird. Ob da VAR oder OUT steht oder beides, ist doch vollkommen wurscht.
Können die noch nicht einmal einen anständigen Compiler bauen?