На панели Оранжевые источники (Orange Sources) отображаются неограниченные источники, такие как энергозависимые переменные и упорные функции, которые могут привести к множественным проверкам оранжевого цвета (неподтвержденным результатам) в анализе проверки кода. При наложении зависимости на оранжевый источник можно одновременно выполнить несколько проверок оранжевого цвета. Чтобы увидеть панель Оранжевые источники (Orange Sources), нажмите
кнопку на панели Подробности результата (Result Details).
Источники, по существу, указывают переменные, значения которых не могут быть определены из кода. Переменные могут быть входами в функции, контекст вызова которых неизвестен, или возвращать значения неопределенных функций. Средство проверки кода предполагает, что эти переменные принимают полный диапазон значений, разрешенных их типом данных. Это широкое предположение может привести к одной или нескольким оранжевым проверкам в последующем коде.

Например, в этом примере, если функция random_float не определен, отображаются три оранжевые проверки переполнения.
static void Close_To_Zero(void)
{
float xmin = random_float();
float xmax = random_float();
float y;
if ((xmax - xmin) < 1.0E-37f) { /* Overflow 1 */
y = 1.0f;
} else {
/* division by zero is impossible here */
y = (xmax + xmin) / (xmax - xmin); /* Overflows 2 and 3 */
}
}
random_float поэтому является оранжевым источником, который вызывает не более трех оранжевых проверок.С помощью панели Оранжевые источники (Orange Sources) можно:
Просмотрите все оранжевые чеки из одного источника.
В предыдущем примере при выборе функции random_float, в списке результатов отображаются только три оранжевые проверки, вызванные этим источником. См. раздел Фильтрация по оранжевым источникам.
Ограничение диапазонов переменных путем указания внешних ограничений или с помощью дополнительного кода. Ограничение диапазона оранжевого источника может привести к удалению нескольких оранжевых чеков, полученных в результате чрезмерного приближения. Остальные оранжевые чеки указывают на реальные проблемы в коде.
В предыдущем примере можно ограничить возвращаемое значение random_float.
Для эффективного просмотра щелкните заголовок столбца «Макс. апельсины», чтобы отсортировать источники оранжевого цвета по количеству проверок оранжевого цвета, полученных из источника. Ограничьте источники более оранжевыми проверками, прежде чем обращаться к остальным.
Способ ограничения диапазонов переменных и работы с допущениями Polyspace ® по умолчанию зависит от типа оранжевого источника:
Если определение функции недоступно для анализа Polyspace, функция блокируется. Анализ делает несколько предположений относительно упорных функций. Например, возвращаемое значение упорной функции может принимать любое значение, разрешенное ее типом данных.
В разделе Допущения о упорных функциях приведены допущения о упорных функциях и о том, как работать с ними.
Если переменная объявлена с помощью volatile спецификатор, анализ предполагает, что переменная может принимать любое значение, разрешенное ее типом данных, в любой точке кода.
См. Допущения о изменчивых переменных, чтобы обойти это предположение.
Если переменная объявлена с помощью extern спецификатор, но не определенный в другом месте кода, анализ предполагает, что переменная может принимать любое значение в пределах своего диапазона типов данных, прежде чем она будет назначена первой.
Определите, где определена переменная и почему определение недоступно для анализа. Например, можно пропустить папку включения из анализа.
Если код не содержит main функция, a main для анализа создается функция. По умолчанию генерируется main функция вызывает незакрепленные функции с входами, которые могут принимать любое значение, допустимое их типом данных.
См.:
Ограничить входы функций, чтобы ограничить входы функций.
Проверка приложения C без основной функции или проверка классов C++ для изменения функций, вызываемых сгенерированным main.
Если код не содержит main функция, a main для анализа создается функция. По умолчанию в каждой функции, вызываемой сгенерированным main, глобальная переменная может принимать любое значение в пределах своего диапазона типов данных до первого назначения.
Сведения о том, как создается глобальная переменная, см. в разделе Допущения об инициализации глобальной переменной main инициализирует глобальные переменные.
При явном ограничении глобальной переменной определенным диапазоном в постоянном режиме анализ предполагает, что переменная может принимать любое значение в пределах этого диапазона в любой точке кода.
Дополнительные сведения о том, как переменная получает постоянный диапазон, см. в разделе Внешние ограничения для анализа полиспейса. Проверьте, назначен ли постоянный диапазон по ошибке или диапазон должен быть более узким для отражения реальных значений.
Если указателю назначен абсолютный адрес, анализ предполагает, что отмена привязки указателя приводит к диапазону потенциальных значений, определяемых типом данных указателя.
Посмотрите Absolute address usage примеры абсолютного использования адреса и соответствующие допущения проверочного кода. Чтобы удалить это предположение и пометить все виды использования абсолютного адреса, используйте опцию -no-assumption-on-absolute-addresses.
Иногда за проверку оранжевого может отвечать более одного оранжевого источника. Если вы подключаете оранжевый источник, но не видите ожидаемого исчезновения оранжевого чека, рассмотрите, отвечает ли за чек и другой источник.