Fix u256 to APInt conversion

This commit is contained in:
Paweł Bylica 2014-10-30 19:17:19 +01:00
parent 65af01cda8
commit 4ff7ba015d

View file

@ -43,10 +43,7 @@ llvm::ConstantInt* Constant::get(uint64_t _n)
llvm::ConstantInt* Constant::get(u256 _n) llvm::ConstantInt* Constant::get(u256 _n)
{ {
auto& backend = _n.backend(); llvm::APInt n(256, _n.str(0, std::ios_base::hex), 16);
auto words = reinterpret_cast<uint64_t*>(backend.limbs());
auto nWords = backend.limb_bits == 64 ? backend.size() : (backend.size() + 1) / 2;
llvm::APInt n(256, nWords, words);
assert(n.toString(10, false) == _n.str()); assert(n.toString(10, false) == _n.str());
return static_cast<llvm::ConstantInt*>(llvm::ConstantInt::get(Type::i256, n)); return static_cast<llvm::ConstantInt*>(llvm::ConstantInt::get(Type::i256, n));
} }