hans added a comment. We saw a new warning in Chromium after this, and I wasn't sure if that's intentional:
#include <limits> template <typename T> float foo(T input) { if (sizeof(T) > 2) { return 42; } else { constexpr float inverseMax = 1.0f / std::numeric_limits<T>::max(); return input * inverseMax; } } float f() { return foo(1); } $ build/bin/clang -c /tmp/a.cc /tmp/a.cc:7:41: warning: implicit conversion from 'int' to 'float' changes value from 2147483647 to 2147483648 [-Wimplicit-const-int-float-conversion] 7 | constexpr float inverseMax = 1.0f / std::numeric_limits<T>::max(); | ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /tmp/a.cc:13:10: note: in instantiation of function template specialization 'foo<int>' requested here 13 | return foo(1); | ^ 1 warning generated. Note that the branch with the conversion can be determined to not be taken based on the template argument. Using `if constexpr` suppresses the warning, but I'm not sure if that should really be necessary? (Our tracking bug is https://crbug.com/1487142) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D155064/new/ https://reviews.llvm.org/D155064 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits