delcypher added inline comments.

================
Comment at: lib/StaticAnalyzer/Core/Z3ConstraintManager.cpp:674
+      // are the same size.
+      Z3_get_numeral_uint64(Z3Context::ZC, AST,
+                            reinterpret_cast<__uint64 *>(&Value));
----------------
ddcc wrote:
> The only problem I see now is that if a IEEEquad is fed in, it will generate 
> a 128-bit bitvector, which will be truncated at this point. But the z3 API 
> doesn't support retrieving a rational into anything larger than 64-bit, so 
> perhaps converting it to string is the way to go here.
@ddcc I'm heavily against using the string method due to rounding problems it 
might introduce. The trick to handling types wider than 64 bits is to construct 
a new Z3_ast that does an `Z3_mk_extract()` to pull out the bits you want and 
then call `Z3_get_numeral_uint64()` on that. In the case of IEEE-754 quad you 
would need to pull out the lower order bits and then the higher order bits, 
then put these into an array and build an `APInt` from that.


https://reviews.llvm.org/D28952



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

Reply via email to