[lldb] Fix undefined behavior: left shift of negative value

Fix undefined behavior in AppleObjCRuntimeV2 where we were left shifting
a signed value. This also removes redundant casts of unobfuscated to
uint64_t which it already is.

rdar://91242879

Differential revision: https://reviews.llvm.org/D123098
This commit is contained in:
Jonas Devlieghere 2022-04-05 09:35:46 -07:00
parent a3d5f1cf5d
commit 73714a3c60
No known key found for this signature in database
GPG Key ID: 49CC0BD90FDEED4D
1 changed files with 2 additions and 3 deletions

View File

@ -2762,11 +2762,10 @@ AppleObjCRuntimeV2::TaggedPointerVendorRuntimeAssisted::GetClassDescriptor(
}
uint64_t data_payload =
(((uint64_t)unobfuscated << m_objc_debug_taggedpointer_payload_lshift) >>
((unobfuscated << m_objc_debug_taggedpointer_payload_lshift) >>
m_objc_debug_taggedpointer_payload_rshift);
int64_t data_payload_signed =
((int64_t)((int64_t)unobfuscated
<< m_objc_debug_taggedpointer_payload_lshift) >>
((int64_t)(unobfuscated << m_objc_debug_taggedpointer_payload_lshift) >>
m_objc_debug_taggedpointer_payload_rshift);
return ClassDescriptorSP(new ClassDescriptorV2Tagged(
actual_class_descriptor_sp, data_payload, data_payload_signed));