Операнд правой руки оператора сдвига должен находиться в области значений от нуля до единицы меньше ширины в битах существенного типа операнда левой руки
Операнд правой руки оператора сдвига должен находиться в области значений от нуля до единицы меньше ширины в битах существенного типа операнда левой руки.
Рассмотрим этот оператора:
var = abc << num;
abc
является 16-битным целым числом, тогда num
должно находиться в области значений 0-15 (неотрицательная и менее 16). Если num
отрицательно или больше 16, тогда поведение сдвига не определено.Polyspace® вызывает нарушение, когда правый операнд оператора сдвига превышает область значений, заданную в этом правиле. Когда правый операнд является переменной, нарушение возникает, если только все возможные значения операнда не остаются в пределах области значений, заданной в этом правиле.
В Polyspace числа, которыми манипулируют в директивах предварительной обработки, имеют ширину 64 бита. Допустимая область значений сдвигов находится в диапазоне от 0 до 63. Когда битовые поля находятся в пределах комплексного выражения, Polyspace расширяет эту проверку на ширину битового поля или ширину базового типа.
Сумма сдвига больше size
.
Сумма сдвига отрицательная.
Правый операнд оператора сдвига должен находиться в области значений от нуля до единицы меньше ширины в битах существенного типа левого операнда.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Выражения |
Категория: Требуемая |
Категория AGC: Требуется |