Ah yes, my bad, my original code had the unsigned operand as explicitly 32
bits, which I had expected to up-cast to int.  But in fact ints aren't
wider even with a 64 bit architecture.  Strict type checking as an option
for all type in all uses would be a helpful bug squishing tool.

On Sun, May 22, 2016 at 12:56 AM, Al Thomas <astav...@yahoo.co.uk> wrote:

>
>
>
>
> ----- Original Message -----
> > From: Andy Lees <andrewl...@gmail.com>
> > Sent: Saturday, 21 May 2016, 14:56
> > Subject: [Vala] Trap for the unwary or incorrect code?
> >
> > If I have the following code, or similar:
> > void main (string[] args) {
> >   uint ui = 2;
> >   int i = -3;
> >   if (i < ui) {
> >     stdout.printf("Comparison works\n");
> >   }
> > }
> >
> > No output is produced.  Given Vala is generally very good at warning
> about
> > type mismatches, or correctly doing an implicit cast, I find this rather
> > strange.  Yes, I should not be comparing a negative value against an
> > unsigned value, but logically the comparison should produce the expected
>
> > output, I would have thought?
> > > In general, as type inference can make the type of a variable unclear
> to
> > the casual viewer, and the declaration of a variable may be in a
> different
> > file, this permissiveness is a potential source of error, I think.
>
>
>
> At present I would say this is a trap for the unwary, although a
>
> --strict-value-type mode for Vala may be helpful. This is a well known
> problem
> in the C world.
>
> In Vala the spec for relational arithmetic operators says "Where both
> operands
>
> are of integer type, both are converted to the largest integer type
> involved"
>
> https://wiki.gnome.org/Projects/Vala/Manual/Expressions#Relational_operations
> Presumably that means the largest value rather than range of values.
>
> You will also find this with arithmetic operations, e.g.
>
>
> http://stackoverflow.com/questions/35305625/vala-quotient-of-two-integers-is-always-an-integer-why
>
> In C this type of behaviour is labelled the "usual arithmetic conversions"
> if
> you want to do a search. Some examples showing what you have found:
>
> https://www.securecoding.cert.org/confluence/display/c/INT02-C.+Understand+integer+conversion+rules
>
> http://www.iesensor.com/blog/2012/10/21/unsigned-integer-can-be-evil-c-implicit-conversion/
>
> Al
>
_______________________________________________
vala-list mailing list
vala-list@gnome.org
https://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to