rvalue() - #1721
Draft
alejandro-colomar wants to merge 4 commits into
Draft
Conversation
alejandro-colomar
commented
Aug 22, 2026
Collaborator
- Queued after lib/: Use the comma operator to perform lvalue conversion #1717.
Compound literals are lvalues, and thus somewhat dangerous. Their address can be taken, and they can be assigned to. We were using statement expressions to perform lvalue conversion on compound literals, transforming them to rvalues, and thus removing their dangers. However, statement expressions are non-standard, and quite complex within the compiler, so it would be interesting to use simpler compiler features to achieve the same. The comma operator also performs lvalue conversion, and we can use a dummy (void)0 expression to introduce it. This is significantly simpler, and is more portable than the statement expression: it is valid all the way back to C99 (the comma operator and the (void)0 expression are portable to C89, but the compound literal is from C99). By using a simpler feature, we have a smaller risk of running into a compiler bug. Suggested-by: Martin Uecker <uecker@tugraz.at> Cc: Christopher Bazley <chris.bazley@arm.com> Cc: Kees Cook <kees@kernel.org> Cc: Richard Russon <rich@flatcap.org> Signed-off-by: Alejandro Colomar <alx@kernel.org>
This macro takes an lvalue, and performs lvalue conversion, resulting in an rvalue. Signed-off-by: Alejandro Colomar <alx@kernel.org>
This helps document why we use '(void)0' with the comma operator. Signed-off-by: Alejandro Colomar <alx@kernel.org>
These macros already perform lvalue conversion thanks to the comma operator used for the _Generic() expressions. However, we may forget about that if we ever remove those _Generic() expressions for some reason, so let's make sure that we perform lvalue conversion on those compound literals regardless of that. Signed-off-by: Alejandro Colomar <alx@kernel.org>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.