mirror of
https://github.com/mirror/tinycc.git
synced 2025-02-26 08:00:09 +08:00
Fix long bitfield
The fix is avoiding a core dump for radare2 project.
This commit is contained in:
parent
9085b38a71
commit
dcb87d36fe
2
tccgen.c
2
tccgen.c
@ -2093,7 +2093,7 @@ static int adjust_bf(SValue *sv, int bit_pos, int bit_size)
|
|||||||
return 0;
|
return 0;
|
||||||
t = sv->type.ref->auxtype;
|
t = sv->type.ref->auxtype;
|
||||||
if (t != -1 && t != VT_STRUCT) {
|
if (t != -1 && t != VT_STRUCT) {
|
||||||
sv->type.t = (sv->type.t & ~VT_BTYPE) | t;
|
sv->type.t = (sv->type.t & ~(VT_BTYPE | VT_LONG)) | t;
|
||||||
sv->r |= VT_LVAL;
|
sv->r |= VT_LVAL;
|
||||||
}
|
}
|
||||||
return t;
|
return t;
|
||||||
|
@ -77,6 +77,22 @@
|
|||||||
TEST_STRUCT(1,2,3,4,-3);
|
TEST_STRUCT(1,2,3,4,-3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------- */
|
||||||
|
#elif TEST == 7
|
||||||
|
{
|
||||||
|
struct M P __s {
|
||||||
|
long int d : 16;
|
||||||
|
long int b : 16;
|
||||||
|
long int x : 16;
|
||||||
|
long int y : 1;
|
||||||
|
long int z : 2;
|
||||||
|
long int a : 11;
|
||||||
|
long int e : 1;
|
||||||
|
long int f : 1;
|
||||||
|
};
|
||||||
|
TEST_STRUCT(1,2,3,4,5);
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
#elif defined PACK
|
#elif defined PACK
|
||||||
|
|
||||||
@ -101,6 +117,8 @@ top = 0;
|
|||||||
#include SELF
|
#include SELF
|
||||||
#define TEST 6
|
#define TEST 6
|
||||||
#include SELF
|
#include SELF
|
||||||
|
#define TEST 7
|
||||||
|
#include SELF
|
||||||
|
|
||||||
#if PACK
|
#if PACK
|
||||||
# pragma pack(pop)
|
# pragma pack(pop)
|
||||||
|
@ -34,6 +34,12 @@ bits as set : 00000030002001FD00000004
|
|||||||
values : 01 02 03 04 fffffffd
|
values : 01 02 03 04 fffffffd
|
||||||
align/size : 4 12
|
align/size : 4 12
|
||||||
|
|
||||||
|
---- TEST 7 ----
|
||||||
|
bits in use : 3FFFFFFFFFFF0000
|
||||||
|
bits as set : 0026000100050000
|
||||||
|
values : 01 00 ffffffff 04 05
|
||||||
|
align/size : 8 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
---- TEST 1 - PACKED ----
|
---- TEST 1 - PACKED ----
|
||||||
@ -72,6 +78,12 @@ bits as set : 0030002001FD00000004
|
|||||||
values : 01 02 03 04 fffffffd
|
values : 01 02 03 04 fffffffd
|
||||||
align/size : 1 10
|
align/size : 1 10
|
||||||
|
|
||||||
|
---- TEST 7 - PACKED ----
|
||||||
|
bits in use : 3FFFFFFFFFFF0000
|
||||||
|
bits as set : 0026000100050000
|
||||||
|
values : 01 00 ffffffff 04 05
|
||||||
|
align/size : 1 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
---- TEST 1 - WITH ALIGN ----
|
---- TEST 1 - WITH ALIGN ----
|
||||||
@ -110,6 +122,12 @@ bits as set : 00000030002001FD00000004
|
|||||||
values : 01 02 03 04 fffffffd
|
values : 01 02 03 04 fffffffd
|
||||||
align/size : 4 12
|
align/size : 4 12
|
||||||
|
|
||||||
|
---- TEST 7 - WITH ALIGN ----
|
||||||
|
bits in use : 3FFFFFFFFFFF0000
|
||||||
|
bits as set : 0026000100050000
|
||||||
|
values : 01 00 ffffffff 04 05
|
||||||
|
align/size : 8 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
---- TEST 1 - PACKED - WITH ALIGN ----
|
---- TEST 1 - PACKED - WITH ALIGN ----
|
||||||
@ -147,3 +165,9 @@ bits in use : 007000FFFFFFFFFFFFFF
|
|||||||
bits as set : 0030002001FD00000004
|
bits as set : 0030002001FD00000004
|
||||||
values : 01 02 03 04 fffffffd
|
values : 01 02 03 04 fffffffd
|
||||||
align/size : 1 10
|
align/size : 1 10
|
||||||
|
|
||||||
|
---- TEST 7 - PACKED - WITH ALIGN ----
|
||||||
|
bits in use : 3FFFFFFFFFFF0000
|
||||||
|
bits as set : 0026000100050000
|
||||||
|
values : 01 00 ffffffff 04 05
|
||||||
|
align/size : 1 8
|
||||||
|
@ -34,6 +34,12 @@ bits as set : 000000000000003000002001000000FD00000004
|
|||||||
values : 01 02 03 04 fffffffd
|
values : 01 02 03 04 fffffffd
|
||||||
align/size : 4 20
|
align/size : 4 20
|
||||||
|
|
||||||
|
---- TEST 7 - MS-BITFIELDS ----
|
||||||
|
bits in use : 3FFFFFFFFFFF0000
|
||||||
|
bits as set : 0026000100050000
|
||||||
|
values : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000004 0000000000000005
|
||||||
|
align/size : 8 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
---- TEST 1 - MS-BITFIELDS - PACKED ----
|
---- TEST 1 - MS-BITFIELDS - PACKED ----
|
||||||
@ -72,6 +78,12 @@ bits as set : 000000003000002001FD00000004
|
|||||||
values : 01 02 03 04 fffffffd
|
values : 01 02 03 04 fffffffd
|
||||||
align/size : 1 14
|
align/size : 1 14
|
||||||
|
|
||||||
|
---- TEST 7 - MS-BITFIELDS - PACKED ----
|
||||||
|
bits in use : 3FFFFFFFFFFF0000
|
||||||
|
bits as set : 0026000100050000
|
||||||
|
values : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000004 0000000000000005
|
||||||
|
align/size : 1 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
---- TEST 1 - MS-BITFIELDS - WITH ALIGN ----
|
---- TEST 1 - MS-BITFIELDS - WITH ALIGN ----
|
||||||
@ -110,6 +122,12 @@ bits as set : 000000000000003000002001000000FD00000004
|
|||||||
values : 01 02 03 04 fffffffd
|
values : 01 02 03 04 fffffffd
|
||||||
align/size : 4 20
|
align/size : 4 20
|
||||||
|
|
||||||
|
---- TEST 7 - MS-BITFIELDS - WITH ALIGN ----
|
||||||
|
bits in use : 3FFFFFFFFFFF0000
|
||||||
|
bits as set : 0026000100050000
|
||||||
|
values : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000004 0000000000000005
|
||||||
|
align/size : 8 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
---- TEST 1 - MS-BITFIELDS - PACKED - WITH ALIGN ----
|
---- TEST 1 - MS-BITFIELDS - PACKED - WITH ALIGN ----
|
||||||
@ -147,3 +165,9 @@ bits in use : 00000000700000FFFFFFFFFFFFFF
|
|||||||
bits as set : 000000003000002001FD00000004
|
bits as set : 000000003000002001FD00000004
|
||||||
values : 01 02 03 04 fffffffd
|
values : 01 02 03 04 fffffffd
|
||||||
align/size : 1 14
|
align/size : 1 14
|
||||||
|
|
||||||
|
---- TEST 7 - MS-BITFIELDS - PACKED - WITH ALIGN ----
|
||||||
|
bits in use : 3FFFFFFFFFFF0000
|
||||||
|
bits as set : 0026000100050000
|
||||||
|
values : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000004 0000000000000005
|
||||||
|
align/size : 1 8
|
||||||
|
Loading…
Reference in New Issue
Block a user