================ @@ -1978,7 +1978,12 @@ llvm::Expected<Value> DWARFExpression::Evaluate( // grows to the nearest host integer type. llvm::APInt fail_value(1, 0, false); llvm::APInt ap_int = scalar.UInt128(fail_value); - assert(ap_int.getBitWidth() >= bit_size); + // We have seen a case where we have expression like: + // DW_OP_lit0, DW_OP_stack_value, DW_OP_piece 0x28 + // here we are assuming the compiler was trying to zero + // extend the value that we should append to the buffer. + if (ap_int.getBitWidth() < bit_size) + ap_int = ap_int.zext(bit_size); llvm::ArrayRef<uint64_t> buf{ap_int.getRawData(), ap_int.getNumWords()}; curr_piece.GetScalar() = Scalar(llvm::APInt(bit_size, buf)); ---------------- labath wrote:
I don't know, but I'm not particularly worried by that given that the only other call of this function is also inside DWARFExpression (in DW_OP_convert). If that becomes an issue, we can both cases together. https://github.com/llvm/llvm-project/pull/150149 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits