From: Joseph Myers <joseph@codesourcery.com>
To: Martin Uecker <uecker@tugraz.at>
Cc: <gcc-patches@gcc.gnu.org>, <richard.guenther@gmail.com>
Subject: Re: [C PATCH v2] Fix ICEs related to VM types in C [PR106465, PR107557, PR108423, PR109450]
Date: Fri, 19 May 2023 20:54:42 +0000 [thread overview]
Message-ID: <4defa189-65c0-f92-8341-615f84659c4f@codesourcery.com> (raw)
In-Reply-To: <ab760102a39e56340c68cba76a79fea70f7cc0f4.camel@tugraz.at>
[-- Attachment #1: Type: text/plain, Size: 1446 bytes --]
On Fri, 19 May 2023, Martin Uecker via Gcc-patches wrote:
> Thanks Joseph!
>
> Revised version attached. Ok?
The C front-end changes and tests are OK.
> But I wonder whether we generally need to do something
> about
>
> sizeof *x
>
> when x is NULL or not initialized. This is quite commonly
> used in C code and if the type is not of variable size,
> it is also unproblematic. So the UB for variable size is
> unfortunate and certainly also affects existing code in
> the wild. In practice it does not seem to cause
> problems because there is no lvalue conversion and this
> then seems to work. Maybe we document this as an
> extension? (and make sure in the C FE that it
> works) This would also make this idiom valid:
There's certainly a tricky question of what exactly it means to evaluate
*x as far as producing an lvalue but without converting it to an rvalue -
but right now the C standard wording on unary '*' is clear that "if it
points to an object, the result is an lvalue designating the object" and
"If an invalid value has been assigned to the pointer, the behavior of the
unary * operator is undefined.", i.e. it's the evaluation as far as
producing an lvalue that produces undefined behavior, rather than the
lvalue conversion (that doesn't happen in sizeof) that does so. And
indeed we probably would be able to define semantics that avoid UB if
desired.
--
Joseph S. Myers
joseph@codesourcery.com
prev parent reply other threads:[~2023-05-19 20:54 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-18 12:46 [PING] [C PATCH] " Martin Uecker
2023-05-18 21:46 ` Joseph Myers
2023-05-19 11:50 ` [C PATCH v2] " Martin Uecker
2023-05-19 20:54 ` Joseph Myers [this message]
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=4defa189-65c0-f92-8341-615f84659c4f@codesourcery.com \
--to=joseph@codesourcery.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=richard.guenther@gmail.com \
--cc=uecker@tugraz.at \
/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 read-only IMAP folder(s) and NNTP newsgroup(s).