On 05/10/2018 08:57, Daniel Hellstrom wrote:
From: Jacob Hansen <jacob.han...@gaisler.com>

This commits bypasses a static assert when using the Clang compiler.
This is done as the static assertion does not compile with Clang
("static_assert expression is not an integral constant expression").

I am not sure this static assertion makes sense at all. SEM_FAILED
is used as a return value on failures from running sem_open(). Is
the test supposed to check that SEM_FAILED is defiend as NULL in the
included libraries (newlib) ? It is defiend as "(sem_t *) 0" in newlib.

The draft version of the posix standard, required sem_open to return -1, so
maybe this is an attempt to ensure that SEM_FAILED is actually defined?
But the compilation would failed if SEM_FAILED is not defined anyway.

I guess the check would make sense if somehow the code depended on
SEM_FAILED to be equal to NULL. But in that case I would think the code
should be updated to remove this dependency.

Looking at the source for sem_open at cpukit/posix/src/semopen.c it
seems that it uses the SEM_FAILED define as a return value, and I do not
see any dependencies on SEM_FAILED==NULL anywhere.

The change that introduces this code is:

"posix: Implement self-contained POSIX semaphores":
   c090db7405b72ce6d0b726c0a39fb1c1aebab7ea

This static assertion ensures that POSIX_SEMAPHORE_VALIDATE_OBJECT() rejects semaphore pointers with a SEM_FAILED value. We could change this macro to test also for SEM_FAILED, but it would result in code like this

if (sem == 0 (aka NULL) || sem == 0 (aka SEM_FAILED) || ...)

See also:

https://gcc.gnu.org/ml/gcc-help/2018-10/msg00021.html

Coverity Scan crashes at this line too. GCC issues only a -Wpedantic warning. In C++ the static assert would be fine. I am not sure how to fix this.

--
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.hu...@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to