[PATCH] D55413: [ExprConstant] Handle compound assignment when LHS has integral type and RHS has floating point type
S. B. Tam via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 12 06:49:09 PST 2018
cpplearner marked an inline comment as done.
cpplearner added inline comments.
================
Comment at: clang/lib/AST/ExprConstant.cpp:3441
+ Value);
+ }
APSInt LHS = HandleIntToIntCast(Info, E, PromotedLHSType,
----------------
rjmccall wrote:
> Can we more fundamentally restructure this entire handler so that, if the compound assignment's computation result type is an arithmetic type, we just promote both operands to that type, do the arithmetic there, and then coerce back down? This is C++, so the LHS type imposes almost no restrictions on the RHS type; also, this is Clang, where we support way too many arithmetic types for our own good.
It seems the conditional statement is unavoidable, because `APSInt` and `APFloat` can't be handled at the same time (i.e. you need to choose among `Handle{Int,Float}To{Int,Float}Cast`, and between `handleIntIntBinOp`/`handleFloatFloatBinOp`). Maybe it's possible to add a layer that can accept both `APSInt` and `APFloat`, but it seems like an overkill if it's only used in the compound assignment case.
Repository:
rC Clang
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D55413/new/
https://reviews.llvm.org/D55413
More information about the cfe-commits
mailing list