Skip to content

kernel/os: Fix msys unit tests #3435

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

kasjer
Copy link
Contributor

@kasjer kasjer commented Jun 20, 2025

Depending on optimization and compiler used unit test could produce following error:
repos/apache-mynewt-core/kernel/os/selftest/src/msys_test.c: In function ‘os_msys_test_setup’: repos/apache-mynewt-core/kernel/os/selftest/src/msys_test.c:61:30: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
61 | context->mempool_list = *(struct os_mempool_list *)&g_os_mempool_list;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This is because declaration of extern g_os_mempool_list was taken directly from os_mempool.c where this variable is create without specifying type with macro STAILQ_HEAD(, os_mempool) that produces:

struct {
struct os_mempool *stqh_first;
struct os_mempool **stqh_last;
} g_os_mempool_list;

while file mempool_list is same structure but with named type. To make compiler happy g_os_mempool_list is now of type struct os_mempool_list that has same fields and is already declared like this:
STAILQ_HEAD(os_mempool_list, os_mempool);

Depending on optimization and compiler used unit test could
produce following error:
repos/apache-mynewt-core/kernel/os/selftest/src/msys_test.c: In function ‘os_msys_test_setup’:
repos/apache-mynewt-core/kernel/os/selftest/src/msys_test.c:61:30: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
   61 |     context->mempool_list = *(struct os_mempool_list *)&g_os_mempool_list;
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This is because declaration of extern g_os_mempool_list was taken
directly from os_mempool.c where this variable is create without
specifying type with macro STAILQ_HEAD(, os_mempool) that produces:

struct {
    struct os_mempool *stqh_first;
    struct os_mempool **stqh_last;
} g_os_mempool_list;

while file mempool_list is same structure but with named type.
To make compiler happy g_os_mempool_list is now of type
struct os_mempool_list that has same fields and is already
declared like this:
STAILQ_HEAD(os_mempool_list, os_mempool);

Signed-off-by: Jerzy Kasenberg <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant