[fpc-devel] [Suggestion] Enumeration range-check intrinsic
J. Gareth Moreton
gareth at moreton-family.com
Sun Jul 7 07:33:22 CEST 2019
Maybe I'm missing something painfully
obvious here. Can I request an example
where such an invalid value/undefined
behaviour crops up in bitpacked records so
I can see what's going on? Logic dictates
that the number of bits required to store
an enum in that arrangement is equal to
the index of the highest element, although
that's without looking at the source code
and doesn't account for elements that have
assigned negative values.
In the meantime, I'm working on making
"as" and "is" work with ordinal types as
well as enumerations, although currently
some headaches occur if the right-hand
side is larger than the CPU word size
(e.g. Int64 on i386). I'll upload the
patch to the issue once it's working
properly.
Gareth aka. Kit
On Sat 06/07/19 14:19 , "Jonas Maebe"
jonas at freepascal.org sent:
> On 06/07/2019 14:56, Martok wrote:
>
> > Am 06.07.2019 um 09:01 schrieb Ondrej
Pokorny:
>
> >> Ord(aEnum) for invalid enumeration
values is
> undefined ;)
> >
>
> > If there was any logic here, it should
be, but
> it's not ;-)
> >
>
> > The documentation page specifically
mentions Ord
> as the older syntax to hard
> > casts. Whatever it contains, any enum
is always
> smaller or equal to the largest
> > possible bitsize, which is Longint.
>
>
>
> It is in fact undefined. The undefined
behaviour comes from the fact
>
> that an invalid value was stored in the
variable and then read again,
>
> not from how the read value is used. An
example of where you may get
>
> different data than wat you put in, even
in the absence of any
>
> optimisations, is again bitpacked
records/arrays.
>
>
>
>
>
> Jonas
>
>
__________________________________________
_____
>
> fpc-devel maillist - fpc-
devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-
bin/mailman/listinfo/fpc-devel
>
>
>
>
>
More information about the fpc-devel
mailing list