rjmccall added inline comments.

================
Comment at: clang/lib/AST/ExprConstant.cpp:3441
+                                  Value);
+    }
     APSInt LHS = HandleIntToIntCast(Info, E, PromotedLHSType,
----------------
cpplearner wrote:
> 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.
But we can have `HandleValueTo{Int,Float}Cast` functions that start with an 
arbitrary `APValue` and do the switch on that type, and we can have a 
`HandleValueValueBinOp` function that asserts that its operands have the same 
type and does the switch, and those two together should be good enough for what 
we need here.


================
Comment at: clang/lib/AST/ExprConstant.cpp:3453
                                   Value) &&
            handleFloatFloatBinOp(Info, E, Value, Opcode, RHS.getFloat()) &&
            HandleFloatToFloatCast(Info, E, PromotedLHSType, SubobjType, Value);
----------------
rsmith wrote:
> Does this work for the float += int case?
IIRC, the RHS gets promoted to the computation type in Sema.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55413/new/

https://reviews.llvm.org/D55413



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to