[RTEMS Project] #4864: Bitwise operator applied to a signed operand

RTEMS trac trac at rtems.org
Thu Feb 23 12:40:00 UTC 2023

#4864: Bitwise operator applied to a signed operand
  Reporter:  Daniel Páscoa  |      Owner:  (none)
      Type:  defect         |     Status:  new
  Priority:  normal         |  Milestone:
 Component:  admin          |    Version:  6
  Severity:  normal         |   Keywords:  qualification
Blocked By:                 |   Blocking:
 Bitwise operators should not be applied to signed operand.

 Most built-in bitwise operators (~, >>, >>=, &, &=, ^, ^=, |, and |=) have
 implementation-dependent results when performed on signed operands, and
 bitwise left shift (<< and <<=) have undefined behavior when performed on
 negative operands. Therefore, bitwise operations should not be performed
 on signed operands.

 The RTEMS SW Eng. Manual seems not to have a rule listed for this, but
 perhaps it shall be added.

 For instance, the following cases shall be checked:

 **cpukit\include\rtems\score\processormask.h** (line 318, 336):
    return (uint32_t) (bits >> (32 * (index % _BITSET_BITS) / 32));
 with bits defined as long and
    mask->__bits[ __bitset_words( index ) ] = ((long) bits) << (32 * (index
    % _BITSET_BITS) / 32);

 These seem problematic, but most likely in systems where the actual number
 of processors is equal to CPU_MAXIMUM_PROCESSORS equal to 32! Since these
 belong to inline functions, they are not included in the RTEMS libraries,
 but a user can include this file and use them.

 **cpukit\include\rtems\score\timestampimpl.h** (line 238):
    return (*_time >> 32); where time is of type int64_t.

 Shifting right a signed negative number is implementation-defined. gcc for
 sparc implements it as an aritmetic shift right.

 **Additional Notes:**
 This ticket was raised as an outcome of the Independent SW Verification
 and Validation (ISVV) for ESA-promoted RTEMS SMP Qualification Data Packs
 (https://rtems-qual.io.esa.int). The original ISVV reference for this
 issue is RTEMS-SMP-CODE-VER-078.

Ticket URL: <http://devel.rtems.org/ticket/4864>
RTEMS Project <http://www.rtems.org/>
RTEMS Project

More information about the bugs mailing list