Avisos do compilador (nível 1) C5301 e C5302
''
#pragma omp for
: 'loop-index' aumenta enquanto a condição de loop usa 'comparação'; loop não terminante?
''
#pragma omp for
: 'loop-index' diminui enquanto a condição de loop usa 'comparação'; loop não terminante?
Comentários
Juntamente com o suporte aprimorado para OpenMP 3.1, adicionamos dois diagnósticos, C5301 e C5302, para melhorar a experiência do desenvolvedor. Esses diagnósticos verificam se as condições de loop para omp parallel for
estão corretas, com base em se a variável de índice de loop está aumentando ou diminuindo. Essas verificações funcionam para índices integrais e de ponteiro.
Esses avisos do compilador são novos no Visual Studio 2022 versão 17.4.
Exemplo
O código de exemplo mostra um diagnóstico para um for
loop que diminui o índice, mas usa uma <=
comparação que testa se o índice é menor que um valor maior que o valor inicial.
// C5302.c
// compile using /openmp
#include <stdio.h>
int main()
{
int a[100], i;
int k = 1;
#pragma omp parallel for
for (i = 0; i <= 100; i--)
a[i] = i*i;
}
/*
Compiler warning message:
.\C5302.c(11,19): warning C5302: '#pragma omp for': 'i' decreases while loop condition uses '<='; non-terminating loop?
for (i = 0; i <= 100; i--)
^
*/
Para resolver esse problema, altere a condição de teste ou a direção da alteração de índice para um que termina sem causar estouro, subfluxo ou outro comportamento indefinido.