| Title | The MPS does not build with gcc -Wconversion |
| Status | open |
| Priority | nice |
| Assigned user | Gareth Rees |
| Organization | Ravenbrook |
| Description | Lots of projects have -Wconversion in their compilation options, for example [1]. But the MPS does not compile under gcc with this option. (See job003757 for the corresponding issue with respect to clang.) |
| Analysis | The MPS is very clean as regards implicit integer conversions. The main problem encountered was bitfields. To convince GCC that there will be no data loss when assigning to a bitfield, you have to write: struct.field = ((type)value & (type)mask); I encapsulated this in a macro in misc.h: #define BITFIELD(type, value, width) ((type)value & (((type)1 << (width)) - 1)) and then revised setter macros SegSetPM, SegSetDepth and so on to use it. The other problem is that the event system uses the type int : 1 for Boolean bitfields. Because int is signed, the values of this type are 0 and -1, and so you can't assign TRUE to this bitfield (even using the BITFIELD macro) without getting a warning about the sign conversion. So I changed the type of these bitfields to unsigned : 1. |
| How found | manual_test |
| Evidence | [1] <https://info.ravenbrook.com/mail/2014/04/11/10-04-54/0/> |
| Created by | Gareth Rees |
| Created on | 2014-04-11 14:24:20 |
| Last modified by | Gareth Rees |
| Last modified on | 2014-04-14 21:50:22 |
| History | 2014-04-11 GDR Created. |
| Change | Effect | Date | User | Description |
|---|---|---|---|---|
| 185467 | open | 2014-04-11 15:28:03 | Gareth Rees | Turn -Wconversion off again. (The MPS builds with this option with gcc 4.8 but not with gcc 4.6.3 on the Travis buildbots.) |
| 185463 | open | 2014-04-11 14:25:15 | Gareth Rees | Add -Wconversion to the options for GCC. Ensure that the MPS builds. |
| 185459 | open | 2014-04-11 12:17:39 | Gareth Rees | Not ready for gcc -Wconversion. |
| 185457 | open | 2014-04-11 12:06:28 | Gareth Rees | Add -Wconversion to options for GCC and Clang. Ensure that the MPS builds with this option with Clang. |