donat.nagy marked 2 inline comments as done.
donat.nagy added inline comments.


================
Comment at: lib/StaticAnalyzer/Checkers/ConversionChecker.cpp:164
+        // double and possibly long double on some systems
+        RepresentsUntilExp = 53; break;
+      case 32:
----------------
donat.nagy wrote:
> xazax.hun wrote:
> > A link to the source of these number would be useful. How are these 
> > calculated. Also,  as far as I know the current C++ standard does not 
> > require anything about how floating points are represented in an 
> > implementation. So it would be great to somehow refer to the representation 
> > used by clang rather than hardcoding these values. (Note that I am 
> > perfectly fine with warning for implementation defined behavior as the 
> > original version also warn for such in case of integers.) 
> I took these magic numbers from the IEEE 754 standard; I completely agree 
> that their introduction is far from being elegant.
> 
> Unfortunately it seems that referring to the representation used by clang 
> seems to be somewhat difficult, see e.g. this old [[ 
> https://stackoverflow.com/questions/13780931/how-do-i-get-llvm-types-from-clang
>  | stackoverflow answer ]].  In the Z3 solver a similar problem was solved by 
> defining a static function ([[ 
> https://clang.llvm.org/doxygen/Z3ConstraintManager_8cpp_source.html#l00269 | 
> getFloatSemantics() ]]) which uses a switch to translate the bit width of a 
> floating point type into an llvm::fltSemantics value (which contains the 
> precision value as a field).
> 
> I could imagine three solutions: 
> 
>   - reimplementing the logic getFloatSemantics,
>   - moving getFloatSemantics to some utility library and using it from there,
>   - keeping the current code, with comments describing my assumptions and 
> referencing the IEEE standard.
> 
> Which of these is the best?
> 
> Note: According to the documentation [[ 
> https://releases.llvm.org/2.5/docs/LangRef.html#t_floating | the floating 
> point types ]] supported by the LLVM IR are just float, double and some high 
> precision extension types (which are handled by the `default:` branch of my 
> code). Unfortunately, I do not know what happens to the [[ 
> https://clang.llvm.org/docs/LanguageExtensions.html#half-precision-floating-point
>  | `_Float16` ]] half-width float type.
I updated the patch with a comment describing my assumptions, but I will 
implement a different solution if that would be better.


Repository:
  rC Clang

https://reviews.llvm.org/D52730



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

Reply via email to