diff options
author | Amos Robinson <amos.robinson@gmail.com> | 2021-04-20 02:02:30 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-19 18:02:30 +0200 |
commit | 0877e32e0bb836a1b3b34d678f0c68f852c55ff3 (patch) | |
tree | d7996a0ce291e019f43adeac2b68d5918196fa88 /cparser | |
parent | 45af10b3ac30f8e4f5904824259b04df17e1c6b1 (diff) | |
download | compcert-0877e32e0bb836a1b3b34d678f0c68f852c55ff3.tar.gz compcert-0877e32e0bb836a1b3b34d678f0c68f852c55ff3.zip |
Elab bitfields: check size of type <=32bit rather than checking rank (#387)
When desugaring a bitfield, allow any integral type that is 32 bits
or smaller. Previously this was checking the rank of the type rather
than the size.
This rank check caused issues with standard headers that
declare `uint32_t` to be an `unsigned long` rather than an
`unsigned int`. Here, any bitfields declared as `uint32_t` were
failing to compile even though they are still actually 32 bits.
Co-authored-by: Amos Robinson <amos@gh.st>
Diffstat (limited to 'cparser')
-rw-r--r-- | cparser/Elab.ml | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/cparser/Elab.ml b/cparser/Elab.ml index 25e4a980..05717d97 100644 --- a/cparser/Elab.ml +++ b/cparser/Elab.ml @@ -1001,7 +1001,7 @@ and elab_field_group env = function | TInt(ik, _) -> ik | TEnum(_, _) -> enum_ikind | _ -> ILongLong (* trigger next error message *) in - if integer_rank ik > integer_rank IInt then begin + if sizeof_ikind ik > sizeof_ikind IInt then begin error loc "the type of bit-field '%a' must be an integer type no bigger than 'int'" pp_field id; None,env |