Re: [PATCH v2] remove a warning building a test

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> 
> On 05/18/2016 07:14 AM, Christophe Fergeau wrote:
> > On Wed, May 18, 2016 at 12:46:03PM +0300, Uri Lublin wrote:
> >>
> >> In man cmsg examples I see they use a pointer:
> >> int *pi = (int*) CMSG_DATA(cmsg);
> >> *fd = *pi;
> > 
> > It seems to work this way, but I'm not sure why this works ;)
> > 
> 
> 
> I read an excelent post from Thiago Macieira (Qt) about this types of
> warnings a long time ago, maybe it will make things clearer for you too...
> 
> http://blog.qt.io/blog/2011/06/10/type-punning-and-strict-aliasing/
> 

Actually there are some mistake in the article.
Situation is sometimes better sometimes worst.

In this

  int i = 42;
  short s = *(short*)&i;

compiler could rewrite to something like

  int i;
  short s = *(short*)&i;
  i = 42;

so s can be anything.

  short s[2] = { 0, 42 };
  int i = *(int *)s;

still here can be anything and the crash is not due to strict aliasing.

I think the union is kind of a missing specification inside the standard
but really should work. Also gcc has a may_alias attribute which should
have been added to the standard (or similar specification). Considering that
C was introduced to help with stuff like kernels it's a big omission.

The inline of operator>> is a bug in the implementation, the standard clearly
state that there are aliasing in that code (as char* and or similar pointers
are used).

The List* -> Node* cast is a programming mistake, the solution is using
a Node** for the tail.

This C code - happily - don't compile anymore:

    int i;
    char *p1, *p2;
    ...
    *i = i + p1 + p2;

Linux Kernel and other software disable the strict aliasing.

Frediano
_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]