sepavloff added a comment. In D87528#2299497 <https://reviews.llvm.org/D87528#2299497>, @mibintc wrote:
> In D87528#2297647 <https://reviews.llvm.org/D87528#2297647>, @sepavloff wrote: > >> In D87528#2295015 <https://reviews.llvm.org/D87528#2295015>, @mibintc wrote: >> >>> I tried using the 0924 version of the patch on an internal workload SPEC >>> "cpu2017" and found that a few files failed to compile because of an error >>> message on static initializer, like this: struct s { float f; }; static >>> struct s x = {0.63}; Compiled with ffp-model=strict "initializer..is not >>> a compile-time constant" >> >> Thank you for trying this. >> >> The error happens because static variable initializer gets rounding mode >> calculated from command-line options (`dynamic`), but this is wrong because >> such initializers must be calculated using constant rounding mode >> (`tonearest` in this case). Either we must force default FP mode in such >> initializers, or we are wrong when using >> `FPOptions::defaultWithoutTrailingStorage`. Need to analyze this problem >> more. > > @sepavloff Please provide precise reference to support the claim "but this is > wrong because such initializers must be calculated using constant rounding > mode..." many thanks! From http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2478.pdf: **6.7.9 Initialization** … 4 All the expressions in an initializer for an object that has static or thread storage duration shall be constant expressions or string literals. **6.6 Constant expressions** … 2 A constant expression can be evaluated during translation rather than runtime, and accordingly may be used in any place that a constant may be. **F.8.2 Translation** 1 During translation, constant rounding direction modes (7.6.2) are in effect where specified. Elsewhere, during translation the IEC 60559 default modes are in effect: - The rounding direction mode is rounding to nearest. … **7.6.2 The FENV_ROUND pragma** … 2 The FENV_ROUND pragma provides a means to specify a constant rounding direction for floating point operations for standard floating types within a translation unit or compound statement. … CHANGES SINCE LAST ACTION https://reviews.llvm.org/D87528/new/ https://reviews.llvm.org/D87528 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits