Joel Sherrill created an issue: 
https://gitlab.rtems.org/rtems/rtos/rtems/-/issues/5239

Assignee: Joel Sherrill



## Summary
<!--
Please provide as much information as possible such as error messages or 
attaching logs
-->
When building many/most/all BSPs, the following warning is present. @opticron 
and I have investigated this before and assumed that it was an artefact of an 
inline helper not initialising all fields when not debug. GCC 14 gives a more 
thorough diagnostic and @opticron had the insight that the function in 
psignalclearsignals.c includes a test of a boolean argument indicating whether 
the signal clearing logic is executed inside a critical section or not. For 
some reason, GCC sees a path where the unlock could be called without the lock 
being called. Using the source on the 6 branch as a reference, this is the 
[locking 
conditional](https://gitlab.rtems.org/rtems/rtos/rtems/-/blame/6/cpukit/posix/src/psignalclearsignals.c?ref_type=heads#L87)
 and this is the [unlocking 
conditional](https://gitlab.rtems.org/rtems/rtos/rtems/-/blame/6/cpukit/posix/src/psignalclearsignals.c?ref_type=heads#L122).

The solution was to refactor the code inside the lock/unlock into a helper 
method so the expression checking if locking was needed is only tested once.

```
In file included from ../../../cpukit/include/rtems/score/isrlevel.h:43,
                 from ../../../cpukit/include/rtems/score/isr.h:41,
                 from ../../../cpukit/posix/src/psignalclearsignals.c:45:
In function 'arm_interrupt_enable',
    inlined from '_Thread_queue_Release' at 
../../../cpukit/include/rtems/score/threadqimpl.h:829:3,
    inlined from '_POSIX_signals_Release' at 
../../../cpukit/include/rtems/posix/psignalimpl.h:106:3,
    inlined from '_POSIX_signals_Clear_signals' at 
../../../cpukit/posix/src/psignalclearsignals.c:123:5:
../../../cpukit/score/cpu/arm/include/rtems/score/cpu.h:357:3: warning: 
'queue_context.Lock_context.Lock_context.isr_level' may be used uninitialized 
[-Wmaybe-uninitialized]
  357 |   __asm__ volatile (
      |   ^~~~~~~
../../../cpukit/posix/src/psignalclearsignals.c: In function 
'_POSIX_signals_Clear_signals':
../../../cpukit/posix/src/psignalclearsignals.c:67:31: note: 
'queue_context.Lock_context.Lock_context.isr_level' was declared here
   67 |   Thread_queue_Context        queue_context;
      |                               ^~~~~~~~~~~~~
```

NOTE: This may indicate that GCC was doing some of the path analysis 
incorrectly. A gcc ticket will be filed also.

## Steps to reproduce


### Pre-set options

-- 
View it on GitLab: https://gitlab.rtems.org/rtems/rtos/rtems/-/issues/5239
You're receiving this email because of your account on gitlab.rtems.org.


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

Reply via email to