On Mon, Sep 17, 2018 at 11:02 PM Richard W.M. Jones <rjones@redhat.com> wrote:
On Mon, Sep 17, 2018 at 08:55:06PM +0100, Richard W.M. Jones wrote:
> On Mon, Sep 17, 2018 at 10:00:30PM +0300, Nir Soffer wrote:
> > On Mon, Sep 17, 2018 at 6:03 PM Richard W.M. Jones <rjones@redhat.com>
> > wrote:
> >
> > > This should have no effect.  However it's probably better to pass the
> > > full type explicitly rather than using an implicit truncation.
> > >
> >
> > Why is it better?

OK I'll give one (somewhat contrived) example where it might be better
not to rely on implicit truncation of parameters:

(1) User is compiling on a 32 bit architecture.

(2) They have turned off or are ignoring compiler warnings.

(3) The code has forgotten to #include "isaligned.h" (either our code
omits this, which is unlikely, or the user is developing a new plugin
using the same framework).

In this case the uint64_t would be passed as a 64 bit value (eg.  in
two registers, or as a 64 bit stack entry), and thus the receiving
function would get the wrong parameters.

What if we use uint64_t, and the same careless user sends two 32 bit
size instead of 64 bit size? We will check the second argument with non-existing
argument, using some random value from the stack.

I think we need to put the line somewhere. Users should include headers
and watch compiler warnings. If not, they deserve the results :-)
 
Nir