sepavloff added inline comments.
================ Comment at: clang/lib/AST/Interp/ByteCodeExprGen.cpp:152 + case CK_FloatingToIntegral: { + llvm::RoundingMode RM = getRoundingMode(CE); + Optional<PrimType> ToT = classify(CE->getType()); ---------------- tbaeder wrote: > sepavloff wrote: > > According to C standard (6.3.1.4p1): > > ``` > > When a finite value of real floating type is converted to an integer > > type other than _Bool, the fractional part is discarded (i.e., the value is > > truncated toward zero). > > ``` > > So the conversion should not depend on rounding mode. The same applies to > > the conversion to boolean (6.3.1.2p1): > > ``` > > When any scalar value is converted to _Bool, the result is 0 if the > > value compares equal to 0; otherwise, the result is 1. > > ``` > > > So this is a difference between C and C++? No, C++ behaves similarly ([conv.fpint]): ``` A prvalue of a floating-point type can be converted to a prvalue of an integer type. The conversion truncates; that is, the fractional part is discarded. ``` and [conv.bool]: ``` A prvalue of arithmetic, unscoped enumeration, pointer, or pointer-to-member type can be converted to a prvalue of type bool. A zero value, null pointer value, or null member pointer value is converted to false; any other value is converted to true. ``` Theses conversions do not depend on rounding mode. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D134859/new/ https://reviews.llvm.org/D134859 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits