> Author: jhibbits > Date: Mon Jan 30 02:32:33 2017 > New Revision: 312977 > URL: > https://svnweb.freebsd.org/changeset/base/312977 > > > Log: > Force the setting of bit 7 in the sysmouse packet byte 1 to be unsigned. > > Clang complains about the shift of (1 << 7) into a int8_t changing the > value: > > warning: implicit conversion from 'int' to 'int8_t' (aka 'signed char') > changes > value from 128 to -128 [-Wconstant-conversion] > > Squash this warning by forcing clang to see it as an unsigned bit. > > This seems odd, given that it's still a conversion of 128->-128, but I'm > guessing the explicit unsigned attribute notifies clang that sign really > doesn't > matter in this case.
[The following is based just on the C standard, not POSIX or other standards that may also be involved from FreeBSD's point of view.] An FYI/explanation of sorts. . . In the C11 standard (e.g., since I have it handy) having the new type be signed has the rule for signed and unsigned integer implicit conversions between the types: (After the cases of value-representable-so-value-is-unchanged and new-type-is-unsigned, quoting:) > Otherwise, the new type is signed and the value cannot be represented > in it; either the result is implementation-defined or an > implementation-defined signal is raised. So while 1U use may make the compiler(s) tested be quiet it still leaves the code in implementation-defined territory where different starting types for the same value are allowed to have different results. But they are not required to and compiler releases could change the classification --and if there are messages from the compiler or not. Bit patterns need not be preserved for the sign-bit and/or value-carrying bits in the new type vs. the old type. (By contrast a new type being unsigned is defined with a mathematically specific/unique result and so a specific bit pattern for the value-carrying bits, ignoring trap representations and other pad bits if they exist.) > Reported by: Mark Millard <markmi AT dsl-only DOT net> > MFC after: 2 weeks > > Modified: > head/sys/dev/adb/adb_mouse.c > > Modified: head/sys/dev/adb/adb_mouse.c > ============================================================================== > --- head/sys/dev/adb/adb_mouse.c Mon Jan 30 02:25:55 2017 > (r312976) > +++ head/sys/dev/adb/adb_mouse.c Mon Jan 30 02:32:33 2017 > (r312977) > @@ -520,7 +520,7 @@ ams_read(struct cdev *dev, struct uio *u > } > } > > - sc->packet[0] = 1 << 7; > + sc->packet[0] = 1U << 7; > sc->packet[0] |= (!(sc->buttons & 1)) << 2; > sc->packet[0] |= (!(sc->buttons & 4)) << 1; > sc->packet[0] |= (!(sc->buttons & 2)); === Mark Millard markmi at dsl-only.net _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"