Use of enum for flags?

Gedare Bloom gedare at rtems.org
Thu Jan 28 16:33:58 UTC 2021


On Thu, Jan 28, 2021 at 8:30 AM Sebastian Huber <
sebastian.huber at embedded-brains.de> wrote:

> Hello,
>
> we have currently:
>
> /**
>   * @brief Thread life states.
>   *
>   * The thread life states are orthogonal to the thread states used for
>   * synchronization primitives and blocking operations.  They reflect
> the state
>   * changes triggered with thread restart and delete requests.
>   *
>   * The individual state values must be a power of two to allow use of bit
>   * operations to manipulate and evaluate the thread life state.
>   */
> typedef enum {
>    THREAD_LIFE_PROTECTED = 0x1,
>    THREAD_LIFE_RESTARTING = 0x2,
>    THREAD_LIFE_TERMINATING = 0x4,
>    THREAD_LIFE_CHANGE_DEFERRED = 0x8,
>    THREAD_LIFE_DETACHED = 0x10
> } Thread_Life_state;
>
> Coverity complains about thinks like this:
>
> executing->Life.state = previous_life_state | THREAD_LIFE_PROTECTED;
>
>    _Thread_Change_life_locked(
>      executing,
>      THREAD_LIFE_PROTECTED | THREAD_LIFE_RESTARTING,
>      0,
>      0
>    );
>
> It seems to dislike implicit int to enum conversions
> (PW.MIXED_ENUM_TYPE). Should I remove the enum and use defines instead?
>
>
The advantages of the enum are that they can be type-checked. So, in some
way, coverity is right to complain. This should probably be either macro
defines or a bitfield. (Since bitfields have their own problems, I think
defines are suitable.)


> --
> embedded brains GmbH
> Herr Sebastian HUBER
> Dornierstr. 4
> 82178 Puchheim
> Germany
> email: sebastian.huber at embedded-brains.de
> phone: +49-89-18 94 741 - 16
> fax:   +49-89-18 94 741 - 08
>
> Registergericht: Amtsgericht München
> Registernummer: HRB 157899
> Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
> Unsere Datenschutzerklärung finden Sie hier:
> https://embedded-brains.de/datenschutzerklaerung/
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20210128/82fca5c4/attachment.html>


More information about the devel mailing list