[PATCH] D136548: [clang][CodeGen] Consistently return nullptr Values for void builtins and scalar initalization

Markus Böck via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Oct 23 03:33:12 PDT 2022


zero9178 created this revision.
zero9178 added reviewers: erichkeane, rjmccall, efriedma, asl, aaron.ballman.
Herald added a project: All.
zero9178 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

A common post condition of the various visitor functions in CodeGen is that instructions, that do not return any values, simply return a nullptr Value as a sentinel. This has not been the case however for calls to some builtins returning void, as well as for an initializer expression of the form `void()`. This would then lead to ICEs in CodeGen on code relying on nullptr being returned for void values, which is eg. the case for conditional expressions [0].
This patch fixes that by returning nullptr Values for intrinsics known not to return any values as well as for a scalar initializer returning void.

Fixes https://github.com/llvm/llvm-project/issues/53127

[0] https://github.com/llvm/llvm-project/blob/266ec801fb23f9f5f1d61ca9466e0805fbdb78a7/clang/lib/CodeGen/CGExprScalar.cpp#L4849-L4892

-----

Note:
I opted to adjust these functions as an idealistic goal to be more consistent with the rest of the codebase. An alternative implementation that would have also fixed  the above issue and would be less code is to simply handle it within the visit function of the conditional expression, by simply checking if it the type of the expression is void and returning bailing out by returning nullptr there instead of creating the invalid phi node. If you prefer that version or something of the sorts please let me know


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D136548

Files:
  clang/lib/CodeGen/CGBuiltin.cpp
  clang/lib/CodeGen/CGExprScalar.cpp
  clang/test/CodeGen/pr53127.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D136548.469972.patch
Type: text/x-patch
Size: 10526 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20221023/047ba409/attachment.bin>


More information about the cfe-commits mailing list