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

Re: [PATCH] C undefined behavior fix




On Sat, 5 Jan 2002, Florian Weimer wrote:

> jkl _at_ miacid.net writes:
> 
> > An arbitrary integer may be converted to a pointer.  
> >    ^^^^^^^^^
> 
> This rule exists so that implementations are not forced to issue a
> diagnostic for (char *)1.
>
No.  If the only goal was to avoid a diagnostic, the it could be
undefined.  The fact that it is implementation defined means that it's
reasonable to expect it to be useful for something.
 
> > 	I interpret this to mean that one MAY use integer arithmatic to
> > do move a pointer outside the bounds of an array.  Specifically, as soon
> > as I've cast the pointer to an integer, the compiler has an obligation to
> > forget any assumptions it makes about that pointer.  This is what casts
> > from pointer to integer are for!  when i say (int)p I'm saying that I
> > understand the address structure of the machine and I want to manipulate
> > the address directly.
> 
> According to the standard, you say that you want to cast p to type
> int.  You cannot manipulate machine addresses in C because C is
> defined as a high-level language, without backdoors to such low-level
> concepts as machine addresses.
> 
> The fact that quite a few implementations traditionally provide
> such backdoors in some cases does not mean that the C language is a
> low-level language, or that all implementations (even future ones)
> have to provide these backdoors.
> 

Whether C is a "low-level" or "high-level" language (whatever that
means) is not the issue here.  The issue here is that, as you say, quite a
few implementations of C provide the ability to access arbitrary memory
through pointers, and the standard provides some convenient places for the
implementation to do it, and many users of GCC would really like to have
this feature.

Forgive me if I haven't been reading the manual carefully enough.  Now can
we please get a straight answer to the question:  Does GCC provide the
ability to turn an arbitrary address into a pointer, and if so how do you
do it?

-JKL


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo _at_ vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: