[FFmpeg-devel] Hacks on FATE

matthieu castet castet.matthieu
Thu Jun 18 21:20:08 CEST 2009

M?ns Rullg?rd <mans <at> mansr.com> writes:

> Those are wrong then.  Think about it for a moment.  A memory operand
> is nothing but a region of memory *with a specific type*.  A *value*
> can be converted to another type (implicitly or by a cast), but a
> value *as stored* has a fixed type that cannot be altered.
> Using cast expressions with the 'm' constraint is as wrong as code
> like this:
>   void foo(int *);
>   char x;
>   foo((int*)&x);
> That gcc, perhaps by accident, allows such nonsense is no excuse for
> writing code that way.
The worst of this is that it work if gcc only if the cast does nothing :

$ cat /tmp/pp.c
int foo()
        int a;
                        : "m"((long)(a))

$ gcc -m64  /tmp/pp.c -c -o /tmp/p.o
/tmp/pp.c: In function 'foo':
/tmp/pp.c:4: error: memory input 0 is not directly addressable

More information about the ffmpeg-devel mailing list