diff options
author | Frederic Riss <friss@apple.com> | 2018-08-28 22:50:01 +0000 |
---|---|---|
committer | Frederic Riss <friss@apple.com> | 2018-08-28 22:50:01 +0000 |
commit | ae6ca2fc3f5d043eab69e9f3122d7775d6354f98 (patch) | |
tree | c95dbd007ea9156290357a193735d735d1bbff5f /lldb/packages/Python/lldbsuite/test/lang/c/bitfields/main.c | |
parent | a65bf65e0bb4f2c119bb388e7f036e664d108669 (diff) | |
download | bcm5719-llvm-ae6ca2fc3f5d043eab69e9f3122d7775d6354f98.tar.gz bcm5719-llvm-ae6ca2fc3f5d043eab69e9f3122d7775d6354f98.zip |
Allow IRInterpreter to deal with non-power-of-2 sized types to support some bitfield accesses.
Summary:
For some bitfield patterns (like the one added by this commit), Clang will
generate non-regular data types like i24 or i48. This patch follows a
pretty naive approach of just bumping the type size to the next power of 2.
DataExtractor know how to deal with weird sizes. The operations on Scalar
do not know how to deal with those types though, so we have to legalize the
size when creating a Scalar.
Reviewers: jingham, clayborg
Subscribers: lldb-commits
Differential Revision: https://reviews.llvm.org/D51245
llvm-svn: 340880
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/lang/c/bitfields/main.c')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/lang/c/bitfields/main.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/lang/c/bitfields/main.c b/lldb/packages/Python/lldbsuite/test/lang/c/bitfields/main.c index 236c926d81b..fe972dbbe85 100644 --- a/lldb/packages/Python/lldbsuite/test/lang/c/bitfields/main.c +++ b/lldb/packages/Python/lldbsuite/test/lang/c/bitfields/main.c @@ -8,6 +8,7 @@ //===----------------------------------------------------------------------===// #include <stdint.h> #include <stdio.h> +#include <string.h> int main (int argc, char const *argv[]) { @@ -63,6 +64,20 @@ int main (int argc, char const *argv[]) more_bits.c = 1; more_bits.d = 0; + struct EvenMoreBits + { + uint8_t b1 : 1, b2 : 1, b3 : 1, b4 : 1, b5 : 1, b6 : 1, + b7 : 1, b8 : 1, b9 : 1, b10 : 1, b11 : 1, b12 : 1, + b13 : 1, b14 : 1, b15 : 1, b16 : 1, b17 : 1; + }; + + struct EvenMoreBits even_more_bits; + memset(&even_more_bits, 0, sizeof(even_more_bits)); + even_more_bits.b1 = 1; + even_more_bits.b5 = 1; + even_more_bits.b7 = 1; + even_more_bits.b13 = 1; + #pragma pack(1) struct PackedBits { |