0x8000-0000 added a comment.

Not trying to be difficult here - I have attempted to implement the 
straight-forward check.

Added this to the MagicNumbersCheck::MagicNumbersCheck constructor:

  +  // process set of ignored floating point values
  +  const std::vector<std::string> IgnoredFloatingPointValuesInput =
  +      utils::options::parseStringList(Options.get(
  +          "IgnoredFloatingPointValues", DefaultIgnoredFloatingPointValues));
  +  IgnoredFloatingPointValues.reserve(IgnoredFloatingPointValuesInput.size());
  +  for (const auto &InputValue : IgnoredFloatingPointValuesInput) {
  +    llvm::APFloat FloatValue(llvm::APFloat::IEEEdouble());
  +    FloatValue.convertFromString(InputValue, DefaultRoundingMode);
  +    const double Value = FloatValue.convertToDouble();
  +    IgnoredFloatingPointValues.push_back(Value);
  +  }
  +  llvm::sort(IgnoredFloatingPointValues.begin(),
  +             IgnoredFloatingPointValues.end());

and changed isIgnoredValue(const FloatingLiteral *Literal) like this:

   bool MagicNumbersCheck::isIgnoredValue(const FloatingLiteral *Literal) const 
{
  -  llvm::APFloat FloatValue = Literal->getValue();
  -  return FloatValue.isZero();
  +  const llvm::APFloat FloatValue = Literal->getValue();
  +  double Value;
  +  if (&FloatValue.getSemantics() == &llvm::APFloat::IEEEdouble()) {
  +    Value = FloatValue.convertToDouble();
  +  } else if (&FloatValue.getSemantics() == &llvm::APFloat::IEEEsingle()) {
  +    Value = static_cast<double>(FloatValue.convertToFloat());
  +  } else
  +    return false;
  +
  +  return std::binary_search(IgnoredFloatingPointValues.begin(),
  +                            IgnoredFloatingPointValues.end(), Value);
   }

When running under the debugger and printing various values, it seems that 3.14 
read as double and converted to double prints as 3.1399999999999997, while 
3.14f read as float and cast to double prints as 3.1400001049041748

I will parse the IgnoredFloatingPointValues twice and store the results in two 
arrays, one of doubles and one of floats.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D49114



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

Reply via email to