[fpc-devel] Const optimization is a serious bug

Martin fpc at mfriebe.de
Sat Jul 9 02:13:35 CEST 2011


On 09/07/2011 00:59, Max Vlasov wrote:
> On Sat, Jul 9, 2011 at 3:14 AM, Martin<fpc at mfriebe.de>  wrote:
>> function CRCConstString(constref Str: string): integer;
>> does what you describ
> Hmm, it's interesting.. Some observations:
> - constref is implemented in 2.5.1, right? Unfortunately I can not
> test it right now in 2.4.2, it refuses to recognize it, but I I want
> to test it.
> - In LCL it used only with interfaces and TGuid's, no strings or other
> structures
> - there are not much information about constrefs in Lazarus, several
> posts, the largest part of them is yours, Martin :) so you're probably
> one of the few who really understand it  :)
Well the LCL can't use it, if it's trunk only (except if IFDEFed). The 
LCL should compile with release fpc...

See: 
http://wiki.lazarus.freepascal.org/FPC_New_Features_Trunk#Constref_parameter_modifier

- See difference to normal "const" is " that it must be passed by 
reference."

- Note (same as const) it is described as: "This modifier means that the 
compiler can assume that the parameter is constant"
The "assume" means that the requirement for constant-ness goes above 
that what the compiler can enforce (that is: the compiler can enforce 
only the local var; but constant implies the value by any means of access)

With what the compiler does today (afaik) none-constantness would not 
cause any harm (yet). Unless you count it as harm (and you should) that 
future FPC may (= "is allowed to") compile your code (without any 
warning or hint) into an exe that behaves different.




More information about the fpc-devel mailing list