kamleshbhalui wrote: > > > This uses `DataExtractor::GetMaxU64` which already does this under the > > > hood. What does this do that isn't already being done? It may help if you > > > add a test case to show what you are trying to fix. > > > > > > @clayborg @bulbazord The problem with GetMaxU64 is that it always returns > > uint64_t even though actual type was uint32_t, so when byteswap is > > performed it becomes invalid integer, to fixed this we need to store > > correct bitwidth not higher. i.e. Suppose there is actual 32 bit integer > > i.e. 0xffffffff `GetMaxU64` will return 0x00000000ffffffff (prmoted to > > uint64_t from uint32_t) and when performing byteswap on this it becomes > > 0xffffffff00000000 which is invalid. > > So you are saying someone is taking the resulting Scalar and trying to > byteswap it? Errors can still happen then in this class for int8_t/uint8_t > and int16_t/uint16_t as there are no overloads for these in the `Scalar` > class. We only currently have: > > ``` > Scalar(int v); > Scalar(unsigned int v); > Scalar(long v); > Scalar(unsigned long v); > Scalar(long long v); > Scalar(unsigned long long v); > ``` > > It would suggest if we are going to make a requirement that Scalar will hold > the correct bit widths, then we need to stop using "int" and "long" and > switch to using the `int*_t` and `uint*_t` typedefs to make things clear: > > ``` > Scalar(int8_t v); > Scalar(int16_t v); > Scalar(int32_t v); > Scalar(int64_t v); > Scalar(uint8_t v); > Scalar(uint16_t v); > Scalar(uint32_t v); > Scalar(uint64_t v); > ``` > > Then we have all of the bit widths handled correctly.
@clayborg I agree, we should use suggested type to fix it for all. https://github.com/llvm/llvm-project/pull/81451 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits