From: A Large Angry SCM <gitzilla@gmail.com>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: Mark Wooding <mdw@distorted.org.uk>, git@vger.kernel.org
Subject: Re: [PATCH] Trivial warning fix for imap-send.c
Date: Sun, 12 Mar 2006 20:36:01 -0800 [thread overview]
Message-ID: <4414F6B1.9080107@gmail.com> (raw)
In-Reply-To: <4414E000.9030902@zytor.com>
H. Peter Anvin wrote:
> A Large Angry SCM wrote:
>> Mark Wooding wrote:
>>
>>> Linus Torvalds <torvalds@osdl.org> wrote:
>>>
>>>> So in modern C, using NULL at the end of a varargs array as a
>>>> pointer is perfectly sane, and the extra cast is just ugly and
>>>> bowing to bad programming practices and makes no sense to anybody
>>>> who never saw the horror that is K&R.
>>>
>>> No! You can still get bitten. You're lucky that on common platforms
>>> all pointers look the same, but if you find one where `char *' (and
>>> hence `void *') isn't the same as `struct foo *' then, under appropriate
>>> circumstances you /will/ unless you put the casts in.
>>
>> Please explain how malloc() can work on such a platform. My reading of
>> the '89 ANSI C spec. finds that _ALL_ (non function) pointers _are_
>> cast-able to/from a void * and that NULL should be #defined as (void
>> *). See 3.2.2.3 and 4.1.5 if interested.
>
> Consider the non-hypothetical example of a word-addressed machine, which
> has to have extra bits in a subword pointer like char *. The C standard
> requires that void * has those bits as well, but it doesn't means that
> any void * can be cast to any arbitrary pointer -- the opposite,
> however, is required.
ANSI X3.159-1989
3.2.2.3 Pointers
A pointer to *void* may be converted to or from a pointer to any
incomplete or object type. A pointer to any incomplete or object type
may be converted to a pointer to *void* and back again; the result shall
compare equal to the original pointer.
For any qualifier /q/, a pointer to a non-/q/-qualified type may be
converted to a pointer to the /q/-qualified version of the type; the
values stored in the original and converted pointers shall compare equal.
In integral constant expression with value 0, or such an expression cast
to type <bold>void *</bold>, is called a /null pointer constant.[*33*]
If a null pointer constant is assigned to or compared for equality to a
pointer, the constant is converted to a pointer of that type. Such a
pointer, called a /null pointer/, is guaranteed to compare unequal to a
pointer to any object or function.
Two null pointers, converted through possibly different sequences of
casts to pointer types, shall compare equal.
[*33*] the macro *NULL* is defined in <stddef.h> as a null pointer
constant; see 4.1.5.
next prev parent reply other threads:[~2006-03-13 4:36 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-11 19:29 [PATCH] Trivial warning fix for imap-send.c Art Haas
2006-03-12 10:44 ` Mark Wooding
2006-03-12 11:27 ` Junio C Hamano
2006-03-12 13:59 ` [PATCH] Use explicit pointers for execl...() sentinels Mark Wooding
2006-03-12 15:13 ` Timo Hirvonen
2006-03-12 17:32 ` Mark Wooding
2006-03-12 18:08 ` Timo Hirvonen
2006-03-13 3:31 ` Jeff King
2006-03-13 4:12 ` Horst von Brand
2006-03-14 0:42 ` [OT] " Jeff King
2006-03-12 16:57 ` [PATCH] Trivial warning fix for imap-send.c Linus Torvalds
2006-03-12 18:01 ` Mark Wooding
2006-03-12 19:20 ` A Large Angry SCM
2006-03-13 2:59 ` H. Peter Anvin
2006-03-13 4:36 ` A Large Angry SCM [this message]
2006-03-13 5:22 ` Linus Torvalds
2006-03-13 6:37 ` H. Peter Anvin
2006-03-13 6:46 ` Linus Torvalds
2006-03-13 16:37 ` Olivier Galibert
2006-03-13 3:38 ` Jeff King
2006-03-13 4:14 ` Horst von Brand
2006-03-13 16:26 ` Linus Torvalds
2006-03-13 6:41 ` H. Peter Anvin
2006-03-12 21:51 ` Horst von Brand
2006-03-12 23:02 ` Linus Torvalds
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4414F6B1.9080107@gmail.com \
--to=gitzilla@gmail.com \
--cc=git@vger.kernel.org \
--cc=hpa@zytor.com \
--cc=mdw@distorted.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).