Indeed, that is the mistake in that code.
Maybe earlier in that code (missing from the sample) there is something like
or
type TFoo = (foo, bar, false, help);
When you got old properties that RTTI stream from a stringified representation, and you need to change the type, then you may need to have an enum that contains the old names...
It's true that things like that can be done and they are valid Pascal but, I consider the creation of such code to represent mistakes (even though they compile) caused by rather poor programming.
I will, however, concede that as far as the compiler is concerned those aren't mistakes (at least not syntactical ones) since they compile. Semantically, I don't consider them mistakes, I consider them atrocities.
IMO, the language should NOT allow the redefinition of quite a number of standard identifiers which it currently allows to be redefined. Such redefinitions rarely, if ever, contribute to creating better code, on the contrary, more often than not they contribute to mislead the programmers who are left with the unenviable task of maintaining such code.
IMO, some "characteristics" of the language should be immutable, among many, the identifier "FALSE" should always be a boolean type with the value zero (at least in most common architectures.) If the programmer wants something different then declare a new identifier instead of misleading programmers by making "creative" redefinitions of standard identifiers.